From b9e1f8533a0edf2f987935021d8134a2adb45ff9 Mon Sep 17 00:00:00 2001 From: joeecai Date: Fri, 23 Aug 2024 07:35:56 +0000 Subject: [PATCH 001/108] fix: cluster-resources template collect (merge request !1980) Squash merge branch 'fix/cr' into 'master' fix: cluster-resources template collect --- .../pkg/action/templatespace/templatespace.go | 21 +- .../templatespacecollect.go | 54 +- .../pkg/handler/multicluster/query.go | 12 +- .../pkg/handler/templateset/template_set.go | 16 +- .../pkg/resource/client/cobj.go | 2 +- .../pkg/resource/discovery.go | 29 +- .../pkg/store/entity/templatespace.go | 2 + .../pkg/store/entity/templatespacecollect.go | 27 +- .../cluster-resources/pkg/store/store.go | 3 +- .../templatespacecollect.go | 67 +- .../cluster-resources/cluster-resources.pb.go | 6259 ++++++++--------- .../cluster-resources.pb.gw.go | 121 +- .../cluster-resources.pb.micro.go | 39 +- .../cluster-resources.pb.validate.go | 13 +- .../cluster-resources/cluster-resources.proto | 23 +- .../cluster-resources.swagger.json | 64 +- bcs-ui/go.mod | 49 +- bcs-ui/go.sum | 173 +- 18 files changed, 3321 insertions(+), 3653 deletions(-) diff --git a/bcs-services/cluster-resources/pkg/action/templatespace/templatespace.go b/bcs-services/cluster-resources/pkg/action/templatespace/templatespace.go index 27a4297ea8..98e0354192 100644 --- a/bcs-services/cluster-resources/pkg/action/templatespace/templatespace.go +++ b/bcs-services/cluster-resources/pkg/action/templatespace/templatespace.go @@ -123,10 +123,29 @@ func (t *TemplateSpaceAction) List(ctx context.Context, name string) ([]map[stri return nil, err } + // 获取收藏的文件夹 + collects, err := t.model.ListTemplateSpaceCollect(ctx, p.Code, ctxkey.GetUsernameFromCtx(ctx)) + if err != nil { + return nil, err + } + m := make([]map[string]interface{}, 0) + topM := make([]map[string]interface{}, 0) for _, value := range templateSpace { - m = append(m, value.ToMap()) + fav := false + for _, v := range collects { + if value.ID.Hex() == v.TemplateSpaceID { + fav = true + value.Fav = true + topM = append(topM, value.ToMap()) + break + } + } + if !fav { + m = append(m, value.ToMap()) + } } + m = append(topM, m...) return m, nil } diff --git a/bcs-services/cluster-resources/pkg/action/templatespacecollect/templatespacecollect.go b/bcs-services/cluster-resources/pkg/action/templatespacecollect/templatespacecollect.go index 15afd30858..7f3e0e2ec4 100644 --- a/bcs-services/cluster-resources/pkg/action/templatespacecollect/templatespacecollect.go +++ b/bcs-services/cluster-resources/pkg/action/templatespacecollect/templatespacecollect.go @@ -16,8 +16,6 @@ package templatespacecollect import ( "context" - "go.mongodb.org/mongo-driver/bson/primitive" - "github.com/Tencent/bk-bcs/bcs-services/cluster-resources/pkg/common/ctxkey" "github.com/Tencent/bk-bcs/bcs-services/cluster-resources/pkg/common/errcode" "github.com/Tencent/bk-bcs/bcs-services/cluster-resources/pkg/component/project" @@ -67,30 +65,6 @@ func (t *TemplateSpaceCollectAction) checkAccess(ctx context.Context) error { return nil } -// List xxx -func (t *TemplateSpaceCollectAction) List(ctx context.Context) ([]map[string]interface{}, error) { - if err := t.checkAccess(ctx); err != nil { - return nil, err - } - - p, err := project.FromContext(ctx) - if err != nil { - return nil, err - } - - // 通过项目编码、用户名称检索 - templateSpaceCollect, err := t.model.ListTemplateSpaceCollect(ctx, "", p.Code, ctxkey.GetUsernameFromCtx(ctx)) - if err != nil { - return nil, err - } - - m := make([]map[string]interface{}, 0) - for _, value := range templateSpaceCollect { - m = append(m, value.ToMap()) - } - return m, nil -} - // Create xxx func (t *TemplateSpaceCollectAction) Create( ctx context.Context, req *clusterRes.CreateTemplateSpaceCollectReq) (string, error) { @@ -105,21 +79,19 @@ func (t *TemplateSpaceCollectAction) Create( username := ctxkey.GetUsernameFromCtx(ctx) // 检测用户是否已经收藏 - templateSpaceCollects, err := t.model.ListTemplateSpaceCollect(ctx, req.TemplateSpaceID, p.Code, username) + templateSpaceCollects, err := t.model.ListTemplateSpaceCollect(ctx, p.Code, username) if err != nil { return "", err } - if len(templateSpaceCollects) > 0 { - return templateSpaceCollects[0].ID.Hex(), nil + for _, v := range templateSpaceCollects { + if v.TemplateSpaceID == req.GetTemplateSpaceID() { + return v.ID.Hex(), nil + } } - templateSpaceID, err := primitive.ObjectIDFromHex(req.TemplateSpaceID) - if err != nil { - return "", err - } templateSpaceCollect := &entity.TemplateSpaceCollect{ - TemplateSpaceID: templateSpaceID, + TemplateSpaceID: req.GetTemplateSpaceID(), ProjectCode: p.Code, Username: username, } @@ -140,19 +112,17 @@ func (t *TemplateSpaceCollectAction) Delete(ctx context.Context, id string) erro if err != nil { return err } - // 通过id检索 - templateSpaceCollect, err := t.model.GetTemplateSpaceCollect(ctx, id) + username := ctxkey.GetUsernameFromCtx(ctx) + templateSpaceCollect, err := t.model.ListTemplateSpaceCollect(ctx, p.Code, username) if err != nil { return err } - // 检验更新 TemplateSpace 的权限 - if templateSpaceCollect.ProjectCode != p.Code || templateSpaceCollect.Username != ctxkey.GetUsernameFromCtx(ctx) { - return errorx.New(errcode.NoPerm, i18n.GetMsg(ctx, "无权限访问")) + for _, v := range templateSpaceCollect { + if v.TemplateSpaceID == id { + return t.model.DeleteTemplateSpaceCollect(ctx, v.ID.Hex()) + } } - if err := t.model.DeleteTemplateSpaceCollect(ctx, id); err != nil { - return err - } return nil } diff --git a/bcs-services/cluster-resources/pkg/handler/multicluster/query.go b/bcs-services/cluster-resources/pkg/handler/multicluster/query.go index beeb12afad..2736441231 100644 --- a/bcs-services/cluster-resources/pkg/handler/multicluster/query.go +++ b/bcs-services/cluster-resources/pkg/handler/multicluster/query.go @@ -155,7 +155,9 @@ func (q *APIServerQuery) FetchApiResources(ctx context.Context, kind string) (ma if err != nil { return nil, err } - return resources, nil + resp := make(map[string]interface{}, 0) + resp["resources"] = resources + return resp, nil } // listResource 列出多集群资源 @@ -186,10 +188,10 @@ func listResource(ctx context.Context, clusterdNamespaces []*clusterRes.ClusterN // listApiResource 列出多集群资源 func listApiResource(ctx context.Context, clusterdNamespaces []*clusterRes.ClusterNamespaces, kind string, - opts metav1.ListOptions) (map[string]interface{}, error) { + opts metav1.ListOptions) ([]interface{}, error) { errGroups := errgroup.Group{} errGroups.SetLimit(10) - results := make(map[string]interface{}, 0) + results := make([]interface{}, 0) mux := sync.Mutex{} for _, v := range clusterdNamespaces { ns := v @@ -206,7 +208,7 @@ func listApiResource(ctx context.Context, clusterdNamespaces []*clusterRes.Clust } mux.Lock() defer mux.Unlock() - results[ns.ClusterID] = result + results = append(results, result) return nil }) } @@ -275,7 +277,7 @@ func listNamespaceResources(ctx context.Context, clusterID string, namespaces [] func listNamespaceApiResources(ctx context.Context, clusterID string, namespaces []string, kind string, opts metav1.ListOptions) (map[string]res.GroupKindVersionResource, error) { clusterConf := res.NewClusterConf(clusterID) - k8sResources, err := res.GetApiResources(ctx, clusterConf, kind) + k8sResources, err := res.GetApiResources(ctx, clusterConf, kind, "") if err != nil { log.Error(ctx, "get api resource error, %v", err) // 多集群查询场景,如果 crd 不存在,直接返回空 diff --git a/bcs-services/cluster-resources/pkg/handler/templateset/template_set.go b/bcs-services/cluster-resources/pkg/handler/templateset/template_set.go index 6bd826ecab..2973801c40 100644 --- a/bcs-services/cluster-resources/pkg/handler/templateset/template_set.go +++ b/bcs-services/cluster-resources/pkg/handler/templateset/template_set.go @@ -114,20 +114,6 @@ func (h *Handler) CopyTemplateSpace( return nil } -// ListTemplateSpaceCollect 获取模板文件文件夹收藏列表 -func (h *Handler) ListTemplateSpaceCollect( - ctx context.Context, in *clusterRes.ListTemplateSpaceCollectReq, out *clusterRes.CommonListResp) error { - action := templatespacecollect.NewTemplateSpaceCollectAction(h.model) - data, err := action.List(ctx) - if err != nil { - return err - } - if out.Data, err = pbstruct.MapSlice2ListValue(data); err != nil { - return err - } - return nil -} - // CreateTemplateSpaceCollect 创建模板文件文件夹收藏 func (h *Handler) CreateTemplateSpaceCollect( ctx context.Context, in *clusterRes.CreateTemplateSpaceCollectReq, out *clusterRes.CommonResp) error { @@ -146,7 +132,7 @@ func (h *Handler) CreateTemplateSpaceCollect( func (h *Handler) DeleteTemplateSpaceCollect( ctx context.Context, in *clusterRes.DeleteTemplateSpaceCollectReq, out *clusterRes.CommonResp) error { action := templatespacecollect.NewTemplateSpaceCollectAction(h.model) - err := action.Delete(ctx, in.GetId()) + err := action.Delete(ctx, in.GetTemplateSpaceID()) if err != nil { return err } diff --git a/bcs-services/cluster-resources/pkg/resource/client/cobj.go b/bcs-services/cluster-resources/pkg/resource/client/cobj.go index 09dc6a8995..0883624ad7 100644 --- a/bcs-services/cluster-resources/pkg/resource/client/cobj.go +++ b/bcs-services/cluster-resources/pkg/resource/client/cobj.go @@ -632,7 +632,7 @@ func getApiReSourcesManifest(ctx context.Context, crdName, clusterID string) (ma if len(s) > 1 { group = s[1] } - apiResources, err := res.GetApiResources(ctx, res.NewClusterConf(clusterID), "") + apiResources, err := res.GetApiResources(ctx, res.NewClusterConf(clusterID), "", crdName) if err != nil { return manifest, err } diff --git a/bcs-services/cluster-resources/pkg/resource/discovery.go b/bcs-services/cluster-resources/pkg/resource/discovery.go index edc86b03aa..3794917f05 100644 --- a/bcs-services/cluster-resources/pkg/resource/discovery.go +++ b/bcs-services/cluster-resources/pkg/resource/discovery.go @@ -235,14 +235,14 @@ func (d *RedisCacheClient) getPreferredResource(kind string) (schema.GroupVersio } // getPreferredApiResources 获取指定api资源当前集群 Preferred 版本列表 -func (d *RedisCacheClient) getPreferredApiResources(kind string) (map[string]GroupKindVersionResource, error) { +func (d *RedisCacheClient) getPreferredApiResources(kind, crdName string) (map[string]GroupKindVersionResource, error) { all, err := d.ServerPreferredResources() if err != nil { return map[string]GroupKindVersionResource{}, err } // 逐个检查出第一个同名资源,作为 Preferred 结果返回 - return filterApiResByKind(kind, all), nil + return filterApiResByKind(kind, crdName, all), nil } // readCache 读缓存逻辑 @@ -340,17 +340,17 @@ func GetGroupVersionResource( // 直接获取 preferred api version // 包含刷新缓存逻辑,若首次从缓存中找不到对应资源,会刷新缓存再次查询,若还是找不到,则返回错误 func GetApiResources( - ctx context.Context, conf *ClusterConf, kind string) (map[string]GroupKindVersionResource, error) { + ctx context.Context, conf *ClusterConf, kind, crdName string) (map[string]GroupKindVersionResource, error) { cli, err := NewRedisCacheClient4Conf(ctx, conf) if err != nil { return map[string]GroupKindVersionResource{}, err } // 查询 preferred version(含刷新缓存重试) var res map[string]GroupKindVersionResource - res, err = cli.getPreferredApiResources(kind) - if err != nil { - cli.Invalidate() - return cli.getPreferredApiResources(kind) + res, err = cli.getPreferredApiResources(kind, crdName) + if err != nil || len(res) == 0 { + _ = cli.ClearCache() + return cli.getPreferredApiResources(kind, crdName) } return res, nil } @@ -378,7 +378,7 @@ func NewRedisCacheClient4Conf(ctx context.Context, conf *ClusterConf) (*RedisCac } // filterApiResByKind 获取对应的api资源信息 -func filterApiResByKind(kind string, allRes []*metav1.APIResourceList) map[string]GroupKindVersionResource { +func filterApiResByKind(kind, crdName string, allRes []*metav1.APIResourceList) map[string]GroupKindVersionResource { resources := make(map[string]GroupKindVersionResource, 0) for _, apiResList := range allRes { for _, res := range apiResList.APIResources { @@ -387,18 +387,7 @@ func filterApiResByKind(kind string, allRes []*metav1.APIResourceList) map[strin if strings.Contains(apiResList.GroupVersion, "/") { group, ver = stringx.Partition(apiResList.GroupVersion, "/") } - // 列出所有api-resources - if kind == "" { - resources[apiResList.GroupVersion] = append(resources[apiResList.GroupVersion], - map[string]interface{}{ - "group": group, - "kind": res.Kind, - "version": ver, - "resource": res.Name, - "namespaced": res.Namespaced, - }) - } else if res.Kind == kind { - // 仅列出crd + if (kind != "" && res.Kind == kind) || (crdName != "" && res.Name == crdName) { resources[apiResList.GroupVersion] = append(resources[apiResList.GroupVersion], map[string]interface{}{ "group": group, diff --git a/bcs-services/cluster-resources/pkg/store/entity/templatespace.go b/bcs-services/cluster-resources/pkg/store/entity/templatespace.go index 2b44a12e8a..630aac23ff 100644 --- a/bcs-services/cluster-resources/pkg/store/entity/templatespace.go +++ b/bcs-services/cluster-resources/pkg/store/entity/templatespace.go @@ -22,6 +22,7 @@ type TemplateSpace struct { Name string `json:"name" bson:"name"` ProjectCode string `json:"projectCode" bson:"projectCode"` Description string `json:"description" bson:"description"` + Fav bool `json:"fav" bson:"-"` // 是否收藏 } // ToMap trans templatespace to map @@ -34,5 +35,6 @@ func (t *TemplateSpace) ToMap() map[string]interface{} { m["name"] = t.Name m["projectCode"] = t.ProjectCode m["description"] = t.Description + m["fav"] = t.Fav return m } diff --git a/bcs-services/cluster-resources/pkg/store/entity/templatespacecollect.go b/bcs-services/cluster-resources/pkg/store/entity/templatespacecollect.go index 8ea404f00b..d8e458730b 100644 --- a/bcs-services/cluster-resources/pkg/store/entity/templatespacecollect.go +++ b/bcs-services/cluster-resources/pkg/store/entity/templatespacecollect.go @@ -19,33 +19,8 @@ import ( // TemplateSpaceCollect 定义了模板文件文件夹收藏的模型 type TemplateSpaceCollect struct { ID primitive.ObjectID `json:"id" bson:"_id"` - TemplateSpaceID primitive.ObjectID `json:"templateSpaceID" bson:"templateSpaceID"` + TemplateSpaceID string `json:"templateSpaceID" bson:"templateSpaceID"` ProjectCode string `json:"projectCode" bson:"projectCode"` Username string `json:"username" bson:"username"` CreateAt int64 `json:"createAt" bson:"createAt"` } - -// TemplateSpaceAndCollect 定义了模板文件文件夹及收藏的模型 -type TemplateSpaceAndCollect struct { - ID primitive.ObjectID `json:"id" bson:"_id"` - TemplateSpaceID primitive.ObjectID `json:"templateSpaceID" bson:"templateSpaceID"` - ProjectCode string `json:"projectCode" bson:"projectCode"` - Username string `json:"username" bson:"username"` - CreateAt int64 `json:"createAt" bson:"createAt"` - Name string `json:"name" bson:"name"` // 文件夹名称,从文件夹表获取 -} - -// ToMap trans template space collect to map -func (t *TemplateSpaceAndCollect) ToMap() map[string]interface{} { - if t == nil { - return nil - } - m := make(map[string]interface{}, 0) - m["id"] = t.ID.Hex() - m["templateSpaceID"] = t.TemplateSpaceID.Hex() - m["projectCode"] = t.ProjectCode - m["username"] = t.Username - m["CreateAt"] = t.CreateAt - m["name"] = t.Name - return m -} diff --git a/bcs-services/cluster-resources/pkg/store/store.go b/bcs-services/cluster-resources/pkg/store/store.go index 529c65bc5a..65e6abc909 100644 --- a/bcs-services/cluster-resources/pkg/store/store.go +++ b/bcs-services/cluster-resources/pkg/store/store.go @@ -47,9 +47,8 @@ type ClusterResourcesModel interface { DeleteTemplateSpace(ctx context.Context, id string) error // 模板文件文件夹收藏 - GetTemplateSpaceCollect(ctx context.Context, id string) (*entity.TemplateSpaceCollect, error) ListTemplateSpaceCollect( - ctx context.Context, templateSpaceID, projectCode, username string) ([]*entity.TemplateSpaceAndCollect, error) + ctx context.Context, projectCode, username string) ([]*entity.TemplateSpaceCollect, error) CreateTemplateSpaceCollect( ctx context.Context, templateSpaceCollect *entity.TemplateSpaceCollect) (string, error) DeleteTemplateSpaceCollect(ctx context.Context, id string) error diff --git a/bcs-services/cluster-resources/pkg/store/templatespacecollect/templatespacecollect.go b/bcs-services/cluster-resources/pkg/store/templatespacecollect/templatespacecollect.go index 1ed4db5e75..d8bfb32d03 100644 --- a/bcs-services/cluster-resources/pkg/store/templatespacecollect/templatespacecollect.go +++ b/bcs-services/cluster-resources/pkg/store/templatespacecollect/templatespacecollect.go @@ -83,70 +83,19 @@ func (m *ModelTemplateSpaceCollect) ensureTable(ctx context.Context) error { return nil } -// GetTemplateSpaceCollect get a specific entity.TemplateSpaceCollect from database -func (m *ModelTemplateSpaceCollect) GetTemplateSpaceCollect(ctx context.Context, id string) ( - *entity.TemplateSpaceCollect, error) { - if id == "" { - return nil, fmt.Errorf("can not get with empty id") - } - - objectID, err := primitive.ObjectIDFromHex(id) - if err != nil { - return nil, fmt.Errorf("invalid id") - } - - cond := operator.NewLeafCondition(operator.Eq, operator.M{ - entity.FieldKeyObjectID: objectID, - }) - - templateSpaceCollect := &entity.TemplateSpaceCollect{} - if err := m.db.Table(m.tableName).Find(cond).One(ctx, templateSpaceCollect); err != nil { - return nil, err - } - - return templateSpaceCollect, nil -} - // ListTemplateSpaceCollect get a list of entity.TemplateSpaceCollect by condition from database func (m *ModelTemplateSpaceCollect) ListTemplateSpaceCollect( - ctx context.Context, templateSpaceID, projectCode, username string) ([]*entity.TemplateSpaceAndCollect, error) { - - t := make([]*entity.TemplateSpaceAndCollect, 0) - // 构建聚合管道, 文件夹名称有可能会更新,不想在这张表维护 - match := operator.M{"projectCode": projectCode, "username": username} - if templateSpaceID != "" { - spaceID, err := primitive.ObjectIDFromHex(templateSpaceID) - if err != nil { - return nil, err - } - match[entity.FieldKeyTemplateSpaceID] = spaceID - } - pipeline := []operator.M{ - {"$match": match}, - {"$lookup": operator.M{ - "from": "bcsclusterresources_templatespace", - "localField": "templateSpaceID", - "foreignField": "_id", - "as": "templatespace", - }}, - {"$unwind": "$templatespace"}, - {"$project": operator.M{ - "_id": 1, - "templateSpaceID": 1, - "projectCode": 1, - "username": 1, - "createAt": 1, - "name": "$templatespace.name", - }}, - } - - err := m.db.Table(m.tableName).Aggregation(ctx, pipeline, &t) - - if err != nil { + ctx context.Context, projectCode, username string) ([]*entity.TemplateSpaceCollect, error) { + ts := make([]*entity.TemplateSpaceCollect, 0) + cond := operator.NewLeafCondition(operator.Eq, operator.M{ + entity.FieldKeyProjectCode: projectCode, + "username": username, + }) + if err := m.db.Table(m.tableName).Find(cond).All(ctx, &ts); err != nil { return nil, err } - return t, nil + return ts, nil } // CreateTemplateSpaceCollect create a new entity.TemplateSpaceCollect into database diff --git a/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.go b/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.go index 0bbcb8a139..cecc5ba68e 100644 --- a/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.go +++ b/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.go @@ -4613,8 +4613,8 @@ type DeleteTemplateSpaceCollectReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - ProjectCode string `protobuf:"bytes,2,opt,name=projectCode,proto3" json:"projectCode,omitempty"` + ProjectCode string `protobuf:"bytes,1,opt,name=projectCode,proto3" json:"projectCode,omitempty"` + TemplateSpaceID string `protobuf:"bytes,2,opt,name=templateSpaceID,proto3" json:"templateSpaceID,omitempty"` } func (x *DeleteTemplateSpaceCollectReq) Reset() { @@ -4649,16 +4649,16 @@ func (*DeleteTemplateSpaceCollectReq) Descriptor() ([]byte, []int) { return file_cluster_resources_proto_rawDescGZIP(), []int{65} } -func (x *DeleteTemplateSpaceCollectReq) GetId() string { +func (x *DeleteTemplateSpaceCollectReq) GetProjectCode() string { if x != nil { - return x.Id + return x.ProjectCode } return "" } -func (x *DeleteTemplateSpaceCollectReq) GetProjectCode() string { +func (x *DeleteTemplateSpaceCollectReq) GetTemplateSpaceID() string { if x != nil { - return x.ProjectCode + return x.TemplateSpaceID } return "" } @@ -7911,366 +7911,442 @@ var file_cluster_resources_proto_rawDesc = []byte{ 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x32, 0x21, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xe6, 0x94, 0xb6, 0xe8, 0x97, 0x8f, 0x22, - 0xd7, 0x01, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0xfd, 0x01, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x12, 0x29, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x19, 0x92, - 0x41, 0x0e, 0x2a, 0x0c, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0x20, 0x49, 0x44, - 0xfa, 0x42, 0x05, 0x72, 0x03, 0x98, 0x01, 0x18, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, - 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x3a, 0x4d, 0x92, 0x41, 0x4a, 0x0a, - 0x48, 0x2a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, - 0x32, 0x27, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe5, 0x8d, 0x95, 0xe4, 0xb8, 0xaa, 0xe6, 0xa8, - 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, - 0xe5, 0xa4, 0xb9, 0xe6, 0x94, 0xb6, 0xe8, 0x97, 0x8f, 0x22, 0xc9, 0x01, 0x0a, 0x16, 0x47, 0x65, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x65, 0x71, 0x12, 0x2f, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x1f, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe5, 0x85, 0x83, - 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x98, 0x01, - 0x18, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, - 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, - 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x3a, 0x40, 0x92, 0x41, 0x3d, 0x0a, 0x3b, 0x2a, 0x16, 0x47, 0x65, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x65, 0x71, 0x32, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, - 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe8, - 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x22, 0xe9, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, - 0x4d, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x23, 0x92, 0x41, 0x17, 0x2a, 0x15, 0xe6, + 0x4f, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0x92, 0x41, 0x19, 0x2a, 0x17, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, - 0xb6, 0xe5, 0xa4, 0xb9, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x44, 0x3a, 0x41, - 0x92, 0x41, 0x3e, 0x0a, 0x3c, 0x2a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x32, 0x21, - 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, - 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe5, 0x88, 0x97, 0xe8, 0xa1, - 0xa8, 0x22, 0xde, 0x06, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x12, - 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, - 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, - 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, 0x41, 0x1d, - 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, - 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, - 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, - 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe6, 0x8f, 0x8f, - 0xe8, 0xbf, 0xb0, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4d, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x23, 0x92, 0x41, 0x17, 0x2a, 0x15, - 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, - 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x44, 0x12, - 0x34, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x42, 0x20, 0x92, - 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, - 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe6, 0xa0, 0x87, 0xe7, 0xad, 0xbe, 0x52, - 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x4d, 0x0a, 0x12, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, 0x18, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, - 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xe6, 0x8f, 0x8f, 0xe8, 0xbf, 0xb0, - 0x52, 0x12, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, 0xe6, - 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1e, 0x92, 0x41, 0x1b, 0x2a, 0x19, 0xe6, - 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, - 0xac, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x69, 0x73, 0x44, 0x72, 0x61, 0x66, 0x74, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x08, 0x42, 0x11, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe6, 0x98, 0xaf, 0xe5, 0x90, 0xa6, 0xe8, - 0x8d, 0x89, 0xe7, 0xa8, 0xbf, 0x52, 0x07, 0x69, 0x73, 0x44, 0x72, 0x61, 0x66, 0x74, 0x12, 0x41, - 0x0a, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, 0x18, 0xe5, 0x9f, 0xba, 0xe4, 0xba, - 0x8e, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, - 0xe6, 0x9c, 0xac, 0x52, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, 0x18, 0xe6, 0xa8, - 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe8, 0x8d, 0x89, 0xe7, 0xa8, 0xbf, - 0xe5, 0x86, 0x85, 0xe5, 0xae, 0xb9, 0x52, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0f, 0x64, 0x72, 0x61, 0x66, 0x74, 0x45, 0x64, 0x69, - 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x23, 0x92, - 0x41, 0x20, 0x2a, 0x1e, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, - 0xe8, 0x8d, 0x89, 0xe7, 0xa8, 0xbf, 0xe7, 0xbc, 0x96, 0xe8, 0xbe, 0x91, 0xe6, 0xa8, 0xa1, 0xe5, - 0xbc, 0x8f, 0x52, 0x0f, 0x64, 0x72, 0x61, 0x66, 0x74, 0x45, 0x64, 0x69, 0x74, 0x46, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x3a, 0x3d, 0x92, 0x41, 0x3a, 0x0a, 0x38, 0x2a, 0x19, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x71, 0x32, 0x1b, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe6, 0xa8, 0xa1, - 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, - 0x8d, 0xae, 0x22, 0x9d, 0x06, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, - 0x12, 0x35, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0x92, 0x41, - 0x1a, 0x2a, 0x18, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, - 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x98, 0x01, 0x18, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, - 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, - 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, - 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe5, - 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x1b, + 0xb6, 0xe5, 0xa4, 0xb9, 0x49, 0x44, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, + 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x44, + 0x3a, 0x4d, 0x92, 0x41, 0x4a, 0x0a, 0x48, 0x2a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x6c, + 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x32, 0x27, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe5, 0x8d, + 0x95, 0xe4, 0xb8, 0xaa, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, + 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xe6, 0x94, 0xb6, 0xe8, 0x97, 0x8f, 0x22, + 0xc9, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x12, 0x2f, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1f, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, + 0xe6, 0x9d, 0xbf, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x20, 0x49, 0x44, 0xfa, + 0x42, 0x05, 0x72, 0x03, 0x98, 0x01, 0x18, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, + 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x3a, 0x40, 0x92, 0x41, 0x3d, 0x0a, 0x3b, + 0x2a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x32, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, - 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe6, 0x8f, 0x8f, 0xe8, 0xbf, 0xb0, 0x52, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, - 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, - 0x8d, 0xae, 0xe6, 0xa0, 0x87, 0xe7, 0xad, 0xbe, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x31, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x17, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, - 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x5e, 0x0a, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, 0x18, 0xe6, 0xa8, 0xa1, 0xe6, - 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xe6, 0xa8, - 0xa1, 0xe5, 0xbc, 0x8f, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, - 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x69, 0x73, 0x44, 0x72, 0x61, 0x66, 0x74, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x08, 0x42, 0x11, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe6, 0x98, 0xaf, 0xe5, 0x90, 0xa6, 0xe8, - 0x8d, 0x89, 0xe7, 0xa8, 0xbf, 0x52, 0x07, 0x69, 0x73, 0x44, 0x72, 0x61, 0x66, 0x74, 0x12, 0x41, - 0x0a, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, 0x18, 0xe5, 0x9f, 0xba, 0xe4, 0xba, - 0x8e, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, - 0xe6, 0x9c, 0xac, 0x52, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, 0x18, 0xe6, 0xa8, - 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe8, 0x8d, 0x89, 0xe7, 0xa8, 0xbf, - 0xe5, 0x86, 0x85, 0xe5, 0xae, 0xb9, 0x52, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0f, 0x64, 0x72, 0x61, 0x66, 0x74, 0x45, 0x64, 0x69, - 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x42, 0x23, 0x92, - 0x41, 0x20, 0x2a, 0x1e, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, - 0xe8, 0x8d, 0x89, 0xe7, 0xa8, 0xbf, 0xe7, 0xbc, 0x96, 0xe8, 0xbe, 0x91, 0xe6, 0xa8, 0xa1, 0xe5, - 0xbc, 0x8f, 0x52, 0x0f, 0x64, 0x72, 0x61, 0x66, 0x74, 0x45, 0x64, 0x69, 0x74, 0x46, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x3a, 0x3d, 0x92, 0x41, 0x3a, 0x0a, 0x38, 0x2a, 0x19, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x71, 0x32, 0x1b, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0xe6, 0xa8, 0xa1, - 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, - 0x8d, 0xae, 0x22, 0xcf, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, - 0x12, 0x35, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0x92, 0x41, - 0x1a, 0x2a, 0x18, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, - 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x05, 0x72, 0x03, - 0x98, 0x01, 0x18, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, + 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x22, 0xe9, 0x01, 0x0a, 0x17, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x3a, 0x3d, 0x92, 0x41, 0x3a, 0x0a, 0x38, 0x2a, 0x19, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x32, 0x1b, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe6, - 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, - 0xb0, 0xe6, 0x8d, 0xae, 0x22, 0xc7, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x32, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x22, 0x92, 0x41, 0x17, 0x2a, - 0x15, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, - 0xe6, 0x9c, 0xac, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x98, 0x01, 0x18, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, - 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, - 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x3a, 0x3c, 0x92, 0x41, 0x39, 0x0a, 0x37, 0x2a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x32, 0x1e, - 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, - 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x22, 0xe9, - 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, - 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, - 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, - 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, - 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, - 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x4d, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, - 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, - 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, - 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, - 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, - 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x3a, 0x36, 0x92, 0x41, 0x33, 0x0a, 0x31, 0x2a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x32, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, - 0x87, 0xe4, 0xbb, 0xb6, 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x22, 0xdc, 0x01, 0x0a, 0x16, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x4d, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x23, + 0x92, 0x41, 0x17, 0x2a, 0x15, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, + 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, + 0x01, 0x18, 0x40, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x49, 0x44, 0x3a, 0x41, 0x92, 0x41, 0x3e, 0x0a, 0x3c, 0x2a, 0x17, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x71, 0x32, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, + 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, + 0xae, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x22, 0xde, 0x06, 0x0a, 0x19, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, - 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0x92, 0x41, 0x19, 0x2a, 0x17, 0xe6, 0xa8, + 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x29, 0x92, 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, + 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe5, 0x90, 0x8d, + 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, - 0xe6, 0x8d, 0xae, 0x49, 0x44, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0a, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, 0x3a, 0x3d, 0x92, 0x41, 0x3a, 0x0a, - 0x38, 0x2a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x32, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, - 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, - 0xe6, 0x9c, 0xac, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x22, 0xf0, 0x03, 0x0a, 0x18, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, - 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, - 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, 0x18, - 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, - 0x9c, 0xac, 0xe6, 0x8f, 0x8f, 0xe8, 0xbf, 0xb0, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, - 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xfa, - 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x31, 0x0a, 0x0a, 0x65, 0x64, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x11, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe7, 0xbc, 0x96, 0xe8, - 0xbe, 0x91, 0xe6, 0xa8, 0xa1, 0xe5, 0xbc, 0x8f, 0x52, 0x0a, 0x65, 0x64, 0x69, 0x74, 0x46, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1e, 0x92, 0x41, 0x1b, 0x2a, 0x19, 0xe6, 0xa8, 0xa1, 0xe6, - 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x45, - 0x0a, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x25, 0x92, 0x41, 0x19, 0x2a, 0x17, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, - 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x49, 0x44, - 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x49, 0x44, 0x12, 0x2a, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x08, 0x42, 0x14, 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe8, 0x83, 0xbd, 0xe5, 0x90, - 0xa6, 0xe8, 0xa2, 0xab, 0xe8, 0xa6, 0x86, 0xe7, 0x9b, 0x96, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, - 0x65, 0x3a, 0x39, 0x92, 0x41, 0x36, 0x0a, 0x34, 0x2a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x32, 0x18, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, - 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0x22, 0xd3, 0x01, 0x0a, - 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x32, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x22, 0x92, 0x41, 0x17, 0x2a, 0x15, 0xe6, 0xa8, 0xa1, 0xe6, - 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0x20, 0x49, + 0xe6, 0x8d, 0xae, 0xe6, 0x8f, 0x8f, 0xe8, 0xbf, 0xb0, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x23, 0x92, 0x41, 0x17, 0x2a, 0x15, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, + 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xfa, 0x42, 0x06, 0x72, 0x04, + 0x10, 0x01, 0x18, 0x40, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x49, 0x44, 0x12, 0x34, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, + 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe6, + 0xa0, 0x87, 0xe7, 0xad, 0xbe, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x4d, 0x0a, 0x12, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, 0x18, 0xe6, 0xa8, + 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, + 0xe6, 0x8f, 0x8f, 0xe8, 0xbf, 0xb0, 0x52, 0x12, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x44, + 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0x92, 0x41, 0x14, + 0x2a, 0x12, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, + 0x88, 0xe6, 0x9c, 0xac, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1e, + 0x92, 0x41, 0x1b, 0x2a, 0x19, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, + 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x69, 0x73, 0x44, 0x72, 0x61, + 0x66, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x42, 0x11, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe6, + 0x98, 0xaf, 0xe5, 0x90, 0xa6, 0xe8, 0x8d, 0x89, 0xe7, 0xa8, 0xbf, 0x52, 0x07, 0x69, 0x73, 0x44, + 0x72, 0x61, 0x66, 0x74, 0x12, 0x41, 0x0a, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, + 0x18, 0xe5, 0x9f, 0xba, 0xe4, 0xba, 0x8e, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, + 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0x52, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, + 0x41, 0x1a, 0x2a, 0x18, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, + 0xe8, 0x8d, 0x89, 0xe7, 0xa8, 0xbf, 0xe5, 0x86, 0x85, 0xe5, 0xae, 0xb9, 0x52, 0x0c, 0x64, 0x72, + 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0f, 0x64, 0x72, + 0x61, 0x66, 0x74, 0x45, 0x64, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x23, 0x92, 0x41, 0x20, 0x2a, 0x1e, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, + 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe8, 0x8d, 0x89, 0xe7, 0xa8, 0xbf, 0xe7, 0xbc, 0x96, 0xe8, + 0xbe, 0x91, 0xe6, 0xa8, 0xa1, 0xe5, 0xbc, 0x8f, 0x52, 0x0f, 0x64, 0x72, 0x61, 0x66, 0x74, 0x45, + 0x64, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x3a, 0x3d, 0x92, 0x41, 0x3a, 0x0a, 0x38, + 0x2a, 0x19, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x32, 0x1b, 0xe5, 0x88, 0x9b, + 0xe5, 0xbb, 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, + 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x22, 0x9d, 0x06, 0x0a, 0x19, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x12, 0x35, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x25, 0x92, 0x41, 0x1a, 0x2a, 0x18, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, + 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x20, 0x49, + 0x44, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x98, 0x01, 0x18, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, + 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, + 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, 0x41, 0x1d, 0x2a, 0x1b, + 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, + 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, + 0x10, 0x01, 0x18, 0x40, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, + 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe6, 0x8f, 0x8f, 0xe8, 0xbf, + 0xb0, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, + 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, + 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, + 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe6, 0xa0, 0x87, 0xe7, 0xad, 0xbe, 0x52, 0x04, + 0x74, 0x61, 0x67, 0x73, 0x12, 0x31, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, 0xe6, + 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x5e, 0x0a, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x42, 0x1d, 0x92, 0x41, 0x1a, + 0x2a, 0x18, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, + 0x88, 0xe6, 0x9c, 0xac, 0xe6, 0xa8, 0xa1, 0xe5, 0xbc, 0x8f, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x69, 0x73, 0x44, 0x72, 0x61, + 0x66, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x42, 0x11, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe6, + 0x98, 0xaf, 0xe5, 0x90, 0xa6, 0xe8, 0x8d, 0x89, 0xe7, 0xa8, 0xbf, 0x52, 0x07, 0x69, 0x73, 0x44, + 0x72, 0x61, 0x66, 0x74, 0x12, 0x41, 0x0a, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, + 0x18, 0xe5, 0x9f, 0xba, 0xe4, 0xba, 0x8e, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, + 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0x52, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, + 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0c, 0x64, 0x72, 0x61, 0x66, 0x74, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, + 0x41, 0x1a, 0x2a, 0x18, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, + 0xe8, 0x8d, 0x89, 0xe7, 0xa8, 0xbf, 0xe5, 0x86, 0x85, 0xe5, 0xae, 0xb9, 0x52, 0x0c, 0x64, 0x72, + 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, 0x0f, 0x64, 0x72, + 0x61, 0x66, 0x74, 0x45, 0x64, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x23, 0x92, 0x41, 0x20, 0x2a, 0x1e, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, + 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe8, 0x8d, 0x89, 0xe7, 0xa8, 0xbf, 0xe7, 0xbc, 0x96, 0xe8, + 0xbe, 0x91, 0xe6, 0xa8, 0xa1, 0xe5, 0xbc, 0x8f, 0x52, 0x0f, 0x64, 0x72, 0x61, 0x66, 0x74, 0x45, + 0x64, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x3a, 0x3d, 0x92, 0x41, 0x3a, 0x0a, 0x38, + 0x2a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x32, 0x1b, 0xe6, 0x9b, 0xb4, + 0xe6, 0x96, 0xb0, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, + 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x22, 0xcf, 0x01, 0x0a, 0x19, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x12, 0x35, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x25, 0x92, 0x41, 0x1a, 0x2a, 0x18, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, + 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x98, 0x01, 0x18, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x3a, 0x45, 0x92, 0x41, 0x42, - 0x0a, 0x40, 0x2a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x32, 0x24, 0xe5, 0x88, - 0xa0, 0xe9, 0x99, 0xa4, 0xe5, 0x8d, 0x95, 0xe4, 0xb8, 0xaa, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x3a, 0x3d, 0x92, 0x41, 0x3a, + 0x0a, 0x38, 0x2a, 0x19, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x32, 0x1b, 0xe5, + 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, + 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x22, 0xc7, 0x01, 0x0a, 0x15, 0x47, + 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x12, 0x32, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x22, 0x92, 0x41, 0x17, 0x2a, 0x15, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, + 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x05, 0x72, + 0x03, 0x98, 0x01, 0x18, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, + 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, + 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x3a, 0x3c, 0x92, 0x41, 0x39, 0x0a, 0x37, 0x2a, 0x15, 0x47, + 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x32, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, + 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xe8, 0xaf, + 0xa6, 0xe6, 0x83, 0x85, 0x22, 0xe9, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3c, + 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, + 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, + 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x4f, 0x0a, 0x0d, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, + 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xe5, + 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0d, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x4d, 0x0a, + 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, + 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe5, + 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0c, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, + 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, + 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x3a, 0x36, 0x92, 0x41, 0x33, 0x0a, 0x31, 0x2a, + 0x15, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x32, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, + 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, + 0x22, 0xdc, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, + 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0x92, + 0x41, 0x19, 0x2a, 0x17, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, + 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x49, 0x44, 0xfa, 0x42, 0x06, 0x72, 0x04, + 0x10, 0x01, 0x18, 0x40, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, + 0x3a, 0x3d, 0x92, 0x41, 0x3a, 0x0a, 0x38, 0x2a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x32, + 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, + 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x22, + 0xf0, 0x03, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, + 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x1d, 0x92, 0x41, 0x1a, 0x2a, 0x18, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, + 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xe6, 0x8f, 0x8f, 0xe8, 0xbf, 0xb0, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, + 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, + 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x0a, 0x65, 0x64, 0x69, 0x74, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x11, 0x92, 0x41, 0x0e, + 0x2a, 0x0c, 0xe7, 0xbc, 0x96, 0xe8, 0xbe, 0x91, 0xe6, 0xa8, 0xa1, 0xe5, 0xbc, 0x8f, 0x52, 0x0a, + 0x65, 0x64, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x38, 0x0a, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1e, 0x92, 0x41, 0x1b, + 0x2a, 0x19, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, + 0x88, 0xe6, 0x9c, 0xac, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x25, 0x92, 0x41, 0x19, 0x2a, 0x17, 0xe6, + 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, + 0xb0, 0xe6, 0x8d, 0xae, 0x49, 0x44, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, + 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, 0x12, 0x2a, 0x0a, 0x05, 0x66, + 0x6f, 0x72, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x42, 0x14, 0x92, 0x41, 0x11, 0x2a, + 0x0f, 0xe8, 0x83, 0xbd, 0xe5, 0x90, 0xa6, 0xe8, 0xa2, 0xab, 0xe8, 0xa6, 0x86, 0xe7, 0x9b, 0x96, + 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x3a, 0x39, 0x92, 0x41, 0x36, 0x0a, 0x34, 0x2a, 0x18, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x32, 0x18, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, - 0x9c, 0xac, 0x22, 0xfa, 0x04, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x31, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x11, 0x2a, 0x0f, - 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, - 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, - 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x14, 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, - 0xe9, 0x9b, 0x86, 0xe6, 0x8f, 0x8f, 0xe8, 0xbf, 0xb0, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, - 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, - 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe6, 0xa8, 0xa1, 0xe6, - 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xfa, 0x42, 0x06, 0x72, 0x04, - 0x10, 0x01, 0x18, 0x40, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, - 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x9c, 0xac, 0x22, 0xd3, 0x01, 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, + 0x32, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x22, 0x92, 0x41, 0x17, + 0x2a, 0x15, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, + 0x88, 0xe6, 0x9c, 0xac, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x98, 0x01, 0x18, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, + 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, + 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x3a, 0x45, 0x92, 0x41, 0x42, 0x0a, 0x40, 0x2a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x32, 0x24, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe5, 0x8d, 0x95, 0xe4, 0xb8, 0xaa, + 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, + 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0x22, 0xfa, 0x04, 0x0a, 0x14, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x12, 0x31, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0xe5, - 0x88, 0x86, 0xe7, 0xb1, 0xbb, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x08, - 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x33, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x77, - 0x6f, 0x72, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x42, 0x17, 0x92, 0x41, 0x14, 0x2a, - 0x12, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0xe5, 0x85, 0xb3, 0xe9, 0x94, 0xae, - 0xe5, 0xad, 0x97, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x2d, 0x0a, - 0x06, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x15, 0x92, - 0x41, 0x12, 0x2a, 0x10, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0x20, 0x52, 0x45, - 0x41, 0x44, 0x4d, 0x45, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x09, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, 0x42, 0x1d, 0x92, - 0x41, 0x1a, 0x2a, 0x18, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0xe5, 0x8c, 0x85, - 0xe5, 0x90, 0xab, 0xe7, 0x9a, 0x84, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0x52, 0x09, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, - 0xa1, 0xe6, 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0xe9, 0xbb, 0x98, 0xe8, 0xae, 0xa4, 0xe5, 0x80, 0xbc, - 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, - 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x42, 0x11, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe6, 0x98, - 0xaf, 0xe5, 0x90, 0xa6, 0xe8, 0xa6, 0x86, 0xe7, 0x9b, 0x96, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, - 0x65, 0x3a, 0x2c, 0x92, 0x41, 0x29, 0x0a, 0x27, 0x2a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x32, 0x0f, - 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0x22, - 0xe8, 0x01, 0x0a, 0x0a, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, 0x12, 0x4f, - 0x0a, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, - 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, - 0xb9, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, - 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x4d, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, 0x41, 0x1d, 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, - 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, - 0xae, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, - 0x52, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x20, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, - 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, - 0x40, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xd7, 0x02, 0x0a, 0x1c, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, + 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0x92, 0x41, 0x11, 0x2a, 0x0f, + 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0xe6, 0x8f, 0x8f, 0xe8, 0xbf, 0xb0, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3c, 0x0a, 0x0b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, + 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x11, + 0x2a, 0x0f, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0xe7, 0x89, 0x88, 0xe6, 0x9c, + 0xac, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe6, 0xa8, 0xa1, 0xe6, + 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0xe5, 0x88, 0x86, 0xe7, 0xb1, 0xbb, 0xfa, 0x42, 0x06, 0x72, 0x04, + 0x10, 0x01, 0x18, 0x40, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x33, + 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, + 0x42, 0x17, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe9, 0x9b, 0x86, + 0xe5, 0x85, 0xb3, 0xe9, 0x94, 0xae, 0xe5, 0xad, 0x97, 0x52, 0x08, 0x6b, 0x65, 0x79, 0x77, 0x6f, + 0x72, 0x64, 0x73, 0x12, 0x2d, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x15, 0x92, 0x41, 0x12, 0x2a, 0x10, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, + 0xe9, 0x9b, 0x86, 0x20, 0x52, 0x45, 0x41, 0x44, 0x4d, 0x45, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, + 0x6d, 0x65, 0x12, 0x59, 0x0a, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x49, 0x44, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, 0x18, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, + 0xe9, 0x9b, 0x86, 0xe5, 0x8c, 0x85, 0xe5, 0x90, 0xab, 0xe7, 0x9a, 0x84, 0xe6, 0xa8, 0xa1, 0xe6, + 0x9d, 0xbf, 0x52, 0x09, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x0a, + 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0x92, + 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0xe9, 0xbb, 0x98, + 0xe8, 0xae, 0xa4, 0xe5, 0x80, 0xbc, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x27, + 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x42, 0x11, 0x92, + 0x41, 0x0e, 0x2a, 0x0c, 0xe6, 0x98, 0xaf, 0xe5, 0x90, 0xa6, 0xe8, 0xa6, 0x86, 0xe7, 0x9b, 0x96, + 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x3a, 0x2c, 0x92, 0x41, 0x29, 0x0a, 0x27, 0x2a, 0x14, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x32, 0x0f, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe6, 0xa8, 0xa1, 0xe6, + 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0x22, 0xe8, 0x01, 0x0a, 0x0a, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x49, 0x44, 0x12, 0x4f, 0x0a, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, 0x41, 0x1d, + 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, + 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, + 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x4d, 0x0a, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x29, 0x92, 0x41, 0x1d, + 0x2a, 0x1b, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, + 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, + 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0c, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, 0xe6, + 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xfa, 0x42, + 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0xd7, 0x02, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x46, 0x69, 0x6c, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, + 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, + 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x43, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x17, 0x92, 0x41, 0x14, 0x2a, 0x12, + 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x88, 0x97, 0xe8, + 0xa1, 0xa8, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, + 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0x92, 0x41, 0x0b, 0x2a, 0x09, 0xe9, 0x9b, + 0x86, 0xe7, 0xbe, 0xa4, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x0d, 0x18, 0x0e, + 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x38, 0x0a, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, + 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, 0x97, + 0xb4, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x3a, 0x43, 0x92, 0x41, 0x40, 0x0a, 0x3e, 0x2a, 0x1c, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x32, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, + 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x8f, + 0x98, 0xe9, 0x87, 0x8f, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x22, 0xed, 0x03, 0x0a, 0x15, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, + 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, + 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x43, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x17, 0x92, 0x41, + 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, + 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x70, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x2a, 0x15, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, + 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x8f, 0x98, 0xe9, 0x87, 0x8f, 0xe5, 0x80, 0xbc, 0x52, 0x09, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0x92, 0x41, + 0x0b, 0x2a, 0x09, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x06, 0x72, + 0x04, 0x10, 0x0d, 0x18, 0x0e, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, + 0x12, 0x38, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, + 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x3c, 0x0a, 0x0e, 0x56, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x30, 0x92, 0x41, 0x2d, 0x0a, 0x2b, 0x2a, + 0x15, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, + 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x32, 0x12, 0xe9, 0x83, 0xa8, 0xe7, 0xbd, 0xb2, 0xe6, 0xa8, + 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0x22, 0xaf, 0x01, 0x0a, 0x0f, 0x47, + 0x65, 0x74, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x2c, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0x92, 0x41, 0x11, 0x2a, + 0x0f, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0x20, 0x49, 0x44, + 0xfa, 0x42, 0x05, 0x72, 0x03, 0x98, 0x01, 0x18, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, + 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x3a, 0x30, 0x92, 0x41, 0x2d, 0x0a, + 0x2b, 0x2a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x71, 0x32, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, + 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x22, 0x85, 0x01, 0x0a, + 0x11, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, + 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, + 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x3a, 0x32, 0x92, 0x41, 0x2f, 0x0a, 0x2d, 0x2a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x76, + 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x32, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, + 0x8f, 0x96, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0xe5, 0x88, + 0x97, 0xe8, 0xa1, 0xa8, 0x22, 0xa3, 0x02, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, + 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x43, 0x0a, 0x10, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x42, 0x17, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, - 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x52, 0x10, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, - 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x17, 0x92, 0x41, 0x0b, 0x2a, 0x09, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0x20, 0x49, - 0x44, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x0d, 0x18, 0x0e, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x38, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe5, - 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xfa, 0x42, 0x06, 0x72, 0x04, - 0x10, 0x01, 0x18, 0x40, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x3a, - 0x43, 0x92, 0x41, 0x40, 0x0a, 0x3e, 0x2a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x32, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, - 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x8f, 0x98, 0xe9, 0x87, 0x8f, 0xe5, 0x88, - 0x97, 0xe8, 0xa1, 0xa8, 0x22, 0xed, 0x03, 0x0a, 0x15, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, - 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, - 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, - 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x43, 0x0a, 0x10, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x17, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe6, 0xa8, 0xa1, - 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x52, - 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x70, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x2e, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x1a, 0x92, 0x41, - 0x17, 0x2a, 0x15, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, - 0x8f, 0x98, 0xe9, 0x87, 0x8f, 0xe5, 0x80, 0xbc, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0x92, 0x41, 0x0b, 0x2a, 0x09, 0xe9, 0x9b, 0x86, - 0xe7, 0xbe, 0xa4, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x0d, 0x18, 0x0e, 0x52, - 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x38, 0x0a, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, - 0x41, 0x0e, 0x2a, 0x0c, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, - 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x1a, 0x3c, 0x0a, 0x0e, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x3a, 0x30, 0x92, 0x41, 0x2d, 0x0a, 0x2b, 0x2a, 0x15, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x32, 0x12, 0xe9, 0x83, 0xa8, 0xe7, 0xbd, 0xb2, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, - 0x87, 0xe4, 0xbb, 0xb6, 0x22, 0xaf, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x4d, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x76, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe7, 0x8e, 0xaf, + 0xe5, 0xa2, 0x83, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, + 0x18, 0x40, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x72, 0x0a, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x1f, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe5, 0x85, + 0xb3, 0xe8, 0x81, 0x94, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, + 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x00, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x2d, 0x92, 0x41, 0x2a, + 0x0a, 0x28, 0x2a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x32, 0x12, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe7, 0x8e, + 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0x22, 0xd1, 0x02, 0x0a, 0x12, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x12, 0x2c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0x92, + 0x41, 0x11, 0x2a, 0x0f, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, + 0x20, 0x49, 0x44, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x98, 0x01, 0x18, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, + 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, + 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x72, 0x0a, + 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x1f, 0x92, + 0x41, 0x14, 0x2a, 0x12, 0xe5, 0x85, 0xb3, 0xe8, 0x81, 0x94, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, + 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x00, 0x52, 0x11, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, + 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, + 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x3a, + 0x2d, 0x92, 0x41, 0x2a, 0x0a, 0x28, 0x2a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, + 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x32, 0x12, 0xe6, 0x9b, 0xb4, 0xe6, + 0x96, 0xb0, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0x22, 0xe0, + 0x01, 0x0a, 0x12, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x2c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x1c, 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, + 0xa1, 0xe7, 0x90, 0x86, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x98, 0x01, 0x18, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, + 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, + 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, + 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, + 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x3a, + 0x30, 0x92, 0x41, 0x2d, 0x0a, 0x2b, 0x2a, 0x12, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x45, 0x6e, + 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x32, 0x15, 0xe7, 0x8e, 0xaf, 0xe5, + 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0xe9, 0x87, 0x8d, 0xe5, 0x91, 0xbd, 0xe5, 0x90, + 0x8d, 0x22, 0xaf, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x2c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x98, @@ -8278,2895 +8354,2806 @@ var file_cluster_resources_proto_rawDesc = []byte{ 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x3a, 0x30, 0x92, 0x41, 0x2d, 0x0a, 0x2b, 0x2a, 0x0f, 0x47, 0x65, 0x74, - 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x32, 0x18, 0xe8, 0x8e, - 0xb7, 0xe5, 0x8f, 0x96, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, - 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x22, 0x85, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x45, - 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, - 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x3a, 0x32, 0x92, 0x41, 0x2f, 0x0a, - 0x2d, 0x2a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x32, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe7, 0x8e, 0xaf, 0xe5, - 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x22, 0xa3, - 0x02, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x3a, 0x2d, 0x92, 0x41, 0x2a, 0x0a, 0x28, 0x2a, 0x12, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x32, + 0x12, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, + 0xe7, 0x90, 0x86, 0x22, 0x9a, 0x06, 0x0a, 0x1c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, + 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, + 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x75, 0x0a, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x42, 0x22, 0x92, 0x41, 0x17, 0x2a, 0x15, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe5, + 0x92, 0x8c, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xfa, 0x42, + 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe8, 0xb5, + 0x84, 0xe6, 0xba, 0x90, 0xe7, 0xb1, 0xbb, 0xe5, 0x9e, 0x8b, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, + 0x01, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x23, 0x0a, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, + 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0x92, 0x41, 0x08, 0x2a, 0x06, 0x76, 0x69, + 0x65, 0x77, 0x49, 0x44, 0x52, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x07, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0x92, + 0x41, 0x09, 0x2a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x5b, 0x0a, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x14, 0x92, 0x41, + 0x11, 0x2a, 0x0f, 0xe6, 0xa0, 0x87, 0xe7, 0xad, 0xbe, 0xe9, 0x80, 0x89, 0xe6, 0x8b, 0xa9, 0xe5, + 0x99, 0xa8, 0x52, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x12, 0x1d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x09, 0x92, 0x41, 0x06, 0x2a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x17, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0x92, 0x41, + 0x04, 0x2a, 0x02, 0x69, 0x70, 0x52, 0x02, 0x69, 0x70, 0x12, 0x23, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0b, 0x92, 0x41, 0x08, 0x2a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x40, + 0x0a, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, + 0x92, 0x41, 0x08, 0x2a, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0xfa, 0x42, 0x1a, 0x72, 0x18, + 0x52, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x03, 0x61, 0x67, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, + 0x12, 0x31, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x1b, 0x92, 0x41, 0x06, 0x2a, 0x04, 0x64, 0x65, 0x73, 0x63, 0xfa, 0x42, 0x0f, 0x72, 0x0d, 0x52, + 0x00, 0x52, 0x03, 0x61, 0x73, 0x63, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x52, 0x05, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x0d, 0x42, 0x14, 0x92, 0x41, 0x07, 0x2a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0xfa, 0x42, + 0x07, 0x2a, 0x05, 0x18, 0xe8, 0x07, 0x28, 0x01, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x2a, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x42, + 0x12, 0x92, 0x41, 0x08, 0x2a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xfa, 0x42, 0x04, 0x2a, + 0x02, 0x28, 0x00, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3a, 0x43, 0x92, 0x41, 0x40, + 0x0a, 0x3e, 0x2a, 0x1c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x32, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe5, 0xa4, 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, + 0xa4, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe8, 0xaf, 0xb7, 0xe6, 0xb1, 0x82, 0xe4, 0xbd, 0x93, + 0x22, 0xde, 0x03, 0x0a, 0x20, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, - 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe5, 0x90, 0x8d, - 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x03, 0x65, 0x6e, - 0x76, 0x12, 0x72, 0x0a, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x42, 0x1f, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe5, 0x85, 0xb3, 0xe8, 0x81, 0x94, 0xe5, 0x91, - 0xbd, 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, - 0x08, 0x00, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x2d, 0x92, 0x41, 0x2a, 0x0a, 0x28, 0x2a, 0x12, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x32, 0x12, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, - 0xa1, 0xe7, 0x90, 0x86, 0x22, 0xd1, 0x02, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, - 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x2c, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe7, 0x8e, - 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x05, - 0x72, 0x03, 0x98, 0x01, 0x18, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, + 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x12, 0x75, 0x0a, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x42, 0x22, 0x92, 0x41, 0x17, 0x2a, 0x15, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, + 0xe5, 0x92, 0x8c, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xfa, + 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x6e, + 0x6c, 0x79, 0x43, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, 0x1d, 0x92, 0x41, 0x1a, + 0x2a, 0x18, 0xe6, 0x98, 0xaf, 0xe5, 0x90, 0xa6, 0xe5, 0x8f, 0xaa, 0xe5, 0x88, 0x97, 0xe5, 0x87, + 0xba, 0x63, 0x72, 0x64, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x52, 0x07, 0x6f, 0x6e, 0x6c, 0x79, + 0x43, 0x72, 0x64, 0x12, 0x23, 0x0a, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0b, 0x92, 0x41, 0x08, 0x2a, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, + 0x52, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x12, 0x5b, 0x0a, 0x0d, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x42, 0x14, 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe6, 0xa0, 0x87, 0xe7, 0xad, 0xbe, 0xe9, 0x80, 0x89, + 0xe6, 0x8b, 0xa9, 0xe5, 0x99, 0xa8, 0x52, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x3a, 0x4a, 0x92, 0x41, 0x47, 0x0a, 0x45, 0x2a, 0x20, 0x46, 0x65, + 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, + 0x70, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x32, 0x21, + 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe5, 0xa4, 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0x61, + 0x70, 0x69, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe8, 0xaf, 0xb7, 0xe6, 0xb1, 0x82, 0xe4, 0xbd, + 0x93, 0x22, 0xa4, 0x06, 0x0a, 0x22, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, + 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, + 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x75, 0x0a, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x22, 0x92, 0x41, 0x17, 0x2a, 0x15, 0xe9, 0x9b, 0x86, + 0xe7, 0xbe, 0xa4, 0xe5, 0x92, 0x8c, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, + 0x97, 0xb4, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x21, 0x0a, + 0x03, 0x63, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0f, 0x92, 0x41, 0x05, 0x2a, + 0x03, 0x63, 0x72, 0x64, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x63, 0x72, 0x64, + 0x12, 0x23, 0x0a, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0b, 0x92, 0x41, 0x08, 0x2a, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x52, 0x06, 0x76, + 0x69, 0x65, 0x77, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0x92, 0x41, 0x09, 0x2a, 0x07, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x5b, 0x0a, + 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x06, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x14, 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe6, 0xa0, 0x87, 0xe7, + 0xad, 0xbe, 0xe9, 0x80, 0x89, 0xe6, 0x8b, 0xa9, 0xe5, 0x99, 0xa8, 0x52, 0x0d, 0x6c, 0x61, 0x62, + 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0x92, 0x41, 0x06, 0x2a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x70, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0x92, 0x41, 0x04, 0x2a, 0x02, 0x69, 0x70, 0x52, 0x02, + 0x69, 0x70, 0x12, 0x23, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x09, 0x42, 0x0b, 0x92, 0x41, 0x08, 0x2a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x40, 0x0a, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, + 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0x92, 0x41, 0x08, 0x2a, 0x06, 0x73, 0x6f, + 0x72, 0x74, 0x42, 0x79, 0xfa, 0x42, 0x1a, 0x72, 0x18, 0x52, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x03, 0x61, 0x67, + 0x65, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1b, 0x92, 0x41, 0x06, 0x2a, 0x04, 0x64, + 0x65, 0x73, 0x63, 0xfa, 0x42, 0x0f, 0x72, 0x0d, 0x52, 0x00, 0x52, 0x03, 0x61, 0x73, 0x63, 0x52, + 0x04, 0x64, 0x65, 0x73, 0x63, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x14, 0x92, 0x41, 0x07, + 0x2a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0xfa, 0x42, 0x07, 0x2a, 0x05, 0x18, 0xe8, 0x07, 0x28, + 0x01, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x12, 0x92, 0x41, 0x08, 0x2a, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x28, 0x00, 0x52, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x3a, 0x52, 0x92, 0x41, 0x4f, 0x0a, 0x4d, 0x2a, 0x22, 0x46, 0x65, 0x74, + 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x32, + 0x27, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe5, 0xa4, 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, + 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe8, + 0xaf, 0xb7, 0xe6, 0xb1, 0x82, 0xe4, 0xbd, 0x93, 0x22, 0xe7, 0x03, 0x0a, 0x1c, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, - 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x72, 0x0a, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x75, 0x0a, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x1f, 0x92, 0x41, 0x14, 0x2a, 0x12, 0xe5, 0x85, - 0xb3, 0xe8, 0x81, 0x94, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, - 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x00, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x03, 0x65, - 0x6e, 0x76, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe7, - 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, - 0x10, 0x01, 0x18, 0x40, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x3a, 0x2d, 0x92, 0x41, 0x2a, 0x0a, 0x28, - 0x2a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x32, 0x12, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0xe7, 0x8e, 0xaf, 0xe5, - 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0x22, 0xe0, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x6e, - 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, - 0x2c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0x92, 0x41, 0x11, - 0x2a, 0x0f, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0x20, 0x49, - 0x44, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x98, 0x01, 0x18, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3c, 0x0a, - 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, - 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x0b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x03, 0x65, - 0x6e, 0x76, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe7, - 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xfa, 0x42, 0x06, 0x72, 0x04, - 0x10, 0x01, 0x18, 0x40, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x3a, 0x30, 0x92, 0x41, 0x2d, 0x0a, 0x2b, - 0x2a, 0x12, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x32, 0x15, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, - 0x90, 0x86, 0xe9, 0x87, 0x8d, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0x22, 0xaf, 0x01, 0x0a, 0x12, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x12, 0x2c, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, - 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, - 0x86, 0x20, 0x49, 0x44, 0xfa, 0x42, 0x05, 0x72, 0x03, 0x98, 0x01, 0x18, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, - 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, - 0x20, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x3a, 0x2d, - 0x92, 0x41, 0x2a, 0x0a, 0x28, 0x2a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6e, 0x76, - 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x32, 0x12, 0xe5, 0x88, 0xa0, 0xe9, 0x99, - 0xa4, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0x22, 0x9a, 0x06, - 0x0a, 0x1c, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, - 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, - 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, 0x52, - 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x75, 0x0a, 0x11, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x22, 0x92, 0x41, - 0x17, 0x2a, 0x15, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe5, 0x92, 0x8c, 0xe5, 0x91, 0xbd, 0xe5, - 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, - 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x18, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe7, 0xb1, - 0xbb, 0xe5, 0x9e, 0x8b, 0xfa, 0x42, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6b, 0x69, 0x6e, - 0x64, 0x12, 0x23, 0x0a, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x0b, 0x92, 0x41, 0x08, 0x2a, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x52, 0x06, - 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, - 0x72, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0x92, 0x41, 0x09, 0x2a, 0x07, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x5b, - 0x0a, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x14, 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe6, 0xa0, 0x87, - 0xe7, 0xad, 0xbe, 0xe9, 0x80, 0x89, 0xe6, 0x8b, 0xa9, 0xe5, 0x99, 0xa8, 0x52, 0x0d, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0x92, 0x41, 0x06, 0x2a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x70, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0x92, 0x41, 0x04, 0x2a, 0x02, 0x69, 0x70, 0x52, - 0x02, 0x69, 0x70, 0x12, 0x23, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, - 0x03, 0x28, 0x09, 0x42, 0x0b, 0x92, 0x41, 0x08, 0x2a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x40, 0x0a, 0x06, 0x73, 0x6f, 0x72, 0x74, - 0x42, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x28, 0x92, 0x41, 0x08, 0x2a, 0x06, 0x73, - 0x6f, 0x72, 0x74, 0x42, 0x79, 0xfa, 0x42, 0x1a, 0x72, 0x18, 0x52, 0x00, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x03, 0x61, - 0x67, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x6f, 0x72, - 0x64, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1b, 0x92, 0x41, 0x06, 0x2a, 0x04, - 0x64, 0x65, 0x73, 0x63, 0xfa, 0x42, 0x0f, 0x72, 0x0d, 0x52, 0x00, 0x52, 0x03, 0x61, 0x73, 0x63, - 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2a, 0x0a, - 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x14, 0x92, 0x41, - 0x07, 0x2a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0xfa, 0x42, 0x07, 0x2a, 0x05, 0x18, 0xe8, 0x07, - 0x28, 0x01, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x12, 0x92, 0x41, 0x08, 0x2a, 0x06, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xfa, 0x42, 0x04, 0x2a, 0x02, 0x28, 0x00, 0x52, 0x06, 0x6f, - 0x66, 0x66, 0x73, 0x65, 0x74, 0x3a, 0x43, 0x92, 0x41, 0x40, 0x0a, 0x3e, 0x2a, 0x1c, 0x46, 0x65, - 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x32, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, - 0x8f, 0x96, 0xe5, 0xa4, 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe8, 0xb5, 0x84, 0xe6, 0xba, - 0x90, 0xe8, 0xaf, 0xb7, 0xe6, 0xb1, 0x82, 0xe4, 0xbd, 0x93, 0x22, 0xde, 0x03, 0x0a, 0x20, 0x46, - 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x41, 0x70, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, - 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, - 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x40, - 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x75, 0x0a, - 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x22, 0x92, - 0x41, 0x17, 0x2a, 0x15, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe5, 0x92, 0x8c, 0xe5, 0x91, 0xbd, - 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, - 0x01, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x6e, 0x6c, 0x79, 0x43, 0x72, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, 0x18, 0xe6, 0x98, 0xaf, 0xe5, - 0x90, 0xa6, 0xe5, 0x8f, 0xaa, 0xe5, 0x88, 0x97, 0xe5, 0x87, 0xba, 0x63, 0x72, 0x64, 0xe8, 0xb5, - 0x84, 0xe6, 0xba, 0x90, 0x52, 0x07, 0x6f, 0x6e, 0x6c, 0x79, 0x43, 0x72, 0x64, 0x12, 0x23, 0x0a, - 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0x92, - 0x41, 0x08, 0x2a, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x52, 0x06, 0x76, 0x69, 0x65, 0x77, - 0x49, 0x44, 0x12, 0x5b, 0x0a, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x14, 0x92, 0x41, 0x11, 0x2a, - 0x0f, 0xe6, 0xa0, 0x87, 0xe7, 0xad, 0xbe, 0xe9, 0x80, 0x89, 0xe6, 0x8b, 0xa9, 0xe5, 0x99, 0xa8, - 0x52, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x3a, - 0x4a, 0x92, 0x41, 0x47, 0x0a, 0x45, 0x2a, 0x20, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x69, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x32, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, - 0xe5, 0xa4, 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0x61, 0x70, 0x69, 0xe8, 0xb5, 0x84, 0xe6, - 0xba, 0x90, 0xe8, 0xaf, 0xb7, 0xe6, 0xb1, 0x82, 0xe4, 0xbd, 0x93, 0x22, 0xa4, 0x06, 0x0a, 0x22, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, 0xa1, - 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, 0x10, - 0x01, 0x18, 0x40, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x12, 0x75, 0x0a, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x42, 0x22, 0x92, 0x41, 0x17, 0x2a, 0x15, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe5, 0x92, 0x8c, - 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xfa, 0x42, 0x05, 0x92, - 0x01, 0x02, 0x08, 0x01, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x03, 0x63, 0x72, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x0f, 0x92, 0x41, 0x05, 0x2a, 0x03, 0x63, 0x72, 0x64, 0xfa, 0x42, - 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x63, 0x72, 0x64, 0x12, 0x23, 0x0a, 0x06, 0x76, 0x69, - 0x65, 0x77, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0x92, 0x41, 0x08, 0x2a, - 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x52, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x12, - 0x26, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, - 0x42, 0x0c, 0x92, 0x41, 0x09, 0x2a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x5b, 0x0a, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x22, 0x92, 0x41, 0x17, 0x2a, 0x15, 0xe9, 0x9b, + 0x86, 0xe7, 0xbe, 0xa4, 0xe5, 0x92, 0x8c, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, + 0xe9, 0x97, 0xb4, 0xfa, 0x42, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x11, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x23, + 0x0a, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, + 0x92, 0x41, 0x08, 0x2a, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x52, 0x06, 0x76, 0x69, 0x65, + 0x77, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0x92, 0x41, 0x09, 0x2a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x6f, 0x72, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x5b, 0x0a, 0x0d, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x42, 0x14, 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe6, 0xa0, 0x87, 0xe7, 0xad, 0xbe, + 0xe9, 0x80, 0x89, 0xe6, 0x8b, 0xa9, 0xe5, 0x99, 0xa8, 0x52, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0x92, 0x41, 0x06, 0x2a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x49, 0x92, 0x41, 0x46, 0x0a, 0x44, 0x2a, 0x1c, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x32, 0x24, 0xe8, 0x8e, + 0xb7, 0xe5, 0x8f, 0x96, 0xe5, 0xa4, 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe8, 0xb5, 0x84, + 0xe6, 0xba, 0x90, 0xe6, 0x95, 0xb0, 0xe9, 0x87, 0x8f, 0xe8, 0xaf, 0xb7, 0xe6, 0xb1, 0x82, 0xe4, + 0xbd, 0x93, 0x2a, 0x37, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, + 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x32, 0x9a, 0x05, 0x0a, 0x05, + 0x42, 0x61, 0x73, 0x69, 0x63, 0x12, 0x92, 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x19, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x42, - 0x14, 0x92, 0x41, 0x11, 0x2a, 0x0f, 0xe6, 0xa0, 0x87, 0xe7, 0xad, 0xbe, 0xe9, 0x80, 0x89, 0xe6, - 0x8b, 0xa9, 0xe5, 0x99, 0xa8, 0x52, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x09, 0x92, 0x41, 0x06, 0x2a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x07, 0x92, 0x41, 0x04, 0x2a, 0x02, 0x69, 0x70, 0x52, 0x02, 0x69, 0x70, 0x12, 0x23, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0b, 0x92, 0x41, - 0x08, 0x2a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x40, 0x0a, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x28, 0x92, 0x41, 0x08, 0x2a, 0x06, 0x73, 0x6f, 0x72, 0x74, 0x42, 0x79, 0xfa, 0x42, - 0x1a, 0x72, 0x18, 0x52, 0x00, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x03, 0x61, 0x67, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x72, - 0x74, 0x42, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x1b, 0x92, 0x41, 0x06, 0x2a, 0x04, 0x64, 0x65, 0x73, 0x63, 0xfa, 0x42, 0x0f, - 0x72, 0x0d, 0x52, 0x00, 0x52, 0x03, 0x61, 0x73, 0x63, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x52, - 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x14, 0x92, 0x41, 0x07, 0x2a, 0x05, 0x6c, 0x69, 0x6d, 0x69, - 0x74, 0xfa, 0x42, 0x07, 0x2a, 0x05, 0x18, 0xe8, 0x07, 0x28, 0x01, 0x52, 0x05, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x0d, 0x42, 0x12, 0x92, 0x41, 0x08, 0x2a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0xfa, - 0x42, 0x04, 0x2a, 0x02, 0x28, 0x00, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3a, 0x52, - 0x92, 0x41, 0x4f, 0x0a, 0x4d, 0x2a, 0x22, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x32, 0x27, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, - 0x96, 0xe5, 0xa4, 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, - 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe8, 0xaf, 0xb7, 0xe6, 0xb1, 0x82, 0xe4, - 0xbd, 0x93, 0x22, 0xe7, 0x03, 0x0a, 0x1c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x0e, 0x2a, 0x0c, 0xe9, - 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0xe7, 0xbc, 0x96, 0xe7, 0xa0, 0x81, 0xfa, 0x42, 0x06, 0x72, 0x04, - 0x10, 0x01, 0x18, 0x40, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x12, 0x75, 0x0a, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x42, 0x22, 0x92, 0x41, 0x17, 0x2a, 0x15, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe5, 0x92, - 0x8c, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xfa, 0x42, 0x05, - 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x06, 0x76, 0x69, 0x65, 0x77, - 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0x92, 0x41, 0x08, 0x2a, 0x06, 0x76, - 0x69, 0x65, 0x77, 0x49, 0x44, 0x52, 0x06, 0x76, 0x69, 0x65, 0x77, 0x49, 0x44, 0x12, 0x26, 0x0a, - 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, - 0x92, 0x41, 0x09, 0x2a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x5b, 0x0a, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x14, 0x92, - 0x41, 0x11, 0x2a, 0x0f, 0xe6, 0xa0, 0x87, 0xe7, 0xad, 0xbe, 0xe9, 0x80, 0x89, 0xe6, 0x8b, 0xa9, - 0xe5, 0x99, 0xa8, 0x52, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x09, 0x92, 0x41, 0x06, 0x2a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x3a, 0x49, 0x92, 0x41, 0x46, 0x0a, 0x44, 0x2a, 0x1c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x32, 0x24, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe5, 0xa4, - 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe6, 0x95, 0xb0, - 0xe9, 0x87, 0x8f, 0xe8, 0xaf, 0xb7, 0xe6, 0xb1, 0x82, 0xe4, 0xbd, 0x93, 0x2a, 0x37, 0x0a, 0x0b, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x10, - 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x56, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x32, 0x9a, 0x05, 0x0a, 0x05, 0x42, 0x61, 0x73, 0x69, 0x63, 0x12, - 0x92, 0x01, 0x0a, 0x04, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x19, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x45, 0x63, 0x68, 0x6f, - 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, 0x19, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x63, - 0x68, 0x6f, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2c, 0x12, 0x08, 0x45, 0x63, 0x68, 0x6f, 0x20, 0x41, - 0x50, 0x49, 0x1a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0xe6, 0x8e, 0xa5, 0xe5, 0x8f, 0xa3, 0xef, - 0xbc, 0x8c, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, 0xe5, 0xbc, 0x80, 0xe5, 0x8f, 0x91, 0xe6, 0xb5, - 0x8b, 0xe8, 0xaf, 0x95, 0x12, 0x9b, 0x01, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x19, 0x2e, + 0x73, 0x2e, 0x45, 0x63, 0x68, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x45, 0x63, 0x68, + 0x6f, 0x52, 0x65, 0x73, 0x70, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x22, 0x19, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x6e, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x5c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x92, 0x41, 0x38, 0x12, 0x08, 0x50, 0x69, 0x6e, 0x67, - 0x20, 0x41, 0x50, 0x49, 0x1a, 0x2c, 0x50, 0x69, 0x6e, 0x67, 0x20, 0xe6, 0x8e, 0xa5, 0xe5, 0x8f, - 0xa3, 0xef, 0xbc, 0x8c, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, 0xe6, 0xa3, 0x80, 0xe6, 0x9f, 0xa5, - 0xe6, 0x9c, 0x8d, 0xe5, 0x8a, 0xa1, 0xe6, 0x98, 0xaf, 0xe5, 0x90, 0xa6, 0xe5, 0xad, 0x98, 0xe6, - 0xb4, 0xbb, 0x12, 0xad, 0x01, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x12, 0x1c, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x63, 0x68, 0x6f, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2c, 0x12, 0x08, + 0x45, 0x63, 0x68, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x20, 0x45, 0x63, 0x68, 0x6f, 0x20, 0xe6, + 0x8e, 0xa5, 0xe5, 0x8f, 0xa3, 0xef, 0xbc, 0x8c, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, 0xe5, 0xbc, + 0x80, 0xe5, 0x8f, 0x91, 0xe6, 0xb5, 0x8b, 0xe8, 0xaf, 0x95, 0x12, 0x9b, 0x01, 0x0a, 0x04, 0x50, + 0x69, 0x6e, 0x67, 0x12, 0x19, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, - 0x7a, 0x92, 0x41, 0x3e, 0x12, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x20, 0x41, 0x50, - 0x49, 0x1a, 0x2f, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x20, 0xe6, 0x8e, 0xa5, 0xe5, 0x8f, - 0xa3, 0xef, 0xbc, 0x8c, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, 0xe6, 0xa3, 0x80, 0xe6, 0x9f, 0xa5, - 0xe6, 0x9c, 0x8d, 0xe5, 0x8a, 0xa1, 0xe5, 0x81, 0xa5, 0xe5, 0xba, 0xb7, 0xe7, 0x8a, 0xb6, 0xe6, - 0x80, 0x81, 0x12, 0xad, 0x01, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, + 0x73, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x92, 0x41, 0x38, + 0x12, 0x08, 0x50, 0x69, 0x6e, 0x67, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x2c, 0x50, 0x69, 0x6e, 0x67, + 0x20, 0xe6, 0x8e, 0xa5, 0xe5, 0x8f, 0xa3, 0xef, 0xbc, 0x8c, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, + 0xe6, 0xa3, 0x80, 0xe6, 0x9f, 0xa5, 0xe6, 0x9c, 0x8d, 0xe5, 0x8a, 0xa1, 0xe6, 0x98, 0xaf, 0xe5, + 0x90, 0xa6, 0xe5, 0xad, 0x98, 0xe6, 0xb4, 0xbb, 0x12, 0xad, 0x01, 0x0a, 0x07, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x7a, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x52, + 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, 0x92, 0x41, 0x3e, 0x12, 0x0b, 0x48, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x7a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x2f, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x7a, + 0x20, 0xe6, 0x8e, 0xa5, 0xe5, 0x8f, 0xa3, 0xef, 0xbc, 0x8c, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, + 0xe6, 0xa3, 0x80, 0xe6, 0x9f, 0xa5, 0xe6, 0x9c, 0x8d, 0xe5, 0x8a, 0xa1, 0xe5, 0x81, 0xa5, 0xe5, + 0xba, 0xb7, 0xe7, 0x8a, 0xb6, 0xe6, 0x80, 0x81, 0x12, 0xad, 0x01, 0x0a, 0x07, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x92, 0x41, 0x3e, 0x12, 0x0b, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x2f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x20, 0xe6, 0x8e, 0xa5, 0xe5, 0x8f, 0xa3, 0xef, 0xbc, 0x8c, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, + 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0x9c, 0x8d, 0xe5, 0x8a, 0xa1, 0xe7, 0x89, 0x88, 0xe6, + 0x9c, 0xac, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x32, 0xc2, 0x01, 0x0a, 0x04, 0x4e, 0x6f, 0x64, + 0x65, 0x12, 0xb9, 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x63, + 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x1e, 0x12, 0x1c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x92, 0x41, 0x3e, 0x12, 0x0b, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x50, - 0x49, 0x1a, 0x2f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0xe6, 0x8e, 0xa5, 0xe5, 0x8f, - 0xa3, 0xef, 0xbc, 0x8c, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, - 0xe6, 0x9c, 0x8d, 0xe5, 0x8a, 0xa1, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xe4, 0xbf, 0xa1, 0xe6, - 0x81, 0xaf, 0x32, 0xc2, 0x01, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0xb9, 0x01, 0x0a, 0x08, - 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x12, 0x44, 0x2f, 0x63, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x46, 0x12, 0x44, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, + 0x44, 0x7d, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x92, 0x41, 0x22, 0x12, 0x0c, 0x4c, 0x69, 0x73, + 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x12, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, + 0x96, 0xe8, 0x8a, 0x82, 0xe7, 0x82, 0xb9, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x32, 0xce, 0x01, + 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0xc0, 0x01, 0x0a, 0x06, + 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x53, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x7a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x92, 0x41, 0x26, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x53, + 0x20, 0x41, 0x50, 0x49, 0x1a, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe5, 0x91, 0xbd, 0xe5, + 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, 0x97, 0xb4, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x32, 0x9a, + 0x6d, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0xeb, 0x01, 0x0a, 0x0a, + 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa0, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6d, 0x12, + 0x6b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, + 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x92, 0x41, 0x2a, 0x12, + 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, 0x49, 0x1a, + 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xe8, 0x01, 0x0a, 0x09, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x9f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x12, 0x72, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, + 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, + 0x41, 0x22, 0x12, 0x0d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, + 0x49, 0x1a, 0x11, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xd6, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x87, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x59, 0x22, 0x54, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x6f, 0x64, - 0x65, 0x73, 0x92, 0x41, 0x22, 0x12, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x20, - 0x41, 0x50, 0x49, 0x1a, 0x12, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe8, 0x8a, 0x82, 0xe7, 0x82, - 0xb9, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x32, 0xce, 0x01, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0xc0, 0x01, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x53, - 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x77, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x25, 0x12, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x11, 0xe5, 0x88, 0x9b, 0xe5, + 0xbb, 0xba, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xf4, 0x01, + 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1e, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7a, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa5, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x77, 0x1a, 0x72, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, + 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, + 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x25, 0x12, + 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, + 0x49, 0x1a, 0x11, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x85, 0x02, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb4, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7f, 0x1a, 0x7a, + 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2c, + 0x12, 0x11, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, + 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe9, 0x87, 0x8d, 0xe6, 0x96, 0xb0, 0xe8, 0xb0, 0x83, 0xe5, 0xba, + 0xa6, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xa9, 0x02, 0x0a, + 0x13, 0x50, 0x61, 0x75, 0x73, 0x65, 0x4f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x25, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x50, 0x61, 0x75, 0x73, 0x65, + 0x4f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xcc, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x8d, 0x01, 0x1a, 0x87, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x92, - 0x41, 0x26, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x18, - 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0xe7, 0xa9, 0xba, 0xe9, - 0x97, 0xb4, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x32, 0x9a, 0x6d, 0x0a, 0x08, 0x57, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0xeb, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x72, + 0x65, 0x73, 0x75, 0x6d, 0x65, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x01, 0x2a, + 0x92, 0x41, 0x35, 0x12, 0x17, 0x50, 0x61, 0x75, 0x73, 0x65, 0x4f, 0x72, 0x52, 0x65, 0x73, 0x75, + 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1a, 0xe6, 0x9a, + 0x82, 0xe5, 0x81, 0x9c, 0xe6, 0x88, 0x96, 0xe6, 0x81, 0xa2, 0xe5, 0xa4, 0x8d, 0x20, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xfa, 0x01, 0x0a, 0x0b, 0x53, 0x63, 0x61, + 0x6c, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x53, + 0x63, 0x61, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xad, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7d, 0x1a, 0x78, + 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x27, 0x12, 0x0f, + 0x53, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, 0x49, 0x1a, + 0x14, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0xe6, 0x89, 0xa9, 0xe7, + 0xbc, 0xa9, 0xe5, 0xae, 0xb9, 0x12, 0xa9, 0x02, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x50, 0x6f, 0x12, 0x27, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x52, 0x65, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x22, 0xcb, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x82, 0x01, 0x1a, 0x7d, 0x2f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x92, + 0x41, 0x3f, 0x12, 0x16, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x50, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x25, 0xe9, 0x87, 0x8d, 0xe6, + 0x96, 0xb0, 0xe8, 0xb0, 0x83, 0xe5, 0xba, 0xa6, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x20, 0xe4, 0xb8, 0x8b, 0xe5, 0xb1, 0x9e, 0xe7, 0x9a, 0x84, 0x20, 0x50, 0x6f, + 0x64, 0x12, 0xf1, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x22, 0xa0, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6d, 0x12, 0x6b, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x22, 0xa2, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x2a, 0x72, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x92, 0x41, 0x2a, 0x12, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, - 0x96, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0xe5, 0x88, 0x97, - 0xe8, 0xa1, 0xa8, 0x12, 0xe8, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9f, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x12, 0x72, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x22, 0x12, 0x0d, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x11, 0xe8, 0x8e, 0xb7, - 0xe5, 0x8f, 0x96, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xd6, - 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, - 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x87, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x59, 0x22, 0x54, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, - 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, - 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x92, - 0x41, 0x25, 0x12, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x20, 0x41, 0x50, 0x49, 0x1a, 0x11, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xf4, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x25, + 0x12, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, + 0x50, 0x49, 0x1a, 0x11, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xa2, 0x02, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x48, 0x69, 0x73, 0x74, + 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0xbf, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x7c, 0x12, 0x7a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, + 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x92, 0x41, 0x3a, + 0x12, 0x1c, 0x47, 0x65, 0x74, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1a, + 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xb6, 0x02, 0x0a, 0x15, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x44, 0x69, 0x66, 0x66, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xd8, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x8a, 0x01, 0x12, 0x87, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x92, 0x41, 0x44, 0x12, + 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x25, 0xe8, 0x8e, + 0xb7, 0xe5, 0x8f, 0x96, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0xe5, 0xb7, 0xae, 0xe5, 0xbc, 0x82, 0xe4, 0xbf, 0xa1, + 0xe6, 0x81, 0xaf, 0x12, 0xaa, 0x02, 0x0a, 0x15, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x22, 0xcc, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x8b, 0x01, 0x1a, 0x85, 0x01, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x2f, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x37, 0x12, 0x19, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, + 0x75, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1a, 0xe5, 0x9b, 0x9e, 0xe6, 0xbb, 0x9a, 0x20, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0xe4, 0x01, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x53, 0x12, 0x1c, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, + 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6d, + 0x12, 0x6b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, + 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x73, 0x2f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x65, 0x74, 0x73, 0x92, 0x41, 0x27, + 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x19, 0xe8, 0x8e, + 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x53, 0x65, 0x74, + 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xe1, 0x01, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, + 0x44, 0x53, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9a, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6c, 0x12, 0x6a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x73, + 0x65, 0x74, 0x73, 0x92, 0x41, 0x25, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x53, 0x20, 0x41, + 0x50, 0x49, 0x1a, 0x17, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x53, 0x65, 0x74, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xde, 0x01, 0x0a, 0x05, + 0x47, 0x65, 0x74, 0x44, 0x53, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, + 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x99, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x73, 0x12, 0x71, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, + 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1d, 0x12, + 0x09, 0x47, 0x65, 0x74, 0x44, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe8, 0x8e, 0xb7, 0xe5, + 0x8f, 0x96, 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0xcc, 0x01, 0x0a, + 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x53, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x81, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x58, + 0x22, 0x53, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, + 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, + 0x6e, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x20, 0x12, 0x0c, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x44, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, + 0xba, 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0xea, 0x01, 0x0a, 0x08, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x53, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa5, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x77, 0x1a, - 0x72, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x76, 0x1a, + 0x71, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, - 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x25, 0x12, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x11, 0xe6, 0x9b, 0xb4, - 0xe6, 0x96, 0xb0, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x85, - 0x02, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, - 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, - 0xb4, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7f, 0x1a, 0x7a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, - 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2c, 0x12, 0x11, 0x52, 0x65, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe9, - 0x87, 0x8d, 0xe6, 0x96, 0xb0, 0xe8, 0xb0, 0x83, 0xe5, 0xba, 0xa6, 0x20, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0xa9, 0x02, 0x0a, 0x13, 0x50, 0x61, 0x75, 0x73, 0x65, - 0x4f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x25, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x50, 0x61, 0x75, 0x73, 0x65, 0x4f, 0x72, 0x52, 0x65, 0x73, 0x75, - 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x22, 0xcc, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x8d, 0x01, 0x1a, 0x87, 0x01, + 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x20, 0x12, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x44, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x44, + 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0xff, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x44, 0x53, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb2, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7e, 0x1a, 0x79, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x2f, 0x70, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x2f, - 0x7b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x35, 0x12, 0x17, 0x50, - 0x61, 0x75, 0x73, 0x65, 0x4f, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1a, 0xe6, 0x9a, 0x82, 0xe5, 0x81, 0x9c, 0xe6, 0x88, - 0x96, 0xe6, 0x81, 0xa2, 0xe5, 0xa4, 0x8d, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x12, 0xfa, 0x01, 0x0a, 0x0b, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x12, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x65, + 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2b, 0x12, + 0x11, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, + 0x50, 0x49, 0x1a, 0x16, 0xe9, 0x87, 0x8d, 0xe6, 0x96, 0xb0, 0xe8, 0xb0, 0x83, 0xe5, 0xba, 0xa6, + 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x98, 0x02, 0x0a, 0x14, 0x47, + 0x65, 0x74, 0x44, 0x53, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x48, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb9, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x7b, 0x12, 0x79, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, + 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, + 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x92, 0x41, 0x35, + 0x12, 0x18, 0x47, 0x65, 0x74, 0x44, 0x53, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x19, 0xe8, 0x8e, 0xb7, 0xe5, + 0x8f, 0x96, 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x20, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xab, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x44, 0x53, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x66, 0x66, 0x12, 0x24, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, + 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, - 0xad, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7d, 0x1a, 0x78, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0xd1, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x89, 0x01, 0x12, 0x86, 0x01, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, + 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x7d, 0x92, 0x41, 0x3e, 0x12, 0x15, 0x47, 0x65, 0x74, 0x44, 0x53, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x66, 0x66, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x25, 0xe8, 0x8e, + 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x20, 0x72, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0xe5, 0xb7, 0xae, 0xe5, 0xbc, 0x82, 0xe4, 0xbf, 0xa1, + 0xe6, 0x81, 0xaf, 0x12, 0xa0, 0x02, 0x0a, 0x11, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x44, + 0x53, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x6f, 0x6c, + 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xc6, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x8a, 0x01, 0x1a, 0x84, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, - 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x27, 0x12, 0x0f, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x14, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0xe6, 0x89, 0xa9, 0xe7, 0xbc, 0xa9, 0xe5, 0xae, 0xb9, 0x12, - 0xa9, 0x02, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x50, 0x6f, 0x12, 0x27, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xcb, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x82, 0x01, 0x1a, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x3f, 0x12, 0x16, 0x52, 0x65, - 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x50, 0x6f, - 0x20, 0x41, 0x50, 0x49, 0x1a, 0x25, 0xe9, 0x87, 0x8d, 0xe6, 0x96, 0xb0, 0xe8, 0xb0, 0x83, 0xe5, - 0xba, 0xa6, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0xe4, 0xb8, - 0x8b, 0xe5, 0xb1, 0x9e, 0xe7, 0x9a, 0x84, 0x20, 0x50, 0x6f, 0x64, 0x12, 0xf1, 0x01, 0x0a, 0x0c, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1e, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa2, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x74, 0x2a, 0x72, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x25, 0x12, 0x10, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x11, 0xe5, 0x88, - 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, - 0xa2, 0x02, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x48, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, - 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x22, 0xbf, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7c, 0x12, 0x7a, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x92, 0x41, 0x3a, 0x12, 0x1c, 0x47, 0x65, 0x74, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1a, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, - 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xb6, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x66, 0x66, 0x12, 0x24, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x22, 0xd8, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x8a, 0x01, 0x12, 0x87, 0x01, 0x2f, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x92, 0x41, 0x44, 0x12, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x25, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0xe5, 0xb7, 0xae, 0xe5, 0xbc, 0x82, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x12, 0xaa, 0x02, - 0x0a, 0x15, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, - 0x75, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xcc, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x8b, 0x01, 0x1a, 0x85, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, - 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, - 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, - 0x75, 0x74, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x3a, 0x01, 0x2a, - 0x92, 0x41, 0x37, 0x12, 0x19, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1a, - 0xe5, 0x9b, 0x9e, 0xe6, 0xbb, 0x9a, 0x20, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xe4, 0x01, 0x0a, 0x06, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x53, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, + 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x6c, + 0x6f, 0x75, 0x74, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x3a, 0x01, + 0x2a, 0x92, 0x41, 0x32, 0x12, 0x15, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x44, 0x53, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x19, 0xe5, 0x9b, 0x9e, + 0xe6, 0xbb, 0x9a, 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x20, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xe7, 0x01, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x44, 0x53, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6d, 0x12, 0x6b, 0x2f, 0x63, 0x6c, 0x75, + 0x70, 0x22, 0x9c, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x73, 0x2a, 0x71, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x73, 0x65, 0x74, 0x73, 0x92, 0x41, 0x27, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x19, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x52, - 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x53, 0x65, 0x74, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, - 0xa8, 0x12, 0xe1, 0x01, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x53, 0x12, 0x1c, 0x2e, 0x63, + 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, + 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x20, + 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, + 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, + 0x12, 0xe7, 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x54, 0x53, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x6c, 0x12, 0x6a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x6e, 0x12, 0x6c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x73, 0x92, 0x41, 0x25, - 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe8, 0x8e, - 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x20, 0xe5, - 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xde, 0x01, 0x0a, 0x05, 0x47, 0x65, 0x74, 0x44, 0x53, 0x12, - 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x99, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x73, 0x12, 0x71, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x73, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1d, 0x12, 0x09, 0x47, 0x65, 0x74, 0x44, 0x53, - 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x44, 0x61, 0x65, - 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0xcc, 0x01, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x44, 0x53, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x81, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x58, 0x22, 0x53, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x73, 0x3a, - 0x01, 0x2a, 0x92, 0x41, 0x20, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x53, 0x20, - 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x44, 0x61, 0x65, 0x6d, - 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0xea, 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x44, 0x53, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x92, + 0x41, 0x28, 0x12, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x54, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, + 0x19, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, + 0x53, 0x65, 0x74, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xe4, 0x01, 0x0a, 0x06, 0x47, + 0x65, 0x74, 0x53, 0x54, 0x53, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x9f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x76, 0x1a, 0x71, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x22, 0x9e, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x75, 0x12, 0x73, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, - 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, - 0x6e, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, - 0x41, 0x20, 0x12, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x53, 0x20, 0x41, 0x50, 0x49, - 0x1a, 0x10, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, - 0x65, 0x74, 0x12, 0xff, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x53, - 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, - 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, - 0xb2, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7e, 0x1a, 0x79, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, + 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, + 0x20, 0x12, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x54, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x12, 0xe8, + 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, + 0x74, 0x12, 0xd2, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x54, 0x53, 0x12, + 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x86, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5a, 0x22, 0x55, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, + 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, + 0x92, 0x41, 0x23, 0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x54, 0x53, 0x20, 0x41, + 0x50, 0x49, 0x1a, 0x12, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x12, 0xf0, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x53, 0x54, 0x53, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x22, 0xa4, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x78, 0x1a, 0x73, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, + 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x23, 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x54, + 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x12, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x12, 0x85, 0x02, 0x0a, 0x0a, 0x52, 0x65, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x54, 0x53, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb7, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x80, + 0x01, 0x1a, 0x7b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, + 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x01, + 0x2a, 0x92, 0x41, 0x2d, 0x12, 0x11, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x18, 0xe9, 0x87, 0x8d, 0xe6, 0x96, 0xb0, 0xe8, + 0xb0, 0x83, 0xe5, 0xba, 0xa6, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, + 0x74, 0x12, 0x9e, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x54, 0x53, 0x48, 0x69, 0x73, 0x74, + 0x6f, 0x72, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, + 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x22, 0xbe, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7d, 0x12, 0x7b, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, + 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x92, 0x41, 0x38, 0x12, 0x19, 0x47, 0x65, 0x74, 0x53, + 0x54, 0x53, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1b, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0xb1, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x54, 0x53, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x66, 0x66, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x6f, 0x6c, + 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xd6, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x8b, 0x01, 0x12, 0x88, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, - 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, - 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2b, 0x12, 0x11, 0x52, 0x65, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x16, 0xe9, 0x87, - 0x8d, 0xe6, 0x96, 0xb0, 0xe8, 0xb0, 0x83, 0xe5, 0xba, 0xa6, 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, - 0x6e, 0x53, 0x65, 0x74, 0x12, 0x98, 0x02, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x53, 0x48, 0x69, - 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, + 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, + 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x7d, 0x92, 0x41, 0x41, 0x12, 0x16, 0x47, 0x65, 0x74, 0x53, 0x54, 0x53, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x66, 0x66, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x27, 0xe8, + 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, + 0x74, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0xe5, 0xb7, 0xae, 0xe5, 0xbc, 0x82, + 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x12, 0xa6, 0x02, 0x0a, 0x12, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, + 0x75, 0x74, 0x53, 0x54, 0x53, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, - 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x22, 0xb9, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7b, 0x12, 0x79, 0x2f, 0x63, + 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x22, 0xcb, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x8c, 0x01, 0x1a, 0x86, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x92, 0x41, 0x35, 0x12, 0x18, 0x47, 0x65, 0x74, 0x44, - 0x53, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x41, 0x50, 0x49, 0x1a, 0x19, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x44, 0x61, 0x65, - 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0xab, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x44, 0x53, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x44, 0x69, 0x66, 0x66, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, + 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x35, 0x12, 0x16, 0x52, 0x6f, 0x6c, 0x6c, + 0x6f, 0x75, 0x74, 0x53, 0x54, 0x53, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x41, + 0x50, 0x49, 0x1a, 0x1b, 0xe5, 0x9b, 0x9e, 0xe6, 0xbb, 0x9a, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0xf6, 0x01, 0x0a, 0x08, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x53, 0x54, 0x53, 0x12, 0x1d, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x52, 0x65, 0x73, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xd1, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x89, 0x01, 0x12, 0x86, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x73, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x92, 0x41, 0x3e, 0x12, - 0x15, 0x47, 0x65, 0x74, 0x44, 0x53, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, - 0x66, 0x66, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x25, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x44, - 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0xe5, 0xb7, 0xae, 0xe5, 0xbc, 0x82, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x12, 0xa0, 0x02, - 0x0a, 0x11, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x44, 0x53, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xc6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x8a, - 0x01, 0x1a, 0x84, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xac, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x7e, 0x1a, 0x79, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x2f, 0x7b, 0x72, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x32, 0x12, 0x15, - 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x44, 0x53, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x19, 0xe5, 0x9b, 0x9e, 0xe6, 0xbb, 0x9a, 0x20, 0x44, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0xe7, 0x01, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x44, 0x53, 0x12, 0x1e, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, + 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, + 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x3a, 0x01, 0x2a, + 0x92, 0x41, 0x25, 0x12, 0x0c, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x53, 0x54, 0x53, 0x20, 0x41, 0x50, + 0x49, 0x1a, 0x15, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x20, 0xe6, + 0x89, 0xa9, 0xe7, 0xbc, 0xa9, 0xe5, 0xae, 0xb9, 0x12, 0xa6, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x53, 0x54, 0x53, 0x50, 0x6f, 0x12, 0x27, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x52, 0x65, 0x73, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x22, 0xcb, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x83, 0x01, 0x1a, 0x7e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9c, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x73, 0x2a, 0x71, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x73, 0x65, 0x74, 0x73, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x20, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x44, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, - 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0xe7, 0x01, 0x0a, 0x07, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x54, 0x53, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x9f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6e, 0x12, 0x6c, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x92, 0x41, 0x28, 0x12, 0x0b, 0x4c, 0x69, - 0x73, 0x74, 0x53, 0x54, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x19, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, - 0x96, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x20, 0xe5, 0x88, - 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xe4, 0x01, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x53, 0x54, 0x53, 0x12, - 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x01, 0x2a, + 0x92, 0x41, 0x3e, 0x12, 0x13, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x53, + 0x54, 0x53, 0x50, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x27, 0xe9, 0x87, 0x8d, 0xe6, 0x96, 0xb0, + 0xe8, 0xb0, 0x83, 0xe5, 0xba, 0xa6, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, + 0x65, 0x74, 0x73, 0x20, 0xe4, 0xb8, 0x8b, 0xe5, 0xb1, 0x9e, 0xe7, 0x9a, 0x84, 0x20, 0x50, 0x6f, + 0x64, 0x12, 0xed, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x54, 0x53, 0x12, + 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa1, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x75, 0x2a, 0x73, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, + 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, + 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x23, 0x12, 0x0d, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x54, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x12, 0xe5, + 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, + 0x74, 0x12, 0xdd, 0x01, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x4a, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9e, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x75, 0x12, 0x73, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, - 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, - 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x20, 0x12, 0x0a, 0x47, 0x65, 0x74, - 0x53, 0x54, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x12, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x12, 0xd2, 0x01, 0x0a, 0x09, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x54, 0x53, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x86, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5a, - 0x22, 0x55, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, - 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, - 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x23, 0x12, 0x0d, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x54, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x12, 0xe5, 0x88, - 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, - 0x12, 0xf0, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x54, 0x53, 0x12, 0x1e, + 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x96, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x6a, 0x12, 0x68, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, + 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x73, 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x6a, 0x6f, 0x62, 0x73, 0x92, 0x41, 0x23, 0x12, 0x0a, + 0x4c, 0x69, 0x73, 0x74, 0x43, 0x4a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x15, 0xe8, 0x8e, 0xb7, 0xe5, + 0x8f, 0x96, 0x20, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, + 0xa8, 0x12, 0xda, 0x01, 0x0a, 0x05, 0x47, 0x65, 0x74, 0x43, 0x4a, 0x12, 0x1b, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, + 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x95, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x12, + 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, + 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x6a, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x92, 0x41, 0x1b, 0x12, 0x09, 0x47, 0x65, 0x74, 0x43, 0x4a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, + 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0xc7, + 0x01, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x4a, 0x12, 0x1e, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, + 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7d, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x56, 0x22, 0x51, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, + 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x63, 0x72, 0x6f, 0x6e, + 0x6a, 0x6f, 0x62, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1e, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x43, 0x4a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, + 0x20, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0xe6, 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x4a, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x9b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x1a, 0x6f, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x63, 0x72, + 0x6f, 0x6e, 0x6a, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, + 0x92, 0x41, 0x1e, 0x12, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x4a, 0x20, 0x41, 0x50, + 0x49, 0x1a, 0x0e, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, + 0x62, 0x12, 0xe3, 0x01, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x4a, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa4, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x78, 0x1a, 0x73, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x98, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x2a, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, - 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, - 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x23, - 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x54, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, - 0x12, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, - 0x53, 0x65, 0x74, 0x12, 0x85, 0x02, 0x0a, 0x0a, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x53, - 0x54, 0x53, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x22, 0xb7, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x80, 0x01, 0x1a, 0x7b, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2d, 0x12, 0x11, - 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x41, 0x50, - 0x49, 0x1a, 0x18, 0xe9, 0x87, 0x8d, 0xe6, 0x96, 0xb0, 0xe8, 0xb0, 0x83, 0xe5, 0xba, 0xa6, 0x20, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x12, 0x9e, 0x02, 0x0a, 0x15, - 0x47, 0x65, 0x74, 0x53, 0x54, 0x53, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0xbe, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x7d, 0x12, 0x7b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, - 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x92, 0x41, 0x38, 0x12, 0x19, 0x47, 0x65, 0x74, 0x53, 0x54, 0x53, 0x48, 0x69, 0x73, 0x74, - 0x6f, 0x72, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x1a, - 0x1b, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, - 0x53, 0x65, 0x74, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xb1, 0x02, 0x0a, - 0x12, 0x47, 0x65, 0x74, 0x53, 0x54, 0x53, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, - 0x69, 0x66, 0x66, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xd6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x8b, - 0x01, 0x12, 0x88, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x92, 0x41, 0x41, 0x12, - 0x16, 0x47, 0x65, 0x74, 0x53, 0x54, 0x53, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, - 0x69, 0x66, 0x66, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x27, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x20, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0xe5, 0xb7, 0xae, 0xe5, 0xbc, 0x82, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, - 0x12, 0xa6, 0x02, 0x0a, 0x12, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x53, 0x54, 0x53, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, - 0x75, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xcb, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x8c, 0x01, 0x1a, 0x86, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, - 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, - 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, - 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x6c, - 0x6f, 0x75, 0x74, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x3a, 0x01, - 0x2a, 0x92, 0x41, 0x35, 0x12, 0x16, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x53, 0x54, 0x53, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1b, 0xe5, 0x9b, - 0x9e, 0xe6, 0xbb, 0x9a, 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, - 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xf6, 0x01, 0x0a, 0x08, 0x53, 0x63, - 0x61, 0x6c, 0x65, 0x53, 0x54, 0x53, 0x12, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x53, 0x63, 0x61, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x22, 0xac, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7e, 0x1a, 0x79, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x25, 0x12, 0x0c, 0x53, - 0x63, 0x61, 0x6c, 0x65, 0x53, 0x54, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x15, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x20, 0xe6, 0x89, 0xa9, 0xe7, 0xbc, 0xa9, 0xe5, - 0xae, 0xb9, 0x12, 0xa6, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x65, 0x53, 0x54, 0x53, 0x50, 0x6f, 0x12, 0x27, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xcb, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x83, 0x01, 0x1a, 0x7e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, - 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, - 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, - 0x6c, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, - 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x3e, 0x12, 0x13, 0x52, - 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x53, 0x54, 0x53, 0x50, 0x6f, 0x20, 0x41, - 0x50, 0x49, 0x1a, 0x27, 0xe9, 0x87, 0x8d, 0xe6, 0x96, 0xb0, 0xe8, 0xb0, 0x83, 0xe5, 0xba, 0xa6, - 0x20, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x20, 0xe4, 0xb8, - 0x8b, 0xe5, 0xb1, 0x9e, 0xe7, 0x9a, 0x84, 0x20, 0x50, 0x6f, 0x64, 0x12, 0xed, 0x01, 0x0a, 0x09, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x54, 0x53, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x6a, 0x6f, 0x62, 0x73, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1e, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x43, 0x4a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, + 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0xd7, 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, + 0x4a, 0x6f, 0x62, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x8f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x66, 0x12, 0x64, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, + 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x92, 0x41, + 0x20, 0x12, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x11, + 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x4a, 0x6f, 0x62, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, + 0xa8, 0x12, 0xd4, 0x01, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x1b, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa1, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x75, - 0x2a, 0x73, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8e, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6d, + 0x12, 0x6b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, - 0x73, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x23, 0x12, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x53, 0x54, 0x53, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x12, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x12, 0xdd, 0x01, 0x0a, 0x06, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x4a, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x96, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6a, 0x12, 0x68, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x63, 0x72, 0x6f, - 0x6e, 0x6a, 0x6f, 0x62, 0x73, 0x92, 0x41, 0x23, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x4a, - 0x20, 0x41, 0x50, 0x49, 0x1a, 0x15, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x43, 0x72, 0x6f, - 0x6e, 0x4a, 0x6f, 0x62, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xda, 0x01, 0x0a, 0x05, - 0x47, 0x65, 0x74, 0x43, 0x4a, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x95, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x12, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, - 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x6a, - 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1b, 0x12, 0x09, 0x47, - 0x65, 0x74, 0x43, 0x4a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, - 0x20, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0xc7, 0x01, 0x0a, 0x08, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x43, 0x4a, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x7d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56, 0x22, 0x51, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x6a, 0x6f, 0x62, 0x73, 0x3a, 0x01, - 0x2a, 0x92, 0x41, 0x1e, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x4a, 0x20, 0x41, - 0x50, 0x49, 0x1a, 0x0e, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x43, 0x72, 0x6f, 0x6e, 0x4a, - 0x6f, 0x62, 0x12, 0xe6, 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x4a, 0x12, - 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9b, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x1a, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, - 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, - 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x6a, 0x6f, 0x62, 0x73, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1e, 0x12, 0x0c, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x4a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, 0xe6, 0x9b, 0xb4, - 0xe6, 0x96, 0xb0, 0x20, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x12, 0xe3, 0x01, 0x0a, 0x08, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x4a, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x73, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x18, + 0x12, 0x0a, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe8, 0x8e, + 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x4a, 0x6f, 0x62, 0x12, 0xc1, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x76, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x22, 0x4d, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x77, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, + 0x1b, 0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x20, 0x41, 0x50, 0x49, + 0x1a, 0x0a, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x4a, 0x6f, 0x62, 0x12, 0xe0, 0x01, 0x0a, + 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, + 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x94, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x70, 0x1a, 0x6b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, + 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x73, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, + 0x2a, 0x92, 0x41, 0x1b, 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x20, + 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x4a, 0x6f, 0x62, 0x12, + 0xdd, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1e, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x91, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x6d, 0x2a, 0x6b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x92, 0x41, 0x1b, 0x12, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x20, + 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x4a, 0x6f, 0x62, 0x12, + 0xd5, 0x01, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x2a, - 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8e, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x66, 0x12, + 0x64, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, - 0x2f, 0x63, 0x72, 0x6f, 0x6e, 0x6a, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x92, 0x41, 0x1e, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x4a, 0x20, 0x41, 0x50, - 0x49, 0x1a, 0x0e, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, - 0x62, 0x12, 0xd7, 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x1c, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, + 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x92, 0x41, 0x1f, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, + 0x20, 0x41, 0x50, 0x49, 0x1a, 0x11, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x6f, 0x64, + 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xf6, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x6f, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x50, 0x6f, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8f, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x66, 0x12, 0x64, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x73, 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x92, 0x41, 0x20, 0x12, 0x0b, 0x4c, 0x69, 0x73, - 0x74, 0x4a, 0x6f, 0x62, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x11, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, - 0x20, 0x4a, 0x6f, 0x62, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xd4, 0x01, 0x0a, 0x06, - 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x8e, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6d, 0x12, 0x6b, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x6a, 0x6f, 0x62, 0x73, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x18, 0x12, 0x0a, 0x47, 0x65, 0x74, 0x4a, - 0x6f, 0x62, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x4a, - 0x6f, 0x62, 0x12, 0xc1, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, - 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x76, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x22, 0x4d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa0, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x60, 0x12, 0x5e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, - 0x2f, 0x6a, 0x6f, 0x62, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1b, 0x12, 0x0d, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe5, 0x88, 0x9b, 0xe5, - 0xbb, 0xba, 0x20, 0x4a, 0x6f, 0x62, 0x12, 0xe0, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x94, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x70, 0x1a, 0x6b, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x6a, 0x6f, 0x62, - 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1b, 0x12, 0x0d, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe6, - 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x4a, 0x6f, 0x62, 0x12, 0xdd, 0x01, 0x0a, 0x09, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, + 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x92, 0x41, 0x37, 0x12, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x6f, 0x42, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x23, 0xe9, 0x80, 0x9a, + 0xe8, 0xbf, 0x87, 0xe8, 0x8a, 0x82, 0xe7, 0x82, 0xb9, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xe8, + 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x6f, 0x64, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, + 0x12, 0xd2, 0x01, 0x0a, 0x05, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, + 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x91, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6d, 0x2a, 0x6b, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6d, 0x12, 0x6b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, - 0x6a, 0x6f, 0x62, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1b, 0x12, 0x0d, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe5, - 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x4a, 0x6f, 0x62, 0x12, 0xd5, 0x01, 0x0a, 0x06, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x6f, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x17, 0x12, 0x09, + 0x47, 0x65, 0x74, 0x50, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, + 0x96, 0x20, 0x50, 0x6f, 0x64, 0x12, 0xbf, 0x01, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x50, 0x6f, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x8e, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x66, 0x12, 0x64, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, - 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x92, - 0x41, 0x1f, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x11, - 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x6f, 0x64, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, - 0xa8, 0x12, 0xf6, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x42, 0x79, 0x4e, 0x6f, - 0x64, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x42, 0x79, 0x4e, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa0, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x60, - 0x12, 0x5e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, - 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, - 0x92, 0x41, 0x37, 0x12, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x42, 0x79, 0x4e, 0x6f, 0x64, - 0x65, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x23, 0xe9, 0x80, 0x9a, 0xe8, 0xbf, 0x87, 0xe8, 0x8a, 0x82, - 0xe7, 0x82, 0xb9, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, - 0x50, 0x6f, 0x64, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xd2, 0x01, 0x0a, 0x05, 0x47, - 0x65, 0x74, 0x50, 0x6f, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x22, 0x75, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x22, 0x4d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1a, 0x12, 0x0c, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe5, 0x88, 0x9b, + 0xe5, 0xbb, 0xba, 0x20, 0x50, 0x6f, 0x64, 0x12, 0xde, 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x50, 0x6f, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x93, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x70, 0x1a, 0x6b, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, + 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1a, 0x12, 0x0c, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe6, 0x9b, + 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x50, 0x6f, 0x64, 0x12, 0xdb, 0x01, 0x0a, 0x08, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x50, 0x6f, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x90, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6d, 0x2a, 0x6b, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, + 0x64, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1a, 0x12, 0x0c, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x50, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe5, 0x88, 0xa0, 0xe9, + 0x99, 0xa4, 0x20, 0x50, 0x6f, 0x64, 0x12, 0xed, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x6f, 0x50, 0x56, 0x43, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x8d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6d, 0x12, 0x6b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0xa4, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x72, 0x12, 0x70, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x17, 0x12, 0x09, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x20, - 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x6f, 0x64, 0x12, - 0xbf, 0x01, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x12, 0x1e, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x75, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x52, 0x22, 0x4d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x44, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, - 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1a, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, - 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x50, 0x6f, - 0x64, 0x12, 0xde, 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x12, 0x1e, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x70, 0x76, 0x63, 0x73, 0x92, 0x41, 0x29, 0x12, 0x0d, 0x4c, + 0x69, 0x73, 0x74, 0x50, 0x6f, 0x50, 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x18, 0xe8, 0x8e, + 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x6f, 0x64, 0x20, 0xe5, 0x85, 0xb3, 0xe8, 0x81, 0x94, 0xe7, + 0x9a, 0x84, 0x20, 0x50, 0x56, 0x43, 0x12, 0xf7, 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x50, + 0x6f, 0x43, 0x4d, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xaf, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x78, 0x12, 0x76, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x6e, + 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x6d, 0x61, 0x70, 0x73, 0x92, + 0x41, 0x2e, 0x12, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x43, 0x4d, 0x20, 0x41, 0x50, 0x49, + 0x1a, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x6f, 0x64, 0x20, 0xe5, 0x85, 0xb3, + 0xe8, 0x81, 0x94, 0xe7, 0x9a, 0x84, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, + 0x12, 0xf9, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x93, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x70, 0x1a, 0x6b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xad, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x75, 0x12, 0x73, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1a, 0x12, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x50, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x50, - 0x6f, 0x64, 0x12, 0xdb, 0x01, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x6f, 0x12, - 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x90, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6d, 0x2a, 0x6b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, - 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, - 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1a, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x6f, - 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x50, 0x6f, 0x64, - 0x12, 0xed, 0x01, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x50, 0x56, 0x43, 0x12, 0x1b, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa4, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x72, 0x12, 0x70, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, - 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x70, 0x76, 0x63, 0x73, 0x92, 0x41, 0x29, 0x12, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x50, - 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, - 0x6f, 0x64, 0x20, 0xe5, 0x85, 0xb3, 0xe8, 0x81, 0x94, 0xe7, 0x9a, 0x84, 0x20, 0x50, 0x56, 0x43, - 0x12, 0xf7, 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x43, 0x4d, 0x12, 0x1b, 0x2e, + 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x92, 0x41, 0x2f, 0x12, 0x10, 0x4c, + 0x69, 0x73, 0x74, 0x50, 0x6f, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x41, 0x50, 0x49, 0x1a, + 0x1b, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x6f, 0x64, 0x20, 0xe5, 0x85, 0xb3, 0xe8, + 0x81, 0x94, 0xe7, 0x9a, 0x84, 0x20, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0xf7, 0x01, 0x0a, + 0x0c, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x12, 0x1e, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa8, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x7b, 0x1a, 0x76, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, + 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, + 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x92, + 0x41, 0x24, 0x12, 0x10, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, + 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe9, 0x87, 0x8d, 0xe6, 0x96, 0xb0, 0xe8, 0xb0, 0x83, 0xe5, + 0xba, 0xa6, 0x20, 0x50, 0x6f, 0x64, 0x12, 0x91, 0x02, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x22, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb9, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7b, 0x12, 0x79, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x70, + 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x73, 0x92, 0x41, 0x35, 0x12, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x20, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, + 0x20, 0x50, 0x6f, 0x64, 0x20, 0xe5, 0x8c, 0x85, 0xe5, 0x90, 0xab, 0xe7, 0x9a, 0x84, 0xe5, 0xae, + 0xb9, 0xe5, 0x99, 0xa8, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xa2, 0x02, 0x0a, 0x0c, 0x47, + 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x21, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xd0, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x8c, 0x01, 0x12, 0x89, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x70, + 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x7d, 0x92, 0x41, 0x3a, 0x12, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x26, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, + 0x8c, 0x87, 0xe5, 0xae, 0x9a, 0x20, 0x50, 0x6f, 0x64, 0x20, 0xe4, 0xb8, 0x8b, 0xe5, 0x8d, 0x95, + 0xe4, 0xb8, 0xaa, 0xe5, 0xae, 0xb9, 0xe5, 0x99, 0xa8, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x12, + 0xc9, 0x02, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x45, 0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xaf, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x78, 0x12, 0x76, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, - 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x6d, 0x61, 0x70, 0x73, 0x92, 0x41, 0x2e, 0x12, 0x0c, 0x4c, 0x69, - 0x73, 0x74, 0x50, 0x6f, 0x43, 0x4d, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, - 0x8f, 0x96, 0x20, 0x50, 0x6f, 0x64, 0x20, 0xe5, 0x85, 0xb3, 0xe8, 0x81, 0x94, 0xe7, 0x9a, 0x84, - 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x12, 0xf9, 0x01, 0x0a, 0x0c, 0x4c, - 0x69, 0x73, 0x74, 0x50, 0x6f, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, - 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xad, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x75, 0x12, - 0x73, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, - 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x73, 0x92, 0x41, 0x2f, 0x12, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1b, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, - 0x96, 0x20, 0x50, 0x6f, 0x64, 0x20, 0xe5, 0x85, 0xb3, 0xe8, 0x81, 0x94, 0xe7, 0x9a, 0x84, 0x20, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0xf7, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x63, 0x68, - 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa8, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7b, 0x1a, 0x76, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, - 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x63, - 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x24, 0x12, 0x10, 0x52, 0x65, - 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x50, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, - 0xe9, 0x87, 0x8d, 0xe6, 0x96, 0xb0, 0xe8, 0xb0, 0x83, 0xe5, 0xba, 0xa6, 0x20, 0x50, 0x6f, 0x64, - 0x12, 0x91, 0x02, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x12, 0x22, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0xec, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x95, 0x01, 0x12, 0x92, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x70, + 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x65, 0x6e, 0x76, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x92, 0x41, 0x4d, 0x12, 0x17, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x49, + 0x6e, 0x66, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x32, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, + 0x8c, 0x87, 0xe5, 0xae, 0x9a, 0x20, 0x50, 0x6f, 0x64, 0x20, 0xe4, 0xb8, 0x8b, 0xe5, 0x8d, 0x95, + 0xe4, 0xb8, 0xaa, 0xe5, 0xae, 0xb9, 0xe5, 0x99, 0xa8, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe5, + 0x8f, 0x98, 0xe9, 0x87, 0x8f, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x32, 0x9d, 0x1c, 0x0a, 0x07, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0xdf, 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, + 0x49, 0x6e, 0x67, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x97, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6a, 0x12, 0x68, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x92, 0x41, 0x24, 0x12, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x67, 0x20, 0x41, + 0x50, 0x49, 0x1a, 0x15, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x49, 0x6e, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xdc, 0x01, 0x0a, 0x06, 0x47, 0x65, + 0x74, 0x49, 0x6e, 0x67, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x96, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x12, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1c, 0x12, 0x0a, 0x47, 0x65, + 0x74, 0x49, 0x6e, 0x67, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, + 0x20, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0xc9, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x49, 0x6e, 0x67, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb9, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x7b, 0x12, 0x79, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, - 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x92, 0x41, 0x35, 0x12, - 0x11, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, 0x41, - 0x50, 0x49, 0x1a, 0x20, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x6f, 0x64, 0x20, 0xe5, - 0x8c, 0x85, 0xe5, 0x90, 0xab, 0xe7, 0x9a, 0x84, 0xe5, 0xae, 0xb9, 0xe5, 0x99, 0xa8, 0xe5, 0x88, - 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xa2, 0x02, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x21, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xd0, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x8c, 0x01, - 0x12, 0x89, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, - 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x3a, 0x12, - 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x20, 0x41, 0x50, - 0x49, 0x1a, 0x26, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0x8c, 0x87, 0xe5, 0xae, 0x9a, 0x20, - 0x50, 0x6f, 0x64, 0x20, 0xe4, 0xb8, 0x8b, 0xe5, 0x8d, 0x95, 0xe4, 0xb8, 0xaa, 0xe5, 0xae, 0xb9, - 0xe5, 0x99, 0xa8, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x12, 0xc9, 0x02, 0x0a, 0x13, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x21, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0xec, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x95, 0x01, - 0x12, 0x92, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, - 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, - 0x64, 0x73, 0x2f, 0x70, 0x6f, 0x64, 0x73, 0x2f, 0x7b, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x65, 0x6e, 0x76, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x92, 0x41, 0x4d, 0x12, 0x17, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x45, 0x6e, 0x76, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x41, 0x50, - 0x49, 0x1a, 0x32, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0x8c, 0x87, 0xe5, 0xae, 0x9a, 0x20, - 0x50, 0x6f, 0x64, 0x20, 0xe4, 0xb8, 0x8b, 0xe5, 0x8d, 0x95, 0xe4, 0xb8, 0xaa, 0xe5, 0xae, 0xb9, - 0xe5, 0x99, 0xa8, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe5, 0x8f, 0x98, 0xe9, 0x87, 0x8f, 0xe4, - 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x32, 0x9d, 0x1c, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x12, 0xdf, 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x67, 0x12, 0x1c, 0x2e, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x7e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56, 0x22, 0x51, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x3a, + 0x01, 0x2a, 0x92, 0x41, 0x1f, 0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x67, + 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x49, 0x6e, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x12, 0xe8, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, + 0x6e, 0x67, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x9c, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x1a, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, + 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1f, + 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x67, 0x20, 0x41, 0x50, 0x49, 0x1a, + 0x0e, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, + 0xe5, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x67, 0x12, 0x1e, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x99, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x71, 0x2a, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1f, 0x12, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x49, 0x6e, 0x67, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, + 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0xde, 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, + 0x53, 0x56, 0x43, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x96, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x69, 0x12, 0x67, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x92, 0x41, 0x24, 0x12, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x56, 0x43, 0x20, 0x41, 0x50, + 0x49, 0x1a, 0x15, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xdb, 0x01, 0x0a, 0x06, 0x47, 0x65, 0x74, + 0x53, 0x56, 0x43, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x95, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x70, 0x12, 0x6e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1c, 0x12, 0x0a, 0x47, 0x65, 0x74, 0x53, + 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xc8, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x53, 0x56, 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x7d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x55, 0x22, 0x50, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x73, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x92, + 0x41, 0x1f, 0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x56, 0x43, 0x20, 0x41, 0x50, + 0x49, 0x1a, 0x0e, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0xe7, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x56, 0x43, 0x12, + 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9b, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x73, 0x1a, 0x6e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, + 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1f, 0x12, 0x0d, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x53, 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, 0xe6, 0x9b, 0xb4, + 0xe6, 0x96, 0xb0, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xe4, 0x01, 0x0a, 0x09, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x56, 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x70, + 0x2a, 0x6e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, + 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, + 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x92, 0x41, 0x1f, 0x12, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x56, 0x43, 0x20, 0x41, + 0x50, 0x49, 0x1a, 0x0e, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0xdf, 0x01, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x50, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x97, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6a, 0x12, 0x68, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x73, 0x2f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x92, 0x41, 0x24, 0x12, - 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x67, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x15, 0xe8, 0x8e, - 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x20, 0xe5, 0x88, 0x97, - 0xe8, 0xa1, 0xa8, 0x12, 0xdc, 0x01, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x67, 0x12, 0x1b, + 0x6b, 0x73, 0x2f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x92, 0x41, 0x25, 0x12, + 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x50, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe8, 0x8e, 0xb7, + 0xe5, 0x8f, 0x96, 0x20, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, 0xe5, 0x88, + 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xdc, 0x01, 0x0a, 0x05, 0x47, 0x65, 0x74, 0x45, 0x50, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x96, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x97, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x12, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x73, 0x2f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1c, 0x12, 0x0a, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x67, 0x20, 0x41, - 0x50, 0x49, 0x1a, 0x0e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x49, 0x6e, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x12, 0xc9, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x67, + 0x6b, 0x73, 0x2f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1d, 0x12, 0x09, 0x47, 0x65, 0x74, 0x45, 0x50, 0x20, 0x41, 0x50, + 0x49, 0x1a, 0x10, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x12, 0xf6, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x45, 0x50, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xab, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x78, 0x12, 0x76, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x92, + 0x41, 0x2a, 0x12, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x50, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, + 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x45, 0x6e, 0x64, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, 0xe7, 0x8a, 0xb6, 0xe6, 0x80, 0x81, 0x12, 0xc9, 0x01, 0x0a, + 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x50, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56, 0x22, + 0x51, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x20, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x45, 0x50, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x45, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0xe8, 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x45, 0x50, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x1a, 0x6f, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x65, 0x6e, 0x64, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, + 0x92, 0x41, 0x20, 0x12, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x50, 0x20, 0x41, 0x50, + 0x49, 0x1a, 0x10, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x12, 0xe5, 0x01, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x50, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7e, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56, 0x22, 0x51, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9a, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x2a, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x20, 0x12, 0x0c, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x45, 0x50, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe5, 0x88, 0xa0, 0xe9, 0x99, + 0xa4, 0x20, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x32, 0xd2, 0x11, 0x0a, 0x06, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0xdf, 0x01, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x4d, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x98, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6a, 0x12, 0x68, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, - 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1f, 0x12, - 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x67, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, - 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0xe8, - 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x67, 0x12, 0x1e, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9c, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x74, 0x1a, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x73, 0x2f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1f, 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x49, 0x6e, 0x67, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, - 0xb0, 0x20, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0xe5, 0x01, 0x0a, 0x09, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x67, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x99, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x2a, 0x6f, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x69, - 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, - 0x41, 0x1f, 0x12, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x67, 0x20, 0x41, 0x50, - 0x49, 0x1a, 0x0e, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, - 0x73, 0x12, 0xde, 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x56, 0x43, 0x12, 0x1c, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, + 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x6d, 0x61, 0x70, 0x73, + 0x92, 0x41, 0x25, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x4d, 0x20, 0x41, 0x50, 0x49, 0x1a, + 0x17, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, + 0x70, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xdc, 0x01, 0x0a, 0x05, 0x47, 0x65, 0x74, + 0x43, 0x4d, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x97, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x12, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, + 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x6d, 0x61, 0x70, 0x73, + 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1d, 0x12, 0x09, 0x47, 0x65, 0x74, 0x43, + 0x4d, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x12, 0xc9, 0x01, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x43, 0x4d, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x7f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56, 0x22, 0x51, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x6d, 0x61, 0x70, 0x73, 0x3a, 0x01, 0x2a, + 0x92, 0x41, 0x20, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x4d, 0x20, 0x41, 0x50, + 0x49, 0x1a, 0x10, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x4d, 0x61, 0x70, 0x12, 0xe8, 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x4d, + 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9d, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x1a, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x6d, 0x61, 0x70, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x20, 0x12, 0x0c, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x4d, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe6, 0x9b, + 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x12, 0xe5, + 0x01, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x4d, 0x12, 0x1e, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, + 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x96, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x69, 0x12, 0x67, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9a, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x71, 0x2a, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x73, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x92, 0x41, 0x24, 0x12, 0x0b, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x15, 0xe8, 0x8e, 0xb7, - 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x20, 0xe5, 0x88, 0x97, 0xe8, - 0xa1, 0xa8, 0x12, 0xdb, 0x01, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x53, 0x56, 0x43, 0x12, 0x1b, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x95, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x70, 0x12, 0x6e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, - 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x92, 0x41, 0x1c, 0x12, 0x0a, 0x47, 0x65, 0x74, 0x53, 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, - 0x1a, 0x0e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0xc8, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x56, 0x43, 0x12, 0x1e, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x55, 0x22, 0x50, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1f, 0x12, 0x0d, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x53, 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, 0xe5, 0x88, 0x9b, - 0xe5, 0xbb, 0xba, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xe7, 0x01, 0x0a, 0x09, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x56, 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x73, - 0x1a, 0x6e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, - 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, - 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1f, 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x56, - 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xe4, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x53, 0x56, 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x6d, 0x61, 0x70, 0x73, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x20, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x4d, + 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x12, 0xe1, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x70, 0x2a, 0x6e, 0x2f, 0x63, 0x6c, 0x75, + 0x70, 0x22, 0x96, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x67, 0x12, 0x65, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1f, 0x12, 0x0d, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0e, 0xe5, 0x88, - 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xdf, 0x01, 0x0a, - 0x06, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x50, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6a, 0x12, 0x68, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x65, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x92, 0x41, 0x25, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x45, - 0x50, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x45, 0x6e, - 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xdc, - 0x01, 0x0a, 0x05, 0x47, 0x65, 0x74, 0x45, 0x50, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x73, 0x92, 0x41, 0x26, 0x12, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x20, 0x41, 0x50, 0x49, 0x1a, 0x14, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xde, 0x01, 0x0a, 0x09, 0x47, + 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x97, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x12, 0x6f, 0x2f, 0x63, + 0x65, 0x73, 0x70, 0x22, 0x95, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6e, 0x12, 0x6c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x65, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1d, - 0x12, 0x09, 0x47, 0x65, 0x74, 0x45, 0x50, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe8, 0x8e, 0xb7, - 0xe5, 0x8f, 0x96, 0x20, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0xf6, 0x01, - 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x45, 0x50, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xab, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x78, 0x12, 0x76, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, - 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x2f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x92, 0x41, 0x2a, 0x12, 0x0f, 0x47, 0x65, - 0x74, 0x45, 0x50, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe8, - 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x20, - 0xe7, 0x8a, 0xb6, 0xe6, 0x80, 0x81, 0x12, 0xc9, 0x01, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x45, 0x50, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x7f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56, 0x22, 0x51, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x73, 0x2f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x92, - 0x41, 0x20, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x50, 0x20, 0x41, 0x50, 0x49, - 0x1a, 0x10, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x73, 0x12, 0xe8, 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x50, 0x12, - 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9d, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x1a, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, - 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x2f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x20, 0x12, 0x0c, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x50, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe6, 0x9b, 0xb4, - 0xe6, 0x96, 0xb0, 0x20, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0xe5, 0x01, - 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x50, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, + 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1e, 0x12, 0x0d, 0x47, + 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0d, 0xe8, 0x8e, + 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0xcb, 0x01, 0x0a, 0x0c, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7d, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x53, 0x22, 0x4e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, + 0x44, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x21, 0x12, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0d, 0xe5, 0x88, 0x9b, 0xe5, + 0xbb, 0xba, 0x20, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0xea, 0x01, 0x0a, 0x0c, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, - 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x71, 0x2a, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, - 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x73, 0x2f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x92, 0x41, 0x20, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x50, 0x20, - 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x45, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x32, 0xd2, 0x11, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0xdf, 0x01, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x4d, 0x12, 0x1c, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, - 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6a, - 0x12, 0x68, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, - 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x6d, 0x61, 0x70, 0x73, 0x92, 0x41, 0x25, 0x12, 0x0a, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x4d, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, - 0x96, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x20, 0xe5, 0x88, 0x97, 0xe8, - 0xa1, 0xa8, 0x12, 0xdc, 0x01, 0x0a, 0x05, 0x47, 0x65, 0x74, 0x43, 0x4d, 0x12, 0x1b, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x97, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, - 0x12, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, - 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x6d, 0x61, 0x70, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x92, 0x41, 0x1d, 0x12, 0x09, 0x47, 0x65, 0x74, 0x43, 0x4d, 0x20, 0x41, 0x50, 0x49, 0x1a, - 0x10, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, - 0x70, 0x12, 0xc9, 0x01, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x4d, 0x12, 0x1e, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7f, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x56, 0x22, 0x51, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x6d, 0x61, 0x70, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x20, 0x12, 0x0c, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x4d, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe5, 0x88, 0x9b, - 0xe5, 0xbb, 0xba, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x12, 0xe8, 0x01, - 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x4d, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, - 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x74, 0x1a, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x71, 0x1a, 0x6c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x6d, 0x61, 0x70, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x20, 0x12, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x43, 0x4d, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x12, 0xe5, 0x01, 0x0a, 0x08, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x4d, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x9a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x2a, 0x6f, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x6d, 0x61, 0x70, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x20, - 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x4d, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x10, - 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, - 0x12, 0xe1, 0x01, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, - 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x96, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x67, 0x12, 0x65, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x73, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x92, 0x41, 0x26, 0x12, 0x0e, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x14, - 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0xe5, 0x88, - 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xde, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, - 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x95, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6e, 0x12, 0x6c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, - 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, - 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1e, 0x12, 0x0d, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0d, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0xcb, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x7d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x53, 0x22, 0x4e, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x73, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x92, - 0x41, 0x21, 0x12, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0d, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x12, 0xea, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x9b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x1a, 0x6c, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x21, 0x12, - 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x41, 0x50, - 0x49, 0x1a, 0x0d, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x12, 0xe7, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6e, 0x2a, 0x6c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, - 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x21, 0x12, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0d, 0xe5, 0x88, 0xa0, - 0xe9, 0x99, 0xa4, 0x20, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x32, 0xb8, 0x1d, 0x0a, 0x07, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0xd8, 0x01, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x50, - 0x56, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, - 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x91, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5c, 0x12, 0x5a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, - 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, - 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, - 0x65, 0x73, 0x92, 0x41, 0x2c, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x56, 0x20, 0x41, 0x50, - 0x49, 0x1a, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, - 0xa8, 0x12, 0xd5, 0x01, 0x0a, 0x05, 0x47, 0x65, 0x74, 0x50, 0x56, 0x12, 0x1b, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, - 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x90, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x63, 0x12, - 0x61, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x92, 0x41, 0x24, 0x12, 0x09, 0x47, 0x65, 0x74, 0x50, 0x56, 0x20, 0x41, 0x50, 0x49, - 0x1a, 0x17, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0xda, 0x01, 0x0a, 0x08, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x50, 0x56, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x8f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5f, 0x22, 0x5a, 0x2f, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, - 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x27, 0x12, - 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x56, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe5, - 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, - 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0xe1, 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x50, 0x56, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x96, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x66, 0x1a, 0x61, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, - 0x92, 0x41, 0x27, 0x12, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x56, 0x20, 0x41, 0x50, - 0x49, 0x1a, 0x17, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, - 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0xde, 0x01, 0x0a, 0x08, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x56, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x2f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, + 0x01, 0x2a, 0x92, 0x41, 0x21, 0x12, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0d, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0xe7, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x93, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x63, 0x2a, 0x61, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6e, 0x2a, 0x6c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x92, 0x41, 0x27, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x56, 0x20, 0x41, - 0x50, 0x49, 0x1a, 0x17, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x50, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0xfc, 0x01, 0x0a, 0x07, - 0x4c, 0x69, 0x73, 0x74, 0x50, 0x56, 0x43, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x21, 0x12, + 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x20, 0x41, 0x50, + 0x49, 0x1a, 0x0d, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x32, 0xb8, 0x1d, 0x0a, 0x07, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x12, 0xd8, 0x01, 0x0a, + 0x06, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x56, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x22, 0xb4, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x79, 0x12, 0x77, 0x2f, 0x63, + 0x65, 0x73, 0x70, 0x22, 0x91, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5c, 0x12, 0x5a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x92, 0x41, 0x32, 0x12, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x56, - 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x23, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xfa, 0x01, 0x0a, 0x06, 0x47, - 0x65, 0x74, 0x50, 0x56, 0x43, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x22, 0xb4, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x80, 0x01, 0x12, 0x7e, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x2a, 0x12, 0x0a, 0x47, - 0x65, 0x74, 0x50, 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1c, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, - 0x96, 0x20, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, - 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0xb0, 0x02, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, - 0x56, 0x43, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, - 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xe1, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x8c, 0x01, - 0x12, 0x89, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, - 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, - 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x92, 0x41, 0x4b, 0x12, - 0x13, 0x47, 0x65, 0x74, 0x50, 0x56, 0x43, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, - 0x20, 0x41, 0x50, 0x49, 0x1a, 0x34, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x65, 0x72, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x61, - 0x69, 0x6d, 0x20, 0xe8, 0xa2, 0xab, 0x20, 0x50, 0x6f, 0x64, 0x20, 0xe6, 0x8c, 0x82, 0xe8, 0xbd, - 0xbd, 0xe7, 0x9a, 0x84, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x12, 0xe7, 0x01, 0x0a, 0x09, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x56, 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9b, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x22, - 0x60, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2d, 0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, - 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1c, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x50, - 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, - 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x86, 0x02, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, - 0x56, 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x22, 0xba, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x83, 0x01, 0x1a, 0x7e, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2d, - 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, - 0x1c, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x83, 0x02, - 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x56, 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, - 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb7, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x80, 0x01, 0x2a, 0x7e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x2f, 0x7b, 0x6e, 0x61, - 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x2d, 0x12, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x56, - 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1c, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x50, 0x65, - 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, - 0x61, 0x69, 0x6d, 0x12, 0xd1, 0x01, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x43, 0x12, 0x1c, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8a, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x59, 0x12, 0x57, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x92, 0x41, 0x28, 0x12, - 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1a, 0xe8, 0x8e, 0xb7, - 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, - 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xce, 0x01, 0x0a, 0x05, 0x47, 0x65, 0x74, 0x53, - 0x43, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, + 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, + 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x92, 0x41, 0x2c, 0x12, 0x0a, 0x4c, 0x69, 0x73, + 0x74, 0x50, 0x56, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xd5, 0x01, 0x0a, 0x05, 0x47, 0x65, 0x74, 0x50, + 0x56, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x89, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x60, 0x12, 0x5e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x90, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x63, 0x12, 0x61, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x73, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x2f, 0x7b, - 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x20, 0x12, 0x09, 0x47, 0x65, 0x74, 0x53, 0x43, 0x20, - 0x41, 0x50, 0x49, 0x1a, 0x13, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0xd3, 0x01, 0x0a, 0x08, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x53, 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x88, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5c, 0x22, 0x57, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, - 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x23, 0x12, 0x0c, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x53, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x13, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, - 0xba, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0xda, - 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, - 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8f, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x63, 0x1a, 0x5e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x73, 0x74, 0x6f, 0x72, - 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x23, 0x12, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x53, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x13, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0xd7, 0x01, 0x0a, 0x08, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8c, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x60, 0x2a, - 0x5e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, - 0x41, 0x23, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x43, 0x20, 0x41, 0x50, 0x49, - 0x1a, 0x13, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x43, 0x6c, 0x61, 0x73, 0x73, 0x32, 0x8f, 0x09, 0x0a, 0x04, 0x52, 0x42, 0x41, 0x43, 0x12, 0xe7, - 0x01, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x41, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa0, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6d, 0x12, 0x6b, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x92, 0x41, 0x2a, 0x12, 0x0a, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x41, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1c, 0xe8, 0x8e, 0xb7, 0xe5, - 0x8f, 0x96, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xe4, 0x01, 0x0a, 0x05, 0x47, 0x65, 0x74, - 0x53, 0x41, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, - 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9f, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x12, 0x72, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, - 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x72, 0x62, - 0x61, 0x63, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x22, 0x12, 0x09, 0x47, - 0x65, 0x74, 0x53, 0x41, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x15, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, - 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, - 0xd2, 0x01, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x41, 0x12, 0x1e, 0x2e, 0x63, + 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x24, 0x12, 0x09, 0x47, 0x65, 0x74, + 0x50, 0x56, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, + 0xda, 0x01, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x56, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x87, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x59, 0x22, 0x54, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8f, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x5f, 0x22, 0x5a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x44, 0x7d, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x25, 0x12, - 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x41, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x15, 0xe5, - 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0xf0, 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, - 0x41, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, + 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x3a, + 0x01, 0x2a, 0x92, 0x41, 0x27, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x56, 0x20, + 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0xe1, 0x01, 0x0a, + 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x56, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x96, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x66, + 0x1a, 0x61, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, + 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x27, 0x12, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x50, 0x56, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, + 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x12, 0xde, 0x01, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x56, 0x12, 0x1e, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x93, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x63, 0x2a, 0x61, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, + 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x27, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x50, 0x56, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, + 0x20, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, + 0x65, 0x12, 0xfc, 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x56, 0x43, 0x12, 0x1c, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb4, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x79, 0x12, 0x77, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, + 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x92, 0x41, 0x32, 0x12, 0x0b, + 0x4c, 0x69, 0x73, 0x74, 0x50, 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x23, 0xe8, 0x8e, 0xb7, + 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, + 0x12, 0xfa, 0x01, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x50, 0x56, 0x43, 0x12, 0x1b, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, + 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb4, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x80, 0x01, + 0x12, 0x7e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, + 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, + 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x92, 0x41, 0x2a, 0x12, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, + 0x1c, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0xb0, 0x02, + 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x56, 0x43, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xe1, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x8c, 0x01, 0x12, 0x89, 0x01, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, + 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x6e, + 0x66, 0x6f, 0x92, 0x41, 0x4b, 0x12, 0x13, 0x47, 0x65, 0x74, 0x50, 0x56, 0x43, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x34, 0xe8, 0x8e, 0xb7, 0xe5, + 0x8f, 0x96, 0x20, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x20, 0xe8, 0xa2, 0xab, 0x20, 0x50, 0x6f, 0x64, + 0x20, 0xe6, 0x8c, 0x82, 0xe8, 0xbd, 0xbd, 0xe7, 0x9a, 0x84, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, + 0x12, 0xe7, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x56, 0x43, 0x12, 0x1e, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9b, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x22, 0x60, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, + 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2d, 0x12, 0x0d, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1c, 0xe5, 0x88, + 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x86, 0x02, 0x0a, 0x09, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x56, 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xba, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x83, 0x01, + 0x1a, 0x7e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, + 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, + 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2d, 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x56, + 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1c, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x50, 0x65, + 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x12, 0x83, 0x02, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x56, + 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, - 0xa5, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x77, 0x1a, 0x72, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, - 0x72, 0x62, 0x61, 0x63, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, - 0x41, 0x25, 0x12, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x41, 0x20, 0x41, 0x50, 0x49, - 0x1a, 0x15, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0xed, 0x01, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x53, 0x41, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0xb7, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x80, 0x01, 0x2a, 0x7e, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, + 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x2d, 0x12, 0x0d, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x50, 0x56, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1c, 0xe5, 0x88, 0xa0, + 0xe9, 0x99, 0xa4, 0x20, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0xd1, 0x01, 0x0a, 0x06, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x43, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x8a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x59, 0x12, 0x57, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x73, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, + 0x65, 0x73, 0x92, 0x41, 0x28, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x43, 0x20, 0x41, 0x50, + 0x49, 0x1a, 0x1a, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, + 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xce, 0x01, + 0x0a, 0x05, 0x47, 0x65, 0x74, 0x53, 0x43, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x22, 0xa2, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x2a, 0x72, 0x2f, 0x63, 0x6c, + 0x73, 0x70, 0x22, 0x89, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x60, 0x12, 0x5e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x7d, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, - 0x41, 0x25, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x41, 0x20, 0x41, 0x50, 0x49, - 0x1a, 0x15, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x86, 0x08, 0x0a, 0x03, 0x48, 0x50, 0x41, 0x12, - 0xcc, 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x50, 0x41, 0x12, 0x1c, 0x2e, 0x63, 0x6c, + 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x73, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, + 0x73, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x20, 0x12, 0x09, + 0x47, 0x65, 0x74, 0x53, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x13, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, + 0x96, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0xd3, + 0x01, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, - 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x84, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5b, - 0x12, 0x59, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, - 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x68, 0x70, 0x61, 0x92, 0x41, 0x20, 0x12, 0x0b, - 0x4c, 0x69, 0x73, 0x74, 0x48, 0x50, 0x41, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x11, 0xe8, 0x8e, 0xb7, - 0xe5, 0x8f, 0x96, 0x20, 0x48, 0x50, 0x41, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xc9, - 0x01, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x48, 0x50, 0x41, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x83, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x62, 0x12, 0x60, 0x2f, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x68, 0x70, 0x61, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, - 0x41, 0x18, 0x12, 0x0a, 0x47, 0x65, 0x74, 0x48, 0x50, 0x41, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, - 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x48, 0x50, 0x41, 0x12, 0xb6, 0x01, 0x0a, 0x09, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x50, 0x41, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x22, 0x42, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x68, - 0x70, 0x61, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1b, 0x12, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x48, 0x50, 0x41, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, - 0x48, 0x50, 0x41, 0x12, 0xd5, 0x01, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x50, - 0x41, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x88, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x5c, 0x22, 0x57, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, + 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x73, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, + 0x23, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, + 0x13, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, + 0x6c, 0x61, 0x73, 0x73, 0x12, 0xda, 0x01, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, + 0x43, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x89, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x1a, 0x60, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x8f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x63, 0x1a, 0x5e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, - 0x68, 0x70, 0x61, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1b, - 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x50, 0x41, 0x20, 0x41, 0x50, 0x49, 0x1a, - 0x0a, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x48, 0x50, 0x41, 0x12, 0xd2, 0x01, 0x0a, 0x09, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x50, 0x41, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x86, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x62, - 0x2a, 0x60, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, - 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x68, 0x70, 0x61, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, - 0x65, 0x7d, 0x92, 0x41, 0x1b, 0x12, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x50, 0x41, - 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x48, 0x50, 0x41, - 0x32, 0xb0, 0x19, 0x0a, 0x09, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x12, 0xb5, - 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x52, 0x44, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x73, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x23, 0x12, 0x0c, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x13, 0xe6, 0x9b, + 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, + 0x73, 0x12, 0xd7, 0x01, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x43, 0x12, 0x1e, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8c, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x60, 0x2a, 0x5e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, + 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x73, 0x2f, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x23, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x53, 0x43, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x13, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x32, 0x8f, 0x09, 0x0a, 0x04, + 0x52, 0x42, 0x41, 0x43, 0x12, 0xe7, 0x01, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x41, 0x12, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa0, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x6d, 0x12, 0x6b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x72, 0x62, 0x61, 0x63, + 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x92, 0x41, 0x2a, 0x12, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x41, 0x20, 0x41, 0x50, 0x49, + 0x1a, 0x1c, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xe4, + 0x01, 0x0a, 0x05, 0x47, 0x65, 0x74, 0x53, 0x41, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x9f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x12, 0x72, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x7d, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x92, 0x41, 0x22, 0x12, 0x09, 0x47, 0x65, 0x74, 0x53, 0x41, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x15, + 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0xd2, 0x01, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x53, 0x41, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x87, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x59, 0x22, 0x54, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x2f, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x3a, + 0x01, 0x2a, 0x92, 0x41, 0x25, 0x12, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x41, 0x20, + 0x41, 0x50, 0x49, 0x1a, 0x15, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0xf0, 0x01, 0x0a, 0x08, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x41, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa5, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x77, 0x1a, 0x72, + 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x25, 0x12, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x53, 0x41, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x15, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0xed, 0x01, + 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x41, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, + 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa2, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x74, 0x2a, 0x72, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, + 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x72, 0x62, 0x61, 0x63, 0x2f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x25, 0x12, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x53, 0x41, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x15, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0x86, 0x08, + 0x0a, 0x03, 0x48, 0x50, 0x41, 0x12, 0xcc, 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x50, + 0x41, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x84, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5b, 0x12, 0x59, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, + 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x68, 0x70, + 0x61, 0x92, 0x41, 0x20, 0x12, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x50, 0x41, 0x20, 0x41, 0x50, + 0x49, 0x1a, 0x11, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x48, 0x50, 0x41, 0x20, 0xe5, 0x88, + 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xc9, 0x01, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x48, 0x50, 0x41, 0x12, + 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x83, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x62, 0x12, 0x60, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x68, 0x70, 0x61, 0x2f, 0x7b, + 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x18, 0x12, 0x0a, 0x47, 0x65, 0x74, 0x48, 0x50, 0x41, + 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x48, 0x50, 0x41, + 0x12, 0xb6, 0x01, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x50, 0x41, 0x12, 0x1e, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x52, 0x65, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6b, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x47, 0x22, 0x42, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x68, 0x70, 0x61, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1b, 0x12, 0x0d, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x50, 0x41, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe5, + 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0x48, 0x50, 0x41, 0x12, 0xd5, 0x01, 0x0a, 0x09, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x48, 0x50, 0x41, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x89, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x1a, 0x60, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, - 0x72, 0x64, 0x73, 0x92, 0x41, 0x20, 0x12, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x52, 0x44, 0x20, - 0x41, 0x50, 0x49, 0x1a, 0x11, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x43, 0x52, 0x44, 0x20, - 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xb2, 0x01, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x43, 0x52, - 0x44, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x68, 0x70, 0x61, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1b, 0x12, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x50, + 0x41, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0x48, 0x50, + 0x41, 0x12, 0xd2, 0x01, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x50, 0x41, 0x12, + 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x86, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x62, 0x2a, 0x60, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, + 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x7d, 0x2f, 0x68, 0x70, + 0x61, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x1b, 0x12, 0x0d, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x48, 0x50, 0x41, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe5, 0x88, 0xa0, 0xe9, + 0x99, 0xa4, 0x20, 0x48, 0x50, 0x41, 0x32, 0xb0, 0x19, 0x0a, 0x09, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x52, 0x65, 0x73, 0x12, 0xb5, 0x01, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x52, 0x44, + 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6e, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x92, 0x41, 0x20, 0x12, 0x0b, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x52, 0x44, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x11, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, + 0x96, 0x20, 0x43, 0x52, 0x44, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xb2, 0x01, 0x0a, + 0x06, 0x47, 0x65, 0x74, 0x43, 0x52, 0x44, 0x12, 0x1b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x6d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x12, 0x4a, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, + 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x18, 0x12, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x52, + 0x44, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0a, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x43, 0x52, + 0x44, 0x12, 0xde, 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6d, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x4c, 0x12, 0x4a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x94, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x5e, 0x12, 0x5c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, - 0x92, 0x41, 0x18, 0x12, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x52, 0x44, 0x20, 0x41, 0x50, 0x49, 0x1a, - 0x0a, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x43, 0x52, 0x44, 0x12, 0xde, 0x01, 0x0a, 0x08, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x1d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, + 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x92, 0x41, 0x2d, 0x12, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x20, + 0x41, 0x50, 0x49, 0x1a, 0x1d, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0xe8, 0x87, 0xaa, 0xe5, + 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x20, 0xe5, 0x88, 0x97, 0xe8, + 0xa1, 0xa8, 0x12, 0xdf, 0x01, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x1c, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x97, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x69, 0x12, 0x67, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, 0x6d, + 0x65, 0x7d, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x62, 0x6a, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x25, 0x12, + 0x0b, 0x47, 0x65, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x16, 0xe8, 0x8e, + 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, + 0x84, 0xe6, 0xba, 0x90, 0x12, 0x96, 0x02, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x4f, 0x62, 0x6a, + 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, + 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x22, 0xb7, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x12, 0x6f, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, + 0x73, 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x62, 0x6a, + 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x92, 0x41, 0x3d, + 0x12, 0x1a, 0x47, 0x65, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1f, 0xe8, 0x8e, + 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, + 0x84, 0xe6, 0xba, 0x90, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x9e, 0x02, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x44, 0x69, 0x66, 0x66, 0x12, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x52, 0x6f, 0x6c, + 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x94, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5e, 0x12, 0x5c, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xc6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7e, 0x12, 0x7c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x92, 0x41, 0x2d, 0x12, - 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1d, 0xe8, - 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, - 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x20, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xdf, 0x01, 0x0a, - 0x07, 0x47, 0x65, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x97, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x69, 0x12, 0x67, 0x2f, + 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6f, + 0x62, 0x6a, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x92, 0x41, 0x3f, 0x12, + 0x17, 0x47, 0x65, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x44, 0x69, 0x66, 0x66, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x24, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, + 0x20, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, + 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x69, 0x66, 0x66, 0x12, 0xfc, + 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x20, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, + 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xac, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x1a, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, + 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x43, 0x52, + 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x62, 0x6a, 0x4e, 0x61, 0x6d, 0x65, 0x7d, + 0x2f, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2f, 0x12, 0x0f, + 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x20, 0x41, 0x50, 0x49, 0x1a, + 0x1c, 0xe9, 0x87, 0x8d, 0xe6, 0x96, 0xb0, 0xe8, 0xb0, 0x83, 0xe5, 0xba, 0xa6, 0x20, 0xe8, 0x87, + 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x12, 0x8a, 0x02, + 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, - 0x64, 0x73, 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x62, - 0x6a, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x25, 0x12, 0x0b, 0x47, 0x65, 0x74, 0x43, 0x4f, - 0x62, 0x6a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x16, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0xe8, - 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x12, 0x96, - 0x02, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, - 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, - 0x6a, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb7, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x12, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x1a, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xba, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7f, 0x1a, 0x7a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x62, 0x6a, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, - 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x92, 0x41, 0x3d, 0x12, 0x1a, 0x47, 0x65, 0x74, 0x43, - 0x4f, 0x62, 0x6a, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1f, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0xe8, - 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x20, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x9e, 0x02, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, - 0x4f, 0x62, 0x6a, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x66, 0x66, 0x12, - 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, - 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, - 0xc6, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7e, 0x12, 0x7c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x43, - 0x52, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x62, 0x6a, 0x4e, 0x61, 0x6d, 0x65, - 0x7d, 0x2f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x92, 0x41, 0x3f, 0x12, 0x17, 0x47, 0x65, 0x74, 0x43, 0x4f, - 0x62, 0x6a, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x66, 0x66, 0x20, 0x41, - 0x50, 0x49, 0x1a, 0x24, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0xe8, 0x87, 0xaa, 0xe5, 0xae, - 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x69, 0x66, 0x66, 0x12, 0xfc, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, - 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, + 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x32, 0x12, 0x0f, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, + 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1f, 0xe5, 0x9b, 0x9e, 0xe6, 0xbb, + 0x9a, 0x20, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, + 0x90, 0x20, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xe0, 0x01, 0x0a, 0x0a, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, + 0x6a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xac, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x74, 0x1a, 0x6f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x92, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x61, 0x22, 0x5c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, - 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x63, 0x6f, 0x62, 0x6a, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x74, 0x61, - 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2f, 0x12, 0x0f, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1c, 0xe9, 0x87, 0x8d, 0xe6, 0x96, - 0xb0, 0xe8, 0xb0, 0x83, 0xe5, 0xba, 0xa6, 0x20, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, - 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x12, 0x8a, 0x02, 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x6c, - 0x6f, 0x75, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x52, - 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x3a, + 0x01, 0x2a, 0x92, 0x41, 0x28, 0x12, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x4f, 0x62, + 0x6a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x16, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0xe8, 0x87, + 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x12, 0xeb, 0x01, + 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x1f, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x43, 0x4f, 0x62, 0x6a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9d, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x6c, 0x1a, 0x67, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, + 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x62, 0x6a, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, + 0x92, 0x41, 0x28, 0x12, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x20, + 0x41, 0x50, 0x49, 0x1a, 0x16, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0xe8, 0x87, 0xaa, 0xe5, + 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x12, 0xa0, 0x02, 0x0a, 0x09, + 0x53, 0x63, 0x61, 0x6c, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, + 0x6a, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xba, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7f, - 0x1a, 0x7a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xd4, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x72, + 0x1a, 0x6d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x63, 0x6f, 0x62, 0x6a, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, - 0x74, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x7d, 0x3a, 0x01, 0x2a, 0x92, - 0x41, 0x32, 0x12, 0x0f, 0x52, 0x6f, 0x6c, 0x6c, 0x6f, 0x75, 0x74, 0x43, 0x4f, 0x62, 0x6a, 0x20, - 0x41, 0x50, 0x49, 0x1a, 0x1f, 0xe5, 0x9b, 0x9e, 0xe6, 0xbb, 0x9a, 0x20, 0xe8, 0x87, 0xaa, 0xe5, - 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x20, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0xe0, 0x01, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, - 0x4f, 0x62, 0x6a, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x63, 0x6f, 0x62, 0x6a, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x3a, + 0x01, 0x2a, 0x92, 0x41, 0x59, 0x12, 0x0d, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x43, 0x4f, 0x62, 0x6a, + 0x20, 0x41, 0x50, 0x49, 0x1a, 0x48, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, + 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe6, 0x89, 0xa9, 0xe7, 0xbc, 0xa9, 0xe5, 0xae, 0xb9, 0xef, 0xbc, + 0x88, 0xe4, 0xbb, 0x85, 0x20, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, + 0x6c, 0x53, 0x65, 0x74, 0x20, 0xe5, 0x8f, 0xaf, 0xe7, 0x94, 0xa8, 0xef, 0xbc, 0x89, 0x12, 0xe8, + 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x1f, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9a, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x69, 0x2a, 0x67, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, + 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, + 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x62, 0x6a, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, + 0x28, 0x12, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x20, 0x41, 0x50, + 0x49, 0x1a, 0x16, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0x20, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, + 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x12, 0xcd, 0x02, 0x0a, 0x10, 0x52, 0x65, + 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x50, 0x6f, 0x12, 0x28, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xf0, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x77, 0x1a, + 0x72, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, + 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x63, + 0x6f, 0x62, 0x6a, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x70, 0x12, 0x14, 0x52, 0x65, 0x73, 0x63, 0x68, + 0x65, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x50, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, + 0x58, 0xe9, 0x87, 0x8d, 0xe6, 0x96, 0xb0, 0xe8, 0xb0, 0x83, 0xe5, 0xba, 0xa6, 0xe8, 0x87, 0xaa, + 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe4, 0xb8, 0x8b, 0xe5, + 0xb1, 0x9e, 0xe7, 0x9a, 0x84, 0x20, 0x50, 0x6f, 0x64, 0xef, 0xbc, 0x88, 0xe4, 0xbb, 0x85, 0x20, + 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, + 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x20, + 0xe5, 0x8f, 0xaf, 0xe7, 0x94, 0xa8, 0xef, 0xbc, 0x89, 0x32, 0xd3, 0x13, 0x0a, 0x08, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0xe8, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4b, 0x38, + 0x53, 0x52, 0x65, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x26, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x4b, 0x38, 0x53, 0x52, 0x65, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x92, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x61, 0x22, 0x5c, 0x2f, 0x63, 0x6c, + 0x73, 0x70, 0x22, 0x8c, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x53, 0x12, 0x51, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, - 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, - 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x28, 0x12, - 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x20, 0x41, 0x50, 0x49, 0x1a, - 0x16, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0x20, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, - 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x12, 0xeb, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x65, 0x78, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x92, 0x41, + 0x30, 0x12, 0x15, 0x47, 0x65, 0x74, 0x4b, 0x38, 0x53, 0x52, 0x65, 0x73, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x17, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, + 0x20, 0x4b, 0x38, 0x53, 0x20, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe6, 0xa8, 0xa1, 0xe7, 0x89, + 0x88, 0x12, 0xc0, 0x01, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, + 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x1a, + 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x12, 0x48, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x92, 0x41, 0x1d, 0x12, 0x0d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0c, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe8, 0xae, 0xa2, 0xe9, + 0x98, 0x85, 0x30, 0x01, 0x12, 0xe8, 0x01, 0x0a, 0x18, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x61, 0x63, 0x68, + 0x65, 0x12, 0x2d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, 0x71, + 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7f, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x22, 0x2f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x79, 0x5f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x42, 0x12, 0x1e, 0x49, + 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x20, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x79, 0x20, 0x43, 0x61, 0x63, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x20, 0xe4, + 0xb8, 0xbb, 0xe5, 0x8a, 0xa8, 0xe4, 0xbd, 0xbf, 0x20, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x20, 0xe7, 0xbc, 0x93, 0xe5, 0xad, 0x98, 0xe5, 0xa4, 0xb1, 0xe6, 0x95, 0x88, 0x12, + 0xff, 0x01, 0x0a, 0x15, 0x46, 0x6f, 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x26, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x46, 0x6f, 0x72, + 0x6d, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, + 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x9f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5b, 0x22, 0x56, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, + 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x3b, 0x12, 0x1c, 0x46, 0x6f, 0x72, 0x6d, 0x20, 0x64, 0x61, 0x74, + 0x61, 0x20, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1b, 0xe8, 0xa1, 0xa8, 0xe5, 0x8d, 0x95, 0xe5, 0x8c, 0x96, 0xe6, + 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe6, 0xb8, 0xb2, 0xe6, 0x9f, 0x93, 0xe9, 0xa2, 0x84, 0xe8, 0xa7, + 0x88, 0x12, 0xc4, 0x01, 0x0a, 0x0a, 0x46, 0x6f, 0x72, 0x6d, 0x54, 0x6f, 0x59, 0x41, 0x4d, 0x4c, + 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x54, 0x6f, 0x59, 0x41, 0x4d, 0x4c, 0x52, 0x65, + 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x77, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x22, 0x38, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x74, 0x6f, 0x5f, 0x79, 0x61, 0x6d, + 0x6c, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x31, 0x12, 0x10, 0x46, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x6f, + 0x20, 0x59, 0x41, 0x4d, 0x4c, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1d, 0xe8, 0xa1, 0xa8, 0xe5, 0x8d, + 0x95, 0xe5, 0x8c, 0x96, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe8, 0xbd, 0xac, 0xe6, 0x8d, 0xa2, + 0xe4, 0xb8, 0xba, 0x20, 0x59, 0x41, 0x4d, 0x4c, 0x12, 0xc4, 0x01, 0x0a, 0x0a, 0x59, 0x41, 0x4d, + 0x4c, 0x54, 0x6f, 0x46, 0x6f, 0x72, 0x6d, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x59, 0x41, 0x4d, 0x4c, 0x54, + 0x6f, 0x46, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x77, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x22, 0x38, + 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x79, 0x61, 0x6d, 0x6c, + 0x5f, 0x74, 0x6f, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x31, 0x12, 0x10, + 0x59, 0x41, 0x4d, 0x4c, 0x20, 0x74, 0x6f, 0x20, 0x46, 0x6f, 0x72, 0x6d, 0x20, 0x41, 0x50, 0x49, + 0x1a, 0x1d, 0x59, 0x41, 0x4d, 0x4c, 0x20, 0xe8, 0xbd, 0xac, 0xe6, 0x8d, 0xa2, 0xe4, 0xb8, 0xba, + 0xe8, 0xa1, 0xa8, 0xe5, 0x8d, 0x95, 0xe5, 0x8c, 0x96, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x12, + 0x89, 0x02, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x46, + 0x6f, 0x72, 0x6d, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x2a, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa1, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, + 0x22, 0x37, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x66, 0x6f, + 0x72, 0x6d, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x5c, 0x12, + 0x24, 0x47, 0x65, 0x74, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x27, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, + 0x61, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x34, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0x8c, 0x87, + 0xe5, 0xae, 0x9a, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe8, 0xa1, 0xa8, 0xe5, 0x8d, 0x95, 0x20, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0xef, 0xbc, 0x8c, 0xe4, 0xb8, 0x8d, 0xe5, 0xb8, 0xa6, 0xe9, + 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x12, 0xf0, 0x01, 0x0a, 0x10, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x12, 0x25, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9d, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6c, 0x1a, 0x67, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x96, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x12, 0x4a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, - 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6f, - 0x62, 0x6a, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x28, 0x12, 0x0e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x16, 0xe6, - 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0x20, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, - 0xb5, 0x84, 0xe6, 0xba, 0x90, 0x12, 0xa0, 0x02, 0x0a, 0x09, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x43, - 0x4f, 0x62, 0x6a, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x53, 0x63, 0x61, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x22, 0xd4, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x72, 0x1a, 0x6d, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, - 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x62, 0x6a, 0x4e, 0x61, - 0x6d, 0x65, 0x7d, 0x2f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x59, 0x12, - 0x0d, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x48, - 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe6, - 0x89, 0xa9, 0xe7, 0xbc, 0xa9, 0xe5, 0xae, 0xb9, 0xef, 0xbc, 0x88, 0xe4, 0xbb, 0x85, 0x20, 0x47, - 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x47, - 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x20, 0xe5, - 0x8f, 0xaf, 0xe7, 0x94, 0xa8, 0xef, 0xbc, 0x89, 0x12, 0xe8, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x69, 0x2a, - 0x67, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, - 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, 0x43, 0x52, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x63, - 0x6f, 0x62, 0x6a, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x92, 0x41, 0x28, 0x12, 0x0e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x16, 0xe5, 0x88, 0xa0, - 0xe9, 0x99, 0xa4, 0x20, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, 0xe8, 0xb5, 0x84, - 0xe6, 0xba, 0x90, 0x12, 0xcd, 0x02, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, - 0x6c, 0x65, 0x43, 0x4f, 0x62, 0x6a, 0x50, 0x6f, 0x12, 0x28, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x4f, 0x62, 0x6a, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x22, 0xf0, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x77, 0x1a, 0x72, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x72, 0x64, 0x73, 0x2f, 0x7b, - 0x43, 0x52, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, - 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x62, 0x6a, 0x4e, 0x61, 0x6d, - 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x3a, 0x01, 0x2a, - 0x92, 0x41, 0x70, 0x12, 0x14, 0x52, 0x65, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x43, - 0x4f, 0x62, 0x6a, 0x50, 0x6f, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x58, 0xe9, 0x87, 0x8d, 0xe6, 0x96, - 0xb0, 0xe8, 0xb0, 0x83, 0xe5, 0xba, 0xa6, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, 0x89, - 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe4, 0xb8, 0x8b, 0xe5, 0xb1, 0x9e, 0xe7, 0x9a, 0x84, 0x20, - 0x50, 0x6f, 0x64, 0xef, 0xbc, 0x88, 0xe4, 0xbb, 0x85, 0x20, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2c, 0x20, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x20, 0xe5, 0x8f, 0xaf, 0xe7, 0x94, 0xa8, - 0xef, 0xbc, 0x89, 0x32, 0xd3, 0x13, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x12, 0xe8, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4b, 0x38, 0x53, 0x52, 0x65, 0x73, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x26, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4b, 0x38, 0x53, - 0x52, 0x65, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x66, + 0x6f, 0x72, 0x6d, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x92, 0x41, 0x41, 0x12, 0x1e, 0x47, + 0x65, 0x74, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x27, 0x73, 0x20, 0x66, 0x6f, + 0x72, 0x6d, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1f, 0xe8, + 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0x8c, 0x87, 0xe5, 0xae, 0x9a, 0xe8, 0xb5, 0x84, 0xe6, 0xba, + 0x90, 0xe8, 0xa1, 0xa8, 0xe5, 0x8d, 0x95, 0x20, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x82, + 0x03, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x41, 0x50, 0x49, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8c, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x53, 0x12, 0x51, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x2f, 0x6d, - 0x61, 0x6e, 0x69, 0x66, 0x65, 0x73, 0x74, 0x73, 0x92, 0x41, 0x30, 0x12, 0x15, 0x47, 0x65, 0x74, - 0x4b, 0x38, 0x53, 0x52, 0x65, 0x73, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x41, - 0x50, 0x49, 0x1a, 0x17, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x20, 0x4b, 0x38, 0x53, 0x20, 0xe8, - 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe6, 0xa8, 0xa1, 0xe7, 0x89, 0x88, 0x12, 0xc0, 0x01, 0x0a, 0x09, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1e, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x4a, 0x12, 0x48, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x44, 0x7d, 0x2f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x92, 0x41, 0x1d, 0x12, - 0x0d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x0c, - 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe8, 0xae, 0xa2, 0xe9, 0x98, 0x85, 0x30, 0x01, 0x12, 0xe8, - 0x01, 0x0a, 0x18, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x61, 0x63, 0x68, 0x65, 0x12, 0x2d, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x49, - 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x79, 0x43, 0x61, 0x63, 0x68, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, - 0x22, 0x2f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x63, 0x68, - 0x65, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x42, 0x12, 0x1e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x20, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x20, 0x43, 0x61, - 0x63, 0x68, 0x65, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x20, 0xe4, 0xb8, 0xbb, 0xe5, 0x8a, 0xa8, 0xe4, - 0xbd, 0xbf, 0x20, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x20, 0xe7, 0xbc, 0x93, - 0xe5, 0xad, 0x98, 0xe5, 0xa4, 0xb1, 0xe6, 0x95, 0x88, 0x12, 0xff, 0x01, 0x0a, 0x15, 0x46, 0x6f, - 0x72, 0x6d, 0x44, 0x61, 0x74, 0x61, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x50, 0x72, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x12, 0x26, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x52, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9f, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x5b, 0x22, 0x56, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x44, 0x7d, 0x2f, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x6e, 0x69, 0x66, 0x65, - 0x73, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x3b, - 0x12, 0x1c, 0x46, 0x6f, 0x72, 0x6d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x72, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1b, - 0xe8, 0xa1, 0xa8, 0xe5, 0x8d, 0x95, 0xe5, 0x8c, 0x96, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe6, - 0xb8, 0xb2, 0xe6, 0x9f, 0x93, 0xe9, 0xa2, 0x84, 0xe8, 0xa7, 0x88, 0x12, 0xc4, 0x01, 0x0a, 0x0a, - 0x46, 0x6f, 0x72, 0x6d, 0x54, 0x6f, 0x59, 0x41, 0x4d, 0x4c, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x46, 0x6f, - 0x72, 0x6d, 0x54, 0x6f, 0x59, 0x41, 0x4d, 0x4c, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x77, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x3d, 0x22, 0x38, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x66, - 0x6f, 0x72, 0x6d, 0x5f, 0x74, 0x6f, 0x5f, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x01, 0x2a, 0x92, 0x41, - 0x31, 0x12, 0x10, 0x46, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x6f, 0x20, 0x59, 0x41, 0x4d, 0x4c, 0x20, - 0x41, 0x50, 0x49, 0x1a, 0x1d, 0xe8, 0xa1, 0xa8, 0xe5, 0x8d, 0x95, 0xe5, 0x8c, 0x96, 0xe6, 0x95, - 0xb0, 0xe6, 0x8d, 0xae, 0xe8, 0xbd, 0xac, 0xe6, 0x8d, 0xa2, 0xe4, 0xb8, 0xba, 0x20, 0x59, 0x41, - 0x4d, 0x4c, 0x12, 0xc4, 0x01, 0x0a, 0x0a, 0x59, 0x41, 0x4d, 0x4c, 0x54, 0x6f, 0x46, 0x6f, 0x72, - 0x6d, 0x12, 0x1f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x59, 0x41, 0x4d, 0x4c, 0x54, 0x6f, 0x46, 0x6f, 0x72, 0x6d, 0x52, - 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x77, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x22, 0x38, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x73, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, + 0x65, 0x64, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x92, + 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0xa5, 0x01, 0x12, 0x5a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x79, 0x61, 0x6d, 0x6c, 0x5f, 0x74, 0x6f, 0x5f, 0x66, 0x6f, - 0x72, 0x6d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x31, 0x12, 0x10, 0x59, 0x41, 0x4d, 0x4c, 0x20, 0x74, - 0x6f, 0x20, 0x46, 0x6f, 0x72, 0x6d, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1d, 0x59, 0x41, 0x4d, 0x4c, - 0x20, 0xe8, 0xbd, 0xac, 0xe6, 0x8d, 0xa2, 0xe4, 0xb8, 0xba, 0xe8, 0xa1, 0xa8, 0xe5, 0x8d, 0x95, - 0xe5, 0x8c, 0x96, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x12, 0x89, 0x02, 0x0a, 0x15, 0x47, 0x65, - 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x12, 0x2a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, - 0x65, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x1a, - 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x22, 0xa1, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x22, 0x37, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x5c, 0x12, 0x24, 0x47, 0x65, 0x74, 0x20, 0x6d, - 0x75, 0x6c, 0x74, 0x69, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x27, 0x73, 0x20, - 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x20, 0x41, 0x50, 0x49, 0x1a, - 0x34, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0x8c, 0x87, 0xe5, 0xae, 0x9a, 0xe8, 0xb5, 0x84, - 0xe6, 0xba, 0x90, 0xe8, 0xa1, 0xa8, 0xe5, 0x8d, 0x95, 0x20, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0xef, 0xbc, 0x8c, 0xe4, 0xb8, 0x8d, 0xe5, 0xb8, 0xa6, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe4, - 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x12, 0xf0, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x46, 0x6f, 0x72, 0x6d, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x25, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x46, 0x6f, 0x72, 0x6d, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, + 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x73, 0x75, + 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x5a, 0x47, 0x12, 0x45, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, + 0x7d, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x92, 0x41, 0x63, + 0x12, 0x2d, 0x47, 0x65, 0x74, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x27, 0x73, + 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x61, 0x70, 0x69, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x1a, + 0x32, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0x8c, 0x87, 0xe5, 0xae, 0x9a, 0xe8, 0xb5, 0x84, + 0xe6, 0xba, 0x90, 0xe5, 0x8f, 0xaf, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, 0xe8, 0xa1, 0xa8, 0xe5, + 0x8d, 0x95, 0xe5, 0x8c, 0x96, 0xe7, 0x9a, 0x84, 0x20, 0x41, 0x50, 0x49, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x99, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x26, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x96, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x12, 0x4a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0xbd, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x12, 0x4f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x92, 0x41, 0x41, 0x12, 0x1e, 0x47, 0x65, 0x74, 0x20, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x27, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x20, 0x41, 0x50, 0x49, 0x1a, 0x1f, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, - 0x8c, 0x87, 0xe5, 0xae, 0x9a, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe8, 0xa1, 0xa8, 0xe5, 0x8d, - 0x95, 0x20, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x82, 0x03, 0x0a, 0x1b, 0x47, 0x65, 0x74, - 0x46, 0x6f, 0x72, 0x6d, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x41, 0x50, 0x49, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x46, - 0x6f, 0x72, 0x6d, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x41, 0x70, 0x69, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x92, 0x02, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0xa5, 0x01, 0x12, 0x5a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x44, 0x7d, 0x2f, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5a, 0x47, - 0x12, 0x45, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x66, 0x6f, 0x72, 0x6d, - 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x92, 0x41, 0x63, 0x12, 0x2d, 0x47, 0x65, 0x74, 0x20, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x27, 0x73, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x20, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x1a, 0x32, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, - 0x96, 0xe6, 0x8c, 0x87, 0xe5, 0xae, 0x9a, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe5, 0x8f, 0xaf, - 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, 0xe8, 0xa1, 0xa8, 0xe5, 0x8d, 0x95, 0xe5, 0x8c, 0x96, 0xe7, - 0x9a, 0x84, 0x20, 0x41, 0x50, 0x49, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x99, 0x02, - 0x0a, 0x11, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x49, 0x74, - 0x65, 0x6d, 0x73, 0x12, 0x26, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x53, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xbd, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x51, 0x12, 0x4f, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x92, 0x41, 0x63, 0x12, 0x24, 0x47, 0x65, + 0x74, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x27, 0x73, 0x20, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x6f, + 0x72, 0x6d, 0x1a, 0x3b, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, + 0xe4, 0xb8, 0x8b, 0xe6, 0x8b, 0x89, 0xe6, 0xa1, 0x86, 0xe9, 0x80, 0x89, 0xe9, 0xa1, 0xb9, 0xe7, + 0x9a, 0x84, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xef, 0xbc, + 0x88, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0xef, 0xbc, 0x89, 0x32, + 0xb3, 0x0e, 0x0a, 0x0a, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0xca, + 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x3a, 0x12, 0x38, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x44, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x92, 0x41, 0x63, 0x12, 0x24, 0x47, 0x65, 0x74, 0x20, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x27, 0x73, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x69, 0x74, - 0x65, 0x6d, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x1a, 0x3b, 0xe8, 0x8e, - 0xb7, 0xe5, 0x8f, 0x96, 0xe7, 0x94, 0xa8, 0xe4, 0xba, 0x8e, 0xe4, 0xb8, 0x8b, 0xe6, 0x8b, 0x89, - 0xe6, 0xa1, 0x86, 0xe9, 0x80, 0x89, 0xe9, 0xa1, 0xb9, 0xe7, 0x9a, 0x84, 0xe8, 0xb5, 0x84, 0xe6, - 0xba, 0x90, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xef, 0xbc, 0x88, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x49, 0x74, 0x65, 0x6d, 0x73, 0xef, 0xbc, 0x89, 0x32, 0xb3, 0x0e, 0x0a, 0x0a, 0x56, 0x69, - 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0xca, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, - 0x74, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x24, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x12, 0x38, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x92, 0x41, 0x2c, 0x12, 0x10, 0x47, 0x65, 0x74, 0x20, 0x76, - 0x69, 0x65, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x1a, 0x18, 0xe8, 0x8e, 0xb7, - 0xe5, 0x8f, 0x96, 0xe8, 0xa7, 0x86, 0xe5, 0x9b, 0xbe, 0xe9, 0x85, 0x8d, 0xe7, 0xbd, 0xae, 0xe5, - 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xcd, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x69, 0x65, - 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x22, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, - 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x3f, 0x12, 0x3d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x76, - 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x92, 0x41, 0x32, 0x12, 0x16, 0x47, 0x65, 0x74, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x1a, 0x18, 0xe8, 0x8e, 0xb7, - 0xe5, 0x8f, 0x96, 0xe8, 0xa7, 0x86, 0xe5, 0x9b, 0xbe, 0xe9, 0x85, 0x8d, 0xe7, 0xbd, 0xae, 0xe8, - 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x12, 0xc8, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, + 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x92, 0x41, 0x2c, 0x12, + 0x10, 0x47, 0x65, 0x74, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x73, 0x1a, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe8, 0xa7, 0x86, 0xe5, 0x9b, 0xbe, 0xe9, + 0x85, 0x8d, 0xe7, 0xbd, 0xae, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xcd, 0x01, 0x0a, 0x0d, + 0x47, 0x65, 0x74, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x22, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, + 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x7a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, + 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x32, 0x12, 0x16, 0x47, 0x65, 0x74, 0x20, 0x76, + 0x69, 0x65, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x1a, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe8, 0xa7, 0x86, 0xe5, 0x9b, 0xbe, 0xe9, + 0x85, 0x8d, 0xe7, 0xbd, 0xae, 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x12, 0xc8, 0x01, 0x0a, 0x10, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x25, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x22, 0x38, 0x2f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x29, 0x12, 0x12, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x1a, 0x13, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe8, 0xa7, 0x86, 0xe5, 0x9b, 0xbe, 0xe9, + 0x85, 0x8d, 0xe7, 0xbd, 0xae, 0x31, 0x12, 0xcc, 0x01, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x1a, 0x3d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x28, 0x12, 0x12, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x1a, 0x12, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0xe8, 0xa7, 0x86, 0xe5, 0x9b, 0xbe, 0xe9, + 0x85, 0x8d, 0xe7, 0xbd, 0xae, 0x12, 0xd5, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x22, 0x38, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x7c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x1a, 0x44, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x29, 0x12, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, - 0x76, 0x69, 0x65, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x13, 0xe5, 0x88, 0x9b, - 0xe5, 0xbb, 0xba, 0xe8, 0xa7, 0x86, 0xe5, 0x9b, 0xbe, 0xe9, 0x85, 0x8d, 0xe7, 0xbd, 0xae, 0x31, - 0x12, 0xcc, 0x01, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, - 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, + 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x01, 0x2a, + 0x92, 0x41, 0x2a, 0x12, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, + 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0x0f, 0xe8, 0xa7, + 0x86, 0xe5, 0x9b, 0xbe, 0xe9, 0x87, 0x8d, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0x12, 0xcf, 0x01, + 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x25, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x76, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x2a, + 0x3d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x76, 0x69, 0x65, + 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, + 0x2e, 0x12, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x18, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe5, 0x8d, 0x95, + 0xe4, 0xb8, 0xaa, 0xe8, 0xa7, 0x86, 0xe5, 0x9b, 0xbe, 0xe9, 0x85, 0x8d, 0xe7, 0xbd, 0xae, 0x12, + 0xd1, 0x01, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x12, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x53, + 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x22, + 0x41, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x75, 0x67, 0x67, 0x65, + 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2b, 0x12, 0x15, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x1a, + 0x12, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xe8, 0x81, 0x94, + 0xe6, 0x83, 0xb3, 0x12, 0xb4, 0x01, 0x0a, 0x0c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x75, 0x67, + 0x67, 0x65, 0x73, 0x74, 0x12, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x53, 0x75, 0x67, 0x67, + 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x64, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x22, 0x39, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, + 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1d, 0x12, 0x0d, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x20, 0xe8, 0x81, 0x94, 0xe6, 0x83, 0xb3, 0x12, 0xb8, 0x01, 0x0a, 0x0d, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x12, 0x20, 0x2e, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, + 0x56, 0x69, 0x65, 0x77, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x67, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x3f, 0x22, 0x3a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x7d, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, + 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1f, 0x12, 0x0e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x73, + 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x1a, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0xe8, + 0x81, 0x94, 0xe6, 0x83, 0xb3, 0x32, 0xfc, 0x31, 0x0a, 0x0b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x12, 0xe3, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x89, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x12, 0x40, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x3e, 0x12, 0x19, 0x47, + 0x65, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x1a, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, + 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, + 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x12, 0xe2, 0x01, 0x0a, 0x11, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x26, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x82, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x73, 0x92, 0x41, 0x3c, 0x12, 0x17, 0x47, 0x65, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x21, 0xe8, + 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, + 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, + 0x12, 0xdc, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x7d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x22, 0x3b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x34, 0x12, 0x15, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x1a, 0x1b, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, + 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0x12, + 0xe2, 0x01, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x82, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x1a, 0x40, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x34, + 0x12, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x1b, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0xe6, + 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, + 0xb6, 0xe5, 0xa4, 0xb9, 0x12, 0xde, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x73, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x42, 0x1a, 0x3d, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, - 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x28, 0x12, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, - 0x76, 0x69, 0x65, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x12, 0xe6, 0x9b, 0xb4, - 0xe6, 0x96, 0xb0, 0xe8, 0xa7, 0x86, 0xe5, 0x9b, 0xbe, 0xe9, 0x85, 0x8d, 0xe7, 0xbd, 0xae, 0x12, - 0xd5, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x56, 0x69, - 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x7f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x2a, 0x40, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, + 0x34, 0x12, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x1b, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, + 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, + 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0x12, 0xe1, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x70, 0x79, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7c, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x49, 0x1a, 0x44, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x76, - 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x2f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x2a, 0x12, 0x17, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0x0f, 0xe8, 0xa7, 0x86, 0xe5, 0x9b, 0xbe, 0xe9, 0x87, - 0x8d, 0xe5, 0x91, 0xbd, 0xe5, 0x90, 0x8d, 0x12, 0xcf, 0x01, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x76, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x2a, 0x3d, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x2e, 0x12, 0x12, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x20, 0x76, 0x69, 0x65, 0x77, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, - 0x18, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe5, 0x8d, 0x95, 0xe4, 0xb8, 0xaa, 0xe8, 0xa7, 0x86, - 0xe5, 0x9b, 0xbe, 0xe9, 0x85, 0x8d, 0xe7, 0xbd, 0xae, 0x12, 0xd1, 0x01, 0x0a, 0x13, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, - 0x74, 0x12, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, + 0x6f, 0x70, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x7a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x22, 0x41, 0x2f, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x92, - 0x41, 0x2b, 0x12, 0x15, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, - 0x65, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x1a, 0x12, 0xe8, 0xb5, 0x84, 0xe6, 0xba, - 0x90, 0xe5, 0x90, 0x8d, 0xe7, 0xa7, 0xb0, 0xe8, 0x81, 0x94, 0xe6, 0x83, 0xb3, 0x12, 0xb4, 0x01, - 0x0a, 0x0c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x12, 0x20, + 0x70, 0x22, 0x85, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x22, 0x45, 0x2f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, + 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x70, + 0x79, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x32, 0x12, 0x13, 0x43, 0x6f, 0x70, 0x79, 0x20, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x1b, 0xe5, 0xa4, + 0x8d, 0xe5, 0x88, 0xb6, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, + 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0x12, 0x93, 0x02, 0x0a, 0x1a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x43, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa5, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5a, + 0x22, 0x55, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x44, 0x7d, 0x2f, 0x63, + 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x42, 0x12, 0x1d, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x1a, 0x21, 0xe5, 0x88, + 0x9b, 0xe5, 0xbb, 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, + 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xe6, 0x94, 0xb6, 0xe8, 0x97, 0x8f, 0x12, + 0x90, 0x02, 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, - 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x64, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x22, 0x39, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x1a, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa2, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x57, 0x2a, 0x55, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x7d, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, - 0x74, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1d, 0x12, 0x0d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x73, - 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0xe8, 0x81, - 0x94, 0xe6, 0x83, 0xb3, 0x12, 0xb8, 0x01, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x53, - 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x12, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x56, 0x69, 0x65, 0x77, 0x53, 0x75, - 0x67, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, + 0x65, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x73, 0x92, 0x41, 0x42, + 0x12, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x1a, + 0x21, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, + 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xe6, 0x94, 0xb6, 0xe8, + 0x97, 0x8f, 0x12, 0xef, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x8f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x92, 0x41, 0x41, 0x12, 0x1c, 0x47, 0x65, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x1a, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, + 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe8, 0xaf, + 0xa6, 0xe6, 0x83, 0x85, 0x12, 0x80, 0x02, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x29, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x22, 0x3a, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x5f, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x1f, - 0x12, 0x0e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x73, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, - 0x1a, 0x0d, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0xe8, 0x81, 0x94, 0xe6, 0x83, 0xb3, 0x32, - 0xf3, 0x33, 0x0a, 0x0b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x12, - 0xe3, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x89, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x42, 0x12, 0x40, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x3e, 0x12, 0x19, 0x47, 0x65, 0x74, 0x20, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x1a, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, - 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xe8, - 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x12, 0xe2, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x82, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x92, 0x41, 0x3c, 0x12, 0x17, - 0x47, 0x65, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, - 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, - 0xb6, 0xe5, 0xa4, 0xb9, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xdc, 0x01, 0x0a, 0x13, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x28, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9a, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x52, 0x12, 0x50, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x44, 0x7d, 0x2f, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x73, 0x92, 0x41, 0x3f, 0x12, 0x1a, 0x47, 0x65, 0x74, 0x20, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, + 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, + 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, + 0xae, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xfb, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x2b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7d, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x40, 0x22, 0x3b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x3a, - 0x01, 0x2a, 0x92, 0x41, 0x34, 0x12, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x1b, 0xe5, 0x88, - 0x9b, 0xe5, 0xbb, 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, - 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0x12, 0xe2, 0x01, 0x0a, 0x13, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x28, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x82, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x45, 0x1a, 0x40, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x34, 0x12, 0x15, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x1a, 0x1b, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, - 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0x12, 0xde, - 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x28, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7f, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x2a, 0x40, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, + 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x95, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x55, 0x22, 0x50, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x34, 0x12, 0x15, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x1a, 0x1b, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, - 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0x12, - 0xdc, 0x01, 0x0a, 0x11, 0x43, 0x6f, 0x70, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x80, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x45, 0x22, 0x40, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x32, 0x12, 0x13, 0x43, 0x6f, - 0x70, 0x79, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x1a, 0x1b, 0xe5, 0xa4, 0x8d, 0xe5, 0x88, 0xb6, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, - 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0x12, 0x86, - 0x02, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x98, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x73, 0x92, 0x41, 0x4a, 0x12, 0x1f, 0x47, - 0x65, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x27, - 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, - 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xe6, 0x94, 0xb6, 0xe8, 0x97, - 0x8f, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0x93, 0x02, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x43, - 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x2f, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa5, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5a, 0x22, 0x55, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x44, 0x7d, 0x2f, 0x63, 0x6f, 0x6c, - 0x6c, 0x65, 0x63, 0x74, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x42, 0x12, 0x1d, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x1a, 0x21, 0xe5, 0x88, 0x9b, 0xe5, - 0xbb, 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, - 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xe6, 0x94, 0xb6, 0xe8, 0x97, 0x8f, 0x12, 0x83, 0x02, - 0x0a, 0x1a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x2f, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, + 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x44, 0x7d, 0x2f, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x37, 0x12, 0x18, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x1b, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, + 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, + 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x12, 0xee, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x2b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x95, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, - 0x42, 0x12, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x20, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, - 0x1a, 0x21, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, - 0x87, 0xe4, 0xbb, 0xb6, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0xa4, 0xb9, 0xe6, 0x94, 0xb6, - 0xe8, 0x97, 0x8f, 0x12, 0xef, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, - 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x8f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x92, 0x41, 0x41, 0x12, 0x1c, 0x47, 0x65, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x20, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x1a, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, - 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0xe8, - 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x12, 0x80, 0x02, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x29, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x9a, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x52, 0x12, 0x50, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x88, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x48, 0x1a, 0x43, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x44, 0x7d, 0x2f, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x73, 0x92, 0x41, 0x3f, 0x12, 0x1a, 0x47, 0x65, 0x74, 0x20, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x20, 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, - 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, 0xb0, 0xe6, - 0x8d, 0xae, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xfb, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x2b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, - 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x95, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x55, 0x22, 0x50, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x44, 0x7d, 0x2f, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x37, 0x12, - 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x1b, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, - 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, - 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x12, 0xee, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x37, 0x12, + 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x1b, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, + 0xb0, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, + 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x12, 0xeb, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x88, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x1a, 0x43, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x85, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x2a, 0x43, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x37, - 0x12, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x1b, 0xe6, 0x9b, 0xb4, 0xe6, - 0x96, 0xb0, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, - 0x83, 0xe6, 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x12, 0xeb, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x2b, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x1a, + 0x64, 0x61, 0x74, 0x61, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x37, 0x12, 0x18, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x1b, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe6, + 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, 0x95, + 0xb0, 0xe6, 0x8d, 0xae, 0x12, 0xe8, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, + 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x8a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x12, 0x42, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, + 0x41, 0x3d, 0x12, 0x1b, 0x47, 0x65, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x1a, + 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, + 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x12, + 0xde, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x85, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x2a, 0x43, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x80, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x22, 0x3b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, - 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x37, 0x12, 0x18, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x1b, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, - 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x85, 0x83, 0xe6, - 0x95, 0xb0, 0xe6, 0x8d, 0xae, 0x12, 0xe8, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x8a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x12, 0x42, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x92, 0x41, 0x3d, 0x12, 0x1b, 0x47, 0x65, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x1a, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, - 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, - 0x12, 0xde, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x27, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, - 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x80, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x22, 0x3b, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x37, 0x12, 0x1b, 0x47, 0x65, 0x74, 0x20, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x1a, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, - 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe8, 0xaf, 0xa6, 0xe6, 0x83, - 0x85, 0x12, 0xf4, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x90, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x12, 0x4a, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, - 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x92, 0x41, 0x3b, 0x12, 0x19, 0x47, - 0x65, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, - 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, - 0x9c, 0xac, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xef, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8b, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x22, 0x4a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x33, 0x12, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x1a, 0x18, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, - 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0x12, 0xe4, 0x01, 0x0a, 0x15, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x80, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x2a, 0x42, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x33, 0x12, 0x17, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x18, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe6, + 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x37, 0x12, 0x1b, 0x47, 0x65, 0x74, 0x20, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x1a, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, + 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, + 0x12, 0xf4, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x90, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x12, 0x4a, 0x2f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, 0x7d, + 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x92, 0x41, 0x3b, 0x12, 0x19, 0x47, 0x65, + 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, - 0xac, 0x12, 0xc7, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, + 0xac, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xef, 0x01, 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x2a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8b, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x4f, 0x22, 0x4a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x49, 0x44, 0x7d, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x33, 0x12, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, + 0x18, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, + 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, 0x12, 0xe4, 0x01, 0x0a, 0x15, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6c, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x22, 0x38, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, - 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x65, 0x74, 0x73, 0x3a, - 0x01, 0x2a, 0x92, 0x41, 0x26, 0x12, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x65, 0x74, 0x1a, 0x0f, 0xe5, 0x88, 0x9b, 0xe5, - 0xbb, 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0x12, 0xf5, 0x01, 0x0a, 0x19, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x56, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x89, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, - 0x22, 0x3e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, - 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x3d, 0x12, 0x1b, 0x47, 0x65, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x6c, - 0x69, 0x73, 0x74, 0x1a, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, - 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x8f, 0x98, 0xe9, 0x87, 0x8f, 0xe5, 0x88, 0x97, - 0xe8, 0xa1, 0xa8, 0x12, 0xce, 0x01, 0x0a, 0x13, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x27, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x22, 0x3c, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x2f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x26, 0x12, 0x10, - 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x1a, 0x12, 0xe9, 0x83, 0xa8, 0xe7, 0xbd, 0xb2, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, - 0x87, 0xe4, 0xbb, 0xb6, 0x12, 0xcb, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x27, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, - 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x22, 0x3b, 0x2f, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, - 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x25, 0x12, 0x0f, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x12, - 0xe9, 0x83, 0xa8, 0xe7, 0xbd, 0xb2, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, - 0xbb, 0xb6, 0x12, 0xc2, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x12, 0x35, 0x2f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, - 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x65, 0x6e, 0x76, 0x73, 0x2f, 0x7b, - 0x69, 0x64, 0x7d, 0x92, 0x41, 0x31, 0x12, 0x15, 0x47, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x76, 0x20, - 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x1a, 0x18, 0xe8, - 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, - 0x86, 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x12, 0xc4, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, - 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x20, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x80, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x2a, 0x42, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, + 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x33, 0x12, 0x17, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x18, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe6, 0xa8, + 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe7, 0x89, 0x88, 0xe6, 0x9c, 0xac, + 0x12, 0xc7, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x12, 0x26, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6c, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x3d, 0x22, 0x38, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x65, 0x74, 0x73, 0x3a, 0x01, + 0x2a, 0x92, 0x41, 0x26, 0x12, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x73, 0x65, 0x74, 0x1a, 0x0f, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, + 0xba, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe9, 0x9b, 0x86, 0x12, 0xf5, 0x01, 0x0a, 0x19, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x89, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x22, + 0x3e, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x3a, + 0x01, 0x2a, 0x92, 0x41, 0x3d, 0x12, 0x1b, 0x47, 0x65, 0x74, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x20, 0x6c, 0x69, + 0x73, 0x74, 0x1a, 0x1e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, + 0xe6, 0x96, 0x87, 0xe4, 0xbb, 0xb6, 0xe5, 0x8f, 0x98, 0xe9, 0x87, 0x8f, 0xe5, 0x88, 0x97, 0xe8, + 0xa1, 0xa8, 0x12, 0xce, 0x01, 0x0a, 0x13, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x27, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x70, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x22, 0x3c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x65, 0x6e, 0x76, 0x73, 0x92, 0x41, 0x30, 0x12, 0x14, - 0x47, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x76, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x73, 0x20, - 0x6c, 0x69, 0x73, 0x74, 0x1a, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe7, 0x8e, 0xaf, 0xe5, - 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xbc, - 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x30, - 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x65, 0x6e, 0x76, 0x73, - 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x27, 0x12, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x65, - 0x6e, 0x76, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x1a, 0x12, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, - 0xba, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0x12, 0xc1, 0x01, - 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, + 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, + 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x26, 0x12, 0x10, 0x50, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, + 0x12, 0xe9, 0x83, 0xa8, 0xe7, 0xbd, 0xb2, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, + 0xe4, 0xbb, 0xb6, 0x12, 0xcb, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x27, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x6e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x22, 0x3b, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x2f, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x25, 0x12, 0x0f, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x1a, 0x12, 0xe9, + 0x83, 0xa8, 0xe7, 0xbd, 0xb2, 0xe6, 0xa8, 0xa1, 0xe6, 0x9d, 0xbf, 0xe6, 0x96, 0x87, 0xe4, 0xbb, + 0xb6, 0x12, 0xc2, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x12, 0x35, 0x2f, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, + 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x65, 0x6e, 0x76, 0x73, 0x2f, 0x7b, 0x69, + 0x64, 0x7d, 0x92, 0x41, 0x31, 0x12, 0x15, 0x47, 0x65, 0x74, 0x20, 0x65, 0x6e, 0x76, 0x20, 0x6d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x1a, 0x18, 0xe8, 0x8e, + 0xb7, 0xe5, 0x8f, 0x96, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, + 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x12, 0xc4, 0x01, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x45, + 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x65, 0x6e, 0x76, 0x73, 0x92, 0x41, 0x30, 0x12, 0x14, 0x47, + 0x65, 0x74, 0x20, 0x65, 0x6e, 0x76, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x73, 0x20, 0x6c, + 0x69, 0x73, 0x74, 0x1a, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, + 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0xbc, 0x01, + 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, + 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x1a, 0x35, 0x2f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x22, 0x30, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x65, 0x6e, 0x76, 0x73, 0x2f, - 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x27, 0x12, 0x11, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x20, 0x65, 0x6e, 0x76, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x1a, 0x12, 0xe6, - 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, - 0x86, 0x12, 0xd0, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x76, 0x4d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x45, - 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x41, 0x1a, 0x3c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x65, - 0x6e, 0x76, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x3a, - 0x01, 0x2a, 0x92, 0x41, 0x2f, 0x12, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x65, 0x6e, - 0x76, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0x15, 0xe7, - 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0xe9, 0x87, 0x8d, 0xe5, 0x91, - 0xbd, 0xe5, 0x90, 0x8d, 0x12, 0xbe, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, - 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, - 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x67, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x37, 0x2a, 0x35, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x7d, 0x2f, 0x65, 0x6e, 0x76, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x27, 0x12, 0x11, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x65, 0x6e, 0x76, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, - 0x65, 0x1a, 0x12, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, - 0xae, 0xa1, 0xe7, 0x90, 0x86, 0x32, 0xd9, 0x08, 0x0a, 0x0c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x84, 0x02, 0x0a, 0x19, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x22, 0x4a, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, - 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x6b, 0x69, 0x6e, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x40, 0x12, 0x1b, 0x47, - 0x65, 0x74, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, - 0x8f, 0x96, 0xe5, 0xa4, 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe5, 0x8e, 0x9f, 0xe7, 0x94, - 0x9f, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0x93, 0x02, - 0x0a, 0x1d, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x41, 0x70, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, - 0x32, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x65, 0x6e, 0x76, 0x73, 0x3a, + 0x01, 0x2a, 0x92, 0x41, 0x27, 0x12, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x65, 0x6e, + 0x76, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x1a, 0x12, 0xe5, 0x88, 0x9b, 0xe5, 0xbb, 0xba, + 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0x12, 0xc1, 0x01, 0x0a, + 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x6a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x1a, 0x35, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x65, 0x6e, 0x76, 0x73, 0x2f, 0x7b, + 0x69, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x27, 0x12, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x20, 0x65, 0x6e, 0x76, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x1a, 0x12, 0xe6, 0x9b, + 0xb4, 0xe6, 0x96, 0xb0, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, + 0x12, 0xd0, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x45, 0x6e, + 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, + 0x1a, 0x3c, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, + 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x65, 0x6e, + 0x76, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x3a, 0x01, + 0x2a, 0x92, 0x41, 0x2f, 0x12, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x65, 0x6e, 0x76, + 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0x15, 0xe7, 0x8e, + 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, 0xa1, 0xe7, 0x90, 0x86, 0xe9, 0x87, 0x8d, 0xe5, 0x91, 0xbd, + 0xe5, 0x90, 0x8d, 0x12, 0xbe, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x6e, + 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x12, 0x24, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x45, 0x6e, 0x76, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x67, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x37, 0x2a, 0x35, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, + 0x2f, 0x65, 0x6e, 0x76, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x92, 0x41, 0x27, 0x12, 0x11, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x65, 0x6e, 0x76, 0x20, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x1a, 0x12, 0xe5, 0x88, 0xa0, 0xe9, 0x99, 0xa4, 0xe7, 0x8e, 0xaf, 0xe5, 0xa2, 0x83, 0xe7, 0xae, + 0xa1, 0xe7, 0x90, 0x86, 0x32, 0xd9, 0x08, 0x0a, 0x0c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x84, 0x02, 0x0a, 0x19, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x2e, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x9f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56, 0x22, 0x51, 0x2f, 0x63, 0x6c, 0x75, + 0x70, 0x22, 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x22, 0x4a, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, - 0x92, 0x41, 0x40, 0x12, 0x1b, 0x47, 0x65, 0x74, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x20, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x1a, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe5, 0xa4, 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, - 0xa4, 0xe5, 0x8e, 0x9f, 0xe7, 0x94, 0x9f, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe5, 0x88, 0x97, - 0xe8, 0xa1, 0xa8, 0x12, 0xa8, 0x02, 0x0a, 0x1f, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x34, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x75, 0x73, 0x74, - 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb0, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x5d, 0x22, 0x58, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x7d, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x63, 0x72, 0x64, 0x7d, 0x2f, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x3a, 0x01, - 0x2a, 0x92, 0x41, 0x4a, 0x12, 0x22, 0x47, 0x65, 0x74, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x20, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x20, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0x24, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, - 0xe5, 0xa4, 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, - 0xb9, 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0x80, - 0x02, 0x0a, 0x19, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, + 0x7b, 0x6b, 0x69, 0x6e, 0x64, 0x7d, 0x3a, 0x01, 0x2a, 0x92, 0x41, 0x40, 0x12, 0x1b, 0x47, 0x65, + 0x74, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x20, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, + 0x96, 0xe5, 0xa4, 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe5, 0x8e, 0x9f, 0xe7, 0x94, 0x9f, + 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0x93, 0x02, 0x0a, + 0x1d, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x41, 0x70, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x32, + 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x41, 0x70, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x9f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56, 0x22, 0x51, 0x2f, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x01, 0x2a, 0x92, + 0x41, 0x40, 0x12, 0x1b, 0x47, 0x65, 0x74, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x20, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, + 0x21, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe5, 0xa4, 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, + 0xe5, 0x8e, 0x9f, 0xe7, 0x94, 0x9f, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe5, 0x88, 0x97, 0xe8, + 0xa1, 0xa8, 0x12, 0xa8, 0x02, 0x0a, 0x1f, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x34, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x94, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x4e, 0x22, 0x49, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0xb0, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x5d, 0x22, 0x58, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x01, - 0x2a, 0x92, 0x41, 0x3d, 0x12, 0x21, 0x47, 0x65, 0x74, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x20, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe9, - 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe6, 0x95, 0xb0, 0xe9, 0x87, - 0x8f, 0x42, 0x43, 0x5a, 0x13, 0x2e, 0x2f, 0x3b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x92, 0x41, 0x2b, 0x12, 0x26, 0x0a, 0x18, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x20, 0x41, 0x70, 0x69, 0x44, 0x6f, 0x63, 0x2a, 0x05, 0x0a, 0x03, 0x4d, 0x49, 0x54, 0x32, 0x03, - 0x31, 0x2e, 0x30, 0x2a, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x63, 0x72, 0x64, 0x7d, 0x2f, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x3a, 0x01, 0x2a, + 0x92, 0x41, 0x4a, 0x12, 0x22, 0x47, 0x65, 0x74, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x20, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x20, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x1a, 0x24, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe5, + 0xa4, 0x9a, 0xe9, 0x9b, 0x86, 0xe7, 0xbe, 0xa4, 0xe8, 0x87, 0xaa, 0xe5, 0xae, 0x9a, 0xe4, 0xb9, + 0x89, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x12, 0x80, 0x02, + 0x0a, 0x19, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x94, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x4e, 0x22, 0x49, 0x2f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2f, 0x7b, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x7d, 0x2f, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x01, 0x2a, + 0x92, 0x41, 0x3d, 0x12, 0x21, 0x47, 0x65, 0x74, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x20, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x20, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x18, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0xe9, 0x9b, + 0x86, 0xe7, 0xbe, 0xa4, 0xe8, 0xb5, 0x84, 0xe6, 0xba, 0x90, 0xe6, 0x95, 0xb0, 0xe9, 0x87, 0x8f, + 0x42, 0x43, 0x5a, 0x13, 0x2e, 0x2f, 0x3b, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x92, 0x41, 0x2b, 0x12, 0x26, 0x0a, 0x18, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x20, + 0x41, 0x70, 0x69, 0x44, 0x6f, 0x63, 0x2a, 0x05, 0x0a, 0x03, 0x4d, 0x49, 0x54, 0x32, 0x03, 0x31, + 0x2e, 0x30, 0x2a, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -11465,214 +11452,212 @@ var file_cluster_resources_proto_depIdxs = []int32{ 61, // 182: clusterresources.TemplateSet.UpdateTemplateSpace:input_type -> clusterresources.UpdateTemplateSpaceReq 62, // 183: clusterresources.TemplateSet.DeleteTemplateSpace:input_type -> clusterresources.DeleteTemplateSpaceReq 63, // 184: clusterresources.TemplateSet.CopyTemplateSpace:input_type -> clusterresources.CopyTemplateSpaceReq - 64, // 185: clusterresources.TemplateSet.ListTemplateSpaceCollect:input_type -> clusterresources.ListTemplateSpaceCollectReq - 65, // 186: clusterresources.TemplateSet.CreateTemplateSpaceCollect:input_type -> clusterresources.CreateTemplateSpaceCollectReq - 66, // 187: clusterresources.TemplateSet.DeleteTemplateSpaceCollect:input_type -> clusterresources.DeleteTemplateSpaceCollectReq - 67, // 188: clusterresources.TemplateSet.GetTemplateMetadata:input_type -> clusterresources.GetTemplateMetadataReq - 68, // 189: clusterresources.TemplateSet.ListTemplateMetadata:input_type -> clusterresources.ListTemplateMetadataReq - 69, // 190: clusterresources.TemplateSet.CreateTemplateMetadata:input_type -> clusterresources.CreateTemplateMetadataReq - 70, // 191: clusterresources.TemplateSet.UpdateTemplateMetadata:input_type -> clusterresources.UpdateTemplateMetadataReq - 71, // 192: clusterresources.TemplateSet.DeleteTemplateMetadata:input_type -> clusterresources.DeleteTemplateMetadataReq - 72, // 193: clusterresources.TemplateSet.GetTemplateVersion:input_type -> clusterresources.GetTemplateVersionReq - 73, // 194: clusterresources.TemplateSet.GetTemplateContent:input_type -> clusterresources.GetTemplateContentReq - 74, // 195: clusterresources.TemplateSet.ListTemplateVersion:input_type -> clusterresources.ListTemplateVersionReq - 75, // 196: clusterresources.TemplateSet.CreateTemplateVersion:input_type -> clusterresources.CreateTemplateVersionReq - 76, // 197: clusterresources.TemplateSet.DeleteTemplateVersion:input_type -> clusterresources.DeleteTemplateVersionReq - 77, // 198: clusterresources.TemplateSet.CreateTemplateSet:input_type -> clusterresources.CreateTemplateSetReq - 79, // 199: clusterresources.TemplateSet.ListTemplateFileVariables:input_type -> clusterresources.ListTemplateFileVariablesReq - 80, // 200: clusterresources.TemplateSet.PreviewTemplateFile:input_type -> clusterresources.DeployTemplateFileReq - 80, // 201: clusterresources.TemplateSet.DeployTemplateFile:input_type -> clusterresources.DeployTemplateFileReq - 81, // 202: clusterresources.TemplateSet.GetEnvManage:input_type -> clusterresources.GetEnvManageReq - 82, // 203: clusterresources.TemplateSet.ListEnvManages:input_type -> clusterresources.ListEnvManagesReq - 83, // 204: clusterresources.TemplateSet.CreateEnvManage:input_type -> clusterresources.CreateEnvManageReq - 84, // 205: clusterresources.TemplateSet.UpdateEnvManage:input_type -> clusterresources.UpdateEnvManageReq - 85, // 206: clusterresources.TemplateSet.RenameEnvManage:input_type -> clusterresources.RenameEnvManageReq - 86, // 207: clusterresources.TemplateSet.DeleteEnvManage:input_type -> clusterresources.DeleteEnvManageReq - 87, // 208: clusterresources.MultiCluster.FetchMultiClusterResource:input_type -> clusterresources.FetchMultiClusterResourceReq - 88, // 209: clusterresources.MultiCluster.FetchMultiClusterApiResources:input_type -> clusterresources.FetchMultiClusterApiResourcesReq - 89, // 210: clusterresources.MultiCluster.FetchMultiClusterCustomResource:input_type -> clusterresources.FetchMultiClusterCustomResourceReq - 90, // 211: clusterresources.MultiCluster.MultiClusterResourceCount:input_type -> clusterresources.MultiClusterResourceCountReq - 2, // 212: clusterresources.Basic.Echo:output_type -> clusterresources.EchoResp - 4, // 213: clusterresources.Basic.Ping:output_type -> clusterresources.PingResp - 6, // 214: clusterresources.Basic.Healthz:output_type -> clusterresources.HealthzResp - 8, // 215: clusterresources.Basic.Version:output_type -> clusterresources.VersionResp - 34, // 216: clusterresources.Node.ListNode:output_type -> clusterresources.CommonResp - 34, // 217: clusterresources.Namespace.ListNS:output_type -> clusterresources.CommonResp - 34, // 218: clusterresources.Workload.ListDeploy:output_type -> clusterresources.CommonResp - 34, // 219: clusterresources.Workload.GetDeploy:output_type -> clusterresources.CommonResp - 34, // 220: clusterresources.Workload.CreateDeploy:output_type -> clusterresources.CommonResp - 34, // 221: clusterresources.Workload.UpdateDeploy:output_type -> clusterresources.CommonResp - 34, // 222: clusterresources.Workload.RestartDeploy:output_type -> clusterresources.CommonResp - 34, // 223: clusterresources.Workload.PauseOrResumeDeploy:output_type -> clusterresources.CommonResp - 34, // 224: clusterresources.Workload.ScaleDeploy:output_type -> clusterresources.CommonResp - 34, // 225: clusterresources.Workload.RescheduleDeployPo:output_type -> clusterresources.CommonResp - 34, // 226: clusterresources.Workload.DeleteDeploy:output_type -> clusterresources.CommonResp - 35, // 227: clusterresources.Workload.GetDeployHistoryRevision:output_type -> clusterresources.CommonListResp - 34, // 228: clusterresources.Workload.GetDeployRevisionDiff:output_type -> clusterresources.CommonResp - 34, // 229: clusterresources.Workload.RolloutDeployRevision:output_type -> clusterresources.CommonResp - 34, // 230: clusterresources.Workload.ListRS:output_type -> clusterresources.CommonResp - 34, // 231: clusterresources.Workload.ListDS:output_type -> clusterresources.CommonResp - 34, // 232: clusterresources.Workload.GetDS:output_type -> clusterresources.CommonResp - 34, // 233: clusterresources.Workload.CreateDS:output_type -> clusterresources.CommonResp - 34, // 234: clusterresources.Workload.UpdateDS:output_type -> clusterresources.CommonResp - 34, // 235: clusterresources.Workload.RestartDS:output_type -> clusterresources.CommonResp - 35, // 236: clusterresources.Workload.GetDSHistoryRevision:output_type -> clusterresources.CommonListResp - 34, // 237: clusterresources.Workload.GetDSRevisionDiff:output_type -> clusterresources.CommonResp - 34, // 238: clusterresources.Workload.RolloutDSRevision:output_type -> clusterresources.CommonResp - 34, // 239: clusterresources.Workload.DeleteDS:output_type -> clusterresources.CommonResp - 34, // 240: clusterresources.Workload.ListSTS:output_type -> clusterresources.CommonResp - 34, // 241: clusterresources.Workload.GetSTS:output_type -> clusterresources.CommonResp - 34, // 242: clusterresources.Workload.CreateSTS:output_type -> clusterresources.CommonResp - 34, // 243: clusterresources.Workload.UpdateSTS:output_type -> clusterresources.CommonResp - 34, // 244: clusterresources.Workload.RestartSTS:output_type -> clusterresources.CommonResp - 35, // 245: clusterresources.Workload.GetSTSHistoryRevision:output_type -> clusterresources.CommonListResp - 34, // 246: clusterresources.Workload.GetSTSRevisionDiff:output_type -> clusterresources.CommonResp - 34, // 247: clusterresources.Workload.RolloutSTSRevision:output_type -> clusterresources.CommonResp - 34, // 248: clusterresources.Workload.ScaleSTS:output_type -> clusterresources.CommonResp - 34, // 249: clusterresources.Workload.RescheduleSTSPo:output_type -> clusterresources.CommonResp - 34, // 250: clusterresources.Workload.DeleteSTS:output_type -> clusterresources.CommonResp - 34, // 251: clusterresources.Workload.ListCJ:output_type -> clusterresources.CommonResp - 34, // 252: clusterresources.Workload.GetCJ:output_type -> clusterresources.CommonResp - 34, // 253: clusterresources.Workload.CreateCJ:output_type -> clusterresources.CommonResp - 34, // 254: clusterresources.Workload.UpdateCJ:output_type -> clusterresources.CommonResp - 34, // 255: clusterresources.Workload.DeleteCJ:output_type -> clusterresources.CommonResp - 34, // 256: clusterresources.Workload.ListJob:output_type -> clusterresources.CommonResp - 34, // 257: clusterresources.Workload.GetJob:output_type -> clusterresources.CommonResp - 34, // 258: clusterresources.Workload.CreateJob:output_type -> clusterresources.CommonResp - 34, // 259: clusterresources.Workload.UpdateJob:output_type -> clusterresources.CommonResp - 34, // 260: clusterresources.Workload.DeleteJob:output_type -> clusterresources.CommonResp - 34, // 261: clusterresources.Workload.ListPo:output_type -> clusterresources.CommonResp - 35, // 262: clusterresources.Workload.ListPoByNode:output_type -> clusterresources.CommonListResp - 34, // 263: clusterresources.Workload.GetPo:output_type -> clusterresources.CommonResp - 34, // 264: clusterresources.Workload.CreatePo:output_type -> clusterresources.CommonResp - 34, // 265: clusterresources.Workload.UpdatePo:output_type -> clusterresources.CommonResp - 34, // 266: clusterresources.Workload.DeletePo:output_type -> clusterresources.CommonResp - 34, // 267: clusterresources.Workload.ListPoPVC:output_type -> clusterresources.CommonResp - 34, // 268: clusterresources.Workload.ListPoCM:output_type -> clusterresources.CommonResp - 34, // 269: clusterresources.Workload.ListPoSecret:output_type -> clusterresources.CommonResp - 34, // 270: clusterresources.Workload.ReschedulePo:output_type -> clusterresources.CommonResp - 35, // 271: clusterresources.Workload.ListContainer:output_type -> clusterresources.CommonListResp - 34, // 272: clusterresources.Workload.GetContainer:output_type -> clusterresources.CommonResp - 35, // 273: clusterresources.Workload.GetContainerEnvInfo:output_type -> clusterresources.CommonListResp - 34, // 274: clusterresources.Network.ListIng:output_type -> clusterresources.CommonResp - 34, // 275: clusterresources.Network.GetIng:output_type -> clusterresources.CommonResp - 34, // 276: clusterresources.Network.CreateIng:output_type -> clusterresources.CommonResp - 34, // 277: clusterresources.Network.UpdateIng:output_type -> clusterresources.CommonResp - 34, // 278: clusterresources.Network.DeleteIng:output_type -> clusterresources.CommonResp - 34, // 279: clusterresources.Network.ListSVC:output_type -> clusterresources.CommonResp - 34, // 280: clusterresources.Network.GetSVC:output_type -> clusterresources.CommonResp - 34, // 281: clusterresources.Network.CreateSVC:output_type -> clusterresources.CommonResp - 34, // 282: clusterresources.Network.UpdateSVC:output_type -> clusterresources.CommonResp - 34, // 283: clusterresources.Network.DeleteSVC:output_type -> clusterresources.CommonResp - 34, // 284: clusterresources.Network.ListEP:output_type -> clusterresources.CommonResp - 34, // 285: clusterresources.Network.GetEP:output_type -> clusterresources.CommonResp - 34, // 286: clusterresources.Network.GetEPStatus:output_type -> clusterresources.CommonResp - 34, // 287: clusterresources.Network.CreateEP:output_type -> clusterresources.CommonResp - 34, // 288: clusterresources.Network.UpdateEP:output_type -> clusterresources.CommonResp - 34, // 289: clusterresources.Network.DeleteEP:output_type -> clusterresources.CommonResp - 34, // 290: clusterresources.Config.ListCM:output_type -> clusterresources.CommonResp - 34, // 291: clusterresources.Config.GetCM:output_type -> clusterresources.CommonResp - 34, // 292: clusterresources.Config.CreateCM:output_type -> clusterresources.CommonResp - 34, // 293: clusterresources.Config.UpdateCM:output_type -> clusterresources.CommonResp - 34, // 294: clusterresources.Config.DeleteCM:output_type -> clusterresources.CommonResp - 34, // 295: clusterresources.Config.ListSecret:output_type -> clusterresources.CommonResp - 34, // 296: clusterresources.Config.GetSecret:output_type -> clusterresources.CommonResp - 34, // 297: clusterresources.Config.CreateSecret:output_type -> clusterresources.CommonResp - 34, // 298: clusterresources.Config.UpdateSecret:output_type -> clusterresources.CommonResp - 34, // 299: clusterresources.Config.DeleteSecret:output_type -> clusterresources.CommonResp - 34, // 300: clusterresources.Storage.ListPV:output_type -> clusterresources.CommonResp - 34, // 301: clusterresources.Storage.GetPV:output_type -> clusterresources.CommonResp - 34, // 302: clusterresources.Storage.CreatePV:output_type -> clusterresources.CommonResp - 34, // 303: clusterresources.Storage.UpdatePV:output_type -> clusterresources.CommonResp - 34, // 304: clusterresources.Storage.DeletePV:output_type -> clusterresources.CommonResp - 34, // 305: clusterresources.Storage.ListPVC:output_type -> clusterresources.CommonResp - 34, // 306: clusterresources.Storage.GetPVC:output_type -> clusterresources.CommonResp - 34, // 307: clusterresources.Storage.GetPVCMountInfo:output_type -> clusterresources.CommonResp - 34, // 308: clusterresources.Storage.CreatePVC:output_type -> clusterresources.CommonResp - 34, // 309: clusterresources.Storage.UpdatePVC:output_type -> clusterresources.CommonResp - 34, // 310: clusterresources.Storage.DeletePVC:output_type -> clusterresources.CommonResp - 34, // 311: clusterresources.Storage.ListSC:output_type -> clusterresources.CommonResp - 34, // 312: clusterresources.Storage.GetSC:output_type -> clusterresources.CommonResp - 34, // 313: clusterresources.Storage.CreateSC:output_type -> clusterresources.CommonResp - 34, // 314: clusterresources.Storage.UpdateSC:output_type -> clusterresources.CommonResp - 34, // 315: clusterresources.Storage.DeleteSC:output_type -> clusterresources.CommonResp - 34, // 316: clusterresources.RBAC.ListSA:output_type -> clusterresources.CommonResp - 34, // 317: clusterresources.RBAC.GetSA:output_type -> clusterresources.CommonResp - 34, // 318: clusterresources.RBAC.CreateSA:output_type -> clusterresources.CommonResp - 34, // 319: clusterresources.RBAC.UpdateSA:output_type -> clusterresources.CommonResp - 34, // 320: clusterresources.RBAC.DeleteSA:output_type -> clusterresources.CommonResp - 34, // 321: clusterresources.HPA.ListHPA:output_type -> clusterresources.CommonResp - 34, // 322: clusterresources.HPA.GetHPA:output_type -> clusterresources.CommonResp - 34, // 323: clusterresources.HPA.CreateHPA:output_type -> clusterresources.CommonResp - 34, // 324: clusterresources.HPA.UpdateHPA:output_type -> clusterresources.CommonResp - 34, // 325: clusterresources.HPA.DeleteHPA:output_type -> clusterresources.CommonResp - 34, // 326: clusterresources.CustomRes.ListCRD:output_type -> clusterresources.CommonResp - 34, // 327: clusterresources.CustomRes.GetCRD:output_type -> clusterresources.CommonResp - 34, // 328: clusterresources.CustomRes.ListCObj:output_type -> clusterresources.CommonResp - 34, // 329: clusterresources.CustomRes.GetCObj:output_type -> clusterresources.CommonResp - 35, // 330: clusterresources.CustomRes.GetCObjHistoryRevision:output_type -> clusterresources.CommonListResp - 34, // 331: clusterresources.CustomRes.GetCObjRevisionDiff:output_type -> clusterresources.CommonResp - 34, // 332: clusterresources.CustomRes.RestartCObj:output_type -> clusterresources.CommonResp - 34, // 333: clusterresources.CustomRes.RolloutCObj:output_type -> clusterresources.CommonResp - 34, // 334: clusterresources.CustomRes.CreateCObj:output_type -> clusterresources.CommonResp - 34, // 335: clusterresources.CustomRes.UpdateCObj:output_type -> clusterresources.CommonResp - 34, // 336: clusterresources.CustomRes.ScaleCObj:output_type -> clusterresources.CommonResp - 34, // 337: clusterresources.CustomRes.DeleteCObj:output_type -> clusterresources.CommonResp - 34, // 338: clusterresources.CustomRes.RescheduleCObjPo:output_type -> clusterresources.CommonResp - 34, // 339: clusterresources.Resource.GetK8SResTemplate:output_type -> clusterresources.CommonResp - 37, // 340: clusterresources.Resource.Subscribe:output_type -> clusterresources.SubscribeResp - 34, // 341: clusterresources.Resource.InvalidateDiscoveryCache:output_type -> clusterresources.CommonResp - 34, // 342: clusterresources.Resource.FormDataRenderPreview:output_type -> clusterresources.CommonResp - 34, // 343: clusterresources.Resource.FormToYAML:output_type -> clusterresources.CommonResp - 34, // 344: clusterresources.Resource.YAMLToForm:output_type -> clusterresources.CommonResp - 35, // 345: clusterresources.Resource.GetMultiResFormSchema:output_type -> clusterresources.CommonListResp - 34, // 346: clusterresources.Resource.GetResFormSchema:output_type -> clusterresources.CommonResp - 34, // 347: clusterresources.Resource.GetFormSupportedAPIVersions:output_type -> clusterresources.CommonResp - 34, // 348: clusterresources.Resource.GetResSelectItems:output_type -> clusterresources.CommonResp - 35, // 349: clusterresources.ViewConfig.ListViewConfigs:output_type -> clusterresources.CommonListResp - 34, // 350: clusterresources.ViewConfig.GetViewConfig:output_type -> clusterresources.CommonResp - 34, // 351: clusterresources.ViewConfig.CreateViewConfig:output_type -> clusterresources.CommonResp - 34, // 352: clusterresources.ViewConfig.UpdateViewConfig:output_type -> clusterresources.CommonResp - 34, // 353: clusterresources.ViewConfig.RenameViewConfig:output_type -> clusterresources.CommonResp - 34, // 354: clusterresources.ViewConfig.DeleteViewConfig:output_type -> clusterresources.CommonResp - 34, // 355: clusterresources.ViewConfig.ResourceNameSuggest:output_type -> clusterresources.CommonResp - 34, // 356: clusterresources.ViewConfig.LabelSuggest:output_type -> clusterresources.CommonResp - 34, // 357: clusterresources.ViewConfig.ValuesSuggest:output_type -> clusterresources.CommonResp - 34, // 358: clusterresources.TemplateSet.GetTemplateSpace:output_type -> clusterresources.CommonResp - 35, // 359: clusterresources.TemplateSet.ListTemplateSpace:output_type -> clusterresources.CommonListResp - 34, // 360: clusterresources.TemplateSet.CreateTemplateSpace:output_type -> clusterresources.CommonResp - 34, // 361: clusterresources.TemplateSet.UpdateTemplateSpace:output_type -> clusterresources.CommonResp - 34, // 362: clusterresources.TemplateSet.DeleteTemplateSpace:output_type -> clusterresources.CommonResp - 34, // 363: clusterresources.TemplateSet.CopyTemplateSpace:output_type -> clusterresources.CommonResp - 35, // 364: clusterresources.TemplateSet.ListTemplateSpaceCollect:output_type -> clusterresources.CommonListResp - 34, // 365: clusterresources.TemplateSet.CreateTemplateSpaceCollect:output_type -> clusterresources.CommonResp - 34, // 366: clusterresources.TemplateSet.DeleteTemplateSpaceCollect:output_type -> clusterresources.CommonResp - 34, // 367: clusterresources.TemplateSet.GetTemplateMetadata:output_type -> clusterresources.CommonResp - 35, // 368: clusterresources.TemplateSet.ListTemplateMetadata:output_type -> clusterresources.CommonListResp - 34, // 369: clusterresources.TemplateSet.CreateTemplateMetadata:output_type -> clusterresources.CommonResp - 34, // 370: clusterresources.TemplateSet.UpdateTemplateMetadata:output_type -> clusterresources.CommonResp - 34, // 371: clusterresources.TemplateSet.DeleteTemplateMetadata:output_type -> clusterresources.CommonResp - 34, // 372: clusterresources.TemplateSet.GetTemplateVersion:output_type -> clusterresources.CommonResp - 34, // 373: clusterresources.TemplateSet.GetTemplateContent:output_type -> clusterresources.CommonResp - 35, // 374: clusterresources.TemplateSet.ListTemplateVersion:output_type -> clusterresources.CommonListResp - 34, // 375: clusterresources.TemplateSet.CreateTemplateVersion:output_type -> clusterresources.CommonResp - 34, // 376: clusterresources.TemplateSet.DeleteTemplateVersion:output_type -> clusterresources.CommonResp - 34, // 377: clusterresources.TemplateSet.CreateTemplateSet:output_type -> clusterresources.CommonResp - 34, // 378: clusterresources.TemplateSet.ListTemplateFileVariables:output_type -> clusterresources.CommonResp - 34, // 379: clusterresources.TemplateSet.PreviewTemplateFile:output_type -> clusterresources.CommonResp - 34, // 380: clusterresources.TemplateSet.DeployTemplateFile:output_type -> clusterresources.CommonResp - 34, // 381: clusterresources.TemplateSet.GetEnvManage:output_type -> clusterresources.CommonResp - 35, // 382: clusterresources.TemplateSet.ListEnvManages:output_type -> clusterresources.CommonListResp - 34, // 383: clusterresources.TemplateSet.CreateEnvManage:output_type -> clusterresources.CommonResp - 34, // 384: clusterresources.TemplateSet.UpdateEnvManage:output_type -> clusterresources.CommonResp - 34, // 385: clusterresources.TemplateSet.RenameEnvManage:output_type -> clusterresources.CommonResp - 34, // 386: clusterresources.TemplateSet.DeleteEnvManage:output_type -> clusterresources.CommonResp - 34, // 387: clusterresources.MultiCluster.FetchMultiClusterResource:output_type -> clusterresources.CommonResp - 34, // 388: clusterresources.MultiCluster.FetchMultiClusterApiResources:output_type -> clusterresources.CommonResp - 34, // 389: clusterresources.MultiCluster.FetchMultiClusterCustomResource:output_type -> clusterresources.CommonResp - 34, // 390: clusterresources.MultiCluster.MultiClusterResourceCount:output_type -> clusterresources.CommonResp - 212, // [212:391] is the sub-list for method output_type - 33, // [33:212] is the sub-list for method input_type + 65, // 185: clusterresources.TemplateSet.CreateTemplateSpaceCollect:input_type -> clusterresources.CreateTemplateSpaceCollectReq + 66, // 186: clusterresources.TemplateSet.DeleteTemplateSpaceCollect:input_type -> clusterresources.DeleteTemplateSpaceCollectReq + 67, // 187: clusterresources.TemplateSet.GetTemplateMetadata:input_type -> clusterresources.GetTemplateMetadataReq + 68, // 188: clusterresources.TemplateSet.ListTemplateMetadata:input_type -> clusterresources.ListTemplateMetadataReq + 69, // 189: clusterresources.TemplateSet.CreateTemplateMetadata:input_type -> clusterresources.CreateTemplateMetadataReq + 70, // 190: clusterresources.TemplateSet.UpdateTemplateMetadata:input_type -> clusterresources.UpdateTemplateMetadataReq + 71, // 191: clusterresources.TemplateSet.DeleteTemplateMetadata:input_type -> clusterresources.DeleteTemplateMetadataReq + 72, // 192: clusterresources.TemplateSet.GetTemplateVersion:input_type -> clusterresources.GetTemplateVersionReq + 73, // 193: clusterresources.TemplateSet.GetTemplateContent:input_type -> clusterresources.GetTemplateContentReq + 74, // 194: clusterresources.TemplateSet.ListTemplateVersion:input_type -> clusterresources.ListTemplateVersionReq + 75, // 195: clusterresources.TemplateSet.CreateTemplateVersion:input_type -> clusterresources.CreateTemplateVersionReq + 76, // 196: clusterresources.TemplateSet.DeleteTemplateVersion:input_type -> clusterresources.DeleteTemplateVersionReq + 77, // 197: clusterresources.TemplateSet.CreateTemplateSet:input_type -> clusterresources.CreateTemplateSetReq + 79, // 198: clusterresources.TemplateSet.ListTemplateFileVariables:input_type -> clusterresources.ListTemplateFileVariablesReq + 80, // 199: clusterresources.TemplateSet.PreviewTemplateFile:input_type -> clusterresources.DeployTemplateFileReq + 80, // 200: clusterresources.TemplateSet.DeployTemplateFile:input_type -> clusterresources.DeployTemplateFileReq + 81, // 201: clusterresources.TemplateSet.GetEnvManage:input_type -> clusterresources.GetEnvManageReq + 82, // 202: clusterresources.TemplateSet.ListEnvManages:input_type -> clusterresources.ListEnvManagesReq + 83, // 203: clusterresources.TemplateSet.CreateEnvManage:input_type -> clusterresources.CreateEnvManageReq + 84, // 204: clusterresources.TemplateSet.UpdateEnvManage:input_type -> clusterresources.UpdateEnvManageReq + 85, // 205: clusterresources.TemplateSet.RenameEnvManage:input_type -> clusterresources.RenameEnvManageReq + 86, // 206: clusterresources.TemplateSet.DeleteEnvManage:input_type -> clusterresources.DeleteEnvManageReq + 87, // 207: clusterresources.MultiCluster.FetchMultiClusterResource:input_type -> clusterresources.FetchMultiClusterResourceReq + 88, // 208: clusterresources.MultiCluster.FetchMultiClusterApiResources:input_type -> clusterresources.FetchMultiClusterApiResourcesReq + 89, // 209: clusterresources.MultiCluster.FetchMultiClusterCustomResource:input_type -> clusterresources.FetchMultiClusterCustomResourceReq + 90, // 210: clusterresources.MultiCluster.MultiClusterResourceCount:input_type -> clusterresources.MultiClusterResourceCountReq + 2, // 211: clusterresources.Basic.Echo:output_type -> clusterresources.EchoResp + 4, // 212: clusterresources.Basic.Ping:output_type -> clusterresources.PingResp + 6, // 213: clusterresources.Basic.Healthz:output_type -> clusterresources.HealthzResp + 8, // 214: clusterresources.Basic.Version:output_type -> clusterresources.VersionResp + 34, // 215: clusterresources.Node.ListNode:output_type -> clusterresources.CommonResp + 34, // 216: clusterresources.Namespace.ListNS:output_type -> clusterresources.CommonResp + 34, // 217: clusterresources.Workload.ListDeploy:output_type -> clusterresources.CommonResp + 34, // 218: clusterresources.Workload.GetDeploy:output_type -> clusterresources.CommonResp + 34, // 219: clusterresources.Workload.CreateDeploy:output_type -> clusterresources.CommonResp + 34, // 220: clusterresources.Workload.UpdateDeploy:output_type -> clusterresources.CommonResp + 34, // 221: clusterresources.Workload.RestartDeploy:output_type -> clusterresources.CommonResp + 34, // 222: clusterresources.Workload.PauseOrResumeDeploy:output_type -> clusterresources.CommonResp + 34, // 223: clusterresources.Workload.ScaleDeploy:output_type -> clusterresources.CommonResp + 34, // 224: clusterresources.Workload.RescheduleDeployPo:output_type -> clusterresources.CommonResp + 34, // 225: clusterresources.Workload.DeleteDeploy:output_type -> clusterresources.CommonResp + 35, // 226: clusterresources.Workload.GetDeployHistoryRevision:output_type -> clusterresources.CommonListResp + 34, // 227: clusterresources.Workload.GetDeployRevisionDiff:output_type -> clusterresources.CommonResp + 34, // 228: clusterresources.Workload.RolloutDeployRevision:output_type -> clusterresources.CommonResp + 34, // 229: clusterresources.Workload.ListRS:output_type -> clusterresources.CommonResp + 34, // 230: clusterresources.Workload.ListDS:output_type -> clusterresources.CommonResp + 34, // 231: clusterresources.Workload.GetDS:output_type -> clusterresources.CommonResp + 34, // 232: clusterresources.Workload.CreateDS:output_type -> clusterresources.CommonResp + 34, // 233: clusterresources.Workload.UpdateDS:output_type -> clusterresources.CommonResp + 34, // 234: clusterresources.Workload.RestartDS:output_type -> clusterresources.CommonResp + 35, // 235: clusterresources.Workload.GetDSHistoryRevision:output_type -> clusterresources.CommonListResp + 34, // 236: clusterresources.Workload.GetDSRevisionDiff:output_type -> clusterresources.CommonResp + 34, // 237: clusterresources.Workload.RolloutDSRevision:output_type -> clusterresources.CommonResp + 34, // 238: clusterresources.Workload.DeleteDS:output_type -> clusterresources.CommonResp + 34, // 239: clusterresources.Workload.ListSTS:output_type -> clusterresources.CommonResp + 34, // 240: clusterresources.Workload.GetSTS:output_type -> clusterresources.CommonResp + 34, // 241: clusterresources.Workload.CreateSTS:output_type -> clusterresources.CommonResp + 34, // 242: clusterresources.Workload.UpdateSTS:output_type -> clusterresources.CommonResp + 34, // 243: clusterresources.Workload.RestartSTS:output_type -> clusterresources.CommonResp + 35, // 244: clusterresources.Workload.GetSTSHistoryRevision:output_type -> clusterresources.CommonListResp + 34, // 245: clusterresources.Workload.GetSTSRevisionDiff:output_type -> clusterresources.CommonResp + 34, // 246: clusterresources.Workload.RolloutSTSRevision:output_type -> clusterresources.CommonResp + 34, // 247: clusterresources.Workload.ScaleSTS:output_type -> clusterresources.CommonResp + 34, // 248: clusterresources.Workload.RescheduleSTSPo:output_type -> clusterresources.CommonResp + 34, // 249: clusterresources.Workload.DeleteSTS:output_type -> clusterresources.CommonResp + 34, // 250: clusterresources.Workload.ListCJ:output_type -> clusterresources.CommonResp + 34, // 251: clusterresources.Workload.GetCJ:output_type -> clusterresources.CommonResp + 34, // 252: clusterresources.Workload.CreateCJ:output_type -> clusterresources.CommonResp + 34, // 253: clusterresources.Workload.UpdateCJ:output_type -> clusterresources.CommonResp + 34, // 254: clusterresources.Workload.DeleteCJ:output_type -> clusterresources.CommonResp + 34, // 255: clusterresources.Workload.ListJob:output_type -> clusterresources.CommonResp + 34, // 256: clusterresources.Workload.GetJob:output_type -> clusterresources.CommonResp + 34, // 257: clusterresources.Workload.CreateJob:output_type -> clusterresources.CommonResp + 34, // 258: clusterresources.Workload.UpdateJob:output_type -> clusterresources.CommonResp + 34, // 259: clusterresources.Workload.DeleteJob:output_type -> clusterresources.CommonResp + 34, // 260: clusterresources.Workload.ListPo:output_type -> clusterresources.CommonResp + 35, // 261: clusterresources.Workload.ListPoByNode:output_type -> clusterresources.CommonListResp + 34, // 262: clusterresources.Workload.GetPo:output_type -> clusterresources.CommonResp + 34, // 263: clusterresources.Workload.CreatePo:output_type -> clusterresources.CommonResp + 34, // 264: clusterresources.Workload.UpdatePo:output_type -> clusterresources.CommonResp + 34, // 265: clusterresources.Workload.DeletePo:output_type -> clusterresources.CommonResp + 34, // 266: clusterresources.Workload.ListPoPVC:output_type -> clusterresources.CommonResp + 34, // 267: clusterresources.Workload.ListPoCM:output_type -> clusterresources.CommonResp + 34, // 268: clusterresources.Workload.ListPoSecret:output_type -> clusterresources.CommonResp + 34, // 269: clusterresources.Workload.ReschedulePo:output_type -> clusterresources.CommonResp + 35, // 270: clusterresources.Workload.ListContainer:output_type -> clusterresources.CommonListResp + 34, // 271: clusterresources.Workload.GetContainer:output_type -> clusterresources.CommonResp + 35, // 272: clusterresources.Workload.GetContainerEnvInfo:output_type -> clusterresources.CommonListResp + 34, // 273: clusterresources.Network.ListIng:output_type -> clusterresources.CommonResp + 34, // 274: clusterresources.Network.GetIng:output_type -> clusterresources.CommonResp + 34, // 275: clusterresources.Network.CreateIng:output_type -> clusterresources.CommonResp + 34, // 276: clusterresources.Network.UpdateIng:output_type -> clusterresources.CommonResp + 34, // 277: clusterresources.Network.DeleteIng:output_type -> clusterresources.CommonResp + 34, // 278: clusterresources.Network.ListSVC:output_type -> clusterresources.CommonResp + 34, // 279: clusterresources.Network.GetSVC:output_type -> clusterresources.CommonResp + 34, // 280: clusterresources.Network.CreateSVC:output_type -> clusterresources.CommonResp + 34, // 281: clusterresources.Network.UpdateSVC:output_type -> clusterresources.CommonResp + 34, // 282: clusterresources.Network.DeleteSVC:output_type -> clusterresources.CommonResp + 34, // 283: clusterresources.Network.ListEP:output_type -> clusterresources.CommonResp + 34, // 284: clusterresources.Network.GetEP:output_type -> clusterresources.CommonResp + 34, // 285: clusterresources.Network.GetEPStatus:output_type -> clusterresources.CommonResp + 34, // 286: clusterresources.Network.CreateEP:output_type -> clusterresources.CommonResp + 34, // 287: clusterresources.Network.UpdateEP:output_type -> clusterresources.CommonResp + 34, // 288: clusterresources.Network.DeleteEP:output_type -> clusterresources.CommonResp + 34, // 289: clusterresources.Config.ListCM:output_type -> clusterresources.CommonResp + 34, // 290: clusterresources.Config.GetCM:output_type -> clusterresources.CommonResp + 34, // 291: clusterresources.Config.CreateCM:output_type -> clusterresources.CommonResp + 34, // 292: clusterresources.Config.UpdateCM:output_type -> clusterresources.CommonResp + 34, // 293: clusterresources.Config.DeleteCM:output_type -> clusterresources.CommonResp + 34, // 294: clusterresources.Config.ListSecret:output_type -> clusterresources.CommonResp + 34, // 295: clusterresources.Config.GetSecret:output_type -> clusterresources.CommonResp + 34, // 296: clusterresources.Config.CreateSecret:output_type -> clusterresources.CommonResp + 34, // 297: clusterresources.Config.UpdateSecret:output_type -> clusterresources.CommonResp + 34, // 298: clusterresources.Config.DeleteSecret:output_type -> clusterresources.CommonResp + 34, // 299: clusterresources.Storage.ListPV:output_type -> clusterresources.CommonResp + 34, // 300: clusterresources.Storage.GetPV:output_type -> clusterresources.CommonResp + 34, // 301: clusterresources.Storage.CreatePV:output_type -> clusterresources.CommonResp + 34, // 302: clusterresources.Storage.UpdatePV:output_type -> clusterresources.CommonResp + 34, // 303: clusterresources.Storage.DeletePV:output_type -> clusterresources.CommonResp + 34, // 304: clusterresources.Storage.ListPVC:output_type -> clusterresources.CommonResp + 34, // 305: clusterresources.Storage.GetPVC:output_type -> clusterresources.CommonResp + 34, // 306: clusterresources.Storage.GetPVCMountInfo:output_type -> clusterresources.CommonResp + 34, // 307: clusterresources.Storage.CreatePVC:output_type -> clusterresources.CommonResp + 34, // 308: clusterresources.Storage.UpdatePVC:output_type -> clusterresources.CommonResp + 34, // 309: clusterresources.Storage.DeletePVC:output_type -> clusterresources.CommonResp + 34, // 310: clusterresources.Storage.ListSC:output_type -> clusterresources.CommonResp + 34, // 311: clusterresources.Storage.GetSC:output_type -> clusterresources.CommonResp + 34, // 312: clusterresources.Storage.CreateSC:output_type -> clusterresources.CommonResp + 34, // 313: clusterresources.Storage.UpdateSC:output_type -> clusterresources.CommonResp + 34, // 314: clusterresources.Storage.DeleteSC:output_type -> clusterresources.CommonResp + 34, // 315: clusterresources.RBAC.ListSA:output_type -> clusterresources.CommonResp + 34, // 316: clusterresources.RBAC.GetSA:output_type -> clusterresources.CommonResp + 34, // 317: clusterresources.RBAC.CreateSA:output_type -> clusterresources.CommonResp + 34, // 318: clusterresources.RBAC.UpdateSA:output_type -> clusterresources.CommonResp + 34, // 319: clusterresources.RBAC.DeleteSA:output_type -> clusterresources.CommonResp + 34, // 320: clusterresources.HPA.ListHPA:output_type -> clusterresources.CommonResp + 34, // 321: clusterresources.HPA.GetHPA:output_type -> clusterresources.CommonResp + 34, // 322: clusterresources.HPA.CreateHPA:output_type -> clusterresources.CommonResp + 34, // 323: clusterresources.HPA.UpdateHPA:output_type -> clusterresources.CommonResp + 34, // 324: clusterresources.HPA.DeleteHPA:output_type -> clusterresources.CommonResp + 34, // 325: clusterresources.CustomRes.ListCRD:output_type -> clusterresources.CommonResp + 34, // 326: clusterresources.CustomRes.GetCRD:output_type -> clusterresources.CommonResp + 34, // 327: clusterresources.CustomRes.ListCObj:output_type -> clusterresources.CommonResp + 34, // 328: clusterresources.CustomRes.GetCObj:output_type -> clusterresources.CommonResp + 35, // 329: clusterresources.CustomRes.GetCObjHistoryRevision:output_type -> clusterresources.CommonListResp + 34, // 330: clusterresources.CustomRes.GetCObjRevisionDiff:output_type -> clusterresources.CommonResp + 34, // 331: clusterresources.CustomRes.RestartCObj:output_type -> clusterresources.CommonResp + 34, // 332: clusterresources.CustomRes.RolloutCObj:output_type -> clusterresources.CommonResp + 34, // 333: clusterresources.CustomRes.CreateCObj:output_type -> clusterresources.CommonResp + 34, // 334: clusterresources.CustomRes.UpdateCObj:output_type -> clusterresources.CommonResp + 34, // 335: clusterresources.CustomRes.ScaleCObj:output_type -> clusterresources.CommonResp + 34, // 336: clusterresources.CustomRes.DeleteCObj:output_type -> clusterresources.CommonResp + 34, // 337: clusterresources.CustomRes.RescheduleCObjPo:output_type -> clusterresources.CommonResp + 34, // 338: clusterresources.Resource.GetK8SResTemplate:output_type -> clusterresources.CommonResp + 37, // 339: clusterresources.Resource.Subscribe:output_type -> clusterresources.SubscribeResp + 34, // 340: clusterresources.Resource.InvalidateDiscoveryCache:output_type -> clusterresources.CommonResp + 34, // 341: clusterresources.Resource.FormDataRenderPreview:output_type -> clusterresources.CommonResp + 34, // 342: clusterresources.Resource.FormToYAML:output_type -> clusterresources.CommonResp + 34, // 343: clusterresources.Resource.YAMLToForm:output_type -> clusterresources.CommonResp + 35, // 344: clusterresources.Resource.GetMultiResFormSchema:output_type -> clusterresources.CommonListResp + 34, // 345: clusterresources.Resource.GetResFormSchema:output_type -> clusterresources.CommonResp + 34, // 346: clusterresources.Resource.GetFormSupportedAPIVersions:output_type -> clusterresources.CommonResp + 34, // 347: clusterresources.Resource.GetResSelectItems:output_type -> clusterresources.CommonResp + 35, // 348: clusterresources.ViewConfig.ListViewConfigs:output_type -> clusterresources.CommonListResp + 34, // 349: clusterresources.ViewConfig.GetViewConfig:output_type -> clusterresources.CommonResp + 34, // 350: clusterresources.ViewConfig.CreateViewConfig:output_type -> clusterresources.CommonResp + 34, // 351: clusterresources.ViewConfig.UpdateViewConfig:output_type -> clusterresources.CommonResp + 34, // 352: clusterresources.ViewConfig.RenameViewConfig:output_type -> clusterresources.CommonResp + 34, // 353: clusterresources.ViewConfig.DeleteViewConfig:output_type -> clusterresources.CommonResp + 34, // 354: clusterresources.ViewConfig.ResourceNameSuggest:output_type -> clusterresources.CommonResp + 34, // 355: clusterresources.ViewConfig.LabelSuggest:output_type -> clusterresources.CommonResp + 34, // 356: clusterresources.ViewConfig.ValuesSuggest:output_type -> clusterresources.CommonResp + 34, // 357: clusterresources.TemplateSet.GetTemplateSpace:output_type -> clusterresources.CommonResp + 35, // 358: clusterresources.TemplateSet.ListTemplateSpace:output_type -> clusterresources.CommonListResp + 34, // 359: clusterresources.TemplateSet.CreateTemplateSpace:output_type -> clusterresources.CommonResp + 34, // 360: clusterresources.TemplateSet.UpdateTemplateSpace:output_type -> clusterresources.CommonResp + 34, // 361: clusterresources.TemplateSet.DeleteTemplateSpace:output_type -> clusterresources.CommonResp + 34, // 362: clusterresources.TemplateSet.CopyTemplateSpace:output_type -> clusterresources.CommonResp + 34, // 363: clusterresources.TemplateSet.CreateTemplateSpaceCollect:output_type -> clusterresources.CommonResp + 34, // 364: clusterresources.TemplateSet.DeleteTemplateSpaceCollect:output_type -> clusterresources.CommonResp + 34, // 365: clusterresources.TemplateSet.GetTemplateMetadata:output_type -> clusterresources.CommonResp + 35, // 366: clusterresources.TemplateSet.ListTemplateMetadata:output_type -> clusterresources.CommonListResp + 34, // 367: clusterresources.TemplateSet.CreateTemplateMetadata:output_type -> clusterresources.CommonResp + 34, // 368: clusterresources.TemplateSet.UpdateTemplateMetadata:output_type -> clusterresources.CommonResp + 34, // 369: clusterresources.TemplateSet.DeleteTemplateMetadata:output_type -> clusterresources.CommonResp + 34, // 370: clusterresources.TemplateSet.GetTemplateVersion:output_type -> clusterresources.CommonResp + 34, // 371: clusterresources.TemplateSet.GetTemplateContent:output_type -> clusterresources.CommonResp + 35, // 372: clusterresources.TemplateSet.ListTemplateVersion:output_type -> clusterresources.CommonListResp + 34, // 373: clusterresources.TemplateSet.CreateTemplateVersion:output_type -> clusterresources.CommonResp + 34, // 374: clusterresources.TemplateSet.DeleteTemplateVersion:output_type -> clusterresources.CommonResp + 34, // 375: clusterresources.TemplateSet.CreateTemplateSet:output_type -> clusterresources.CommonResp + 34, // 376: clusterresources.TemplateSet.ListTemplateFileVariables:output_type -> clusterresources.CommonResp + 34, // 377: clusterresources.TemplateSet.PreviewTemplateFile:output_type -> clusterresources.CommonResp + 34, // 378: clusterresources.TemplateSet.DeployTemplateFile:output_type -> clusterresources.CommonResp + 34, // 379: clusterresources.TemplateSet.GetEnvManage:output_type -> clusterresources.CommonResp + 35, // 380: clusterresources.TemplateSet.ListEnvManages:output_type -> clusterresources.CommonListResp + 34, // 381: clusterresources.TemplateSet.CreateEnvManage:output_type -> clusterresources.CommonResp + 34, // 382: clusterresources.TemplateSet.UpdateEnvManage:output_type -> clusterresources.CommonResp + 34, // 383: clusterresources.TemplateSet.RenameEnvManage:output_type -> clusterresources.CommonResp + 34, // 384: clusterresources.TemplateSet.DeleteEnvManage:output_type -> clusterresources.CommonResp + 34, // 385: clusterresources.MultiCluster.FetchMultiClusterResource:output_type -> clusterresources.CommonResp + 34, // 386: clusterresources.MultiCluster.FetchMultiClusterApiResources:output_type -> clusterresources.CommonResp + 34, // 387: clusterresources.MultiCluster.FetchMultiClusterCustomResource:output_type -> clusterresources.CommonResp + 34, // 388: clusterresources.MultiCluster.MultiClusterResourceCount:output_type -> clusterresources.CommonResp + 211, // [211:389] is the sub-list for method output_type + 33, // [33:211] is the sub-list for method input_type 33, // [33:33] is the sub-list for extension type_name 33, // [33:33] is the sub-list for extension extendee 0, // [0:33] is the sub-list for field type_name @@ -18562,8 +18547,6 @@ type TemplateSetClient interface { DeleteTemplateSpace(ctx context.Context, in *DeleteTemplateSpaceReq, opts ...grpc.CallOption) (*CommonResp, error) // 复制模板文件文件夹 CopyTemplateSpace(ctx context.Context, in *CopyTemplateSpaceReq, opts ...grpc.CallOption) (*CommonResp, error) - // 获取模板文件文件夹收藏列表 - ListTemplateSpaceCollect(ctx context.Context, in *ListTemplateSpaceCollectReq, opts ...grpc.CallOption) (*CommonListResp, error) // 创建模板文件文件夹收藏 CreateTemplateSpaceCollect(ctx context.Context, in *CreateTemplateSpaceCollectReq, opts ...grpc.CallOption) (*CommonResp, error) // 删除模板文件文件夹收藏 @@ -18672,15 +18655,6 @@ func (c *templateSetClient) CopyTemplateSpace(ctx context.Context, in *CopyTempl return out, nil } -func (c *templateSetClient) ListTemplateSpaceCollect(ctx context.Context, in *ListTemplateSpaceCollectReq, opts ...grpc.CallOption) (*CommonListResp, error) { - out := new(CommonListResp) - err := c.cc.Invoke(ctx, "/clusterresources.TemplateSet/ListTemplateSpaceCollect", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *templateSetClient) CreateTemplateSpaceCollect(ctx context.Context, in *CreateTemplateSpaceCollectReq, opts ...grpc.CallOption) (*CommonResp, error) { out := new(CommonResp) err := c.cc.Invoke(ctx, "/clusterresources.TemplateSet/CreateTemplateSpaceCollect", in, out, opts...) @@ -18893,8 +18867,6 @@ type TemplateSetServer interface { DeleteTemplateSpace(context.Context, *DeleteTemplateSpaceReq) (*CommonResp, error) // 复制模板文件文件夹 CopyTemplateSpace(context.Context, *CopyTemplateSpaceReq) (*CommonResp, error) - // 获取模板文件文件夹收藏列表 - ListTemplateSpaceCollect(context.Context, *ListTemplateSpaceCollectReq) (*CommonListResp, error) // 创建模板文件文件夹收藏 CreateTemplateSpaceCollect(context.Context, *CreateTemplateSpaceCollectReq) (*CommonResp, error) // 删除模板文件文件夹收藏 @@ -18963,9 +18935,6 @@ func (*UnimplementedTemplateSetServer) DeleteTemplateSpace(context.Context, *Del func (*UnimplementedTemplateSetServer) CopyTemplateSpace(context.Context, *CopyTemplateSpaceReq) (*CommonResp, error) { return nil, status.Errorf(codes.Unimplemented, "method CopyTemplateSpace not implemented") } -func (*UnimplementedTemplateSetServer) ListTemplateSpaceCollect(context.Context, *ListTemplateSpaceCollectReq) (*CommonListResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method ListTemplateSpaceCollect not implemented") -} func (*UnimplementedTemplateSetServer) CreateTemplateSpaceCollect(context.Context, *CreateTemplateSpaceCollectReq) (*CommonResp, error) { return nil, status.Errorf(codes.Unimplemented, "method CreateTemplateSpaceCollect not implemented") } @@ -19145,24 +19114,6 @@ func _TemplateSet_CopyTemplateSpace_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } -func _TemplateSet_ListTemplateSpaceCollect_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(ListTemplateSpaceCollectReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(TemplateSetServer).ListTemplateSpaceCollect(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/clusterresources.TemplateSet/ListTemplateSpaceCollect", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(TemplateSetServer).ListTemplateSpaceCollect(ctx, req.(*ListTemplateSpaceCollectReq)) - } - return interceptor(ctx, in, info, handler) -} - func _TemplateSet_CreateTemplateSpaceCollect_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(CreateTemplateSpaceCollectReq) if err := dec(in); err != nil { @@ -19587,10 +19538,6 @@ var _TemplateSet_serviceDesc = grpc.ServiceDesc{ MethodName: "CopyTemplateSpace", Handler: _TemplateSet_CopyTemplateSpace_Handler, }, - { - MethodName: "ListTemplateSpaceCollect", - Handler: _TemplateSet_ListTemplateSpaceCollect_Handler, - }, { MethodName: "CreateTemplateSpaceCollect", Handler: _TemplateSet_CreateTemplateSpaceCollect_Handler, diff --git a/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.gw.go b/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.gw.go index 0bbdceda91..d93849e658 100644 --- a/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.gw.go +++ b/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.gw.go @@ -17338,60 +17338,6 @@ func local_request_TemplateSet_CopyTemplateSpace_0(ctx context.Context, marshale } -func request_TemplateSet_ListTemplateSpaceCollect_0(ctx context.Context, marshaler runtime.Marshaler, client TemplateSetClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListTemplateSpaceCollectReq - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["projectCode"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "projectCode") - } - - protoReq.ProjectCode, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectCode", err) - } - - msg, err := client.ListTemplateSpaceCollect(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_TemplateSet_ListTemplateSpaceCollect_0(ctx context.Context, marshaler runtime.Marshaler, server TemplateSetServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq ListTemplateSpaceCollectReq - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["projectCode"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "projectCode") - } - - protoReq.ProjectCode, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectCode", err) - } - - msg, err := server.ListTemplateSpaceCollect(ctx, &protoReq) - return msg, metadata, err - -} - func request_TemplateSet_CreateTemplateSpaceCollect_0(ctx context.Context, marshaler runtime.Marshaler, client TemplateSetClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq CreateTemplateSpaceCollectReq var metadata runtime.ServerMetadata @@ -17506,15 +17452,15 @@ func request_TemplateSet_DeleteTemplateSpaceCollect_0(ctx context.Context, marsh return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectCode", err) } - val, ok = pathParams["id"] + val, ok = pathParams["templateSpaceID"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "templateSpaceID") } - protoReq.Id, err = runtime.String(val) + protoReq.TemplateSpaceID, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "templateSpaceID", err) } msg, err := client.DeleteTemplateSpaceCollect(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) @@ -17544,15 +17490,15 @@ func local_request_TemplateSet_DeleteTemplateSpaceCollect_0(ctx context.Context, return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "projectCode", err) } - val, ok = pathParams["id"] + val, ok = pathParams["templateSpaceID"] if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "templateSpaceID") } - protoReq.Id, err = runtime.String(val) + protoReq.TemplateSpaceID, err = runtime.String(val) if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "templateSpaceID", err) } msg, err := server.DeleteTemplateSpaceCollect(ctx, &protoReq) @@ -23043,29 +22989,6 @@ func RegisterTemplateSetGwServer(ctx context.Context, mux *runtime.ServeMux, ser }) - mux.Handle("GET", pattern_TemplateSet_ListTemplateSpaceCollect_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) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_TemplateSet_ListTemplateSpaceCollect_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_TemplateSet_ListTemplateSpaceCollect_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_TemplateSet_CreateTemplateSpaceCollect_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -27902,26 +27825,6 @@ func RegisterTemplateSetGwClient(ctx context.Context, mux *runtime.ServeMux, cli }) - mux.Handle("GET", pattern_TemplateSet_ListTemplateSpaceCollect_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) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_TemplateSet_ListTemplateSpaceCollect_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_TemplateSet_ListTemplateSpaceCollect_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("POST", pattern_TemplateSet_CreateTemplateSpaceCollect_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -28376,13 +28279,11 @@ var ( pattern_TemplateSet_DeleteTemplateSpace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"clusterresources", "v1", "projects", "projectCode", "template", "spaces", "id"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_TemplateSet_CopyTemplateSpace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"clusterresources", "v1", "projects", "projectCode", "template", "spaces", "id"}, "", runtime.AssumeColonVerbOpt(true))) - - pattern_TemplateSet_ListTemplateSpaceCollect_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5, 2, 6}, []string{"clusterresources", "v1", "projects", "projectCode", "template", "space", "collects"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_TemplateSet_CopyTemplateSpace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"clusterresources", "v1", "projects", "projectCode", "template", "spaces", "id", "copy"}, "", runtime.AssumeColonVerbOpt(true))) pattern_TemplateSet_CreateTemplateSpaceCollect_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"clusterresources", "v1", "projects", "projectCode", "template", "space", "templateSpaceID", "collects"}, "", runtime.AssumeColonVerbOpt(true))) - pattern_TemplateSet_DeleteTemplateSpaceCollect_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5, 2, 6, 1, 0, 4, 1, 5, 7}, []string{"clusterresources", "v1", "projects", "projectCode", "template", "space", "collects", "id"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_TemplateSet_DeleteTemplateSpaceCollect_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"clusterresources", "v1", "projects", "projectCode", "template", "space", "templateSpaceID", "collects"}, "", runtime.AssumeColonVerbOpt(true))) pattern_TemplateSet_GetTemplateMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"clusterresources", "v1", "projects", "projectCode", "template", "metadatas", "id"}, "", runtime.AssumeColonVerbOpt(true))) @@ -28438,8 +28339,6 @@ var ( forward_TemplateSet_CopyTemplateSpace_0 = runtime.ForwardResponseMessage - forward_TemplateSet_ListTemplateSpaceCollect_0 = runtime.ForwardResponseMessage - forward_TemplateSet_CreateTemplateSpaceCollect_0 = runtime.ForwardResponseMessage forward_TemplateSet_DeleteTemplateSpaceCollect_0 = runtime.ForwardResponseMessage diff --git a/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.micro.go b/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.micro.go index ecafc3c17d..0b06f881aa 100644 --- a/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.micro.go +++ b/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.micro.go @@ -4935,16 +4935,10 @@ func NewTemplateSetEndpoints() []*api.Endpoint { }, { Name: "TemplateSet.CopyTemplateSpace", - Path: []string{"/clusterresources/v1/projects/{projectCode}/template/spaces/{id}"}, + Path: []string{"/clusterresources/v1/projects/{projectCode}/template/spaces/{id}/copy"}, Method: []string{"POST"}, Handler: "rpc", }, - { - Name: "TemplateSet.ListTemplateSpaceCollect", - Path: []string{"/clusterresources/v1/projects/{projectCode}/template/space/collects"}, - Method: []string{"GET"}, - Handler: "rpc", - }, { Name: "TemplateSet.CreateTemplateSpaceCollect", Path: []string{"/clusterresources/v1/projects/{projectCode}/template/space/{templateSpaceID}/collects"}, @@ -4953,7 +4947,7 @@ func NewTemplateSetEndpoints() []*api.Endpoint { }, { Name: "TemplateSet.DeleteTemplateSpaceCollect", - Path: []string{"/clusterresources/v1/projects/{projectCode}/template/space/collects/{id}"}, + Path: []string{"/clusterresources/v1/projects/{projectCode}/template/space/{templateSpaceID}/collects"}, Method: []string{"DELETE"}, Handler: "rpc", }, @@ -5095,8 +5089,6 @@ type TemplateSetService interface { DeleteTemplateSpace(ctx context.Context, in *DeleteTemplateSpaceReq, opts ...client.CallOption) (*CommonResp, error) // 复制模板文件文件夹 CopyTemplateSpace(ctx context.Context, in *CopyTemplateSpaceReq, opts ...client.CallOption) (*CommonResp, error) - // 获取模板文件文件夹收藏列表 - ListTemplateSpaceCollect(ctx context.Context, in *ListTemplateSpaceCollectReq, opts ...client.CallOption) (*CommonListResp, error) // 创建模板文件文件夹收藏 CreateTemplateSpaceCollect(ctx context.Context, in *CreateTemplateSpaceCollectReq, opts ...client.CallOption) (*CommonResp, error) // 删除模板文件文件夹收藏 @@ -5215,16 +5207,6 @@ func (c *templateSetService) CopyTemplateSpace(ctx context.Context, in *CopyTemp return out, nil } -func (c *templateSetService) ListTemplateSpaceCollect(ctx context.Context, in *ListTemplateSpaceCollectReq, opts ...client.CallOption) (*CommonListResp, error) { - req := c.c.NewRequest(c.name, "TemplateSet.ListTemplateSpaceCollect", in) - out := new(CommonListResp) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *templateSetService) CreateTemplateSpaceCollect(ctx context.Context, in *CreateTemplateSpaceCollectReq, opts ...client.CallOption) (*CommonResp, error) { req := c.c.NewRequest(c.name, "TemplateSet.CreateTemplateSpaceCollect", in) out := new(CommonResp) @@ -5460,8 +5442,6 @@ type TemplateSetHandler interface { DeleteTemplateSpace(context.Context, *DeleteTemplateSpaceReq, *CommonResp) error // 复制模板文件文件夹 CopyTemplateSpace(context.Context, *CopyTemplateSpaceReq, *CommonResp) error - // 获取模板文件文件夹收藏列表 - ListTemplateSpaceCollect(context.Context, *ListTemplateSpaceCollectReq, *CommonListResp) error // 创建模板文件文件夹收藏 CreateTemplateSpaceCollect(context.Context, *CreateTemplateSpaceCollectReq, *CommonResp) error // 删除模板文件文件夹收藏 @@ -5516,7 +5496,6 @@ func RegisterTemplateSetHandler(s server.Server, hdlr TemplateSetHandler, opts . UpdateTemplateSpace(ctx context.Context, in *UpdateTemplateSpaceReq, out *CommonResp) error DeleteTemplateSpace(ctx context.Context, in *DeleteTemplateSpaceReq, out *CommonResp) error CopyTemplateSpace(ctx context.Context, in *CopyTemplateSpaceReq, out *CommonResp) error - ListTemplateSpaceCollect(ctx context.Context, in *ListTemplateSpaceCollectReq, out *CommonListResp) error CreateTemplateSpaceCollect(ctx context.Context, in *CreateTemplateSpaceCollectReq, out *CommonResp) error DeleteTemplateSpaceCollect(ctx context.Context, in *DeleteTemplateSpaceCollectReq, out *CommonResp) error GetTemplateMetadata(ctx context.Context, in *GetTemplateMetadataReq, out *CommonResp) error @@ -5576,16 +5555,10 @@ func RegisterTemplateSetHandler(s server.Server, hdlr TemplateSetHandler, opts . })) opts = append(opts, api.WithEndpoint(&api.Endpoint{ Name: "TemplateSet.CopyTemplateSpace", - Path: []string{"/clusterresources/v1/projects/{projectCode}/template/spaces/{id}"}, + Path: []string{"/clusterresources/v1/projects/{projectCode}/template/spaces/{id}/copy"}, Method: []string{"POST"}, Handler: "rpc", })) - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "TemplateSet.ListTemplateSpaceCollect", - Path: []string{"/clusterresources/v1/projects/{projectCode}/template/space/collects"}, - Method: []string{"GET"}, - Handler: "rpc", - })) opts = append(opts, api.WithEndpoint(&api.Endpoint{ Name: "TemplateSet.CreateTemplateSpaceCollect", Path: []string{"/clusterresources/v1/projects/{projectCode}/template/space/{templateSpaceID}/collects"}, @@ -5594,7 +5567,7 @@ func RegisterTemplateSetHandler(s server.Server, hdlr TemplateSetHandler, opts . })) opts = append(opts, api.WithEndpoint(&api.Endpoint{ Name: "TemplateSet.DeleteTemplateSpaceCollect", - Path: []string{"/clusterresources/v1/projects/{projectCode}/template/space/collects/{id}"}, + Path: []string{"/clusterresources/v1/projects/{projectCode}/template/space/{templateSpaceID}/collects"}, Method: []string{"DELETE"}, Handler: "rpc", })) @@ -5749,10 +5722,6 @@ func (h *templateSetHandler) CopyTemplateSpace(ctx context.Context, in *CopyTemp return h.TemplateSetHandler.CopyTemplateSpace(ctx, in, out) } -func (h *templateSetHandler) ListTemplateSpaceCollect(ctx context.Context, in *ListTemplateSpaceCollectReq, out *CommonListResp) error { - return h.TemplateSetHandler.ListTemplateSpaceCollect(ctx, in, out) -} - func (h *templateSetHandler) CreateTemplateSpaceCollect(ctx context.Context, in *CreateTemplateSpaceCollectReq, out *CommonResp) error { return h.TemplateSetHandler.CreateTemplateSpaceCollect(ctx, in, out) } diff --git a/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.validate.go b/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.validate.go index 6745b4da36..2d7e6ff1f6 100644 --- a/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.validate.go +++ b/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.pb.validate.go @@ -10074,22 +10074,21 @@ func (m *DeleteTemplateSpaceCollectReq) validate(all bool) error { var errors []error - if utf8.RuneCountInString(m.GetId()) != 24 { + if l := utf8.RuneCountInString(m.GetProjectCode()); l < 1 || l > 32 { err := DeleteTemplateSpaceCollectReqValidationError{ - field: "Id", - reason: "value length must be 24 runes", + field: "ProjectCode", + reason: "value length must be between 1 and 32 runes, inclusive", } if !all { return err } errors = append(errors, err) - } - if l := utf8.RuneCountInString(m.GetProjectCode()); l < 1 || l > 32 { + if l := utf8.RuneCountInString(m.GetTemplateSpaceID()); l < 1 || l > 64 { err := DeleteTemplateSpaceCollectReqValidationError{ - field: "ProjectCode", - reason: "value length must be between 1 and 32 runes, inclusive", + field: "TemplateSpaceID", + reason: "value length must be between 1 and 64 runes, inclusive", } if !all { return err diff --git a/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.proto b/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.proto index f8071bd762..7cbe6d1b3b 100644 --- a/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.proto +++ b/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.proto @@ -1670,7 +1670,7 @@ service TemplateSet { // 复制模板文件文件夹 rpc CopyTemplateSpace(CopyTemplateSpaceReq) returns (CommonResp) { option (google.api.http) = { - post: "/clusterresources/v1/projects/{projectCode}/template/spaces/{id}" + post: "/clusterresources/v1/projects/{projectCode}/template/spaces/{id}/copy" body: "*" }; option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { @@ -1679,17 +1679,6 @@ service TemplateSet { }; } - // 获取模板文件文件夹收藏列表 - rpc ListTemplateSpaceCollect(ListTemplateSpaceCollectReq) returns (CommonListResp) { - option (google.api.http) = { - get: "/clusterresources/v1/projects/{projectCode}/template/space/collects" - }; - option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { - description: "获取模板文件文件夹收藏列表" - summary: "Get template space collect list" - }; - } - // 创建模板文件文件夹收藏 rpc CreateTemplateSpaceCollect(CreateTemplateSpaceCollectReq) returns (CommonResp) { option (google.api.http) = { @@ -1705,7 +1694,7 @@ service TemplateSet { // 删除模板文件文件夹收藏 rpc DeleteTemplateSpaceCollect(DeleteTemplateSpaceCollectReq) returns (CommonResp) { option (google.api.http) = { - delete: "/clusterresources/v1/projects/{projectCode}/template/space/collects/{id}" + delete: "/clusterresources/v1/projects/{projectCode}/template/space/{templateSpaceID}/collects" }; option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { description: "删除模板文件文件夹收藏" @@ -3119,12 +3108,12 @@ message DeleteTemplateSpaceCollectReq { option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { json_schema: {title: "DeleteTemplateSpaceCollectReq", description: "删除单个模板文件文件夹收藏"} }; - string id = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { - title: "文件夹 ID" - }, (validate.rules).string = {len : 24}]; - string projectCode = 2 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + string projectCode = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { title: "项目编码" }, (validate.rules).string = {min_len : 1, max_len : 32}]; + string templateSpaceID = 2 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "模板文件文件夹ID" + }, (validate.rules).string = {min_len : 1, max_len : 64}]; } message GetTemplateMetadataReq { diff --git a/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.swagger.json b/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.swagger.json index 011df26388..ddf59fae6c 100644 --- a/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.swagger.json +++ b/bcs-services/cluster-resources/proto/cluster-resources/cluster-resources.swagger.json @@ -953,39 +953,7 @@ ] } }, - "/clusterresources/v1/projects/{projectCode}/template/space/collects": { - "get": { - "summary": "Get template space collect list", - "description": "获取模板文件文件夹收藏列表", - "operationId": "TemplateSet_ListTemplateSpaceCollect", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/clusterresourcesCommonListResp" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/runtimeError" - } - } - }, - "parameters": [ - { - "name": "projectCode", - "in": "path", - "required": true, - "type": "string" - } - ], - "tags": [ - "TemplateSet" - ] - } - }, - "/clusterresources/v1/projects/{projectCode}/template/space/collects/{id}": { + "/clusterresources/v1/projects/{projectCode}/template/space/{templateSpaceID}/collects": { "delete": { "summary": "Delete template space collect", "description": "删除模板文件文件夹收藏", @@ -1012,7 +980,7 @@ "type": "string" }, { - "name": "id", + "name": "templateSpaceID", "in": "path", "required": true, "type": "string" @@ -1021,9 +989,7 @@ "tags": [ "TemplateSet" ] - } - }, - "/clusterresources/v1/projects/{projectCode}/template/space/{templateSpaceID}/collects": { + }, "post": { "summary": "Create template space collect", "description": "创建模板文件文件夹收藏", @@ -1219,10 +1185,10 @@ "TemplateSet" ] }, - "post": { - "summary": "Copy template space", - "description": "复制模板文件文件夹", - "operationId": "TemplateSet_CopyTemplateSpace", + "put": { + "summary": "Update template space", + "description": "更新模板文件文件夹", + "operationId": "TemplateSet_UpdateTemplateSpace", "responses": { "200": { "description": "A successful response.", @@ -1255,18 +1221,20 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/clusterresourcesCopyTemplateSpaceReq" + "$ref": "#/definitions/clusterresourcesUpdateTemplateSpaceReq" } } ], "tags": [ "TemplateSet" ] - }, - "put": { - "summary": "Update template space", - "description": "更新模板文件文件夹", - "operationId": "TemplateSet_UpdateTemplateSpace", + } + }, + "/clusterresources/v1/projects/{projectCode}/template/spaces/{id}/copy": { + "post": { + "summary": "Copy template space", + "description": "复制模板文件文件夹", + "operationId": "TemplateSet_CopyTemplateSpace", "responses": { "200": { "description": "A successful response.", @@ -1299,7 +1267,7 @@ "in": "body", "required": true, "schema": { - "$ref": "#/definitions/clusterresourcesUpdateTemplateSpaceReq" + "$ref": "#/definitions/clusterresourcesCopyTemplateSpaceReq" } } ], diff --git a/bcs-ui/go.mod b/bcs-ui/go.mod index 38c58049e9..18bfc68c32 100644 --- a/bcs-ui/go.mod +++ b/bcs-ui/go.mod @@ -16,24 +16,26 @@ require ( github.com/prometheus/client_golang v1.14.0 github.com/spf13/cobra v1.6.1 github.com/spf13/viper v1.14.0 - github.com/stretchr/testify v1.8.2 + github.com/stretchr/testify v1.9.0 github.com/swaggo/http-swagger v1.3.3 - github.com/urfave/cli/v2 v2.8.1 - go-micro.dev/v4 v4.10.2 + github.com/urfave/cli/v2 v2.25.7 + go-micro.dev/v4 v4.11.0 go.opentelemetry.io/otel v1.14.0 go.opentelemetry.io/otel/metric v0.26.0 go.opentelemetry.io/otel/trace v1.14.0 go.uber.org/automaxprocs v1.5.1 - golang.org/x/text v0.9.0 + golang.org/x/text v0.14.0 gopkg.in/yaml.v3 v3.0.1 k8s.io/klog/v2 v2.100.1 ) require ( + dario.cat/mergo v1.0.0 // indirect github.com/TencentBlueKing/bk-audit-go-sdk v0.0.5 // indirect github.com/TencentBlueKing/gopkg v1.1.0 // indirect github.com/TencentBlueKing/iam-go-sdk v0.1.3 // indirect github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect @@ -41,16 +43,18 @@ require ( github.com/go-sql-driver/mysql v1.7.1 // indirect github.com/gobwas/ws v1.1.0 // indirect github.com/golang-migrate/migrate/v4 v4.16.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/leodido/go-urn v1.2.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/onsi/ginkgo/v2 v2.7.0 // indirect - github.com/onsi/gomega v1.26.0 // indirect + github.com/onsi/ginkgo/v2 v2.11.0 // indirect github.com/parnurzeal/gorequest v0.2.16 // indirect + github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect + github.com/skeema/knownhosts v1.2.2 // indirect go.opentelemetry.io/otel/internal/metric v0.26.0 // indirect moul.io/http2curl v1.0.0 // indirect ) @@ -58,26 +62,25 @@ require ( require ( github.com/KyleBanks/depth v1.2.1 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895 // indirect + github.com/ProtonMail/go-crypto v1.0.0 // indirect github.com/Tencent/bk-bcs/bcs-services/pkg v0.0.0-20230701022721-8cbd62252af8 - github.com/acomagu/bufpipe v1.0.3 // indirect github.com/ajg/form v1.5.1 // indirect github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bitly/go-simplejson v0.5.0 // indirect github.com/cenkalti/backoff/v4 v4.2.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cloudflare/circl v1.2.0 // indirect + github.com/cloudflare/circl v1.3.7 // indirect github.com/coreos/go-semver v0.3.0 // indirect github.com/coreos/go-systemd/v22 v22.4.0 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/go-git/gcfg v1.5.0 // indirect - github.com/go-git/go-billy/v5 v5.3.1 // indirect - github.com/go-git/go-git/v5 v5.4.2 // indirect - github.com/go-logr/logr v1.2.3 // indirect + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-git/go-billy/v5 v5.5.0 // indirect + github.com/go-git/go-git/v5 v5.12.0 // indirect + github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect @@ -86,7 +89,7 @@ require ( github.com/go-resty/resty/v2 v2.7.0 github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt v3.2.2+incompatible - github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/google/uuid v1.3.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect github.com/hashicorp/hcl v1.0.0 // indirect @@ -99,7 +102,6 @@ require ( github.com/mailru/easyjson v0.7.7 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/miekg/dns v1.1.50 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/hashstructure v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/nxadm/tail v1.4.8 // indirect @@ -112,9 +114,8 @@ require ( github.com/prometheus/client_model v0.3.0 // indirect github.com/prometheus/common v0.41.0 // indirect github.com/prometheus/procfs v0.9.0 // indirect - github.com/rogpeppe/go-internal v1.9.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/sergi/go-diff v1.2.0 // indirect + github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/spf13/afero v1.9.2 // indirect github.com/spf13/cast v1.5.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect @@ -123,7 +124,7 @@ require ( github.com/swaggo/files v0.0.0-20220610200504-28940afbdbfe // indirect github.com/swaggo/swag v1.8.1 // indirect github.com/ugorji/go/codec v1.2.9 // indirect - github.com/xanzy/ssh-agent v0.3.2 // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect go.etcd.io/etcd/api/v3 v3.5.5 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.5 // indirect @@ -138,12 +139,12 @@ require ( go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.9.0 // indirect go.uber.org/zap v1.21.0 // indirect - golang.org/x/crypto v0.7.0 // indirect - golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.10.0 // indirect - golang.org/x/sync v0.2.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/tools v0.9.1 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/sync v0.3.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/tools v0.13.0 // indirect google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect google.golang.org/grpc v1.53.0 // indirect google.golang.org/grpc/examples v0.0.0-20221129224852-087387ca1813 // indirect diff --git a/bcs-ui/go.sum b/bcs-ui/go.sum index 4f63a455c8..fb5b091c97 100644 --- a/bcs-ui/go.sum +++ b/bcs-ui/go.sum @@ -35,20 +35,19 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= -github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895 h1:NsReiLpErIPzRrnogAXYwSoU7txA977LjDGrbkewJbg= -github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= +github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= +github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/Shopify/sarama v1.30.0/go.mod h1:zujlQQx1kzHsh4jfV1USnptCQrHAEZ2Hk8fTKCulPVs= github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/cvHQkZ1fst0EmZnA5dFtiQdWCNCFYzb+uE2vqVgvx0= github.com/Tencent/bk-bcs/bcs-common v0.0.0-20230808080908-7c46cf1bd956 h1:cVtFWCk9Ut4vRYPl+iDqERQXkeh5xvmddQbdBftlIo4= @@ -65,8 +64,6 @@ github.com/TencentBlueKing/gopkg v1.1.0 h1:/89NOzIbqEqVRQoPYf0ZEB9J0BgHeLZVIZt3X github.com/TencentBlueKing/gopkg v1.1.0/go.mod h1:C8xV79ap0bF2pR10YfhsxO5w5LtJlPakrRunkRbl2yw= github.com/TencentBlueKing/iam-go-sdk v0.1.3 h1:1AdljDNLwdE2clbRXZ3k2pMMX0p4d0/aQhUIdIIC9+s= github.com/TencentBlueKing/iam-go-sdk v0.1.3/go.mod h1:a1ksCPyWkrR1C8QmNfcn9RmrmGAUqxCnwv/olxnF6gc= -github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= -github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/agiledragon/gomonkey/v2 v2.3.1 h1:k+UnUY0EMNYUFUAQVETGY9uUTxjMdnUkP0ARyJS1zzs= github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= @@ -75,11 +72,9 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -91,8 +86,7 @@ github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkN github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/bwesterb/go-ristretto v1.2.1/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -104,9 +98,9 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/circl v1.2.0 h1:NheeISPSUcYftKlfrLuOo4T62FkmD4t4jviLfFFYaec= -github.com/cloudflare/circl v1.2.0/go.mod h1:Ch2UgYr6ti2KTtlejELlROl0YIYj7SLjAC8M+INXlMk= +github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= +github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -124,6 +118,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -132,8 +128,7 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn github.com/eapache/go-resiliency v1.2.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/elazarl/goproxy v0.0.0-20210110162100-a92cc753f88e h1:/cwV7t2xezilMljIftb7WlFtzGANRCnoOhPjtl2ifcs= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -148,7 +143,6 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/evanphx/json-patch/v5 v5.5.0 h1:bAmFiUJ+o0o2B4OiTFeE3MqCOtyo+jjPP9iZ0VRxYUc= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= @@ -157,22 +151,19 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE= github.com/go-acme/lego/v4 v4.4.0 h1:uHhU5LpOYQOdp3aDU+XY2bajseu8fuExphTL1Ss6/Fc= github.com/go-chi/chi/v5 v5.0.8 h1:lD+NLqFcAi1ovnVZpsnObHGW4xb4J8lNmoYVfECH1Y0= github.com/go-chi/chi/v5 v5.0.8/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-chi/render v1.0.2 h1:4ER/udB0+fMWB2Jlf15RV3F4A2FDuYi/9f+lFttR/Lg= github.com/go-chi/render v1.0.2/go.mod h1:/gr3hVkmYR0YlEy3LxCuVRFzEu9Ruok+gFqbIofjao0= -github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-git-fixtures/v4 v4.2.1 h1:n9gGL1Ct/yIw+nfsfr8s4+sbhT+Ncu2SubfXjIWgci8= -github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= -github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= -github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= +github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= +github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= +github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys= +github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -185,8 +176,8 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= @@ -214,6 +205,7 @@ github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrt github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU= github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM= github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og= @@ -236,6 +228,8 @@ github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0L github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= @@ -258,8 +252,9 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -274,7 +269,7 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= @@ -289,6 +284,7 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -322,7 +318,6 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ifooth/resty/v2 v2.0.0-20230223083514-3015979960de h1:9exEy3q+4wKj3IEFblE3rhQfQ5AxxlPwjykh6RfxMWU= github.com/ifooth/resty/v2 v2.0.0-20230223083514-3015979960de/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= @@ -335,7 +330,6 @@ github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/U github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= @@ -349,7 +343,6 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -361,7 +354,7 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -376,15 +369,11 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0= github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -410,14 +399,13 @@ github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vv github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.7.0 h1:/XxtEV3I3Eif/HobnVx9YmJgk8ENdRsuUmM+fLCFNow= -github.com/onsi/ginkgo/v2 v2.7.0/go.mod h1:yjiuMwPokqY1XauOgju45q3sJt6VzQ/Fict1LFVcsAo= +github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= +github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.16.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= -github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= github.com/openzipkin/zipkin-go v0.3.0 h1:XtuXmOLIXLjiU2XduuWREDT0LOKtSgos/g7i7RYyoZQ= github.com/openzipkin/zipkin-go v0.3.0/go.mod h1:4c3sLeE8xjNqehmF5RpAFLPLJxXscc0R4l6Zg0P1tTQ= github.com/otiai10/copy v1.7.0 h1:hVoPiN+t+7d2nzzwMiDHPSOogsWAStewq3TwU05+clE= @@ -432,6 +420,8 @@ github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCko github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= +github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -468,18 +458,15 @@ github.com/rabbitmq/amqp091-go v1.1.0/go.mod h1:ogQDLSOACsLPsIq0NpbtiifNZi2YOz0V github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/rwtodd/Go.Sed v0.0.0-20210816025313-55464686f9ef/go.mod h1:8AEUvGVi2uQ5b24BIhcr0GCcpd/RNAFWaN2CJFrWIIQ= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= -github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s+Squfpo= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= @@ -487,6 +474,8 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A= +github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= github.com/smartystreets/assertions v1.0.1 h1:voD4ITNjPL5jjBfgR/r8fPIIBrliWrWHeiJApdr3r4w= github.com/smartystreets/goconvey v1.7.2 h1:9RBaZCeXEQ3UselpuwUQHltGVXvdwm6cv1hgR6gDIPg= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= @@ -505,8 +494,8 @@ github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+eg github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -516,8 +505,9 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/swaggo/files v0.0.0-20220610200504-28940afbdbfe h1:K8pHPVoTgxFJt1lXuIzzOX7zZhZFldJQK/CgKx9BFIc= @@ -529,11 +519,10 @@ github.com/swaggo/swag v1.8.1/go.mod h1:ugemnJsPZm/kRwFUnzBlbHRd0JY9zE1M4F+uy2pA github.com/ugorji/go/codec v1.2.9 h1:rmenucSohSTiyL09Y+l2OCk+FrMxGMzho2+tjr5ticU= github.com/ugorji/go/codec v1.2.9/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI= -github.com/urfave/cli/v2 v2.8.1 h1:CGuYNZF9IKZY/rfBe3lJpccSoIY1ytfvmgQT90cNOl4= -github.com/urfave/cli/v2 v2.8.1/go.mod h1:Z41J9TPoffeoqP0Iza0YbAhGvymRdZAd2uPmZ5JxRdY= -github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= -github.com/xanzy/ssh-agent v0.3.2 h1:eKj4SX2Fe7mui28ZgnFW5fmTz1EIr7ugo5s6wDxdHBM= -github.com/xanzy/ssh-agent v0.3.2/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= @@ -544,8 +533,9 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go-micro.dev/v4 v4.10.2 h1:GWQf1+FcAiMf1yca3P09RNjB31Xtk0C5HiKHSpq/2qA= -go-micro.dev/v4 v4.10.2/go.mod h1:RV2AolXjTAil9Xm82QCMo1gknuZwD61oMUH14wJpECk= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go-micro.dev/v4 v4.11.0 h1:DZ2xcr0pnZJDlp6MJiCLhw4tXRxLw9xrJlPT91kubr0= +go-micro.dev/v4 v4.11.0/go.mod h1:eE/tD53n3KbVrzrWxKLxdkGw45Fg1qaNLWjpJMvIUF4= go.etcd.io/etcd/api/v3 v3.5.5 h1:BX4JIbQ7hl7+jL+g+2j5UAr0o1bctCm6/Ct+ArBGkf0= go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= go.etcd.io/etcd/client/pkg/v3 v3.5.5 h1:9S0JUVvmrVl7wCF39iTQthdaaNIiAaQbmK75ogO6GU8= @@ -602,22 +592,21 @@ go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210920023735-84f357641f63/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -653,8 +642,10 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -690,7 +681,6 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -698,8 +688,12 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -721,8 +715,10 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= -golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -737,7 +733,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -770,25 +765,30 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -798,8 +798,11 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -858,8 +861,10 @@ golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= -golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= +golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From de49c12e4f0cda926ce8cb15c392d7fcf2a49083 Mon Sep 17 00:00:00 2001 From: joeecai Date: Fri, 23 Aug 2024 08:55:55 +0000 Subject: [PATCH 002/108] feat: move bk credential to header (merge request !1981) Squash merge branch 'fix/api-auth' into 'master' feat: move bk credential to header --- bcs-common/pkg/esb/apigateway/alert/client.go | 50 +++++++++++-------- .../pkg/esb/apigateway/appauth/client.go | 20 ++++---- .../pkg/esb/apigateway/bkdata/client.go | 10 +--- .../pkg/esb/apigateway/paascc/paascc.go | 10 +--- bcs-common/pkg/esb/client/client.go | 12 +++-- bcs-common/pkg/esb/client/request.go | 19 ++++--- bcs-common/pkg/esb/cmdbv1/cmdb.go | 37 ++++++++++---- bcs-common/pkg/esb/cmdbv3/cmdb.go | 45 +++++++++++------ bcs-common/pkg/esb/cmdbv3/esb.go | 29 ++++------- bcs-common/pkg/esb/cmsi/cmsi.go | 33 +++++++++--- bcs-common/pkg/esb/esb.go | 12 +++-- 11 files changed, 166 insertions(+), 111 deletions(-) diff --git a/bcs-common/pkg/esb/apigateway/alert/client.go b/bcs-common/pkg/esb/apigateway/alert/client.go index 6b664cc7d8..de7a01b61f 100644 --- a/bcs-common/pkg/esb/apigateway/alert/client.go +++ b/bcs-common/pkg/esb/apigateway/alert/client.go @@ -15,7 +15,9 @@ package alert import ( "crypto/tls" + "encoding/json" "fmt" + "net/http" "time" paasclient "github.com/Tencent/bk-bcs/bcs-common/pkg/esb/client" @@ -103,17 +105,19 @@ type alertClient struct { func (cli *alertClient) SendServiceAlert(module string, message string) error { payload := newServiceAlert(module, message, cli.config.LocalIP) + auth := map[string]string{ + "app_code": cli.config.AppCode, + "app_secret": cli.config.AppSecret, + } + authBytes, _ := json.Marshal(auth) + authHeader := http.Header{} + authHeader.Add("X-Bkapi-Authorization", string(authBytes)) result := cli.client.Post(). WithEndpoints(cli.config.Hosts). WithBasePath("/"). - SubPathf( - fmt.Sprintf( - "/prod/api/v1/bcs/alerts?app_code='%s'&app_secret='%s'", - cli.config.AppCode, - cli.config.AppSecret, - ), - ). + WithHeaders(authHeader). + SubPathf("/prod/api/v1/bcs/alerts"). Body(payload). WithTimeout(time.Second * 3). Do() @@ -126,17 +130,19 @@ func (cli *alertClient) SendServiceAlert(module string, message string) error { // SendClusterAlert implementation func (cli *alertClient) SendClusterAlert(cluster, module string, message string) error { payload := newClusterAlert(cluster, module, message, cli.config.LocalIP) + auth := map[string]string{ + "app_code": cli.config.AppCode, + "app_secret": cli.config.AppSecret, + } + authBytes, _ := json.Marshal(auth) + authHeader := http.Header{} + authHeader.Add("X-Bkapi-Authorization", string(authBytes)) result := cli.client.Post(). WithEndpoints(cli.config.Hosts). WithBasePath("/"). - SubPathf( - fmt.Sprintf( - "/prod/api/v1/bcs/alerts?app_code='%s'&app_secret='%s'", - cli.config.AppCode, - cli.config.AppSecret, - ), - ). + WithHeaders(authHeader). + SubPathf("/prod/api/v1/bcs/alerts"). Body(payload). WithTimeout(time.Second * 3). Do() @@ -157,16 +163,18 @@ func (cli *alertClient) SendCustomAlert(annotation, label map[string]string) err annotationKey: annotation, labelKey: label, } + auth := map[string]string{ + "app_code": cli.config.AppCode, + "app_secret": cli.config.AppSecret, + } + authBytes, _ := json.Marshal(auth) + authHeader := http.Header{} + authHeader.Add("X-Bkapi-Authorization", string(authBytes)) result := cli.client.Post(). WithEndpoints(cli.config.Hosts). WithBasePath("/"). - SubPathf( - fmt.Sprintf( - "/prod/api/v1/bcs/alerts?app_code='%s'&app_secret='%s'", - cli.config.AppCode, - cli.config.AppSecret, - ), - ). + WithHeaders(authHeader). + SubPathf("/prod/api/v1/bcs/alerts"). Body(payload). WithTimeout(time.Second * 3). Do() diff --git a/bcs-common/pkg/esb/apigateway/appauth/client.go b/bcs-common/pkg/esb/apigateway/appauth/client.go index 8b10779efa..18f8e31ba7 100644 --- a/bcs-common/pkg/esb/apigateway/appauth/client.go +++ b/bcs-common/pkg/esb/apigateway/appauth/client.go @@ -15,7 +15,9 @@ package appauth import ( "crypto/tls" + "encoding/json" "fmt" + "net/http" paasclient "github.com/Tencent/bk-bcs/bcs-common/pkg/esb/client" ) @@ -51,19 +53,13 @@ func NewAuthClient(cfg *Config) (Client, error) { c = &authClient{ config: cfg, client: paasclient.NewRESTClientWithTLS(cfg.TLSConfig). - WithCredential(map[string]interface{}{ - "app_code": cfg.AppCode, - "app_secret": cfg.AppSecret, - }), + WithCredential(cfg.AppCode, cfg.AppSecret), } } else { c = &authClient{ config: cfg, client: paasclient.NewRESTClient(). - WithCredential(map[string]interface{}{ - "app_code": cfg.AppCode, - "app_secret": cfg.AppSecret, - }), + WithCredential(cfg.AppCode, cfg.AppSecret), } } return c, nil @@ -82,13 +78,19 @@ func (c *authClient) GetAccessToken(env string) (string, error) { } request := map[string]interface{}{ "env_name": env, + "grant_type": PaasGrantTypeClient, + } + auth := map[string]string{ "app_code": c.config.AppCode, "app_secret": c.config.AppSecret, - "grant_type": PaasGrantTypeClient, } + authBytes, _ := json.Marshal(auth) + authHeader := http.Header{} + authHeader.Add("X-Bkapi-Authorization", string(authBytes)) var response OAuthResponse err := c.client.Post(). WithEndpoints(c.config.Hosts). + WithHeaders(authHeader). WithBasePath("/"). SubPathf("/auth_api/token/"). Body(request). diff --git a/bcs-common/pkg/esb/apigateway/bkdata/client.go b/bcs-common/pkg/esb/apigateway/bkdata/client.go index 84bd7e6e80..c3f96ca482 100644 --- a/bcs-common/pkg/esb/apigateway/bkdata/client.go +++ b/bcs-common/pkg/esb/apigateway/bkdata/client.go @@ -154,17 +154,11 @@ func (c *ClientCreator) NewClientFromConfig(conf BKDataClientConfig) ClientInter if conf.TLSConf != nil { cli = client.NewRESTClientWithTLS(conf.TLSConf). WithRateLimiter(throttle.NewTokenBucket(50, 50)). - WithCredential(map[string]interface{}{ - "app_code": conf.BkAppCode, - "app_secret": conf.BkAppSecret, - }) + WithCredential(conf.BkAppCode, conf.BkAppSecret) } else { cli = client.NewRESTClient(). WithRateLimiter(throttle.NewTokenBucket(50, 50)). - WithCredential(map[string]interface{}{ - "app_code": conf.BkAppCode, - "app_secret": conf.BkAppSecret, - }) + WithCredential(conf.BkAppCode, conf.BkAppSecret) } return &Client{ client: cli, diff --git a/bcs-common/pkg/esb/apigateway/paascc/paascc.go b/bcs-common/pkg/esb/apigateway/paascc/paascc.go index 433ffacc8b..e87452eecd 100644 --- a/bcs-common/pkg/esb/apigateway/paascc/paascc.go +++ b/bcs-common/pkg/esb/apigateway/paascc/paascc.go @@ -33,17 +33,11 @@ func NewClientInterface(host, appcode, appsecret string, tlsConf *tls.Config) Cl if tlsConf != nil { cli = paasclient.NewRESTClientWithTLS(tlsConf). WithRateLimiter(throttle.NewTokenBucket(50, 50)). - WithCredential(map[string]interface{}{ - "app_code": appcode, - "app_secret": appsecret, - }) + WithCredential(appcode, appsecret) } else { cli = paasclient.NewRESTClient(). WithRateLimiter(throttle.NewTokenBucket(50, 50)). - WithCredential(map[string]interface{}{ - "app_code": appcode, - "app_secret": appsecret, - }) + WithCredential(appcode, appsecret) } return &Client{ diff --git a/bcs-common/pkg/esb/client/client.go b/bcs-common/pkg/esb/client/client.go index ec06d039cb..ce2b469933 100644 --- a/bcs-common/pkg/esb/client/client.go +++ b/bcs-common/pkg/esb/client/client.go @@ -42,7 +42,10 @@ func init() { } // Credential credential to be filled in post body -type Credential map[string]interface{} +type Credential struct { + AppCode string `json:"app_code"` + AppSecret string `json:"app_secret"` +} // RESTClient client with metrics, ratelimit and type RESTClient struct { @@ -84,9 +87,10 @@ func (r *RESTClient) WithRateLimiter(th throttle.RateLimiter) *RESTClient { } // WithCredential set credential -func (r *RESTClient) WithCredential(c Credential) *RESTClient { - if c != nil { - r.credential = c +func (r *RESTClient) WithCredential(appCode, appSecret string) *RESTClient { + r.credential = Credential{ + AppCode: appCode, + AppSecret: appSecret, } return r } diff --git a/bcs-common/pkg/esb/client/request.go b/bcs-common/pkg/esb/client/request.go index 4afa6cf052..377ac0b490 100644 --- a/bcs-common/pkg/esb/client/request.go +++ b/bcs-common/pkg/esb/client/request.go @@ -160,13 +160,18 @@ func (r *Request) WithJSON(jsonBody interface{}) *Request { return r } +func (r *Request) getHeader() http.Header { + defaultHeader := http.Header{} + authBytes, _ := json.Marshal(r.client.credential) + if r.headers == nil { + r.headers = defaultHeader + } + r.headers.Add("X-Bkapi-Authorization", string(authBytes)) + return r.headers +} + func (r *Request) getBody() interface{} { if r.mapBody != nil { - if len(r.client.credential) > 0 { - for key, obj := range r.client.credential { - r.mapBody[key] = obj - } - } return r.mapBody } if r.jsonBody != nil { @@ -265,8 +270,10 @@ func (r *Request) Do() *Result { return result } + headers := r.getHeader() + blog.V(2).Infof("do request to url %s\n", url) - resp, err := r.client.httpCli.RequestEx(url, r.method, r.headers, bodyData) + resp, err := r.client.httpCli.RequestEx(url, r.method, headers, bodyData) if err != nil { blog.Errorf("RESTClient method:%s url:%s err %s", r.method, url, err.Error()) // retry now diff --git a/bcs-common/pkg/esb/cmdbv1/cmdb.go b/bcs-common/pkg/esb/cmdbv1/cmdb.go index 9bcfb9c79d..5d1ac2b558 100644 --- a/bcs-common/pkg/esb/cmdbv1/cmdb.go +++ b/bcs-common/pkg/esb/cmdbv1/cmdb.go @@ -15,12 +15,12 @@ package cmdbv1 import ( "crypto/tls" + "encoding/json" "fmt" "net/http" "strconv" paasclient "github.com/Tencent/bk-bcs/bcs-common/pkg/esb/client" - "github.com/Tencent/bk-bcs/bcs-common/pkg/esb/common" "github.com/Tencent/bk-bcs/bcs-common/pkg/throttle" ) @@ -41,9 +41,9 @@ func NewClientInterface(host string, tlsConf *tls.Config) *Client { WithRateLimiter(throttle.NewTokenBucket(100, 100)) } return &Client{ - host: host, - client: cli, - baseReq: make(map[string]interface{}), + host: host, + client: cli, + defaultHeader: http.Header{}, } } @@ -52,7 +52,14 @@ type Client struct { host string defaultHeader http.Header client *paasclient.RESTClient - baseReq map[string]interface{} + credential Credential +} + +// Credential credential to be filled in post body +type Credential struct { + BKAppCode string `json:"bk_app_code"` + BKAppSecret string `json:"bk_app_secret"` + BKUsername string `json:"bk_username,omitempty"` } // SetDefaultHeader set default headers @@ -60,10 +67,19 @@ func (c *Client) SetDefaultHeader(h http.Header) { c.defaultHeader = h } -// SetCommonReq set base req -func (c *Client) SetCommonReq(args map[string]interface{}) { - for k, v := range args { - c.baseReq[k] = v +// GetHeader get headers +func (c *Client) GetHeader() http.Header { + authBytes, _ := json.Marshal(c.credential) + c.defaultHeader.Add("X-Bkapi-Authorization", string(authBytes)) + return c.defaultHeader +} + +// WithCredential set credential +func (c *Client) WithCredential(appCode, appSecret, username string) { + c.credential = Credential{ + BKAppCode: appCode, + BKAppSecret: appSecret, + BKUsername: username, } } @@ -89,13 +105,12 @@ func (c *Client) ESBTransHostModule(username string, assetIDs []string, appID, m "app_id": strconv.FormatInt(appID, 10), "host_module_condition": hostConditions, } - common.MergeMap(req, c.baseReq) result := new(ESBTransHostModuleResult) err := c.client.Post(). WithEndpoints([]string{c.host}). WithBasePath("/component/compapi/cc/"). SubPathf("host_module"). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(req). Do(). Into(result) diff --git a/bcs-common/pkg/esb/cmdbv3/cmdb.go b/bcs-common/pkg/esb/cmdbv3/cmdb.go index c0bb5532af..105c751950 100644 --- a/bcs-common/pkg/esb/cmdbv3/cmdb.go +++ b/bcs-common/pkg/esb/cmdbv3/cmdb.go @@ -15,6 +15,7 @@ package cmdbv3 import ( "crypto/tls" + "encoding/json" "net/http" paasclient "github.com/Tencent/bk-bcs/bcs-common/pkg/esb/client" @@ -62,9 +63,9 @@ func NewClientInterface(host string, tlsConf *tls.Config) *Client { } return &Client{ - host: host, - client: cli, - baseReq: make(map[string]interface{}), + host: host, + client: cli, + defaultHeader: http.Header{}, } } @@ -73,7 +74,14 @@ type Client struct { host string defaultHeader http.Header client *paasclient.RESTClient - baseReq map[string]interface{} + credential Credential +} + +// Credential credential to be filled in post body +type Credential struct { + BKAppCode string `json:"bk_app_code"` + BKAppSecret string `json:"bk_app_secret"` + BKUsername string `json:"bk_username,omitempty"` } // SetDefaultHeader set default headers @@ -81,10 +89,19 @@ func (c *Client) SetDefaultHeader(h http.Header) { c.defaultHeader = h } -// SetCommonReq set base req -func (c *Client) SetCommonReq(args map[string]interface{}) { - for k, v := range args { - c.baseReq[k] = v +// GetHeader get headers +func (c *Client) GetHeader() http.Header { + authBytes, _ := json.Marshal(c.credential) + c.defaultHeader.Add("X-Bkapi-Authorization", string(authBytes)) + return c.defaultHeader +} + +// WithCredential set credential +func (c *Client) WithCredential(appCode, appSecret, username string) { + c.credential = Credential{ + BKAppCode: appCode, + BKAppSecret: appSecret, + BKUsername: username, } } @@ -98,7 +115,7 @@ func (c *Client) CreatePod(bizID int64, data *CreatePod) (*CreatedOneOptionResul WithEndpoints([]string{c.host}). WithBasePath("/api/v3/"). SubPathf("/create/container/bk_biz_id/%d/pod", bizID). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(req). Do(). Into(result) @@ -118,7 +135,7 @@ func (c *Client) CreateManyPod(bizID int64, data *CreateManyPod) (*CreatedManyOp WithEndpoints([]string{c.host}). WithBasePath("/api/v3/"). SubPathf("createmany/container/bk_biz_id/%d/pod", bizID). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(req). Do(). Into(result) @@ -139,7 +156,7 @@ func (c *Client) UpdatePod(bizID int64, data *UpdatePod) (*UpdatedOptionResult, WithEndpoints([]string{c.host}). WithBasePath("/api/v3/"). SubPathf("update/container/bk_biz_id/%d/pod", bizID). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(req). Do(). Into(result) @@ -159,7 +176,7 @@ func (c *Client) DeletePod(bizID int64, data *DeletePod) (*DeletedOptionResult, WithEndpoints([]string{c.host}). WithBasePath("/api/v3/"). SubPathf("delete/container/bk_biz_id/%d/pod", bizID). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(req). Do(). Into(result) @@ -189,7 +206,7 @@ func (c *Client) ListClusterPods(bizID int64, clusterID string) (*ListPodsResult WithEndpoints([]string{c.host}). WithBasePath("/api/v3/"). SubPathf("findmany/container/bk_biz_id/%d/pod", bizID). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(request). Do(). Into(result) @@ -206,7 +223,7 @@ func (c *Client) SearchBusinessTopoWithStatistics(bizID int64) (*SearchBusinessT WithEndpoints([]string{c.host}). WithBasePath("/api/v3/"). SubPathf("find/topoinst_with_statistics/biz/%d", bizID). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Do(). Into(result) if err != nil { diff --git a/bcs-common/pkg/esb/cmdbv3/esb.go b/bcs-common/pkg/esb/cmdbv3/esb.go index fc9df456b1..57baadd176 100644 --- a/bcs-common/pkg/esb/cmdbv3/esb.go +++ b/bcs-common/pkg/esb/cmdbv3/esb.go @@ -14,8 +14,6 @@ package cmdbv3 import ( "fmt" - - "github.com/Tencent/bk-bcs/bcs-common/pkg/esb/common" ) // ESBSearchBusiness search business @@ -26,13 +24,12 @@ func (c *Client) ESBSearchBusiness(username string, condition map[string]interfa "condition": condition, "bk_username": username, } - common.MergeMap(request, c.baseReq) result := new(ESBSearchBusinessResult) err := c.client.Post(). WithEndpoints([]string{c.host}). WithBasePath("/api/c/compapi/v2/cc/"). SubPathf("search_business"). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(request). Do(). Into(result) @@ -53,13 +50,12 @@ func (c *Client) ESBTransferHostInBizModule(username string, bizID int64, hostID "bk_module_id": moduleIDs, "is_increment": false, } - common.MergeMap(request, c.baseReq) result := new(ESBTransferHostModuleResult) err := c.client.Post(). WithEndpoints([]string{c.host}). WithBasePath("/api/c/compapi/v2/cc/"). SubPathf("transfer_host_module"). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(request). Do(). Into(result) @@ -75,13 +71,12 @@ func (c *Client) ESBSearchBizInstTopo(username string, bizID int64) (*ESBSearchB "bk_biz_id": bizID, "bk_username": username, } - common.MergeMap(request, c.baseReq) result := new(ESBSearchBizInstTopoResult) err := c.client.Post(). WithEndpoints([]string{c.host}). WithBasePath("/api/c/compapi/v2/cc/"). SubPathf("search_biz_inst_topo"). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(request). Do(). Into(result) @@ -111,12 +106,11 @@ func (c *Client) ESBListHostsWithoutBiz(username string, req *ESBListHostsWitout request["page"] = req.Page } result := new(ESBListHostsWitoutBizResult) - common.MergeMap(request, c.baseReq) err := c.client.Post(). WithEndpoints([]string{c.host}). WithBasePath("/api/c/compapi/v2/cc/"). SubPathf("list_hosts_without_biz"). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(request). Do(). Into(result) @@ -135,13 +129,12 @@ func (c *Client) ESBGetBizLocation(username string, bizIDs []int64) (*ESBGetBizL "bk_username": username, "bk_biz_ids": bizIDs, } - common.MergeMap(request, c.baseReq) result := new(ESBGetBizLocationResult) err := c.client.Post(). WithEndpoints([]string{c.host}). WithBasePath("/api/c/compapi/v2/cc/"). SubPathf("get_biz_location"). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(request). Do(). Into(result) @@ -159,13 +152,12 @@ func (c *Client) ESBGetBizInternalModule(username string, bizID int64, bkSupplie "bk_username": username, "bk_supplier_account": bkSupplierAccount, } - common.MergeMap(request, c.baseReq) result := new(ESBGetBizInternalModuleResult) err := c.client.Post(). WithEndpoints([]string{c.host}). WithBasePath("/api/c/compapi/v2/cc/"). SubPathf("get_biz_internal_module"). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(request). Do(). Into(result) @@ -207,12 +199,11 @@ func (c *Client) ESBListBizHosts(username string, req *ESBListBizHostsRequest) ( request["fields"] = req.Fields result := new(ESBListBizHostsResult) - common.MergeMap(request, c.baseReq) err := c.client.Post(). WithEndpoints([]string{c.host}). WithBasePath("/api/c/compapi/v2/cc/"). SubPathf("list_biz_hosts"). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(request). Do(). Into(result) @@ -251,12 +242,11 @@ func (c *Client) ESBListBizHostsTopo( } result := new(ESBListBizHostsTopoResult) - common.MergeMap(request, c.baseReq) err := c.client.Post(). WithEndpoints([]string{c.host}). WithBasePath("/api/c/compapi/v2/cc/"). SubPathf("list_biz_hosts_topo"). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(request). Do(). Into(result) @@ -292,13 +282,12 @@ func (c *Client) ESBSearchModule(username string, req *ESBSearchModuleRequest) ( request["page"] = req.Page } - common.MergeMap(request, c.baseReq) result := new(ESBSearchModuleResult) err := c.client.Post(). WithEndpoints([]string{c.host}). WithBasePath("/api/c/compapi/v2/cc/"). SubPathf("search_module"). - WithHeaders(c.defaultHeader). + WithHeaders(c.GetHeader()). Body(request). Do(). Into(result) diff --git a/bcs-common/pkg/esb/cmsi/cmsi.go b/bcs-common/pkg/esb/cmsi/cmsi.go index e9683c8455..9e2ff285d7 100644 --- a/bcs-common/pkg/esb/cmsi/cmsi.go +++ b/bcs-common/pkg/esb/cmsi/cmsi.go @@ -15,6 +15,7 @@ package cmsi import ( "crypto/tls" + "encoding/json" "net/http" paasclient "github.com/Tencent/bk-bcs/bcs-common/pkg/esb/client" @@ -50,7 +51,14 @@ type Client struct { host string defaultHeader http.Header client *paasclient.RESTClient - baseReq BaseReq + credential Credential +} + +// Credential credential to be filled in post body +type Credential struct { + BKAppCode string `json:"bk_app_code"` + BKAppSecret string `json:"bk_app_secret"` + BKUsername string `json:"bk_username,omitempty"` } // SetDefaultHeader set default headers @@ -58,19 +66,30 @@ func (c *Client) SetDefaultHeader(h http.Header) { c.defaultHeader = h } -// SetCommonReq set base request -func (c *Client) SetCommonReq(br BaseReq) { - c.baseReq = br +// GetHeader get headers +func (c *Client) GetHeader() http.Header { + authBytes, _ := json.Marshal(c.credential) + c.defaultHeader.Add("X-Bkapi-Authorization", string(authBytes)) + return c.defaultHeader +} + +// WithCredential set credential +func (c *Client) WithCredential(appCode, appSecret, username string) { + c.credential = Credential{ + BKAppCode: appCode, + BKAppSecret: appSecret, + BKUsername: username, + } } // SendRtx send rtx message func (c *Client) SendRtx(req *SendRtxReq) (*SendRtxResp, error) { resp := new(SendRtxResp) - req.BaseReq = c.baseReq err := c.client.Post(). WithEndpoints([]string{c.host}). WithBasePath("/api/c/compapi/v2/cmsi/"). SubPathf("send_rtx"). + WithHeaders(c.GetHeader()). WithJSON(req). Do(). Into(resp) @@ -83,11 +102,11 @@ func (c *Client) SendRtx(req *SendRtxReq) (*SendRtxResp, error) { // SendVoiceMsg send voice message func (c *Client) SendVoiceMsg(req *SendVoiceMsgReq) (*SendVoiceMsgResp, error) { resp := new(SendVoiceMsgResp) - req.BaseReq = c.baseReq err := c.client.Post(). WithEndpoints([]string{c.host}). WithBasePath("/api/c/compapi/v2/cmsi/"). SubPathf("send_voice_msg"). + WithHeaders(c.GetHeader()). WithJSON(req). Do(). Into(resp) @@ -100,11 +119,11 @@ func (c *Client) SendVoiceMsg(req *SendVoiceMsgReq) (*SendVoiceMsgResp, error) { // SendMail send mail func (c *Client) SendMail(req *SendMailReq) (*SendMailResp, error) { resp := new(SendMailResp) - req.BaseReq = c.baseReq err := c.client.Post(). WithEndpoints([]string{c.host}). WithBasePath("/api/c/compapi/v2/cmsi/"). SubPathf("send_mail"). + WithHeaders(c.GetHeader()). WithJSON(req). Do(). Into(resp) diff --git a/bcs-common/pkg/esb/esb.go b/bcs-common/pkg/esb/esb.go index 6ffba90433..a9d5c63694 100644 --- a/bcs-common/pkg/esb/esb.go +++ b/bcs-common/pkg/esb/esb.go @@ -91,10 +91,15 @@ func (esb *EsbClient) RequestEsb(method, url string, payload map[string]interfac return nil, fmt.Errorf("payload can't be nil") } // set payload app parameter - payload[EsbRequestPayloadAppcode] = esb.AppCode - payload[EsbRequestPayloadAppsecret] = esb.AppSecret - payload[EsbRequestPayloadOperator] = esb.AppOperator payloadBytes, _ := json.Marshal(payload) + + auth := map[string]string{ + EsbRequestPayloadAppcode: esb.AppCode, + EsbRequestPayloadAppsecret: esb.AppSecret, + EsbRequestPayloadOperator: esb.AppOperator, + } + authBytes, _ := json.Marshal(auth) + // new request body body := bytes.NewBuffer(payloadBytes) // request url @@ -104,6 +109,7 @@ func (esb *EsbClient) RequestEsb(method, url string, payload map[string]interfac req, _ := http.NewRequest(method, url, body) // set header application/json req.Header.Set("Content-Type", "application/json") + req.Header.Set("X-Bkapi-Authorization", string(authBytes)) httpClient := &http.Client{} resp, err := httpClient.Do(req) if err != nil { From 3aff20b758e156bbd1962fe50ae75152ebbca295 Mon Sep 17 00:00:00 2001 From: evanxinli Date: Fri, 23 Aug 2024 10:08:32 +0000 Subject: [PATCH 003/108] =?UTF-8?q?--story=3D118570047=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=A3=80=E6=B5=8B=E8=8A=82=E7=82=B9=E7=8A=B6=E6=80=81?= =?UTF-8?q?=20(merge=20request=20!1983)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squash merge branch 'bcs-cluster-manager-0823' into 'master' --story=118570047 优化检测节点状态 TAPD: --story=118570047 --- .../bcs-cluster-manager/internal/actions/cluster/get.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bcs-services/bcs-cluster-manager/internal/actions/cluster/get.go b/bcs-services/bcs-cluster-manager/internal/actions/cluster/get.go index fd78f0f246..7113775d1b 100644 --- a/bcs-services/bcs-cluster-manager/internal/actions/cluster/get.go +++ b/bcs-services/bcs-cluster-manager/internal/actions/cluster/get.go @@ -334,9 +334,10 @@ func (ca *CheckNodeAction) getNodeResultByNodeIP(nodeIP string, masterMapIPs map // only handle not ca nodes if len(node.ClusterID) != 0 && node.NodeGroupID == "" && node.Status == common.StatusRunning { cluster, err := ca.model.GetCluster(ca.ctx, node.ClusterID) - if err == nil { - nodeResult.ClusterName = cluster.GetClusterName() + if err != nil { + return nodeResult, nil } + nodeResult.ClusterName = cluster.GetClusterName() // check node exist in cluster if cluster.Status == common.StatusDeleted || !ca.checkNodeIPInCluster(node.ClusterID, node.InnerIP) { From daf84bb3ecc0b2bde9fffbe1dc5697234b2e7e23 Mon Sep 17 00:00:00 2001 From: v_yfqnyang Date: Mon, 26 Aug 2024 01:55:03 +0000 Subject: [PATCH 004/108] =?UTF-8?q?--story=3D115714209=20=E3=80=90?= =?UTF-8?q?=E4=B8=8B=E6=9C=9F=E5=A4=84=E7=90=86=E3=80=91=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E9=9B=86=E7=BE=A4=E4=B8=AD=E7=9A=84=E6=B7=BB=E5=8A=A0=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E4=B8=8E=E5=B7=B2=E6=9C=89=E9=9B=86=E7=BE=A4=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=8A=82=E7=82=B9=E7=9A=84=E6=A0=87=E9=A2=98=E4=B8=8D?= =?UTF-8?q?=E4=B8=80=E8=87=B4=20(merge=20request=20!1979)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squash merge branch 'feat/yfq-cluster-label' into 'master' --story=115714209 【下期处理】创建集群中的添加节点与已有集群添加节点的标题不一致 TAPD: --story=115714209 --- .../frontend/src/views/cluster-manage/add/common/apply-host.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bcs-ui/frontend/src/views/cluster-manage/add/common/apply-host.vue b/bcs-ui/frontend/src/views/cluster-manage/add/common/apply-host.vue index 54770d4da0..3a267723e7 100644 --- a/bcs-ui/frontend/src/views/cluster-manage/add/common/apply-host.vue +++ b/bcs-ui/frontend/src/views/cluster-manage/add/common/apply-host.vue @@ -7,7 +7,7 @@ {{ $t('cluster.create.label.applyResource') }} - {{ $t('cluster.create.label.useExitHost') }} + {{ $t('manualNode.title.source.existingServer') }} From 950ece20cdbf960bf17ace1cad5cdec932725a99 Mon Sep 17 00:00:00 2001 From: joeecai Date: Mon, 26 Aug 2024 02:00:48 +0000 Subject: [PATCH 005/108] feat: change esb auth method (merge request !1984) Squash merge branch 'feat/user' into 'master' feat: change esb auth method --- bcs-common/pkg/esb/client/request.go | 4 +- bcs-common/pkg/esb/cmdbv3/cmdb.go | 2 +- .../app/pkg/esb/cmdb/client.go | 6 +- .../app/user-manager/job/notify/notify.go | 6 +- .../user-manager/v1http/token/extratoken.go | 4 +- .../bcs-user-manager/config/config.go | 2 +- bcs-services/bcs-user-manager/go.mod | 102 +++++++++--------- bcs-services/bcs-user-manager/main.go | 2 +- .../bcs-user-manager/options/options.go | 2 +- 9 files changed, 62 insertions(+), 68 deletions(-) diff --git a/bcs-common/pkg/esb/client/request.go b/bcs-common/pkg/esb/client/request.go index 377ac0b490..0bf018df29 100644 --- a/bcs-common/pkg/esb/client/request.go +++ b/bcs-common/pkg/esb/client/request.go @@ -166,7 +166,9 @@ func (r *Request) getHeader() http.Header { if r.headers == nil { r.headers = defaultHeader } - r.headers.Add("X-Bkapi-Authorization", string(authBytes)) + if r.headers.Get("X-Bkapi-Authorization") == "" { + r.headers.Set("X-Bkapi-Authorization", string(authBytes)) + } return r.headers } diff --git a/bcs-common/pkg/esb/cmdbv3/cmdb.go b/bcs-common/pkg/esb/cmdbv3/cmdb.go index 105c751950..c4b43d3b3e 100644 --- a/bcs-common/pkg/esb/cmdbv3/cmdb.go +++ b/bcs-common/pkg/esb/cmdbv3/cmdb.go @@ -92,7 +92,7 @@ func (c *Client) SetDefaultHeader(h http.Header) { // GetHeader get headers func (c *Client) GetHeader() http.Header { authBytes, _ := json.Marshal(c.credential) - c.defaultHeader.Add("X-Bkapi-Authorization", string(authBytes)) + c.defaultHeader.Set("X-Bkapi-Authorization", string(authBytes)) return c.defaultHeader } diff --git a/bcs-services/bcs-user-manager/app/pkg/esb/cmdb/client.go b/bcs-services/bcs-user-manager/app/pkg/esb/cmdb/client.go index 68f5fd73fd..e6804a9d79 100644 --- a/bcs-services/bcs-user-manager/app/pkg/esb/cmdb/client.go +++ b/bcs-services/bcs-user-manager/app/pkg/esb/cmdb/client.go @@ -35,11 +35,7 @@ func InitCMDBClient(op *options.UserManagerOptions) error { return fmt.Errorf("error decrypting cmdb app secret, %s", err.Error()) } cli := cmdbv3.NewClientInterface(op.Cmdb.Host, nil) - cli.SetCommonReq(map[string]interface{}{ - "bk_app_code": op.Cmdb.AppCode, - "bk_app_secret": string(appSecret), - "bk_username": op.Cmdb.BkUserName, - }) + cli.WithCredential(op.Cmdb.AppCode, string(appSecret), op.Cmdb.BkUserName) CMDBClient = cli return nil } diff --git a/bcs-services/bcs-user-manager/app/user-manager/job/notify/notify.go b/bcs-services/bcs-user-manager/app/user-manager/job/notify/notify.go index 3fc5a59b46..cadd296248 100644 --- a/bcs-services/bcs-user-manager/app/user-manager/job/notify/notify.go +++ b/bcs-services/bcs-user-manager/app/user-manager/job/notify/notify.go @@ -26,7 +26,6 @@ import ( "github.com/Tencent/bk-bcs/bcs-common/common/blog" "github.com/Tencent/bk-bcs/bcs-common/common/encrypt" - "github.com/Tencent/bk-bcs/bcs-common/pkg/esb" "github.com/robfig/cron" "github.com/Tencent/bk-bcs/bcs-services/bcs-user-manager/app/pkg/lock" @@ -276,10 +275,8 @@ func (t *tokenNotify) requestEsb(method, url string, payload map[string]interfac if payload == nil { return nil, fmt.Errorf("payload can't be nil") } - // set payload app parameter - payload[esb.EsbRequestPayloadAppcode] = t.appCode - payload[esb.EsbRequestPayloadAppsecret] = t.appSecret payloadBytes, _ := json.Marshal(payload) + authBytes, _ := json.Marshal(map[string]string{"app_code": t.appCode, "app_secret": t.appSecret}) // new request body body := bytes.NewBuffer(payloadBytes) // request url @@ -289,6 +286,7 @@ func (t *tokenNotify) requestEsb(method, url string, payload map[string]interfac req, _ := http.NewRequest(method, url, body) // set header application/json req.Header.Set("Content-Type", "application/json") + req.Header.Set("X-Bkapi-Authorization", string(authBytes)) httpClient := &http.Client{} resp, err := httpClient.Do(req) if err != nil { diff --git a/bcs-services/bcs-user-manager/app/user-manager/v1http/token/extratoken.go b/bcs-services/bcs-user-manager/app/user-manager/v1http/token/extratoken.go index 630165087f..2c455f25ad 100644 --- a/bcs-services/bcs-user-manager/app/user-manager/v1http/token/extratoken.go +++ b/bcs-services/bcs-user-manager/app/user-manager/v1http/token/extratoken.go @@ -108,9 +108,9 @@ func (t *ExtraTokenHandler) GetTokenByUserAndClusterID(request *restful.Request, bizResult, err := t.cmdbClient.ESBSearchBusiness("", map[string]interface{}{ "bk_biz_id": intBizID, }) - if bizResult == nil || bizResult.Data == nil || len(bizResult.Data.Info) == 0 { + if bizResult == nil || bizResult.Data == nil || len(bizResult.Data.Info) == 0 || err != nil { message := fmt.Sprintf("business %s is not found", businessID) - blog.Error(message) + blog.Errorf("message: %s, err: %v, result: %v", message, err, bizResult) metrics.ReportRequestAPIMetrics("GetTokenByUserAndClusterID", request.Request.Method, metrics.ErrStatus, start) utils.WriteForbiddenError(response, 400, message) return diff --git a/bcs-services/bcs-user-manager/config/config.go b/bcs-services/bcs-user-manager/config/config.go index d56d58fbe7..d07cd73642 100644 --- a/bcs-services/bcs-user-manager/config/config.go +++ b/bcs-services/bcs-user-manager/config/config.go @@ -19,7 +19,7 @@ import ( "github.com/Tencent/bk-bcs/bcs-common/common/encryptv2" // nolint "github.com/Tencent/bk-bcs/bcs-common/common/static" "github.com/Tencent/bk-bcs/bcs-common/pkg/auth/iam" - registry "github.com/Tencent/bk-bcs/bcs-common/pkg/registryv4" + registry "github.com/Tencent/bk-bcs/bcs-common/pkg/registry" "github.com/Tencent/bk-bcs/bcs-services/bcs-user-manager/options" ) diff --git a/bcs-services/bcs-user-manager/go.mod b/bcs-services/bcs-user-manager/go.mod index ba1d1be1d5..01729a4a4c 100644 --- a/bcs-services/bcs-user-manager/go.mod +++ b/bcs-services/bcs-user-manager/go.mod @@ -3,6 +3,7 @@ module github.com/Tencent/bk-bcs/bcs-services/bcs-user-manager go 1.20 replace ( + github.com/Tencent/bk-bcs/bcs-common => ../../bcs-common github.com/TencentBlueKing/iam-go-sdk => github.com/TencentBlueKing/iam-go-sdk v0.1.5 go.opentelemetry.io/otel/exporters/otlp/otlptrace => go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.17.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.17.0 @@ -10,13 +11,10 @@ replace ( require ( github.com/DATA-DOG/go-sqlmock v1.5.0 - github.com/Tencent/bk-bcs/bcs-common v0.0.0-20230921034852-f07df6e705c2 + github.com/Tencent/bk-bcs/bcs-common v0.0.0-20240823171918-a270e7cb2bfe github.com/Tencent/bk-bcs/bcs-common/common/encryptv2 v0.0.0-20230921064043-a8ed550f5a77 - github.com/Tencent/bk-bcs/bcs-common/pkg/audit v0.0.0-20230926121755-f75e5692e9c4 - github.com/Tencent/bk-bcs/bcs-common/pkg/auth v0.0.0-20240321025827-3dae3a862210 - github.com/Tencent/bk-bcs/bcs-common/pkg/i18n v0.0.0-20231023061744-043bdae0b61e github.com/Tencent/bk-bcs/bcs-services/pkg v0.0.0-20230921034852-f07df6e705c2 - github.com/TencentBlueKing/iam-go-sdk v0.1.4 + github.com/TencentBlueKing/iam-go-sdk v0.1.6 github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef github.com/avast/retry-go v3.0.0+incompatible github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 @@ -25,63 +23,66 @@ require ( github.com/go-playground/universal-translator v0.18.1 github.com/go-redis/redis/extra/redisotel/v8 v8.11.5 github.com/go-redis/redis/v8 v8.11.5 - github.com/go-resty/resty/v2 v2.7.0 - github.com/golang-migrate/migrate/v4 v4.16.2 + github.com/go-resty/resty/v2 v2.12.0 + github.com/golang-migrate/migrate/v4 v4.17.0 github.com/gorilla/schema v1.2.0 github.com/jinzhu/gorm v1.9.16 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 - github.com/prometheus/client_golang v1.14.0 + github.com/prometheus/client_golang v1.19.0 github.com/robfig/cron v1.2.0 github.com/signalfx/splunk-otel-go/instrumentation/github.com/jinzhu/gorm/splunkgorm v1.5.0 github.com/sirupsen/logrus v1.9.3 - github.com/stretchr/testify v1.8.4 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.43.0 + github.com/stretchr/testify v1.9.0 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 gopkg.in/go-playground/validator.v9 v9.31.0 k8s.io/apimachinery v0.23.1 k8s.io/klog/v2 v2.100.1 ) require ( + dario.cat/mergo v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20220824120805-4b6e5c587895 // indirect + github.com/ProtonMail/go-crypto v1.0.0 // indirect github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/TencentBlueKing/bk-audit-go-sdk v0.0.5 // indirect + github.com/TencentBlueKing/bk-audit-go-sdk v0.0.6 // indirect github.com/TencentBlueKing/crypto-golang-sdk v1.0.0 // indirect github.com/TencentBlueKing/gopkg v1.1.0 // indirect - github.com/acomagu/bufpipe v1.0.3 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bitly/go-simplejson v0.5.0 // indirect github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cloudflare/circl v1.2.0 // indirect + github.com/cloudflare/circl v1.3.7 // indirect github.com/coreos/go-semver v0.3.0 // indirect github.com/coreos/go-systemd/v22 v22.3.2 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/emicklei/go-restful-openapi v1.4.1 // indirect github.com/emirpasic/gods v1.18.1 // indirect - github.com/felixge/httpsnoop v1.0.3 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/go-git/gcfg v1.5.0 // indirect - github.com/go-git/go-billy/v5 v5.3.1 // indirect - github.com/go-git/go-git/v5 v5.4.2 // indirect - github.com/go-logr/logr v1.2.4 // indirect + github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-git/go-billy/v5 v5.5.0 // indirect + github.com/go-git/go-git/v5 v5.12.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.19.5 // indirect github.com/go-openapi/spec v0.19.3 // indirect github.com/go-openapi/swag v0.19.14 // indirect - github.com/go-playground/validator/v10 v10.11.2 // indirect + github.com/go-playground/validator/v10 v10.19.0 // indirect github.com/go-redis/redis/extra/rediscmd/v8 v8.11.5 // indirect github.com/go-sql-driver/mysql v1.7.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/gopherjs/gopherjs v1.17.2 // indirect github.com/gorilla/mux v1.8.0 // indirect @@ -97,11 +98,9 @@ require ( github.com/jtolds/gls v4.20.0+incompatible // indirect github.com/juju/ratelimit v1.0.1 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/leodido/go-urn v1.2.2 // indirect + github.com/leodido/go-urn v1.4.0 // indirect github.com/mailru/easyjson v0.7.6 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/miekg/dns v1.1.50 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/hashstructure v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -112,50 +111,50 @@ require ( github.com/openzipkin/zipkin-go v0.3.0 // indirect github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect github.com/parnurzeal/gorequest v0.2.16 // indirect + github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.41.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.48.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect - github.com/sergi/go-diff v1.2.0 // indirect + github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/signalfx/splunk-otel-go v1.4.0 // indirect github.com/signalfx/splunk-otel-go/instrumentation/database/sql/splunksql v1.4.0 // indirect github.com/signalfx/splunk-otel-go/instrumentation/internal v1.4.0 // indirect + github.com/skeema/knownhosts v1.2.2 // indirect github.com/smartystreets/assertions v1.2.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/objx v0.5.0 // indirect - github.com/ugorji/go/codec v1.2.9 // indirect + github.com/stretchr/objx v0.5.2 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect github.com/urfave/cli/v2 v2.3.0 // indirect - github.com/xanzy/ssh-agent v0.3.2 // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect go.etcd.io/etcd/api/v3 v3.5.2 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.2 // indirect go.opentelemetry.io/otel/exporters/jaeger v1.3.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.17.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.17.0 // indirect go.opentelemetry.io/otel/exporters/zipkin v1.3.0 // indirect go.opentelemetry.io/otel/sdk v1.17.0 // indirect go.opentelemetry.io/proto/otlp v1.0.0 // indirect go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect - go.uber.org/zap v1.17.0 // indirect - golang.org/x/crypto v0.7.0 // indirect - golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.10.0 // indirect - golang.org/x/sync v0.2.0 // indirect - golang.org/x/sys v0.11.0 // indirect - golang.org/x/text v0.9.0 // indirect - golang.org/x/tools v0.9.1 // indirect - google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect - google.golang.org/grpc v1.57.0 // indirect - google.golang.org/protobuf v1.31.0 // indirect + go.uber.org/zap v1.19.0 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/mod v0.12.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/tools v0.13.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect + google.golang.org/grpc v1.62.1 // indirect + google.golang.org/protobuf v1.33.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/klog v1.0.0 // indirect k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b // indirect moul.io/http2curl v1.0.0 // indirect sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 // indirect @@ -164,14 +163,13 @@ require ( ) require ( - github.com/Tencent/bk-bcs/bcs-common/pkg/otel v0.0.0-20230602042320-14f127097270 github.com/dustin/go-humanize v1.0.0 github.com/go-micro/plugins/v4/registry/etcd v1.1.0 - github.com/google/uuid v1.3.1 + github.com/google/uuid v1.6.0 go-micro.dev/v4 v4.10.2 go.etcd.io/etcd/client/v3 v3.5.2 - go.opentelemetry.io/otel v1.17.0 - go.opentelemetry.io/otel/metric v1.17.0 - go.opentelemetry.io/otel/trace v1.17.0 + go.opentelemetry.io/otel v1.18.0 + go.opentelemetry.io/otel/metric v1.18.0 + go.opentelemetry.io/otel/trace v1.18.0 gopkg.in/go-playground/assert.v1 v1.2.1 // indirect ) diff --git a/bcs-services/bcs-user-manager/main.go b/bcs-services/bcs-user-manager/main.go index e3f4b454eb..5d5dfd7a29 100644 --- a/bcs-services/bcs-user-manager/main.go +++ b/bcs-services/bcs-user-manager/main.go @@ -31,7 +31,7 @@ import ( "github.com/Tencent/bk-bcs/bcs-common/common/conf" "github.com/Tencent/bk-bcs/bcs-common/common/types" "github.com/Tencent/bk-bcs/bcs-common/common/version" - registry "github.com/Tencent/bk-bcs/bcs-common/pkg/registryv4" + registry "github.com/Tencent/bk-bcs/bcs-common/pkg/registry" "github.com/Tencent/bk-bcs/bcs-services/bcs-user-manager/app" "github.com/Tencent/bk-bcs/bcs-services/bcs-user-manager/app/pkg/component" diff --git a/bcs-services/bcs-user-manager/options/options.go b/bcs-services/bcs-user-manager/options/options.go index a61b0f5d7e..17f333b082 100644 --- a/bcs-services/bcs-user-manager/options/options.go +++ b/bcs-services/bcs-user-manager/options/options.go @@ -15,7 +15,7 @@ package options import ( "github.com/Tencent/bk-bcs/bcs-common/common/conf" - registry "github.com/Tencent/bk-bcs/bcs-common/pkg/registryv4" + registry "github.com/Tencent/bk-bcs/bcs-common/pkg/registry" ) // UserManagerOptions cmd option for user-manager From f134fb613694c841f1c3c7dfed3b1b20306a7b21 Mon Sep 17 00:00:00 2001 From: alkaidchen Date: Mon, 26 Aug 2024 06:16:18 +0000 Subject: [PATCH 006/108] fix: add a toggle to specify whether to display all projects or only the projects that the user is authorized to access. (merge request !1985) Squash merge branch 'fix/authorized-projects' into 'master' fix: add a toggle to specify whether to display all projects or only the projects that the user is authorized to access. --- .../internal/actions/project/list.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/bcs-services/bcs-project-manager/internal/actions/project/list.go b/bcs-services/bcs-project-manager/internal/actions/project/list.go index 310d85f1b6..548ef43a43 100644 --- a/bcs-services/bcs-project-manager/internal/actions/project/list.go +++ b/bcs-services/bcs-project-manager/internal/actions/project/list.go @@ -146,14 +146,19 @@ func (lap *ListAuthorizedProject) Do(ctx context.Context, } } else { // all 为 false 且用户没有全部项目查看权限时,返回用户有权限的项目,分页和模糊查询都无效 + var cond *operator.Condition condKind := make(operator.M) - condID := make(operator.M) if req.Kind != "" { condKind["kind"] = req.Kind } - condID["projectID"] = ids - cond := operator.NewBranchCondition(operator.And, - operator.NewLeafCondition(operator.In, condID), operator.NewLeafCondition(operator.Eq, condKind)) + if any { + cond = operator.NewBranchCondition(operator.And, operator.NewLeafCondition(operator.Eq, condKind)) + } else { + condID := make(operator.M) + condID["projectID"] = ids + cond = operator.NewBranchCondition(operator.And, + operator.NewLeafCondition(operator.In, condID), operator.NewLeafCondition(operator.Eq, condKind)) + } projects, total, err = lap.model.ListProjects(ctx, cond, &page.Pagination{All: true}) } if err != nil { From 7dfa5f348274a1a453d46b0c9fe1b01997b1fd61 Mon Sep 17 00:00:00 2001 From: v_yfqnyang Date: Mon, 26 Aug 2024 09:16:47 +0000 Subject: [PATCH 007/108] =?UTF-8?q?--story=3D119234288=20=E3=80=90UI?= =?UTF-8?q?=E3=80=91=E9=9B=86=E7=BE=A4=E8=AF=A6=E6=83=85tab=E9=A1=B5?= =?UTF-8?q?=E4=BC=98=E5=8C=96=20(merge=20request=20!1972)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squash merge branch 'fix/yfq-cluster-detail-tabs' into 'master' --story=119234288 【UI】集群详情tab页优化 TAPD: --story=119234288 --- .../views/cluster-manage/cluster/detail.vue | 268 ++++++++---------- .../cluster-manage/namespace/use-namespace.ts | 7 +- 2 files changed, 130 insertions(+), 145 deletions(-) diff --git a/bcs-ui/frontend/src/views/cluster-manage/cluster/detail.vue b/bcs-ui/frontend/src/views/cluster-manage/cluster/detail.vue index c720a93a00..5d499ccc7a 100644 --- a/bcs-ui/frontend/src/views/cluster-manage/cluster/detail.vue +++ b/bcs-ui/frontend/src/views/cluster-manage/cluster/detail.vue @@ -48,111 +48,18 @@ type="card-tab" class="cluster-detail-tab" v-if="panelStatus !== 'hidden'"> - - - - - - + + + + + @@ -204,7 +111,7 @@ const normalStatusList = ref(['CONNECT-FAILURE', 'RUNNING']); const activeTabName = ref(props.active); watch(activeTabName, () => { - if ($router.currentRoute?.query?.active === activeTabName.value) return; + if (props.active === activeTabName.value) return; // 更新路由 $router.replace({ query: { @@ -228,45 +135,120 @@ const isKubeConfigImportCluster = computed(() => curCluster.value.clusterCategor // }; const showAutoScaler = computed(() => !!curCluster.value?.autoScale); -watch( - [ - () => showAutoScaler.value, - () => activeTabName.value, - () => props.clusterId, - ], - () => { - setTimeout(() => { - /** - * - 当前集群不支持autoscaler需要跳转回overview tab - * - 托管集群只有overview、basicInfo和quota三个tab详情 - * - 共享集群只有命名空间、基本信息和网络配置 - */ - if ( - (!showAutoScaler.value && activeTabName.value === 'autoscaler') - || (curCluster.value.clusterType === 'virtual' && !['overview', 'namespace', 'info', 'quota'].includes(activeTabName.value)) - || (curCluster.value.clusterType !== 'virtual' && activeTabName.value === 'quota') - ) { - activeTabName.value = 'overview'; - } - - if (curCluster.value.is_shared && !['namespace', 'info', 'network'].includes(activeTabName.value)) { - activeTabName.value = 'namespace'; - } +const tabs = computed(() => [ + { + name: 'overview', // 默认显示的tab + label: 'cluster.detail.title.overview', // tab名称 + component: Overview, // tab对应的组件 + isShow: !curCluster.value?.is_shared + && normalStatusList.value.includes(curCluster.value.status || ''), // 是否显示该tab + componentConfig: { + clusterId: props.clusterId, + }, // tab对应的组件配置 + }, + { + name: 'namespace', + label: 'k8s.namespace', + component: Namespace, + isShow: (curCluster.value?.is_shared + || normalStatusList.value.includes(curCluster.value.status || '')), + componentConfig: { + clusterId: props.clusterId, + namespace: props.namespace, + }, + }, + { + name: 'info', + label: 'generic.title.basicInfo1', + component: Info, + isShow: true, + componentConfig: { + clusterId: props.clusterId, + }, + }, + { + name: 'network', + label: 'cluster.detail.title.network', + component: Network, + isShow: (curCluster.value?.is_shared + || (curCluster.value.clusterType !== 'virtual' + && !isKubeConfigImportCluster.value)), + componentConfig: { + clusterId: props.clusterId, + }, + }, + { + name: 'master', + label: 'cluster.detail.title.controlConfig', + component: Master, + isShow: (!curCluster.value?.is_shared + && curCluster.value.clusterType !== 'virtual' + && !isKubeConfigImportCluster.value), + componentConfig: { + clusterId: props.clusterId, + }, + }, + { + name: 'node', + label: 'cluster.detail.title.nodeList', + component: Node, + isShow: (!curCluster.value?.is_shared + && curCluster.value.clusterType !== 'virtual' + && normalStatusList.value.includes(curCluster.value.status || '')), + componentConfig: { + clusterId: props.clusterId, + fromCluster: true, + hideClusterSelect: true, + }, + }, + { + name: 'autoscaler', + label: 'cluster.detail.title.autoScaler', + component: AutoScaler, + isShow: (!curCluster.value?.is_shared + && curCluster.value.clusterType !== 'virtual' + && normalStatusList.value.includes(curCluster.value.status || '') + && showAutoScaler.value), + componentConfig: { + clusterId: props.clusterId, + }, + }, + { + name: 'taskRecord', + label: 'cluster.title.opRecord', + component: TaskRecord, + isShow: (!curCluster.value?.is_shared + && curCluster.value.clusterType !== 'virtual' + && normalStatusList.value.includes(curCluster.value.status || '') + && curCluster.value.provider === 'tencentCloud'), + componentConfig: { + clusterId: props.clusterId, + }, + }, + { + name: 'quota', + label: 'cluster.detail.title.quota', + component: VClusterQuota, + isShow: (!curCluster.value?.is_shared + && curCluster.value.clusterType === 'virtual' + && normalStatusList.value.includes(curCluster.value.status || '')), + componentConfig: { + clusterId: props.clusterId, + }, + }, +]); - // 非正常集群只能看基本信息、网络和master - if (!normalStatusList.value.includes(curCluster.value.status || '') - && !['info', 'network', 'master'].includes(activeTabName.value)) { - activeTabName.value = 'info'; - } +const realTabs = computed(() => tabs.value.filter(tab => tab.isShow)); - // kubeconfig集群只有总览、命名空间、基本信息、节点列表 - if (isKubeConfigImportCluster.value && !['overview', 'namespace', 'info', 'node'].includes(activeTabName.value)) { - activeTabName.value = 'overview'; - } - }); - }, - { immediate: true }, -); +watch([ + () => showAutoScaler.value, + () => activeTabName.value, + () => props.clusterId, +], () => { + if (!realTabs.value.some(item => item.name === activeTabName.value)) { + activeTabName.value = realTabs.value?.[0]?.name || ''; + } +}, { immediate: true }); // resize event const modalRef = ref(); diff --git a/bcs-ui/frontend/src/views/cluster-manage/namespace/use-namespace.ts b/bcs-ui/frontend/src/views/cluster-manage/namespace/use-namespace.ts index fffa7cb6dc..e087be9e88 100644 --- a/bcs-ui/frontend/src/views/cluster-manage/namespace/use-namespace.ts +++ b/bcs-ui/frontend/src/views/cluster-manage/namespace/use-namespace.ts @@ -21,9 +21,12 @@ export function useNamespace() { const webAnnotations = ref({ perms: {} }); async function getNamespaceData(params, loading = true) { - if (!params || !params.$clusterId) return; + if (!params?.$clusterId) return; namespaceLoading.value = loading; - const { data, web_annotations: _webAnnotations } = await getNamespaceList(params, { needRes: true }) + const { data, web_annotations: _webAnnotations } = await getNamespaceList( + params, + { needRes: true, cancelWhenRouteChange: false }, + ) .catch(() => ({ data: [], web_annotations: [] })); namespaceData.value = data; webAnnotations.value = _webAnnotations; From 0e4b63ea5b864a22758c99438680c055919e22e9 Mon Sep 17 00:00:00 2001 From: yovafeng Date: Mon, 26 Aug 2024 11:18:44 +0000 Subject: [PATCH 008/108] =?UTF-8?q?--story=3D119272566=20=E3=80=90Gitps?= =?UTF-8?q?=E3=80=91=E5=A2=9E=E5=8A=A0=E4=B8=BA=E5=A4=96=E9=83=A8=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=8E=88=E6=9D=83=E5=8A=9F=E8=83=BD=20(merge=20reques?= =?UTF-8?q?t=20!1982)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squash merge branch 'feat_ext_user' into 'master' --story=119272566 【Gitps】增加为外部用户授权功能并赋予project_view权限 TAPD: --story=119272566 --- .../internal/dao/interface.go | 24 +++-- .../bcs-gitops-manager/internal/dao/mysql.go | 80 +++++++++++++++++ .../pkg/proxy/argocd/permission.go | 87 +++++++++++++++++++ 3 files changed, 186 insertions(+), 5 deletions(-) diff --git a/bcs-scenarios/bcs-gitops-manager/internal/dao/interface.go b/bcs-scenarios/bcs-gitops-manager/internal/dao/interface.go index 7169e9a7d7..495710e081 100644 --- a/bcs-scenarios/bcs-gitops-manager/internal/dao/interface.go +++ b/bcs-scenarios/bcs-gitops-manager/internal/dao/interface.go @@ -133,6 +133,13 @@ type AppSetClusterScope struct { UpdateTime time.Time `json:"updateTime" gorm:"column:updateTime;type:datetime DEFAULT NULL"` } +// ExternalUserPermission 定义 外部用户 的授权访问 +type ExternalUserPermission struct { + ID int64 `json:"id" gorm:"column:id;primaryKey;type:int(11) AUTO_INCREMENT NOT NULL"` + User string `json:"user" gorm:"uniqueIndex:idx_user_project;column:user;type:varchar(64) NOT NULL"` + Project string `json:"project" gorm:"uniqueIndex:idx_user_project;column:project;type:varchar(256) NOT NULL"` +} + // Encode 针对大字符串在保存前进行压缩 func (ahm *ApplicationHistoryManifest) Encode() error { appYaml, err := utils.GzipEncode(utils.StringToSliceByte(ahm.ApplicationYaml)) @@ -182,11 +189,12 @@ func (ahm *ApplicationHistoryManifest) GetApplicationYaml() string { } const ( - tableActivityUser = "bcs_gitops_activity_user" // nolint - tableHistoryManifest = "bcs_gitops_app_history_manifest" - tableUserPermission = "bcs_gitops_user_permission" - tableUserAudit = "bcs_gitops_user_audit" - tableAppSetClusterScope = "bcs_gitops_appset_cluster_scope" + tableActivityUser = "bcs_gitops_activity_user" // nolint + tableHistoryManifest = "bcs_gitops_app_history_manifest" + tableUserPermission = "bcs_gitops_user_permission" + tableUserAudit = "bcs_gitops_user_audit" + tableAppSetClusterScope = "bcs_gitops_appset_cluster_scope" + tableExternalUserPermission = "bcs_gitops_externaluser_permission" ) // Interface xxx interface @@ -212,4 +220,10 @@ type Interface interface { UpdateAppSetClusterScope(appSet, clusters string) error GetAppSetClusterScope(appSet string) (*AppSetClusterScope, error) DeleteAppSetClusterScope(appSet string) error + + CreateExternalUserPermission(externalPermission *ExternalUserPermission) error + DeleteExternalUserProject(user, project string) error + ListExternalUserPermission(user string) ([]*ExternalUserPermission, error) + CheckExternalUserPermission(user, project string) (bool, error) + ListExternalUserPermissionByProject(project string) ([]*ExternalUserPermission, error) } diff --git a/bcs-scenarios/bcs-gitops-manager/internal/dao/mysql.go b/bcs-scenarios/bcs-gitops-manager/internal/dao/mysql.go index 22506fe4f9..6fb40c6649 100644 --- a/bcs-scenarios/bcs-gitops-manager/internal/dao/mysql.go +++ b/bcs-scenarios/bcs-gitops-manager/internal/dao/mysql.go @@ -92,6 +92,9 @@ func (d *driver) autoCreateTable() error { if err := d.createTable(tableAppSetClusterScope, &AppSetClusterScope{}); err != nil { return errors.Wrapf(err, "create table '%s' failed", tableUserAudit) } + if err := d.createTable(tableExternalUserPermission, &ExternalUserPermission{}); err != nil { + return errors.Wrapf(err, "create table '%s' failed", tableExternalUserPermission) + } return nil } @@ -461,3 +464,80 @@ func (d *driver) DeleteAppSetClusterScope(appSet string) error { } return nil } + +// CreateExternalUserPermission create ExternalUserPermission +func (d *driver) CreateExternalUserPermission(externalPermission *ExternalUserPermission) error { + if err := d.db.Table(tableExternalUserPermission).Create(&externalPermission).Error; err != nil { + if strings.Contains(err.Error(), "Duplicate") { + // ignore exist + return nil + } + return errors.Wrapf(err, "save externaluser permission failed") + } + return nil +} + +// DeleteExternalUserProject remove a externaluser's project permission +func (d *driver) DeleteExternalUserProject(user, project string) error { + if err := d.db.Table(tableExternalUserPermission). + Where("project = ?", project). + Where("user = ?", user).Delete(&ExternalUserPermission{}).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil + } + return errors.Wrapf(err, "delete externaluser's project permission failed") + } + return nil +} + +// ListExternalUserPermission list externaluser's permission by username +func (d *driver) ListExternalUserPermission(user string) ([]*ExternalUserPermission, error) { + rows, err := d.db.Table(tableExternalUserPermission).Where("user = ?", user).Rows() + if err != nil { + return nil, errors.Wrapf(err, "query externaluser permission failed") + } + defer rows.Close() // nolint + res := make([]*ExternalUserPermission, 0) + for rows.Next() { + ep := new(ExternalUserPermission) + if err = d.db.ScanRows(rows, ep); err != nil { + return nil, errors.Wrapf(err, "scan externaluser permission failed") + } + res = append(res, ep) + } + return res, nil +} + +// CheckExternalUserPermission check externaluser's permission by username and project +func (d *driver) CheckExternalUserPermission(user, project string) (bool, error) { + rows, err := d.db.Table(tableExternalUserPermission).Where("user = ?", user). + Where("project = ?", project).Rows() + if err != nil { + return false, errors.Wrapf(err, "query externaluser permission failed") + } + defer rows.Close() // nolint + + for rows.Next() { + return true, nil + } + return false, nil +} + +// ListExternalUserPermissionByProject list project's externaluser by projectcode +func (d *driver) ListExternalUserPermissionByProject(project string) ([]*ExternalUserPermission, error) { + rows, err := d.db.Table(tableExternalUserPermission).Where("project = ?", project).Rows() + if err != nil { + return nil, errors.Wrapf(err, "query externaluser permission by project failed") + } + defer rows.Close() // nolint + + res := make([]*ExternalUserPermission, 0) + for rows.Next() { + ep := new(ExternalUserPermission) + if err = d.db.ScanRows(rows, ep); err != nil { + return nil, errors.Wrapf(err, "scan externaluser permission failed") + } + res = append(res, ep) + } + return res, nil +} diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permission.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permission.go index afcb084c52..a463f26626 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permission.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permission.go @@ -58,6 +58,18 @@ func (plugin *PermissionPlugin) Init() error { // 校验用户是否具备 BCS 的资源权限 plugin.Path("/check_bcs_permissions").Methods("GET"). Handler(plugin.middleware.HttpWrapper(plugin.checkBcsPermissions)) + + // 给外部用户授权,只允许tencentUser调用 + plugin.Path("/add_externaluser_permission").Methods("POST"). + Handler(plugin.middleware.HttpWrapper(plugin.addExternalUserPermission)) + + // 删除外部用户的项目权限,只允许tencentUser调用 + plugin.Path("/del_externaluser_permission").Methods("DELETE"). + Handler(plugin.middleware.HttpWrapper(plugin.deleteExternalUserProject)) + + // 列出外部用户拥有的权限 + plugin.Path("/list_externaluser_permissions").Methods("GET"). + Handler(plugin.middleware.HttpWrapper(plugin.listExternalUserPermission)) return nil } @@ -169,3 +181,78 @@ func (plugin *PermissionPlugin) checkBcsPermissions(r *http.Request) (*http.Requ } return r, mw.ReturnJSONResponse("ok") } + +func (plugin *PermissionPlugin) addExternalUserPermission(r *http.Request) (*http.Request, *mw.HttpResponse) { + user := ctxutils.User(r.Context()) + if !user.IsTencent { + return r, mw.ReturnErrorResponse(http.StatusForbidden, fmt.Errorf("user not authorized")) + } + externalUser := r.URL.Query().Get("external_user") + if externalUser == "" { + return r, mw.ReturnErrorResponse(http.StatusBadRequest, + fmt.Errorf("query param 'external_user' cannot be empty")) + } + project := r.URL.Query().Get("project_code") + if project == "" { + return r, mw.ReturnErrorResponse(http.StatusBadRequest, + fmt.Errorf("query param 'project_code' cannot be empty")) + } + _, status, err := plugin.permitChecker.CheckProjectPermission(r.Context(), project, permitcheck.ProjectEditRSAction) + if err != nil { + return r, mw.ReturnErrorResponse(status, err) + } + if err := plugin.db.CreateExternalUserPermission(&dao.ExternalUserPermission{ + User: externalUser, + Project: project, + }); err != nil { + return r, mw.ReturnErrorResponse(http.StatusInternalServerError, err) + } + return r, mw.ReturnJSONResponse(map[string]string{ + "user": externalUser, + "project": project, + }) +} + +func (plugin *PermissionPlugin) listExternalUserPermission(r *http.Request) (*http.Request, *mw.HttpResponse) { + user := ctxutils.User(r.Context()) + exteralUser := "" + if user.IsTencent { + exteralUser = r.URL.Query().Get("external_user") + if exteralUser == "" { + return r, mw.ReturnErrorResponse(http.StatusBadRequest, fmt.Errorf("query param 'external_user' cannot be empty")) + } + } else { + exteralUser = user.UserName + } + permssions, err := plugin.db.ListExternalUserPermission(exteralUser) + if err != nil { + return r, mw.ReturnErrorResponse(http.StatusInternalServerError, err) + } + return r, mw.ReturnJSONResponse(map[string]interface{}{ + "user": exteralUser, + "permissions": permssions, + }) +} + +func (plugin *PermissionPlugin) deleteExternalUserProject(r *http.Request) (*http.Request, *mw.HttpResponse) { + user := ctxutils.User(r.Context()) + if !user.IsTencent { + return r, mw.ReturnErrorResponse(http.StatusForbidden, fmt.Errorf("user not authorized")) + } + project := r.URL.Query().Get("project_code") + if project == "" { + return r, mw.ReturnErrorResponse(http.StatusBadRequest, fmt.Errorf("query param 'project_code' cannot be empty")) + } + externalUser := r.URL.Query().Get("external_user") + if externalUser == "" { + return r, mw.ReturnErrorResponse(http.StatusBadRequest, fmt.Errorf("query param 'external_user' cannot be empty")) + } + _, status, err := plugin.permitChecker.CheckProjectPermission(r.Context(), project, permitcheck.ProjectEditRSAction) + if err != nil { + return r, mw.ReturnErrorResponse(status, err) + } + if err := plugin.db.DeleteExternalUserProject(externalUser, project); err != nil { + return r, mw.ReturnErrorResponse(http.StatusInternalServerError, err) + } + return r, mw.ReturnDirectResponse("ok") +} From 8dab75464cc75cb4ad66e5b760a7bfcee97b4032 Mon Sep 17 00:00:00 2001 From: pelenli Date: Mon, 26 Aug 2024 11:19:07 +0000 Subject: [PATCH 009/108] =?UTF-8?q?--story=3D119285955=20=E3=80=90GitOps?= =?UTF-8?q?=E3=80=91workflow=20=E4=BF=AE=E5=A4=8D=E5=AF=B9=E6=8E=A5?= =?UTF-8?q?=E8=93=9D=E7=9B=BE=E7=B1=BB=E5=9E=8B=E4=B8=8D=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20(merge=20request=20!1973)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squash merge branch 'pelenli-gitops-fix-workflow-0820' into 'master' --story=119285955 【GitOps】workflow 修复对接蓝盾类型不正确问题 TAPD: --story=119285955 --- .../pkg/proxy/argocd/application.go | 7 ++++-- .../pkg/third_engine/bkdevops/transfer.go | 22 +++++++++++++++++-- .../pkg/third_engine/bkdevops/type.go | 2 +- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/application.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/application.go index 10c9a09f91..3127af93be 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/application.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/application.go @@ -639,8 +639,11 @@ func (plugin *AppPlugin) syncRefresh(r *http.Request) (*http.Request, *mw.HttpRe // get remote repo last-commit-id lastCommitIDs, err := plugin.getApplicationLastCommitIDs(timeCtx, argoApp) if err != nil { - return r, mw.ReturnErrorResponse(http.StatusInternalServerError, errors.Wrapf(err, - "get application's source.repo last commit-id failed")) + // we cannot check without clone repo if targetRevision is just a commit-hash, just sleep 5 seconds + blog.Warnf("RequestID[%s] got last-commit for '%s' failed: %s", ctxutils. + RequestID(r.Context()), appName, err) + time.Sleep(5 * time.Second) + return r, mw.ReturnJSONResponse(argoApp) } blog.Infof("RequestID[%s] got the last-commit-ids: %v", ctxutils.RequestID(timeCtx), lastCommitIDs) // ticker for check application got the latest commit-id diff --git a/bcs-scenarios/bcs-gitops-workflow/pkg/third_engine/bkdevops/transfer.go b/bcs-scenarios/bcs-gitops-workflow/pkg/third_engine/bkdevops/transfer.go index b34f2d91ff..9382dceeaf 100644 --- a/bcs-scenarios/bcs-gitops-workflow/pkg/third_engine/bkdevops/transfer.go +++ b/bcs-scenarios/bcs-gitops-workflow/pkg/third_engine/bkdevops/transfer.go @@ -14,6 +14,7 @@ package bkdevops import ( "context" + "encoding/json" "fmt" "reflect" "strings" @@ -206,8 +207,25 @@ func (t *workflowTransfer) buildElementLinuxScript(pluginVersion string, step *g return result } +func checkStringType(str string) interface{} { + bs := []byte(str) + resultSlice := make([]string, 0) + if err := json.Unmarshal(bs, &resultSlice); err == nil { + return resultSlice + } + var resultBool bool + if err := json.Unmarshal([]byte(str), &resultBool); err == nil { + return resultBool + } + return str +} + func (t *workflowTransfer) buildElementMarketBuild(pluginType, pluginName, pluginVersion string, step *gitopsv1.Step) *elementMarketBuild { + nweData := make(map[string]interface{}) + for k, v := range step.With { + nweData[k] = checkStringType(v) + } result := &elementMarketBuild{ Type: elementType(pluginType), Name: step.Name, @@ -217,9 +235,9 @@ func (t *workflowTransfer) buildElementMarketBuild(pluginType, pluginName, plugi ClassType: pluginType, ExecuteCount: 1, Data: struct { - Input map[string]string `json:"input,omitempty"` + Input map[string]interface{} `json:"input,omitempty"` }{ - Input: step.With, + Input: nweData, }, } result.AdditionalOptions = t.buildControlOption(preTaskSuccess, step.Condition, step.Timeout) diff --git a/bcs-scenarios/bcs-gitops-workflow/pkg/third_engine/bkdevops/type.go b/bcs-scenarios/bcs-gitops-workflow/pkg/third_engine/bkdevops/type.go index 3bcab9659a..c1c657f983 100644 --- a/bcs-scenarios/bcs-gitops-workflow/pkg/third_engine/bkdevops/type.go +++ b/bcs-scenarios/bcs-gitops-workflow/pkg/third_engine/bkdevops/type.go @@ -176,7 +176,7 @@ type elementMarketBuild struct { ClassType string `json:"classType,omitempty"` ExecuteCount int64 `json:"executeCount,omitempty"` Data struct { - Input map[string]string `json:"input,omitempty"` + Input map[string]interface{} `json:"input,omitempty"` } `json:"data"` AdditionalOptions *controlOption `json:"additionalOptions,omitempty"` } From 9e614f2789dd81c414ef275a023b0efe2afba1ff Mon Sep 17 00:00:00 2001 From: dove0012 Date: Tue, 27 Aug 2024 10:44:16 +0800 Subject: [PATCH 010/108] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=8D=8E?= =?UTF-8?q?=E4=B8=BA=E4=BA=91=E5=88=9B=E5=BB=BA=E5=92=8C=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E9=9B=86=E7=BE=A4=E5=8A=9F=E8=83=BD=20(#3464)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 添加创建华为云集群功能 * 添加删除集群功能 * 修改删除集群 * 修改删除节点 * 创建华为云集群 * 创建华为云集群功能 * 修复golangci-lint规范问题 --- .../api/clustermanager/clustermanager.pb.go | 9431 +++--- .../clustermanager/clustermanager.pb.micro.go | 36 +- .../clustermanager.pb.validate.go | 28118 +++++++++++++++- .../api/clustermanager/clustermanager.proto | 12 +- .../clustermanager.swagger.json | 20 +- .../bcs-cluster-manager/i18n/lang/zh.yaml | 2 + .../internal/actions/cluster/create.go | 8 + .../internal/cloudprovider/constants.go | 2 + .../internal/cloudprovider/huawei/api/cce.go | 79 +- .../cloudprovider/huawei/api/constant.go | 25 + .../cloudprovider/huawei/api/types.go | 173 + .../cloudprovider/huawei/api/utils.go | 120 + .../cloudprovider/huawei/business/cce.go | 101 + .../internal/cloudprovider/huawei/cloud.go | 3 +- .../internal/cloudprovider/huawei/cluster.go | 62 +- .../internal/cloudprovider/huawei/taskmgr.go | 198 +- .../huawei/tasks/createClusterTask.go | 856 + .../huawei/tasks/deleteClusterTask.go | 198 + .../huawei/tasks/importCluster.go | 26 +- .../huawei/tasks/updateDesiredNodes.go | 2 +- .../internal/cloudprovider/huawei/utils.go | 247 + .../internal/cloudprovider/huawei/validate.go | 23 +- .../internal/cloudprovider/huawei/vpc.go | 1 + 23 files changed, 33344 insertions(+), 6399 deletions(-) create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/createClusterTask.go create mode 100644 bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/deleteClusterTask.go diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go index 6bc60160c6..6dba7e4e97 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go @@ -5958,6 +5958,7 @@ type InternetAccessible struct { InternetMaxBandwidth string `protobuf:"bytes,2,opt,name=internetMaxBandwidth,proto3" json:"internetMaxBandwidth,omitempty"` PublicIPAssigned bool `protobuf:"varint,3,opt,name=publicIPAssigned,proto3" json:"publicIPAssigned,omitempty"` BandwidthPackageId string `protobuf:"bytes,4,opt,name=bandwidthPackageId,proto3" json:"bandwidthPackageId,omitempty"` + PublicIP string `protobuf:"bytes,5,opt,name=publicIP,proto3" json:"publicIP,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` XXX_unrecognized []byte `json:"-" bson:"-"` XXX_sizecache int32 `json:"-" bson:"-"` @@ -6016,6 +6017,13 @@ func (m *InternetAccessible) GetBandwidthPackageId() string { return "" } +func (m *InternetAccessible) GetPublicIP() string { + if m != nil { + return m.PublicIP + } + return "" +} + // InstanceTemplateConfig instance config info type InstanceTemplateConfig struct { Region string `protobuf:"bytes,1,opt,name=region,proto3" json:"region,omitempty"` @@ -6287,7 +6295,7 @@ func (m *InstanceChargePrepaid) GetRenewFlag() string { return "" } -// LaunchConfigure template for scaling node +//LaunchConfigure template for scaling node type LaunchConfiguration struct { LaunchConfigurationID string `protobuf:"bytes,1,opt,name=launchConfigurationID,proto3" json:"launchConfigurationID,omitempty"` LaunchConfigureName string `protobuf:"bytes,2,opt,name=launchConfigureName,proto3" json:"launchConfigureName,omitempty"` @@ -9117,7 +9125,7 @@ type CreateClusterReq struct { FederationClusterID string `protobuf:"bytes,12,opt,name=federationClusterID,proto3" json:"federationClusterID,omitempty"` Labels map[string]string `protobuf:"bytes,13,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Creator string `protobuf:"bytes,14,opt,name=creator,proto3" json:"creator,omitempty"` - // 集群创建的控制信息 + //集群创建的控制信息 OnlyCreateInfo bool `protobuf:"varint,15,opt,name=onlyCreateInfo,proto3" json:"onlyCreateInfo,omitempty"` BcsAddons map[string]*BKOpsPlugin `protobuf:"bytes,17,rep,name=bcsAddons,proto3" json:"bcsAddons,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` ExtraAddons map[string]*BKOpsPlugin `protobuf:"bytes,18,rep,name=extraAddons,proto3" json:"extraAddons,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` @@ -25271,6 +25279,7 @@ type Subnet struct { AvailableIPAddressCount uint64 `protobuf:"varint,7,opt,name=availableIPAddressCount,proto3" json:"availableIPAddressCount,omitempty"` ZoneName string `protobuf:"bytes,8,opt,name=zoneName,proto3" json:"zoneName,omitempty"` Cluster *ClusterInfo `protobuf:"bytes,9,opt,name=cluster,proto3" json:"cluster,omitempty"` + HwNeutronSubnetID string `protobuf:"bytes,10,opt,name=hwNeutronSubnetID,proto3" json:"hwNeutronSubnetID,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` XXX_unrecognized []byte `json:"-" bson:"-"` XXX_sizecache int32 `json:"-" bson:"-"` @@ -25364,6 +25373,13 @@ func (m *Subnet) GetCluster() *ClusterInfo { return nil } +func (m *Subnet) GetHwNeutronSubnetID() string { + if m != nil { + return m.HwNeutronSubnetID + } + return "" +} + type CheckCidrConflictFromVpcRequest struct { CloudID string `protobuf:"bytes,1,opt,name=cloudID,proto3" json:"cloudID,omitempty"` VpcId string `protobuf:"bytes,2,opt,name=vpcId,proto3" json:"vpcId,omitempty"` @@ -33005,4693 +33021,4698 @@ func init() { func init() { proto.RegisterFile("clustermanager.proto", fileDescriptor_d789ea45d40d7a6b) } var fileDescriptor_d789ea45d40d7a6b = []byte{ - // 74964 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x70, 0x14, 0x57, - 0xd6, 0x20, 0xf8, 0xa5, 0x78, 0x49, 0x57, 0x08, 0x70, 0xda, 0xd8, 0x32, 0xb6, 0x71, 0x59, 0xee, - 0xb6, 0xa5, 0xb4, 0xc4, 0x23, 0xed, 0xf6, 0x03, 0xb7, 0xbb, 0x9d, 0x2a, 0x09, 0x5c, 0x0d, 0x08, - 0x39, 0x25, 0x70, 0xdb, 0x6e, 0x37, 0x53, 0x54, 0x25, 0xa2, 0x2c, 0xa9, 0x4a, 0x5d, 0x55, 0x12, - 0xd0, 0xfd, 0x4d, 0x77, 0x49, 0x48, 0x48, 0x82, 0xd2, 0x83, 0x34, 0x4f, 0x21, 0x1e, 0xb2, 0x79, - 0xc8, 0x36, 0x92, 0xc0, 0xc6, 0x50, 0x94, 0x4a, 0x56, 0x4c, 0xec, 0x4c, 0xcc, 0xec, 0xce, 0xc4, - 0xec, 0x4c, 0xcf, 0xee, 0xc4, 0xc6, 0xc4, 0xbc, 0x76, 0xa9, 0xcc, 0xaa, 0x9a, 0xfd, 0x62, 0x35, - 0xf1, 0xc5, 0x6e, 0x6c, 0x84, 0xe7, 0xc7, 0x6e, 0xdc, 0x7b, 0x6e, 0x66, 0xde, 0xac, 0x2a, 0x09, - 0xb0, 0xdd, 0xdd, 0x9f, 0x77, 0x3f, 0x82, 0x08, 0x55, 0x9e, 0x7b, 0xee, 0xb9, 0xef, 0x73, 0xcf, - 0x39, 0xf7, 0xdc, 0x73, 0xd1, 0x23, 0x9e, 0x96, 0xf6, 0x50, 0x58, 0x09, 0xb6, 0xba, 0xfd, 0xee, - 0x26, 0x25, 0xb8, 0xae, 0x2d, 0x18, 0x08, 0x07, 0xf8, 0x15, 0x76, 0xe8, 0x9a, 0x27, 0x9b, 0x02, - 0x81, 0xa6, 0x16, 0x65, 0xbd, 0xbb, 0xcd, 0xb7, 0xde, 0xed, 0xf7, 0x07, 0xc2, 0xee, 0xb0, 0x2f, - 0xe0, 0x0f, 0x01, 0xb6, 0x99, 0x4a, 0xbe, 0xf6, 0xb4, 0xef, 0x5d, 0x1f, 0x0a, 0x07, 0xdb, 0x3d, - 0x61, 0x9a, 0x5a, 0x49, 0xfe, 0x78, 0xaa, 0x9a, 0x14, 0x7f, 0x55, 0x68, 0xbf, 0xbb, 0xa9, 0x49, - 0x09, 0xae, 0x0f, 0xb4, 0x91, 0xfc, 0x79, 0x68, 0x3d, 0xd6, 0xe1, 0x6e, 0xf1, 0x79, 0xdd, 0x61, - 0x65, 0xbd, 0xf1, 0x83, 0x26, 0xac, 0xcd, 0x2e, 0x64, 0x7f, 0xd0, 0xdd, 0xd6, 0xa6, 0x04, 0x69, - 0xc6, 0xb2, 0x7f, 0x51, 0x85, 0x96, 0x39, 0xa1, 0xd6, 0xfc, 0xaf, 0x51, 0x11, 0x6d, 0x80, 0xab, - 0xa6, 0x94, 0x73, 0x70, 0xe5, 0x45, 0xd5, 0x6f, 0xaa, 0xd2, 0x1b, 0x82, 0x05, 0x15, 0x37, 0x54, - 0x3b, 0x1b, 0xb4, 0xc3, 0x3d, 0x99, 0x43, 0xe3, 0xc9, 0x99, 0xd9, 0xd4, 0xf1, 0xf1, 0xcc, 0xd9, - 0xc3, 0xa9, 0xaf, 0x2f, 0xb9, 0x6a, 0xe6, 0x12, 0x51, 0xfd, 0x62, 0x42, 0x4b, 0x0c, 0x25, 0x63, - 0xf1, 0x6a, 0x67, 0x43, 0xd5, 0xd6, 0x57, 0x1b, 0xaa, 0x7e, 0x89, 0xff, 0xc9, 0x56, 0x66, 0xfe, - 0x4d, 0x54, 0x4c, 0x3f, 0xea, 0xdc, 0xad, 0x4a, 0x69, 0x01, 0x29, 0x61, 0xad, 0x2a, 0x3d, 0x21, - 0xb0, 0x70, 0x71, 0x39, 0x10, 0xd5, 0x86, 0x07, 0x52, 0x57, 0xaf, 0xcb, 0x6c, 0x12, 0x7f, 0x8a, - 0x43, 0x0f, 0xef, 0x55, 0xbc, 0x4a, 0x90, 0x34, 0xde, 0x69, 0x56, 0x76, 0x11, 0x21, 0xa5, 0xa8, - 0xd2, 0x1e, 0x21, 0x5f, 0xba, 0xb8, 0x55, 0xbb, 0xd2, 0xa5, 0x9f, 0x1f, 0x4d, 0x4f, 0x5d, 0x06, - 0xda, 0xc9, 0x58, 0x3c, 0xdd, 0x79, 0x3c, 0xd3, 0x75, 0x05, 0x3e, 0x53, 0x23, 0xdd, 0xc9, 0x58, - 0x24, 0x73, 0x68, 0x5c, 0xeb, 0x3b, 0x3c, 0x97, 0x88, 0xa6, 0x8e, 0x8f, 0xa7, 0xa7, 0x2e, 0xbb, - 0x6a, 0xd2, 0x93, 0xd7, 0xb5, 0x99, 0x13, 0x80, 0xf8, 0x56, 0x20, 0x14, 0x4e, 0xce, 0x8e, 0xe9, - 0x9d, 0x53, 0x72, 0xbe, 0x12, 0xf8, 0xad, 0xa8, 0xb0, 0x2d, 0x18, 0xe8, 0xf0, 0x79, 0x95, 0x60, - 0xe9, 0x62, 0x52, 0x9b, 0xf5, 0xaa, 0x54, 0x29, 0x98, 0x40, 0xd1, 0x41, 0x4b, 0x8e, 0x1f, 0xcb, - 0xf4, 0x0c, 0xa4, 0x66, 0x26, 0xe7, 0x12, 0xd1, 0x64, 0x2c, 0x9e, 0x8c, 0x1f, 0x4b, 0xdd, 0x98, - 0xd6, 0xce, 0x1f, 0x75, 0xd5, 0xc8, 0x26, 0x2e, 0xff, 0x0a, 0x5a, 0x1a, 0x54, 0x9a, 0x7c, 0x01, - 0x7f, 0xe9, 0x12, 0x42, 0xea, 0x69, 0x55, 0x7a, 0x52, 0xa0, 0x20, 0x91, 0xa7, 0xdd, 0x13, 0x8d, - 0x6b, 0x17, 0x2e, 0xd0, 0x2a, 0xd1, 0x34, 0x7e, 0x1b, 0x5a, 0xd2, 0xd1, 0xe6, 0x71, 0xd5, 0x94, - 0x2e, 0x25, 0xf9, 0x5e, 0x56, 0xa5, 0x17, 0x05, 0x80, 0x88, 0x02, 0x64, 0xd3, 0xfb, 0x23, 0xda, - 0xe8, 0x78, 0x47, 0x9b, 0x67, 0x2e, 0x11, 0x85, 0x06, 0xa7, 0x06, 0xa7, 0xb4, 0x8f, 0x0f, 0x25, - 0x63, 0x47, 0x33, 0xe7, 0xce, 0x6b, 0xb3, 0x3d, 0xda, 0xd8, 0xe7, 0x32, 0x64, 0xe1, 0xdf, 0x42, - 0x45, 0x6d, 0xc1, 0xc0, 0x87, 0x8a, 0x27, 0xec, 0xaa, 0x29, 0x5d, 0x46, 0x28, 0x0a, 0xaa, 0xf4, - 0xbc, 0x60, 0x41, 0xc5, 0x35, 0x16, 0xd5, 0x9e, 0x2f, 0xd3, 0x9d, 0xc7, 0x53, 0x23, 0xdd, 0x99, - 0xb1, 0x3b, 0xa9, 0xb3, 0x93, 0xae, 0x1a, 0xd9, 0x42, 0xe3, 0x0f, 0x22, 0xb4, 0xa7, 0x3d, 0xe4, - 0xf3, 0x2b, 0xa1, 0x90, 0xab, 0xa6, 0xb4, 0x90, 0x90, 0x7a, 0x57, 0x95, 0x76, 0x09, 0x0c, 0x58, - 0x7c, 0x0b, 0x72, 0xa6, 0xa6, 0x8f, 0x69, 0x93, 0x23, 0x64, 0x48, 0x46, 0xb4, 0x23, 0x63, 0xae, - 0x9a, 0x4a, 0x47, 0x6e, 0x21, 0x46, 0xda, 0x5c, 0x22, 0x4a, 0x86, 0x4a, 0x3f, 0x77, 0x59, 0x8f, - 0x0f, 0x27, 0xe3, 0x83, 0xce, 0xed, 0x35, 0xd5, 0x32, 0x43, 0x95, 0xdf, 0x87, 0x8a, 0x15, 0x7f, - 0x87, 0x2f, 0x18, 0xf0, 0xb7, 0x2a, 0xfe, 0x70, 0x69, 0x11, 0x29, 0x7b, 0xb3, 0x2a, 0x39, 0x05, - 0x16, 0x2e, 0xbe, 0x64, 0x95, 0x31, 0x75, 0x47, 0x8b, 0xe3, 0x32, 0x68, 0xc7, 0x90, 0x1e, 0x9e, - 0x4b, 0x44, 0x43, 0x61, 0x77, 0xd3, 0x5c, 0x22, 0xea, 0x55, 0xf6, 0xb4, 0xe3, 0xbf, 0x6d, 0xc1, - 0x80, 0x57, 0x66, 0x49, 0xf0, 0x6f, 0x23, 0xa4, 0xf8, 0x9b, 0x7c, 0x7e, 0xa5, 0xf1, 0x60, 0x9b, - 0x52, 0x8a, 0x48, 0x41, 0x1b, 0x55, 0x69, 0x9d, 0xc0, 0x80, 0x8d, 0x69, 0x90, 0x4a, 0x9c, 0xd4, - 0x07, 0x55, 0x2d, 0x71, 0x42, 0xff, 0x68, 0x70, 0x2e, 0x11, 0x6d, 0x7e, 0x35, 0x74, 0x37, 0xd2, - 0xd9, 0xaa, 0x84, 0x02, 0x21, 0x99, 0xc1, 0xe6, 0x3f, 0x40, 0xc5, 0xbe, 0x50, 0xed, 0x01, 0xbc, - 0x04, 0x7c, 0x1d, 0x4a, 0x69, 0xb1, 0x83, 0x2b, 0x2f, 0xac, 0x7e, 0x5d, 0x95, 0x5e, 0x15, 0x58, - 0xb8, 0x58, 0xa1, 0x9f, 0x9e, 0xd2, 0x86, 0xaf, 0x40, 0xa7, 0xa4, 0x8e, 0x5e, 0xd3, 0x06, 0x2e, - 0x42, 0x31, 0x78, 0x90, 0xa7, 0x4f, 0xa7, 0x27, 0xf1, 0x84, 0xdf, 0xeb, 0x6e, 0x09, 0x29, 0x32, - 0x9b, 0x8f, 0xdf, 0x65, 0x2e, 0x48, 0x52, 0xe5, 0xe5, 0xa4, 0xca, 0x2f, 0xa9, 0xd2, 0x46, 0x81, - 0x85, 0x8b, 0x65, 0xb4, 0xce, 0x64, 0xa2, 0xce, 0x25, 0xa2, 0xd6, 0xfc, 0xbf, 0x1b, 0xe9, 0x0c, - 0xf9, 0xfc, 0x4d, 0x2d, 0x8a, 0xcc, 0x66, 0xe0, 0x77, 0xa1, 0xa5, 0x2d, 0xee, 0x3d, 0x4a, 0x4b, - 0xa8, 0xb4, 0xc4, 0xb1, 0xa8, 0xbc, 0x58, 0x7c, 0x76, 0x5d, 0x16, 0xbb, 0xa4, 0xeb, 0x66, 0xdd, - 0x36, 0x82, 0x55, 0xeb, 0x0f, 0x07, 0x0f, 0x56, 0x3f, 0xae, 0x4a, 0x8f, 0x0a, 0x34, 0x9f, 0xc1, - 0x03, 0xf4, 0x8b, 0xbd, 0xa9, 0x89, 0xaf, 0x65, 0x0a, 0xe5, 0xdf, 0x40, 0xcb, 0x3c, 0x41, 0xc5, - 0x1d, 0x0e, 0x04, 0x4b, 0x57, 0x90, 0xba, 0x3e, 0xab, 0x4a, 0x0e, 0xc1, 0x80, 0x89, 0xab, 0xe9, - 0x12, 0x23, 0x23, 0xa6, 0xf5, 0x9d, 0xd5, 0xa6, 0xe3, 0xe9, 0x48, 0x8f, 0x6c, 0xa4, 0xf3, 0x6b, - 0x11, 0x22, 0x3f, 0x95, 0x46, 0x5f, 0xab, 0x52, 0xba, 0x12, 0x53, 0x90, 0x19, 0x08, 0x4e, 0x6f, - 0x6f, 0xf3, 0x1a, 0xe9, 0xab, 0x20, 0xdd, 0x82, 0xf0, 0x9d, 0x05, 0xa8, 0x68, 0x8f, 0x27, 0x24, - 0x79, 0xbd, 0x01, 0x7f, 0xa8, 0xf4, 0x21, 0xd2, 0xb4, 0xe7, 0xe6, 0x6b, 0x5a, 0xb5, 0x81, 0x08, - 0xad, 0x8b, 0x73, 0xaa, 0x74, 0x8b, 0x13, 0xac, 0xfc, 0xe2, 0x38, 0x07, 0x55, 0xa4, 0x2d, 0x3d, - 0x75, 0x2b, 0x3d, 0x7b, 0x36, 0x3d, 0x16, 0x05, 0x06, 0x9b, 0x9a, 0x99, 0xd4, 0x87, 0xd4, 0xe4, - 0xf4, 0x2d, 0x6d, 0xb2, 0x3f, 0xfd, 0x49, 0x0f, 0x4c, 0x73, 0x68, 0x58, 0x32, 0x31, 0x92, 0xba, - 0xf9, 0xb1, 0x96, 0x38, 0x91, 0x8c, 0x1f, 0x4b, 0xc6, 0x8e, 0xc0, 0xf8, 0x02, 0x4f, 0x01, 0x04, - 0xa0, 0xa3, 0x4d, 0xdd, 0xd1, 0xa7, 0x8e, 0x27, 0x63, 0x83, 0xe9, 0xb1, 0xcb, 0x5a, 0x0f, 0xa6, - 0x00, 0xe5, 0x02, 0xbe, 0x36, 0x4a, 0x59, 0xb7, 0x3e, 0xf1, 0x89, 0x16, 0x8b, 0x69, 0x7d, 0xe7, - 0xb4, 0xab, 0x47, 0xb5, 0xe8, 0xc9, 0xe4, 0x9d, 0xa3, 0xda, 0xf0, 0x20, 0x50, 0x48, 0x5f, 0x3f, - 0x94, 0x3a, 0x3e, 0x7e, 0x37, 0xd2, 0x25, 0x5b, 0xb5, 0xe6, 0x7b, 0x0a, 0x50, 0xb1, 0x72, 0x20, - 0x1c, 0x74, 0xd3, 0x5e, 0xe0, 0x49, 0x2f, 0x94, 0xcf, 0xd7, 0x0b, 0xb5, 0x16, 0x2a, 0xf4, 0x43, - 0x8c, 0x53, 0xa5, 0x9b, 0x9c, 0xc0, 0xd2, 0x10, 0x2f, 0x65, 0xf7, 0x44, 0xe6, 0xe3, 0x73, 0xda, - 0xa5, 0x93, 0x7a, 0xff, 0xa7, 0xda, 0x8d, 0x13, 0xc9, 0xc4, 0xc5, 0x4c, 0x44, 0xc5, 0x4b, 0xde, - 0x58, 0x88, 0x98, 0x8b, 0x13, 0xce, 0x95, 0x8c, 0xc5, 0x33, 0x1f, 0x77, 0xa7, 0x4e, 0x9c, 0x49, - 0xc6, 0xa3, 0xfa, 0xc9, 0x3b, 0xeb, 0x93, 0xb1, 0x7e, 0xfc, 0x47, 0x1f, 0x1d, 0xd0, 0x8e, 0x8c, - 0x69, 0x27, 0x0e, 0x53, 0x02, 0x64, 0xa3, 0x9a, 0xaf, 0xfd, 0xa9, 0x23, 0xb7, 0xf4, 0x48, 0x27, - 0xf4, 0x42, 0x6e, 0xe3, 0x93, 0xb1, 0x41, 0x18, 0x00, 0xdc, 0x0b, 0x6c, 0x9d, 0xf9, 0x9d, 0xa8, - 0x30, 0x74, 0x30, 0x14, 0x56, 0x5a, 0x5d, 0x35, 0xa5, 0x0f, 0x93, 0xb9, 0xf8, 0x9a, 0x2a, 0xbd, - 0x2c, 0x98, 0x40, 0x51, 0x68, 0x6e, 0xdf, 0xa3, 0x04, 0xfd, 0x4a, 0x58, 0x09, 0x51, 0x86, 0x3d, - 0x3a, 0xae, 0x0d, 0x77, 0x27, 0xe3, 0xc7, 0xb4, 0x3b, 0x5f, 0x6a, 0x43, 0xd7, 0x93, 0xb1, 0x23, - 0xe9, 0xaf, 0xba, 0xf5, 0xf8, 0x30, 0xe6, 0xfc, 0x46, 0x2e, 0xfe, 0x26, 0x87, 0x10, 0xf4, 0x21, - 0x59, 0x91, 0x8f, 0x10, 0xca, 0x1f, 0x71, 0xaa, 0x34, 0xc4, 0x09, 0x4c, 0x82, 0x18, 0xe1, 0x68, - 0xf5, 0x27, 0xc7, 0x52, 0xc3, 0x87, 0xcd, 0x95, 0xa9, 0xf5, 0x5c, 0xd3, 0x47, 0xfb, 0x93, 0xf1, - 0x63, 0xfa, 0xa9, 0x5b, 0xa9, 0xe3, 0x17, 0xf4, 0x13, 0x7d, 0x73, 0x89, 0xe8, 0x76, 0xa9, 0x4e, - 0xda, 0x52, 0x5b, 0xb3, 0xdb, 0xb9, 0x6d, 0x67, 0x43, 0x63, 0xad, 0x5c, 0x0e, 0xf3, 0x46, 0xef, - 0x3f, 0x9d, 0x9a, 0x1c, 0x03, 0x2a, 0x15, 0x73, 0x89, 0xa8, 0xab, 0xae, 0xa6, 0xb6, 0xbe, 0xb6, - 0xae, 0xa6, 0xb6, 0xae, 0xd1, 0xc4, 0x4c, 0x1d, 0xbd, 0x96, 0xfa, 0xfc, 0xa8, 0xc9, 0x4a, 0xd2, - 0xbd, 0x9f, 0xa5, 0xc7, 0xa2, 0xa9, 0xe9, 0x9b, 0xfa, 0x91, 0x4b, 0x15, 0x32, 0x53, 0x1d, 0x7e, - 0x37, 0x5a, 0xda, 0xea, 0xc6, 0x03, 0x5e, 0xba, 0x7a, 0xe1, 0x05, 0xbf, 0x9d, 0x60, 0xc1, 0x54, - 0x28, 0x53, 0xa5, 0xa7, 0x05, 0x9a, 0xcf, 0x58, 0xbb, 0xf0, 0xe5, 0x70, 0xd5, 0x6b, 0x7d, 0xa7, - 0xd2, 0x63, 0xe3, 0x32, 0x4d, 0xe6, 0x87, 0x39, 0xb4, 0xd2, 0xaf, 0x84, 0xf7, 0x07, 0x82, 0xcd, - 0x0d, 0x4a, 0x38, 0xec, 0xf3, 0x37, 0x85, 0x4a, 0x1f, 0x75, 0x70, 0xe5, 0xc5, 0xe2, 0xda, 0xec, - 0xa2, 0xea, 0x6c, 0x68, 0xc0, 0xea, 0xb3, 0xf3, 0x8a, 0x1b, 0x68, 0xf7, 0xcd, 0x1c, 0x4b, 0x4d, - 0x8f, 0x6a, 0x17, 0xe2, 0xa9, 0xb1, 0x48, 0x7a, 0xf2, 0x6b, 0xd8, 0x96, 0x33, 0xa3, 0x91, 0xf4, - 0x95, 0x4e, 0x98, 0x00, 0xfa, 0xc9, 0x3b, 0x00, 0x97, 0xb3, 0x49, 0xf0, 0xff, 0x9c, 0x33, 0xa5, - 0xc0, 0x6a, 0x77, 0xc8, 0xe7, 0x31, 0xeb, 0xf5, 0x18, 0xa9, 0xd7, 0x7c, 0x5d, 0xc0, 0xe2, 0x56, - 0x07, 0x55, 0x29, 0x20, 0xe4, 0xa5, 0x22, 0xbe, 0x43, 0x67, 0x0d, 0xa9, 0x1b, 0x5d, 0xd8, 0x46, - 0x0d, 0x93, 0x5f, 0x1f, 0xd5, 0xae, 0x74, 0xc1, 0xc4, 0x4e, 0xf5, 0xf7, 0xe9, 0xa3, 0xd7, 0xc8, - 0xd8, 0xd3, 0xbd, 0xb1, 0xa3, 0xcd, 0x93, 0x9a, 0xe8, 0xc7, 0xe3, 0x65, 0x34, 0x81, 0xb6, 0x08, - 0x1a, 0x92, 0xb7, 0x38, 0xfe, 0x3f, 0x72, 0xe8, 0x51, 0x9a, 0x20, 0x79, 0x3b, 0xdc, 0x7e, 0x8f, - 0x62, 0xb6, 0xa7, 0x94, 0xb4, 0xe7, 0xc7, 0xf3, 0xb4, 0xc7, 0x8e, 0x5d, 0xfd, 0x07, 0x55, 0xfa, - 0x6b, 0xe1, 0x31, 0x8c, 0xaa, 0xe4, 0x92, 0x12, 0xdd, 0xd0, 0xa8, 0xf4, 0xec, 0xd9, 0xcc, 0xe9, - 0x5b, 0xa9, 0xfe, 0x3b, 0x7a, 0xe4, 0x6a, 0x56, 0xa3, 0xb4, 0xe1, 0xa9, 0xd4, 0xf1, 0x71, 0x5f, - 0x5b, 0x47, 0x08, 0x92, 0x71, 0xc3, 0x26, 0xef, 0x68, 0x67, 0xc6, 0xd3, 0xb3, 0xc3, 0xe9, 0xb1, - 0x28, 0x66, 0x93, 0x24, 0x43, 0x6a, 0xa2, 0xff, 0x6e, 0xa4, 0x0b, 0x8b, 0x75, 0xa7, 0x2e, 0xa6, - 0xfa, 0xef, 0x68, 0x7d, 0x9f, 0x67, 0x46, 0x23, 0xfa, 0x8d, 0x2e, 0x79, 0x9e, 0x56, 0xf0, 0xff, - 0x13, 0x87, 0x96, 0xfb, 0x03, 0x5e, 0xab, 0x59, 0x8f, 0x93, 0x66, 0x3d, 0x91, 0x33, 0x7d, 0x2c, - 0x9c, 0x6a, 0x95, 0x53, 0xa5, 0x41, 0x4e, 0xb0, 0xe5, 0x13, 0x7f, 0x4f, 0xdb, 0x70, 0xa4, 0x2b, - 0xd5, 0x75, 0x27, 0xab, 0xf6, 0x7a, 0xb4, 0x2b, 0x3d, 0x33, 0x93, 0x3a, 0x3b, 0xa9, 0xcd, 0x9c, - 0xc0, 0xb2, 0x42, 0xc0, 0xd3, 0xac, 0x04, 0xf5, 0x13, 0xd7, 0xf5, 0x81, 0x49, 0x00, 0xc2, 0xc0, - 0xe4, 0x56, 0x1b, 0x03, 0x87, 0xa6, 0x92, 0xd3, 0x97, 0x93, 0xb1, 0x01, 0x93, 0x66, 0xb5, 0xb3, - 0x41, 0x1f, 0x1a, 0x4e, 0x7e, 0x7d, 0x96, 0xf2, 0xac, 0xa1, 0x2e, 0xfd, 0xc4, 0x75, 0xd9, 0x56, - 0x1b, 0xfe, 0x0b, 0x0e, 0x2d, 0x0d, 0x85, 0xdd, 0xe1, 0xf6, 0x50, 0xe9, 0x1a, 0xc2, 0x2c, 0xce, - 0x70, 0xaa, 0xf4, 0x2b, 0x81, 0xc2, 0x44, 0x99, 0xe5, 0x72, 0x50, 0x48, 0xfa, 0xd0, 0x0c, 0x7c, - 0x3a, 0xe5, 0x5a, 0xa9, 0xd1, 0x55, 0xb7, 0x65, 0x2e, 0x11, 0x95, 0x77, 0xd6, 0xd5, 0xc1, 0xaf, - 0x9a, 0xda, 0x6d, 0xb5, 0x14, 0xb8, 0x59, 0xda, 0xb6, 0x53, 0xae, 0x25, 0xac, 0xc1, 0xd5, 0xe8, - 0x92, 0xb6, 0xb9, 0xde, 0x93, 0x1a, 0x5d, 0x3b, 0xea, 0xbe, 0xa9, 0x7e, 0x25, 0xf8, 0x13, 0xb9, - 0xd0, 0xc8, 0x2d, 0x2f, 0xa3, 0x99, 0xe5, 0x42, 0x23, 0xaf, 0xbc, 0x14, 0xb2, 0xca, 0x2b, 0xec, - 0x39, 0x65, 0x5a, 0x2b, 0xbc, 0x8f, 0xc3, 0xb6, 0x1a, 0x2c, 0x7d, 0x82, 0xd9, 0xc7, 0x29, 0xcc, - 0xbe, 0x8f, 0xeb, 0x67, 0x6f, 0xea, 0x27, 0xaf, 0x93, 0x7d, 0x9c, 0xa6, 0xf3, 0xed, 0xa8, 0x98, - 0x2e, 0x46, 0xc2, 0x24, 0x9f, 0x24, 0x24, 0x1a, 0x30, 0xfb, 0x65, 0xe1, 0xe2, 0xf3, 0xec, 0x1a, - 0x37, 0x59, 0x64, 0x79, 0xbb, 0xdf, 0xab, 0x04, 0x5b, 0xdc, 0x07, 0xd7, 0x07, 0x3a, 0xc8, 0xdf, - 0x8a, 0x6f, 0xaa, 0x1f, 0x0b, 0xae, 0x96, 0x0b, 0x0d, 0xb8, 0xbc, 0x8c, 0x26, 0xc8, 0x7f, 0x25, - 0xb3, 0xf4, 0xf8, 0x7f, 0xc9, 0xa1, 0xc7, 0xdc, 0xed, 0xe1, 0xc0, 0x16, 0xc5, 0x8f, 0xc5, 0x1f, - 0x05, 0x78, 0x19, 0x9e, 0x2f, 0xa1, 0xd2, 0xa7, 0x88, 0x64, 0x46, 0x19, 0xf5, 0x7c, 0x58, 0x62, - 0xd8, 0xb6, 0xcf, 0x81, 0xcc, 0x46, 0x16, 0xb1, 0x76, 0xfb, 0x0b, 0x6d, 0xe2, 0xb4, 0x36, 0x3a, - 0x0e, 0xb3, 0xaa, 0xd2, 0x01, 0x23, 0x4e, 0x44, 0xb6, 0x4a, 0x87, 0x36, 0xf0, 0xa5, 0x89, 0x96, - 0x9a, 0x1e, 0x02, 0xcc, 0xd4, 0x48, 0xb7, 0x81, 0x9c, 0x9c, 0x1e, 0x64, 0x09, 0xc3, 0x3c, 0x49, - 0xc6, 0x26, 0xd2, 0x83, 0xb7, 0xb5, 0xa1, 0x93, 0xf2, 0x7c, 0xd5, 0xc1, 0x73, 0xa7, 0x30, 0xac, - 0xb4, 0xb6, 0xb5, 0xb8, 0xc3, 0x4a, 0xe9, 0xda, 0xfc, 0xe2, 0x8c, 0xcb, 0x1f, 0x0a, 0xe3, 0x75, - 0xd4, 0x48, 0xf1, 0x9c, 0x01, 0xff, 0x5e, 0x5f, 0x53, 0xb5, 0x5f, 0x95, 0x9a, 0x05, 0x33, 0xb3, - 0xb8, 0x7b, 0x9e, 0x22, 0x92, 0xb1, 0x78, 0x38, 0xd8, 0xae, 0xe8, 0xa7, 0x6e, 0x55, 0x3a, 0xd8, - 0x2a, 0xa6, 0x7b, 0x3f, 0xd3, 0x8e, 0x8c, 0xe3, 0x1d, 0xaa, 0x6f, 0xd8, 0x47, 0x4b, 0xa8, 0x74, - 0x80, 0x10, 0x63, 0x7c, 0xeb, 0xe3, 0x63, 0xfa, 0xb9, 0x59, 0xaa, 0xe0, 0x98, 0x45, 0xf1, 0xff, - 0x9a, 0x43, 0x45, 0x64, 0x23, 0x76, 0xf9, 0xf7, 0x06, 0x4a, 0x9f, 0x5e, 0x58, 0x08, 0xab, 0x35, - 0x10, 0x61, 0xc7, 0x39, 0xc2, 0xa9, 0xd2, 0x61, 0x4e, 0xb0, 0xf2, 0x8b, 0x07, 0x71, 0x67, 0x76, - 0x19, 0xb2, 0x10, 0xc8, 0x0b, 0xa4, 0xc4, 0x4a, 0x07, 0xac, 0x68, 0x25, 0xb4, 0x67, 0x77, 0x7b, - 0xb0, 0x65, 0xfd, 0x7e, 0x65, 0xcf, 0xbe, 0x40, 0xa0, 0x79, 0xb7, 0xaf, 0xd5, 0xdd, 0x84, 0xb5, - 0x69, 0x5f, 0x87, 0xaf, 0x45, 0xf1, 0x36, 0x29, 0x00, 0x48, 0x4d, 0xf4, 0xb3, 0x99, 0xf5, 0xbe, - 0x93, 0xe9, 0x48, 0x8f, 0x7e, 0x7a, 0x2a, 0xa3, 0xf6, 0x69, 0x53, 0x77, 0x92, 0xb1, 0x01, 0x6d, - 0x38, 0x8a, 0x55, 0x3d, 0xc2, 0xd2, 0xb4, 0x04, 0xd6, 0x63, 0x64, 0xab, 0x16, 0xfc, 0x6e, 0x54, - 0xd8, 0x1a, 0xf0, 0xb6, 0xb7, 0x28, 0xae, 0x9a, 0x52, 0x07, 0x99, 0xcd, 0x4e, 0x55, 0x7a, 0x53, - 0x30, 0x81, 0xa6, 0x76, 0x32, 0x3e, 0xa6, 0x9d, 0x3b, 0xe5, 0xaa, 0x29, 0x77, 0x4a, 0xfa, 0xed, - 0x69, 0xed, 0xc8, 0x45, 0x98, 0x01, 0xfa, 0xa9, 0x5b, 0x90, 0x92, 0x9e, 0xb9, 0x96, 0xba, 0x3a, - 0xed, 0xd0, 0xe2, 0x17, 0xb4, 0xc4, 0xa1, 0x0a, 0xd9, 0xcc, 0xcf, 0xff, 0x1e, 0xad, 0x20, 0xa5, - 0x59, 0x1a, 0xf3, 0x33, 0xa4, 0x98, 0x5d, 0xaa, 0xd4, 0x20, 0x64, 0x25, 0x89, 0x92, 0x36, 0x95, - 0xd0, 0x7a, 0x2e, 0x9b, 0xaa, 0x31, 0x48, 0x63, 0x86, 0xa6, 0xaf, 0x5f, 0xec, 0x4d, 0x4f, 0x1d, - 0xa6, 0x9d, 0x04, 0xd3, 0x14, 0x0b, 0x1b, 0x9f, 0xc6, 0xb5, 0x48, 0xa2, 0xdc, 0x28, 0x39, 0x8b, - 0x24, 0xef, 0x43, 0x2b, 0x7d, 0x21, 0x67, 0xa0, 0xb5, 0xd5, 0x54, 0x99, 0x4b, 0xcb, 0xc8, 0x8a, - 0xf9, 0xb9, 0x2a, 0xfd, 0x54, 0xc8, 0x4e, 0xb3, 0xf4, 0x99, 0xb8, 0xd6, 0x73, 0x4d, 0xeb, 0xb9, - 0x01, 0x65, 0x57, 0x32, 0x8b, 0xc2, 0x2c, 0x29, 0x3b, 0x2f, 0xbf, 0x19, 0x15, 0x7b, 0x95, 0x90, - 0x27, 0xe8, 0x23, 0xb6, 0x92, 0xd2, 0x67, 0x49, 0x3b, 0x7f, 0xa4, 0x4a, 0xcf, 0x08, 0x2c, 0xdc, - 0xd0, 0xa2, 0x53, 0x93, 0x78, 0x67, 0xd4, 0x87, 0x86, 0xd2, 0xb3, 0xd7, 0x65, 0x16, 0x81, 0xbf, - 0xcc, 0xa1, 0x95, 0x74, 0x56, 0x39, 0xdd, 0x61, 0xa5, 0x29, 0x10, 0x3c, 0x58, 0xfa, 0x23, 0x42, - 0xec, 0x77, 0xaa, 0x74, 0x40, 0xc8, 0x4e, 0x13, 0x15, 0x4b, 0x49, 0xea, 0xfb, 0x9c, 0x28, 0xf7, - 0xd3, 0xe9, 0x2b, 0x9d, 0x58, 0x86, 0x8c, 0x0f, 0x62, 0x5d, 0xbd, 0xef, 0xb0, 0x69, 0x7d, 0x80, - 0xd6, 0xe9, 0xa7, 0xa7, 0xf0, 0x32, 0x98, 0x8e, 0xdf, 0x8d, 0x74, 0x42, 0x8f, 0x97, 0xef, 0x69, - 0xf7, 0xb5, 0x78, 0x95, 0xe0, 0x7a, 0x5f, 0x6b, 0x5b, 0x20, 0x18, 0x56, 0x82, 0x15, 0x06, 0x23, - 0x30, 0x71, 0xe5, 0xec, 0x72, 0xf9, 0x3a, 0x54, 0xe4, 0x0b, 0xed, 0x0e, 0xed, 0x73, 0x07, 0x15, - 0x6f, 0xe9, 0x8f, 0x49, 0xa7, 0x12, 0xa5, 0xd3, 0x82, 0x8a, 0xcf, 0x30, 0xdd, 0x79, 0x23, 0x19, - 0xff, 0x3c, 0xb7, 0x3b, 0xe5, 0x42, 0x5f, 0xa8, 0x81, 0x20, 0xf3, 0xbb, 0x11, 0xc2, 0x92, 0x2b, - 0xac, 0xf3, 0xd2, 0xe7, 0x48, 0x8b, 0xc9, 0x28, 0x31, 0x60, 0x71, 0x1d, 0x3b, 0x45, 0xf0, 0x9e, - 0x7c, 0xf4, 0xb2, 0x7e, 0x7a, 0xca, 0x42, 0x80, 0x64, 0xad, 0xef, 0x0c, 0x2c, 0x2f, 0x99, 0xc9, - 0xcb, 0x5f, 0xe1, 0xd0, 0x0a, 0x68, 0xa0, 0xd9, 0xaf, 0xcf, 0x93, 0x52, 0x7e, 0xaf, 0x4a, 0xbf, - 0x13, 0xb2, 0x92, 0x44, 0x9f, 0x36, 0xf3, 0x51, 0x56, 0x93, 0x0d, 0xfe, 0x16, 0x37, 0xba, 0x89, - 0xb0, 0x97, 0x85, 0xfb, 0xdb, 0x2a, 0x7f, 0xbd, 0xa7, 0x25, 0xd0, 0xee, 0x85, 0x0a, 0x56, 0x9a, - 0xca, 0x71, 0xea, 0xd3, 0xb8, 0x9c, 0x55, 0x34, 0xff, 0x5f, 0x38, 0xb4, 0x82, 0x20, 0x4b, 0x1e, - 0x4f, 0xa0, 0xdd, 0x1f, 0x76, 0xd5, 0x94, 0x96, 0x93, 0x8a, 0xfe, 0x23, 0x4e, 0x95, 0x66, 0x38, - 0x21, 0x2b, 0x51, 0xfc, 0x8c, 0xca, 0xe4, 0x96, 0x91, 0x22, 0x7e, 0x2c, 0x7d, 0xf3, 0x8a, 0x36, - 0x74, 0xdb, 0x55, 0x63, 0x2b, 0xe9, 0x6e, 0xa4, 0x0b, 0x6a, 0xab, 0x1d, 0xb9, 0x90, 0x3e, 0x34, - 0x83, 0x07, 0x97, 0x70, 0x6a, 0x13, 0x5f, 0xeb, 0x9d, 0x48, 0x4f, 0x75, 0xde, 0x8d, 0x74, 0xa5, - 0xae, 0x76, 0x82, 0x3c, 0xaf, 0x8d, 0xc6, 0xf5, 0x33, 0x53, 0xc9, 0xd8, 0xd1, 0xd4, 0xf4, 0x85, - 0x64, 0x2c, 0x02, 0x62, 0x3f, 0x29, 0x1f, 0x72, 0x60, 0x69, 0x2f, 0x62, 0x89, 0xff, 0x80, 0x9e, - 0x8a, 0x7f, 0x99, 0x9a, 0x1c, 0x33, 0xb9, 0x0f, 0x4b, 0x5b, 0xce, 0xaa, 0x3c, 0x2f, 0xa3, 0x65, - 0xad, 0x4a, 0x28, 0xe4, 0x6e, 0x52, 0x4a, 0x2b, 0x48, 0x23, 0x5f, 0x55, 0xa5, 0x9f, 0x08, 0x06, - 0xcc, 0xb0, 0x1e, 0x81, 0xe0, 0xa0, 0x25, 0xba, 0xb4, 0x58, 0x0c, 0xaf, 0xfa, 0x91, 0x6e, 0xed, - 0xd2, 0x8d, 0xf4, 0xcd, 0xcb, 0xda, 0xe0, 0x05, 0xed, 0xec, 0x45, 0xed, 0xc6, 0x89, 0xd4, 0xa5, - 0xb8, 0x6c, 0x64, 0xe2, 0xb7, 0xa1, 0x65, 0xbe, 0xd0, 0x76, 0xdf, 0x01, 0xc5, 0x5b, 0x2a, 0x90, - 0x89, 0x29, 0xaa, 0xd2, 0x7a, 0xc1, 0x80, 0x89, 0x3f, 0xc2, 0xac, 0x64, 0xf2, 0x7a, 0xee, 0xb2, - 0xd0, 0x6f, 0xdf, 0xce, 0x1c, 0xa2, 0x3c, 0x59, 0x36, 0xd0, 0xf9, 0x3d, 0xc8, 0x30, 0xaf, 0xba, - 0xdc, 0xad, 0x72, 0xa0, 0x45, 0x29, 0x7d, 0x81, 0x54, 0x74, 0x93, 0x2a, 0xbd, 0x22, 0x64, 0x25, - 0x89, 0x3f, 0x76, 0xef, 0x0f, 0xa5, 0x46, 0xba, 0x7d, 0xee, 0x56, 0x47, 0x30, 0xd0, 0xa2, 0x54, - 0x3a, 0xe8, 0xc4, 0x20, 0x7b, 0x90, 0xd2, 0x4c, 0x55, 0x32, 0x39, 0x2b, 0xdb, 0x9a, 0xd7, 0x50, - 0x31, 0x63, 0x92, 0xe0, 0x57, 0xa1, 0x45, 0xcd, 0xca, 0x41, 0x30, 0x85, 0xca, 0xf8, 0x27, 0xff, - 0x08, 0x5a, 0xd2, 0xe1, 0x6e, 0x69, 0xa7, 0xc6, 0x4b, 0x19, 0x3e, 0x36, 0x15, 0xbc, 0xca, 0xad, - 0x79, 0x17, 0xad, 0xb0, 0xab, 0xfc, 0x79, 0x72, 0x6f, 0x64, 0x73, 0xe7, 0x91, 0x3d, 0xab, 0xb7, - 0xee, 0x68, 0x0b, 0xd5, 0xb7, 0xb4, 0x37, 0xf9, 0xfc, 0x2c, 0xe9, 0xf7, 0xd1, 0xaa, 0x6c, 0x3d, - 0xfa, 0xfb, 0x23, 0xbe, 0x03, 0x15, 0x33, 0x4a, 0x59, 0x1e, 0xba, 0x82, 0x9d, 0xee, 0x23, 0xf9, - 0x04, 0x66, 0x96, 0xe0, 0x4f, 0xd1, 0x0a, 0xfb, 0xb6, 0xfb, 0x20, 0xdd, 0xb8, 0xe9, 0x0d, 0x55, - 0xda, 0x84, 0x5e, 0x15, 0x0c, 0x9b, 0xb4, 0x58, 0x05, 0x46, 0x58, 0x56, 0x22, 0x04, 0x0b, 0x6d, - 0x32, 0x3e, 0x08, 0x9a, 0x28, 0x3b, 0x33, 0xcb, 0xfe, 0xc7, 0x95, 0x68, 0x31, 0xae, 0x10, 0xff, - 0x2a, 0x5a, 0x8a, 0xe5, 0x64, 0xd3, 0x90, 0xed, 0x50, 0xa5, 0xa7, 0x04, 0x0a, 0x12, 0x1f, 0x86, - 0x7d, 0x33, 0x19, 0x3f, 0x66, 0x08, 0x1b, 0xae, 0x1a, 0x99, 0x26, 0xf2, 0xaf, 0xa1, 0x65, 0x3e, - 0xbf, 0x5f, 0x09, 0xba, 0xea, 0xa9, 0x85, 0x9a, 0x58, 0x5f, 0x0d, 0x98, 0xf8, 0x10, 0xe4, 0x25, - 0x36, 0x9a, 0x63, 0xc9, 0xd8, 0xb4, 0xab, 0x5e, 0x36, 0xd2, 0xf8, 0xf7, 0xd1, 0x72, 0x83, 0x20, - 0x91, 0x4c, 0xc1, 0x2c, 0xfd, 0x8a, 0x2a, 0xbd, 0x24, 0xd8, 0x12, 0xc4, 0x1f, 0xe9, 0xa3, 0x71, - 0xed, 0xfc, 0x51, 0x6a, 0xa9, 0x9a, 0x38, 0x95, 0xba, 0x76, 0x25, 0x19, 0xfb, 0xc2, 0x94, 0xcf, - 0x29, 0x43, 0xb2, 0xe5, 0xe1, 0x5f, 0x40, 0x8b, 0x9c, 0xf5, 0x3b, 0x89, 0x71, 0xb9, 0x04, 0x8c, - 0x65, 0xf8, 0x5b, 0x5c, 0x09, 0xf5, 0x71, 0xd6, 0xef, 0xa4, 0xa2, 0x12, 0x86, 0xf2, 0xeb, 0xd0, - 0xa2, 0x56, 0xa5, 0x95, 0x98, 0x8f, 0x4b, 0xaa, 0x9f, 0x54, 0xa5, 0xc7, 0x05, 0xfc, 0x2d, 0xf2, - 0x66, 0xe5, 0xb5, 0x89, 0xd3, 0x06, 0x7e, 0xab, 0xd2, 0xca, 0xbf, 0x8a, 0x16, 0x6d, 0xa9, 0xdf, - 0x49, 0xcc, 0xc6, 0x25, 0xd5, 0xcf, 0xa9, 0xd2, 0xb3, 0x02, 0xfe, 0x16, 0x9f, 0x04, 0xfc, 0x2d, - 0x06, 0x71, 0xb6, 0x86, 0x1b, 0x64, 0x8c, 0xc2, 0x0f, 0x59, 0x0a, 0x08, 0x98, 0x88, 0xf7, 0xab, - 0x52, 0xd8, 0xd4, 0x3f, 0x3e, 0x04, 0x02, 0x30, 0x3a, 0x06, 0x8d, 0x3e, 0xfd, 0xe2, 0x1d, 0x7d, - 0x60, 0x52, 0x4b, 0x60, 0x69, 0x28, 0x99, 0x88, 0xa5, 0x12, 0x9f, 0x6a, 0x93, 0x23, 0xc9, 0x3b, - 0xfd, 0xa9, 0x91, 0xee, 0xb9, 0x44, 0xbf, 0xa5, 0x8f, 0x54, 0x3a, 0x88, 0x4a, 0x51, 0x4b, 0x7e, - 0x1a, 0x0a, 0x47, 0xa5, 0x63, 0xb3, 0xe4, 0xda, 0x56, 0x5b, 0x53, 0xe9, 0x98, 0x47, 0xbb, 0x90, - 0xd0, 0xd2, 0xdf, 0x06, 0xfc, 0x8a, 0x69, 0x68, 0xae, 0x50, 0xa5, 0xe7, 0x84, 0xc5, 0x18, 0x24, - 0xae, 0xa5, 0xed, 0x1f, 0xc2, 0x4a, 0xa6, 0x16, 0x8d, 0x67, 0xf7, 0x38, 0xcd, 0xc8, 0xff, 0x35, - 0x2a, 0xc6, 0xb3, 0x61, 0x4b, 0x30, 0xd0, 0xde, 0xe6, 0xaa, 0xa1, 0x46, 0xe3, 0xf7, 0x54, 0xe9, - 0x1d, 0x81, 0x85, 0x8b, 0x6f, 0x51, 0xf9, 0xab, 0x3f, 0xa2, 0xdd, 0x38, 0x9f, 0x1a, 0xe9, 0xae, - 0x33, 0xd2, 0x1c, 0xae, 0x9a, 0x4a, 0x07, 0x4b, 0xb9, 0x3c, 0x39, 0xdd, 0xe3, 0x94, 0x68, 0xe9, - 0x33, 0xaa, 0x76, 0xe3, 0x7c, 0x32, 0x3e, 0x68, 0x92, 0xaa, 0x90, 0x59, 0xb2, 0xfc, 0x66, 0xf6, - 0x1c, 0x06, 0xec, 0xc8, 0xe5, 0xaa, 0xf4, 0x63, 0xf6, 0x1c, 0xa6, 0x34, 0xab, 0x64, 0x53, 0xd4, - 0x62, 0xcf, 0x5b, 0x36, 0xa2, 0x45, 0xbb, 0xea, 0x9d, 0xc4, 0x6a, 0x4c, 0x67, 0x31, 0xfe, 0x16, - 0x57, 0x67, 0xe5, 0xdd, 0x55, 0xef, 0x74, 0xb8, 0x6a, 0x64, 0x9c, 0xc6, 0xbf, 0x6f, 0x9e, 0x3c, - 0x2c, 0xb7, 0xe4, 0x50, 0xe3, 0xe4, 0xe1, 0x65, 0x36, 0x23, 0x9c, 0x3f, 0x58, 0x7a, 0xfb, 0x9d, - 0x59, 0xed, 0xf6, 0xf9, 0xb9, 0x44, 0x54, 0xbf, 0x7d, 0x43, 0x1b, 0xfd, 0x12, 0x77, 0xec, 0x91, - 0x8b, 0xda, 0xed, 0xf3, 0xa9, 0x89, 0x7e, 0xf3, 0x74, 0xa2, 0x0e, 0x2d, 0x6d, 0x73, 0x87, 0x42, - 0xfb, 0xbd, 0xa5, 0x25, 0xd6, 0xf1, 0x04, 0x05, 0x89, 0x15, 0xda, 0xe4, 0x79, 0x4c, 0xca, 0xb0, - 0x44, 0x6a, 0x53, 0x87, 0x53, 0x17, 0x3b, 0x2b, 0x1d, 0xd4, 0x76, 0x01, 0x46, 0xb9, 0xab, 0x9f, - 0x68, 0x53, 0x87, 0x65, 0x9a, 0x85, 0xff, 0x00, 0x91, 0x51, 0x25, 0xb6, 0xe0, 0x92, 0x6a, 0x97, - 0x2a, 0x6d, 0x16, 0xe8, 0x00, 0x8a, 0x3f, 0xcd, 0x1a, 0x68, 0x72, 0x52, 0xc0, 0x0e, 0xc8, 0xeb, - 0x0e, 0xcb, 0xa0, 0x4a, 0xf6, 0x62, 0xd0, 0xb0, 0x92, 0xf1, 0x41, 0xa7, 0x24, 0x13, 0xb2, 0xbc, - 0x84, 0x0a, 0xbd, 0x4a, 0x87, 0x0f, 0x33, 0x07, 0x30, 0x16, 0x57, 0xff, 0x58, 0x95, 0xca, 0x04, - 0x13, 0x28, 0x3e, 0xea, 0x94, 0x1c, 0xc6, 0x12, 0x4d, 0x4f, 0x7e, 0xad, 0x5d, 0xea, 0x75, 0xd5, - 0x68, 0x43, 0xb7, 0x65, 0x13, 0x83, 0x57, 0xd0, 0x0a, 0x3c, 0xb0, 0x86, 0xf2, 0xe4, 0xaa, 0x01, - 0xab, 0x72, 0x35, 0xe6, 0x72, 0x42, 0x56, 0x92, 0x58, 0x4e, 0xeb, 0x6c, 0x88, 0x0f, 0xb4, 0xb7, - 0x89, 0x1a, 0x44, 0xe7, 0x93, 0x21, 0xa9, 0xd8, 0x73, 0xf2, 0x1e, 0x54, 0x48, 0x20, 0x98, 0xe7, - 0x3c, 0x44, 0x0a, 0xd8, 0xa2, 0x4a, 0x35, 0x82, 0x09, 0x14, 0x5f, 0xa5, 0xcb, 0x90, 0x28, 0xc1, - 0x86, 0xac, 0xa4, 0x45, 0x7b, 0xb4, 0xe1, 0xcf, 0x9d, 0xbb, 0xb6, 0xaf, 0x77, 0xd5, 0x38, 0x19, - 0xf2, 0xa6, 0xc8, 0xe9, 0xdc, 0xb5, 0x5d, 0x36, 0x69, 0xf0, 0x8d, 0x50, 0x08, 0x39, 0xba, 0xe3, - 0x2d, 0x11, 0xc1, 0x04, 0x8a, 0x15, 0xb4, 0xfe, 0xe4, 0xdc, 0xae, 0xd2, 0x01, 0xa2, 0x9f, 0x36, - 0xdc, 0x9d, 0x8c, 0x7d, 0x86, 0xa5, 0x0f, 0x26, 0x51, 0x36, 0x33, 0xf1, 0x3f, 0x43, 0x45, 0x94, - 0x7b, 0x76, 0xbc, 0x4c, 0x0d, 0xa9, 0x84, 0x55, 0x5b, 0x50, 0x71, 0x15, 0x64, 0xf5, 0xb5, 0x75, - 0xbc, 0xac, 0x8d, 0x5e, 0xd7, 0xce, 0x45, 0x64, 0x2b, 0x91, 0xdf, 0x8c, 0x0a, 0xf1, 0x60, 0x91, - 0x5a, 0x3d, 0x62, 0x1d, 0x51, 0x99, 0x40, 0xf1, 0x09, 0x6b, 0xd2, 0x8e, 0x8e, 0x9b, 0xf3, 0xc1, - 0xa8, 0x87, 0x81, 0xc6, 0x2b, 0x68, 0x69, 0xd8, 0x1d, 0x6a, 0x76, 0xd5, 0x94, 0xae, 0x26, 0x54, - 0xb6, 0xab, 0xd2, 0x2f, 0x04, 0x0a, 0x12, 0xdf, 0xa4, 0x95, 0x37, 0x4e, 0x86, 0x92, 0xd3, 0xd3, - 0xf4, 0x64, 0x2a, 0x39, 0xdd, 0x83, 0x75, 0xf1, 0xe3, 0x5f, 0xa6, 0xa7, 0x6e, 0x83, 0x39, 0x97, - 0x18, 0xf2, 0x67, 0xd2, 0xb1, 0xcf, 0x68, 0xb9, 0xc4, 0xf8, 0x23, 0x53, 0x4a, 0xfc, 0x4e, 0xb4, - 0x7c, 0xaf, 0x1b, 0x6b, 0x8e, 0xb2, 0xe2, 0x0e, 0x05, 0xfc, 0xc4, 0x86, 0x49, 0x4f, 0x89, 0x6c, - 0x09, 0xe2, 0xda, 0x64, 0xec, 0x48, 0x32, 0x76, 0x54, 0x3f, 0x7f, 0x8b, 0x96, 0x4d, 0xe4, 0x2c, - 0xfd, 0xd4, 0x2d, 0x10, 0xb5, 0x64, 0x1b, 0x36, 0xff, 0x7b, 0x84, 0x3c, 0xfb, 0xdc, 0x41, 0x6a, - 0x35, 0x7e, 0x8c, 0x10, 0xfd, 0xb5, 0x2a, 0xbd, 0x2f, 0x30, 0x60, 0x71, 0x3b, 0x6c, 0x3a, 0xe9, - 0xc9, 0xb1, 0xf4, 0x4d, 0x3c, 0xad, 0xc0, 0x1e, 0x52, 0xbf, 0xa3, 0xa1, 0xb1, 0x5e, 0x72, 0xd5, - 0xec, 0xae, 0x7e, 0x77, 0xf7, 0x5b, 0x3b, 0x76, 0xca, 0x7a, 0xb4, 0x5f, 0xbb, 0x3e, 0x84, 0x0b, - 0x1a, 0x1e, 0x4c, 0x4e, 0x9f, 0x4e, 0xdf, 0xbc, 0x83, 0x91, 0xe4, 0x5a, 0x8c, 0x83, 0x67, 0xcc, - 0x9d, 0x9b, 0x5a, 0xb4, 0x47, 0x1f, 0xed, 0x93, 0x19, 0xd2, 0x9b, 0xde, 0x55, 0xa5, 0x5d, 0xa8, - 0x51, 0x20, 0x5b, 0xaf, 0xb8, 0x8d, 0x9e, 0x9b, 0xc2, 0x1e, 0x9b, 0x6f, 0xcb, 0x66, 0x37, 0x05, - 0x2c, 0xb9, 0x7e, 0xfc, 0x39, 0x65, 0x5a, 0xc9, 0x18, 0x61, 0x8a, 0x4d, 0x98, 0x11, 0xc2, 0x82, - 0x2c, 0xfb, 0x57, 0x2b, 0xd0, 0x0a, 0xbb, 0x49, 0x97, 0xdf, 0x65, 0x6a, 0x66, 0xae, 0xfa, 0x8e, - 0x97, 0x9c, 0xae, 0x1a, 0x99, 0x6e, 0xf2, 0x95, 0xaa, 0x54, 0x21, 0x64, 0xa7, 0x89, 0x8f, 0x52, - 0xf1, 0x32, 0x32, 0x8d, 0x41, 0x30, 0x85, 0xf4, 0x1b, 0x17, 0xe5, 0x6c, 0x44, 0xde, 0x83, 0x56, - 0x86, 0x94, 0x20, 0x59, 0xba, 0x06, 0xdd, 0x02, 0xcb, 0xb4, 0x9f, 0x9d, 0x26, 0x3e, 0x0b, 0x74, - 0x29, 0x98, 0x5a, 0x63, 0x47, 0xba, 0xb3, 0x0a, 0xc9, 0xca, 0xc5, 0xcb, 0xa8, 0xa4, 0xd5, 0x7d, - 0x00, 0x77, 0x54, 0x7d, 0xc0, 0x5b, 0xd7, 0xde, 0x4a, 0x84, 0x84, 0x12, 0xa8, 0xba, 0x3d, 0xc5, - 0x60, 0xf2, 0xc9, 0xd8, 0x11, 0x7d, 0x34, 0xa2, 0x5d, 0xba, 0x5a, 0x1f, 0xf0, 0xea, 0x27, 0xae, - 0x67, 0x7a, 0x87, 0x64, 0x3b, 0x22, 0xbf, 0x8b, 0xd0, 0x6c, 0x80, 0x92, 0x30, 0x4d, 0x10, 0x12, - 0x36, 0xa8, 0x52, 0x95, 0x60, 0x4f, 0x11, 0x9f, 0xa4, 0x9d, 0x41, 0x08, 0xa6, 0x46, 0xba, 0x69, - 0x12, 0x43, 0xd7, 0x42, 0xe6, 0x07, 0x38, 0xb4, 0x5c, 0xf1, 0xbb, 0xf7, 0xb4, 0x28, 0xbb, 0xea, - 0x9d, 0x4e, 0xbf, 0x8f, 0xc8, 0x13, 0x85, 0xd5, 0x3e, 0x55, 0xda, 0x2b, 0xd8, 0x12, 0xc4, 0x5d, - 0xec, 0x17, 0x08, 0xf2, 0x5a, 0x22, 0xa2, 0x0d, 0x4f, 0xed, 0xaa, 0x77, 0x56, 0x39, 0xeb, 0x5c, - 0x60, 0x84, 0xc3, 0x93, 0x2e, 0x31, 0x54, 0x9e, 0x9c, 0x99, 0x4d, 0x1f, 0x9a, 0xe9, 0x68, 0xf3, - 0x54, 0x79, 0xfc, 0x3e, 0x80, 0x61, 0x15, 0x4e, 0x3f, 0x79, 0x5d, 0xfb, 0xf8, 0xbc, 0xfe, 0x55, - 0x67, 0x6a, 0xfc, 0x28, 0x64, 0xae, 0x90, 0x6d, 0xa5, 0xf0, 0x0a, 0xae, 0x8e, 0xaf, 0xa1, 0x7d, - 0x8f, 0x5f, 0x09, 0xbb, 0x6a, 0x42, 0xa5, 0x4b, 0x1d, 0x8b, 0xca, 0x8b, 0xaa, 0x25, 0x55, 0xfa, - 0x99, 0x60, 0x4b, 0x10, 0xd7, 0xe5, 0x29, 0x36, 0x19, 0x3b, 0x5a, 0x09, 0x22, 0x47, 0x6a, 0xe6, - 0x98, 0x36, 0x30, 0x86, 0x95, 0x97, 0x89, 0xe1, 0xd4, 0xcc, 0x31, 0x57, 0x8d, 0x6c, 0xcb, 0xcd, - 0x47, 0x38, 0xb4, 0x3c, 0x44, 0xbe, 0x1a, 0x02, 0xed, 0x41, 0x8f, 0x42, 0x04, 0x9b, 0x62, 0xf1, - 0xc9, 0x6c, 0xc9, 0xb7, 0x81, 0xc1, 0xa9, 0xfe, 0x99, 0x2a, 0xbd, 0x2e, 0xd8, 0xb2, 0x89, 0x2f, - 0x40, 0x5f, 0xd3, 0xba, 0x98, 0xb5, 0xc0, 0x0c, 0x04, 0xcc, 0x79, 0xa4, 0x78, 0xfd, 0x50, 0x8f, - 0x76, 0xf8, 0x2b, 0xd9, 0x96, 0x15, 0x57, 0x61, 0x85, 0x2f, 0xd4, 0x10, 0x76, 0x87, 0x7d, 0x1e, - 0x57, 0xdb, 0xf6, 0x80, 0x57, 0x21, 0xc2, 0x4c, 0x61, 0xf5, 0x2f, 0x55, 0x69, 0xa7, 0x90, 0x95, - 0x24, 0x3a, 0xf3, 0x14, 0x64, 0xea, 0xfc, 0x99, 0x73, 0xe7, 0xb5, 0xb3, 0x71, 0x6d, 0x72, 0xc4, - 0x55, 0x6f, 0x1e, 0x07, 0x6f, 0x72, 0x6c, 0x96, 0xb6, 0x35, 0xd4, 0x3a, 0x98, 0x34, 0x39, 0x8b, - 0x28, 0xff, 0x0f, 0xd1, 0xc3, 0x9e, 0x16, 0xb7, 0xaf, 0xb5, 0xf6, 0x40, 0x9b, 0x2f, 0xa8, 0x78, - 0x1b, 0x14, 0x4f, 0xc0, 0xef, 0x0d, 0x11, 0x59, 0xa8, 0xa4, 0x7a, 0xab, 0x2a, 0xbd, 0x25, 0xe4, - 0x4b, 0x17, 0x37, 0xde, 0x47, 0xd7, 0xbb, 0xea, 0xb5, 0xb3, 0xe7, 0xf5, 0xe3, 0xb7, 0xf4, 0x53, - 0xb7, 0x32, 0xa7, 0x6e, 0xca, 0xf9, 0xe8, 0xf0, 0xcd, 0x68, 0x55, 0x6b, 0x7b, 0x4b, 0xd8, 0x47, - 0x25, 0x1b, 0xb2, 0x1a, 0x11, 0x19, 0x6f, 0x62, 0x8d, 0xc8, 0x49, 0x14, 0xcb, 0x59, 0x23, 0x1e, - 0x86, 0x54, 0x82, 0xe6, 0x4b, 0x14, 0x5d, 0x7a, 0x3e, 0x4a, 0x00, 0x72, 0x4e, 0x5e, 0xbe, 0x1d, - 0x15, 0x7a, 0x7c, 0xde, 0x60, 0x43, 0x58, 0x69, 0x23, 0xe2, 0x52, 0x09, 0x78, 0x27, 0x98, 0x40, - 0xf1, 0x17, 0x60, 0xb1, 0xd4, 0xfa, 0x0e, 0x67, 0x7a, 0x06, 0x30, 0x54, 0x9f, 0xb8, 0x9c, 0x39, - 0x31, 0x0b, 0xa6, 0xfa, 0x72, 0x73, 0xc7, 0x4c, 0x1d, 0xbf, 0x90, 0x8c, 0x5f, 0x05, 0xc7, 0x81, - 0x97, 0x36, 0xbc, 0xf6, 0xf2, 0xdd, 0x48, 0xa7, 0xd6, 0x73, 0x2b, 0x39, 0x7d, 0x12, 0x40, 0xe2, - 0x86, 0x97, 0x5e, 0xad, 0x90, 0x4d, 0xaa, 0xfc, 0x1f, 0x50, 0x89, 0xc1, 0x83, 0xda, 0x98, 0x13, - 0x78, 0x52, 0xb6, 0x3d, 0x45, 0xac, 0xa5, 0x1a, 0x90, 0xc1, 0x65, 0x58, 0xab, 0x76, 0xb9, 0xaf, - 0xad, 0xe3, 0xa5, 0xf5, 0x78, 0x7f, 0x5c, 0xef, 0x6d, 0x77, 0xb7, 0x54, 0x54, 0xa6, 0xce, 0x4e, - 0x6a, 0xfd, 0x03, 0x66, 0xad, 0x70, 0x32, 0x60, 0xca, 0x76, 0xaa, 0x76, 0x4e, 0xfa, 0x32, 0xe9, - 0xe3, 0x92, 0xbc, 0x9c, 0xf4, 0xe5, 0x5c, 0x4e, 0xfa, 0x72, 0x5e, 0x4e, 0xfa, 0x72, 0x2e, 0x27, - 0x05, 0xba, 0x2b, 0xf2, 0x72, 0xd2, 0x97, 0xef, 0xc1, 0x49, 0x5f, 0xce, 0xcb, 0x49, 0xa1, 0x90, - 0x80, 0xa9, 0x78, 0x80, 0x74, 0xf6, 0x8e, 0x2a, 0x35, 0x9a, 0x8a, 0xc7, 0x2f, 0x6c, 0xc6, 0x7f, - 0xb2, 0xd3, 0x18, 0x72, 0x0f, 0x5e, 0x19, 0x43, 0xa7, 0xf5, 0xb3, 0x37, 0x69, 0xe2, 0x74, 0x77, - 0x72, 0xfa, 0x56, 0x7a, 0xb6, 0x37, 0x35, 0x7e, 0x34, 0x19, 0x9b, 0x80, 0xcd, 0x8b, 0xcd, 0x67, - 0x2a, 0x16, 0xff, 0x84, 0x33, 0x0f, 0x1e, 0xc8, 0x8a, 0x04, 0x59, 0xee, 0x63, 0x4e, 0x95, 0xce, - 0x73, 0x02, 0x9b, 0x22, 0x0e, 0x52, 0x53, 0xd0, 0xae, 0x36, 0x8f, 0xd3, 0xef, 0xb3, 0x31, 0x3f, - 0x18, 0x1b, 0xfd, 0xf8, 0x94, 0x1e, 0xed, 0x04, 0x73, 0x1c, 0xac, 0x09, 0x48, 0x0e, 0x37, 0x2b, - 0x55, 0xc1, 0x40, 0x7b, 0x58, 0xa9, 0x52, 0xfc, 0x3e, 0x4d, 0x8d, 0x82, 0x33, 0x47, 0x36, 0x86, - 0xd7, 0x17, 0x54, 0x3c, 0x61, 0x8c, 0x62, 0x1a, 0x08, 0x09, 0x13, 0xc1, 0x02, 0xc3, 0xe9, 0xa9, - 0x5c, 0xaa, 0x15, 0x32, 0x5b, 0xbb, 0xb2, 0xff, 0xcc, 0xa1, 0xe5, 0x2c, 0xef, 0xe2, 0xdf, 0x45, - 0x8b, 0xfc, 0xca, 0xfe, 0x52, 0x8e, 0x18, 0xd3, 0x1f, 0xcf, 0x3d, 0x50, 0xdd, 0x0f, 0xd8, 0x30, - 0x2b, 0x30, 0xaa, 0x58, 0x96, 0x7f, 0x95, 0x83, 0x20, 0x04, 0x9c, 0x4c, 0xc6, 0x88, 0x7c, 0x3b, - 0x5a, 0xa6, 0x1c, 0xf0, 0x85, 0xc2, 0x8a, 0x97, 0xda, 0x0f, 0x1c, 0xd9, 0xe4, 0x6b, 0x21, 0xd9, - 0x64, 0xbf, 0x30, 0x47, 0x8c, 0x5c, 0xe2, 0x0b, 0xf9, 0x4a, 0xb2, 0x1f, 0x9a, 0xa4, 0x46, 0xba, - 0x69, 0x91, 0x46, 0xae, 0xb2, 0x3a, 0xb4, 0x2a, 0x9b, 0x2e, 0xbf, 0x09, 0x2d, 0xf2, 0x79, 0x43, - 0xa4, 0x95, 0x54, 0xa1, 0xc2, 0xdf, 0xe2, 0xda, 0xd4, 0xd9, 0x9b, 0xfa, 0xe0, 0xe5, 0x2c, 0x9a, - 0xc6, 0xd6, 0x10, 0x92, 0x31, 0x52, 0xd9, 0x37, 0x1c, 0x2a, 0x32, 0xfb, 0x81, 0xaf, 0x47, 0x8b, - 0x5b, 0xdd, 0xa1, 0x66, 0x22, 0x75, 0x94, 0x54, 0xff, 0x54, 0x95, 0x5e, 0x13, 0x08, 0x40, 0xdc, - 0x08, 0x1d, 0x40, 0xb7, 0x36, 0xa8, 0x32, 0x54, 0x0d, 0xac, 0x65, 0xb4, 0x11, 0x83, 0x9f, 0xa6, - 0x2e, 0x76, 0x6a, 0x97, 0xae, 0x6a, 0xd7, 0x87, 0x64, 0x92, 0x11, 0x53, 0x24, 0xaa, 0x0c, 0xc8, - 0x1b, 0x40, 0x91, 0x68, 0xac, 0x0b, 0x52, 0x04, 0xbd, 0x0a, 0xb6, 0x14, 0x53, 0xb4, 0xa5, 0xda, - 0x8b, 0x0b, 0x2d, 0xf1, 0xb5, 0x39, 0xfd, 0x61, 0x2a, 0x5f, 0xbc, 0xa8, 0x4a, 0x1b, 0x04, 0x80, - 0x88, 0xcf, 0xdf, 0xa3, 0x96, 0xae, 0xfa, 0x64, 0xec, 0x33, 0xfd, 0xc4, 0x75, 0x19, 0xf0, 0xcb, - 0xfe, 0xd7, 0x22, 0xf4, 0x70, 0x9e, 0xd3, 0x6b, 0xde, 0x83, 0x0a, 0x76, 0x34, 0x50, 0xd1, 0xab, - 0x41, 0x95, 0xea, 0x85, 0x82, 0x1d, 0x0d, 0xc6, 0xc2, 0x83, 0xee, 0xdc, 0xd1, 0x00, 0xf2, 0x5f, - 0x79, 0xe6, 0xc4, 0xa8, 0x76, 0x68, 0xc8, 0x55, 0xb3, 0x9e, 0x1a, 0xf4, 0xc9, 0x27, 0x5e, 0x90, - 0x58, 0xe1, 0xd0, 0x4f, 0xdd, 0xa2, 0xde, 0x84, 0xe0, 0xcb, 0x42, 0x71, 0x2b, 0xe4, 0x82, 0x1d, - 0x0d, 0xbc, 0x84, 0x96, 0x75, 0x28, 0xc1, 0x10, 0x56, 0x49, 0xa1, 0x73, 0x9e, 0x57, 0xa5, 0x1f, - 0x09, 0x06, 0x4c, 0x7c, 0xdc, 0x72, 0xb3, 0xb0, 0x78, 0x23, 0x39, 0x12, 0x97, 0x0d, 0x1c, 0xfe, - 0x44, 0x81, 0xe5, 0xe7, 0xe4, 0x6e, 0x0a, 0x95, 0x2e, 0x22, 0xf3, 0xfc, 0xa5, 0xfb, 0x38, 0xa0, - 0x37, 0x60, 0x38, 0x1b, 0x1c, 0x21, 0x25, 0x38, 0x55, 0x8a, 0x71, 0x02, 0x4b, 0x4f, 0x1c, 0x37, - 0x9c, 0x31, 0xce, 0xc6, 0xb4, 0x9e, 0x2f, 0xc3, 0xee, 0xa6, 0x2c, 0xa1, 0x97, 0x75, 0xd5, 0x00, - 0x8f, 0x26, 0x7a, 0x4c, 0xf4, 0xe5, 0xb8, 0xd6, 0x73, 0x79, 0x1d, 0x31, 0x14, 0xf4, 0x7e, 0x06, - 0x26, 0x10, 0xd8, 0x51, 0x88, 0x36, 0x06, 0x56, 0x12, 0xd3, 0x7c, 0xab, 0x4d, 0x9e, 0x4f, 0x0d, - 0x5e, 0x07, 0x1f, 0x2f, 0x6d, 0x72, 0x44, 0xeb, 0xbb, 0x15, 0x76, 0x37, 0x85, 0xca, 0x41, 0xfd, - 0xde, 0x64, 0xe2, 0x5b, 0xae, 0x6f, 0xe0, 0x48, 0x07, 0x19, 0xa0, 0xc0, 0x0a, 0x99, 0xad, 0x37, - 0xdf, 0x80, 0x8a, 0x69, 0x17, 0x11, 0xf5, 0x69, 0xb1, 0xa5, 0x8b, 0xb0, 0x70, 0xf1, 0xe9, 0x79, - 0xbb, 0xd8, 0x70, 0xd1, 0x64, 0xb0, 0xf9, 0x61, 0x0e, 0x15, 0x86, 0xe8, 0x9a, 0xa3, 0xee, 0x8b, - 0x61, 0x55, 0xfa, 0x8d, 0x60, 0x02, 0x45, 0x45, 0x9b, 0xf9, 0x28, 0x13, 0xe9, 0xd7, 0x8f, 0x7e, - 0xea, 0xf4, 0xb5, 0xf8, 0xda, 0x5b, 0x1d, 0x3b, 0xe0, 0xbc, 0x95, 0x2e, 0x0e, 0xe2, 0xf6, 0xa4, - 0x9f, 0xba, 0x35, 0x97, 0x88, 0x36, 0x6e, 0xad, 0x4d, 0x26, 0x46, 0x92, 0xd3, 0x83, 0xe9, 0xa9, - 0xcb, 0xb0, 0x20, 0xc1, 0x50, 0x2e, 0x26, 0x63, 0x9f, 0xb9, 0xea, 0x53, 0xc7, 0xc7, 0xf5, 0x73, - 0x97, 0xc1, 0xa4, 0x0b, 0xe6, 0xb8, 0xf4, 0xcd, 0x0b, 0xe9, 0x99, 0x19, 0xed, 0x5c, 0x6f, 0x7a, - 0x6c, 0x4c, 0x36, 0x0b, 0xe4, 0x7f, 0x8d, 0x96, 0xd3, 0x66, 0x6f, 0x53, 0x3a, 0x94, 0x16, 0xea, - 0x1c, 0x49, 0xec, 0xc6, 0xb6, 0x04, 0xf3, 0xc4, 0x78, 0xa2, 0x3f, 0x15, 0xbf, 0x8a, 0x85, 0x25, - 0x72, 0x7c, 0xc7, 0x7a, 0xca, 0x80, 0x53, 0x8d, 0x6c, 0xcb, 0xc6, 0x9f, 0xe3, 0xd0, 0xe3, 0xbe, - 0x90, 0xd4, 0x1e, 0x0e, 0xec, 0x6c, 0x6b, 0x0a, 0xba, 0xbd, 0x8a, 0x93, 0x2d, 0x6d, 0x19, 0x91, - 0xdb, 0x76, 0xab, 0xd2, 0xaf, 0x84, 0xf9, 0xb1, 0xc4, 0x9f, 0xb3, 0x42, 0x33, 0x15, 0x36, 0x86, - 0x4e, 0x67, 0x7a, 0x06, 0xee, 0xb7, 0x4a, 0xf3, 0xd3, 0xe6, 0x0f, 0x71, 0x68, 0xb1, 0x3b, 0xa8, - 0xb8, 0x89, 0x08, 0x99, 0x87, 0xc1, 0x3b, 0xc9, 0x51, 0x40, 0x50, 0x71, 0x57, 0x37, 0xaa, 0xd2, - 0xdb, 0x02, 0xc1, 0x15, 0x5d, 0x94, 0xfa, 0xf4, 0x4d, 0x2d, 0x7e, 0x05, 0x0e, 0x33, 0x58, 0x97, - 0xd3, 0x72, 0xdc, 0xfb, 0x7d, 0xb7, 0x93, 0xb1, 0x01, 0x3d, 0xda, 0xab, 0x4d, 0x8e, 0x54, 0x3a, - 0xb4, 0xbe, 0x33, 0xec, 0x2a, 0x36, 0xf1, 0x2b, 0x64, 0x42, 0x90, 0xff, 0x15, 0x5a, 0x0a, 0xe7, - 0x91, 0x44, 0x84, 0x2c, 0x16, 0x9f, 0x9a, 0x67, 0xfd, 0x6d, 0x27, 0x48, 0x60, 0x6b, 0xa1, 0x39, - 0xc4, 0x52, 0x7a, 0x6c, 0x4c, 0xce, 0x37, 0xe1, 0xac, 0xd3, 0xf0, 0x7c, 0x05, 0x8c, 0x35, 0x3f, - 0x43, 0xab, 0xb2, 0xd7, 0xea, 0x83, 0xd8, 0x9d, 0xcb, 0xfe, 0x1d, 0x42, 0xab, 0xf3, 0x7a, 0xb4, - 0xf0, 0xbf, 0x40, 0x8b, 0x5d, 0xf5, 0xbb, 0x80, 0xcf, 0x15, 0x82, 0xcd, 0x8a, 0x00, 0xc4, 0x17, - 0xb6, 0x66, 0x79, 0x78, 0x61, 0xa8, 0xe9, 0xb5, 0x92, 0xe5, 0x77, 0x49, 0xb2, 0xf0, 0xbf, 0x45, - 0xab, 0x3c, 0x01, 0x7f, 0xd8, 0xed, 0xf3, 0x2b, 0x41, 0xb9, 0xdd, 0x1f, 0xf6, 0x99, 0x6e, 0xd0, - 0x75, 0xaa, 0xb4, 0x55, 0xc8, 0x49, 0x14, 0x5f, 0xa1, 0x47, 0x4a, 0x76, 0x17, 0x18, 0x60, 0x05, - 0x60, 0xd1, 0xca, 0x44, 0xfa, 0x6b, 0x88, 0x9b, 0xc9, 0xdd, 0x48, 0xa7, 0xd3, 0xc8, 0xee, 0x95, - 0x73, 0x48, 0xf1, 0x32, 0x5a, 0x11, 0x84, 0x9f, 0xbb, 0x28, 0x3f, 0x5d, 0x64, 0xd9, 0x4b, 0xb2, - 0x92, 0xc4, 0xd5, 0x59, 0x25, 0x52, 0x96, 0x9a, 0x85, 0xc6, 0xff, 0xd3, 0x02, 0x7a, 0x18, 0x2f, - 0x05, 0x9b, 0x42, 0xa5, 0x8b, 0x17, 0xe4, 0xab, 0xf6, 0x6e, 0xa5, 0x9e, 0x81, 0x41, 0x83, 0xaf, - 0xfe, 0x2d, 0xa7, 0x4a, 0xff, 0x87, 0x71, 0x34, 0x8f, 0xc1, 0xe2, 0x7f, 0xe6, 0x40, 0x68, 0xd7, - 0x86, 0xbb, 0xe9, 0xe9, 0xb6, 0xc1, 0x23, 0xe1, 0x00, 0x10, 0xf7, 0xf1, 0xc7, 0xdd, 0xa6, 0xe1, - 0xb8, 0x59, 0x39, 0x98, 0x8c, 0xc5, 0xf1, 0x90, 0x48, 0xf5, 0x2e, 0xac, 0xc3, 0x2a, 0xc1, 0xb9, - 0x44, 0x74, 0x2b, 0x9c, 0xfb, 0x85, 0x83, 0x81, 0x96, 0x16, 0x02, 0xa8, 0x0d, 0x7b, 0xbc, 0x14, - 0xde, 0xe0, 0xd9, 0xa7, 0xe0, 0xb9, 0x13, 0xbc, 0x1b, 0xe9, 0x22, 0x13, 0x21, 0x19, 0x8b, 0x5b, - 0x85, 0xcd, 0x9e, 0xc5, 0x6a, 0xe8, 0xf0, 0x14, 0x59, 0x88, 0xb4, 0x3c, 0xed, 0xd2, 0x48, 0x32, - 0xf6, 0x19, 0x3d, 0x7f, 0xbc, 0x73, 0x34, 0x73, 0xea, 0x26, 0xcc, 0xf8, 0xd7, 0x33, 0xa7, 0x6e, - 0x66, 0x46, 0x8e, 0x9b, 0xc6, 0x50, 0x5c, 0xc8, 0x26, 0x87, 0x3f, 0xe0, 0x55, 0xaa, 0xbc, 0xee, - 0xb0, 0x1b, 0xcb, 0x6b, 0x6f, 0xac, 0xc7, 0xbf, 0xd6, 0xef, 0xf1, 0x84, 0xd6, 0xb7, 0xf8, 0xf6, - 0xac, 0x57, 0xc2, 0x1e, 0xef, 0xeb, 0xb2, 0xd5, 0x5a, 0xfe, 0x3f, 0x71, 0x76, 0xa7, 0x16, 0xe0, - 0x9c, 0xc6, 0x6e, 0xc3, 0xba, 0xb5, 0x98, 0xbb, 0x8d, 0xcd, 0xaf, 0xa5, 0x4f, 0x8b, 0xf6, 0xe8, - 0x47, 0xaf, 0x6d, 0x91, 0xcb, 0xb5, 0x9e, 0x71, 0xed, 0x46, 0x24, 0x7d, 0x7b, 0x2a, 0x75, 0xfc, - 0x46, 0x85, 0xa6, 0x46, 0xa9, 0xfc, 0x94, 0x8c, 0x5d, 0x4a, 0x5d, 0x1d, 0x00, 0xf9, 0x89, 0x9d, - 0x9e, 0x5b, 0xe4, 0x75, 0xc9, 0x3b, 0x17, 0x40, 0x1e, 0x05, 0x7e, 0x4c, 0xd9, 0xb1, 0x81, 0xda, - 0x57, 0xbe, 0xb7, 0xc5, 0xed, 0xf7, 0x2b, 0x2d, 0x77, 0x23, 0x9d, 0x1e, 0x77, 0x8b, 0xcf, 0x13, - 0xb8, 0x1b, 0xe9, 0x04, 0x0f, 0x07, 0xf0, 0x24, 0x4c, 0xf7, 0x7e, 0x96, 0xba, 0x78, 0x9c, 0xe5, - 0xde, 0xa9, 0x89, 0xfe, 0x8a, 0xb9, 0x44, 0xbf, 0xdd, 0x7d, 0xa6, 0x09, 0xf1, 0x5e, 0xa5, 0x45, - 0x09, 0xfb, 0x02, 0xfe, 0xfa, 0x60, 0x20, 0xac, 0x78, 0xc8, 0xf9, 0xfc, 0x52, 0xb2, 0xaa, 0xc8, - 0x11, 0x49, 0x9e, 0x64, 0x71, 0x2d, 0x65, 0x8b, 0xc4, 0x2b, 0x8c, 0xae, 0x85, 0xbe, 0x8b, 0x99, - 0x33, 0x97, 0x92, 0xb3, 0xe7, 0xf4, 0x23, 0x97, 0xe4, 0x3c, 0x79, 0xf8, 0x1d, 0x68, 0xb9, 0xbb, - 0xdd, 0xeb, 0x0b, 0xd7, 0x12, 0xd3, 0x81, 0x97, 0x32, 0xe0, 0x17, 0x54, 0xa9, 0x5c, 0xb0, 0x25, - 0x88, 0xa5, 0x2c, 0xcf, 0xd5, 0x26, 0xc7, 0xd2, 0x93, 0x63, 0xd4, 0x37, 0xc3, 0x86, 0xc7, 0x6f, - 0x43, 0x85, 0x60, 0x86, 0x78, 0xcb, 0x4d, 0xb5, 0x70, 0x62, 0x59, 0x31, 0x81, 0xe2, 0x33, 0x70, - 0x38, 0xcf, 0x1e, 0x63, 0x02, 0xd1, 0xcc, 0xe7, 0xa7, 0x41, 0x2e, 0x93, 0x4d, 0x64, 0xfe, 0x0b, - 0x0e, 0xad, 0x36, 0x4e, 0xb4, 0x03, 0x7e, 0xbf, 0xe2, 0x09, 0xd3, 0x25, 0x41, 0xf9, 0xe2, 0x7c, - 0x8e, 0x76, 0x76, 0xe4, 0xea, 0x9d, 0xaa, 0x24, 0x0b, 0xf9, 0x09, 0x89, 0xaf, 0xd1, 0x9e, 0x82, - 0x86, 0x1d, 0xee, 0xd1, 0x2e, 0x9d, 0xc4, 0xbb, 0xe3, 0xe4, 0xd7, 0xac, 0x8b, 0xa8, 0x36, 0xdb, - 0x93, 0x19, 0x9b, 0x06, 0x79, 0x43, 0x9f, 0x30, 0xbc, 0xcb, 0xf2, 0x53, 0x34, 0x0f, 0xf5, 0xcc, - 0x05, 0xfb, 0x40, 0xcc, 0xf5, 0xff, 0x5e, 0x6c, 0x32, 0x57, 0x3b, 0x5d, 0xbe, 0x93, 0x43, 0xc8, - 0x17, 0x22, 0xa4, 0xfd, 0x4a, 0x98, 0xf2, 0x58, 0xb7, 0x2a, 0xfd, 0x5a, 0x60, 0xc0, 0x62, 0xbd, - 0xf5, 0x9b, 0xb6, 0xcc, 0x6a, 0xd3, 0x6c, 0xe6, 0xd4, 0x64, 0x79, 0x38, 0xd8, 0xae, 0xb0, 0x00, - 0x07, 0x61, 0xba, 0x54, 0x28, 0x20, 0x10, 0x9b, 0x4b, 0x55, 0x85, 0xcc, 0x50, 0xe7, 0xf7, 0x98, - 0x02, 0x8b, 0x97, 0x32, 0x63, 0xe2, 0x33, 0x6a, 0x02, 0x0d, 0x26, 0x9c, 0xfa, 0x7c, 0x4a, 0x1b, - 0xfa, 0x04, 0x0c, 0xc9, 0x8c, 0xf1, 0xa8, 0xdc, 0xec, 0x66, 0xb3, 0x30, 0xbd, 0x3f, 0x92, 0x19, - 0x8d, 0x54, 0x98, 0x22, 0x88, 0x97, 0x77, 0xa2, 0xa5, 0xde, 0x40, 0xab, 0xdb, 0x67, 0x30, 0x5d, - 0x32, 0x1b, 0x29, 0x48, 0x5c, 0x0b, 0x7b, 0x29, 0x0c, 0x05, 0x50, 0x48, 0x7d, 0x3e, 0x95, 0xea, - 0xba, 0xa3, 0x5d, 0xb8, 0xa0, 0x0d, 0x0f, 0xc8, 0x14, 0x8f, 0x1f, 0xe4, 0x50, 0x49, 0x48, 0xf1, - 0xb4, 0x07, 0x7d, 0xe1, 0x83, 0xe4, 0xac, 0x88, 0x8a, 0x6c, 0xfb, 0x54, 0x49, 0x11, 0xec, 0x29, - 0x62, 0xa3, 0x29, 0xaa, 0x69, 0x93, 0xfd, 0x5a, 0xcf, 0x78, 0x6a, 0xba, 0x9b, 0xec, 0x17, 0x9f, - 0xe9, 0xa3, 0xfd, 0x6c, 0x4f, 0xc1, 0xf1, 0x0a, 0x38, 0x59, 0x63, 0x2e, 0x02, 0x6d, 0x61, 0x10, - 0xf0, 0x76, 0x33, 0xdb, 0x93, 0x4c, 0x5c, 0xc4, 0x0b, 0xda, 0x5e, 0x08, 0x7f, 0x81, 0x43, 0x85, - 0x3e, 0x7f, 0x98, 0x6c, 0x82, 0x84, 0x63, 0x15, 0x8b, 0x65, 0xb9, 0x0e, 0x64, 0x90, 0x2e, 0x79, - 0x3c, 0x4a, 0x28, 0xe4, 0xdb, 0xd3, 0xa2, 0x80, 0x2c, 0x64, 0x66, 0x14, 0xeb, 0x41, 0x84, 0x6b, - 0xd9, 0x63, 0xf1, 0xd9, 0xef, 0x58, 0x4d, 0x93, 0x76, 0xd9, 0x3f, 0x2f, 0x46, 0xc5, 0x8c, 0x47, - 0x27, 0x16, 0xd5, 0x56, 0x82, 0x57, 0xe6, 0x96, 0xa0, 0xbb, 0x6d, 0x5f, 0xbd, 0x3b, 0xbc, 0x8f, - 0x2a, 0x30, 0x21, 0x55, 0x6a, 0x13, 0xb2, 0xd3, 0xc4, 0x0f, 0xa8, 0x9b, 0xa7, 0xb1, 0x0f, 0x26, - 0x63, 0x71, 0xea, 0xd4, 0x69, 0x38, 0xa2, 0x52, 0x51, 0x9e, 0xf1, 0xf1, 0x04, 0xcf, 0x4d, 0x98, - 0x6e, 0x80, 0x63, 0xf1, 0x7e, 0x6a, 0xc3, 0x58, 0x0f, 0x44, 0xe4, 0xec, 0xf2, 0xf8, 0x0f, 0x50, - 0x71, 0x6b, 0xa0, 0xdd, 0x1f, 0x6e, 0x74, 0x07, 0x9b, 0x94, 0x30, 0x9d, 0x8e, 0x70, 0xe1, 0x83, - 0x81, 0x1b, 0x47, 0x2d, 0xd4, 0xa7, 0xf4, 0xec, 0x69, 0xea, 0x77, 0xda, 0x75, 0x87, 0x2d, 0x9b, - 0x94, 0x2a, 0xb3, 0xf9, 0xf8, 0x59, 0x0e, 0x95, 0xb4, 0xfb, 0xe9, 0xc6, 0x87, 0xf9, 0x11, 0xd5, - 0x0e, 0x4f, 0x73, 0xaa, 0x74, 0x9c, 0x13, 0xec, 0x69, 0x62, 0x17, 0x07, 0xd5, 0xd7, 0x8e, 0x5c, - 0xd4, 0x7a, 0x2e, 0x5b, 0x27, 0x52, 0xc0, 0xe0, 0x86, 0xba, 0x92, 0xb1, 0xc1, 0xf4, 0xf5, 0x43, - 0x5a, 0xfc, 0x8a, 0xb9, 0x9f, 0x68, 0x91, 0xc4, 0x86, 0xf4, 0xd8, 0x78, 0xea, 0x52, 0x3c, 0x3b, - 0xf9, 0xdc, 0x79, 0x9a, 0x80, 0xf5, 0x19, 0x26, 0xad, 0x1c, 0x88, 0x9b, 0x8e, 0x6c, 0x58, 0x17, - 0xba, 0x72, 0x38, 0x75, 0xf6, 0x24, 0x4c, 0x86, 0x0a, 0xd9, 0x5e, 0x27, 0xde, 0x67, 0x5e, 0x2d, - 0x01, 0x69, 0xe3, 0xf9, 0x05, 0xfc, 0x77, 0x6d, 0xd7, 0x4b, 0x88, 0xc2, 0x6f, 0x5c, 0x2f, 0xa1, - 0x87, 0x42, 0x99, 0xc8, 0x08, 0xac, 0x11, 0x00, 0x53, 0x07, 0x69, 0xe3, 0xb6, 0x49, 0x9f, 0x4d, - 0xb8, 0x59, 0x42, 0x8a, 0x13, 0x16, 0x2a, 0x2e, 0x4b, 0xa4, 0x99, 0xe1, 0x54, 0xe9, 0x8e, 0x4d, - 0xa4, 0xf9, 0xfc, 0xdb, 0x88, 0x34, 0x58, 0xfb, 0x6a, 0x51, 0xc2, 0xdf, 0xaf, 0x84, 0xb2, 0x15, - 0x88, 0x6e, 0x72, 0x04, 0x03, 0x81, 0x30, 0xc8, 0x27, 0x1d, 0xee, 0x20, 0x11, 0x4d, 0x68, 0x79, - 0x36, 0xe9, 0xe4, 0x3d, 0xb4, 0x14, 0x0b, 0x93, 0x61, 0x30, 0xb9, 0x17, 0x8b, 0xab, 0xb3, 0xbb, - 0xa1, 0x11, 0xa7, 0x52, 0xae, 0x06, 0x98, 0xe2, 0x5a, 0xfd, 0xe4, 0xf5, 0xac, 0x33, 0x5d, 0x48, - 0x31, 0x24, 0x77, 0xf8, 0xe2, 0x9b, 0x51, 0x31, 0x38, 0xf9, 0x6f, 0x0b, 0x34, 0xf9, 0xfc, 0xd4, - 0xd6, 0xfe, 0x54, 0xbe, 0x7e, 0x26, 0x08, 0x2e, 0xff, 0xde, 0x00, 0xc8, 0xac, 0x6c, 0x36, 0xb1, - 0x14, 0x3e, 0xe8, 0xba, 0x38, 0x33, 0x9d, 0x39, 0x43, 0x7d, 0x14, 0x65, 0x16, 0x0d, 0x17, 0x86, - 0x05, 0x12, 0xa3, 0xb0, 0xc2, 0xfb, 0x2f, 0x8c, 0xc9, 0x26, 0x96, 0xc2, 0x47, 0xbe, 0xc2, 0x18, - 0x34, 0xfe, 0x43, 0xf4, 0x08, 0x94, 0xdd, 0xc0, 0x72, 0xcd, 0x50, 0x69, 0x11, 0xb1, 0x40, 0x11, - 0x4d, 0x22, 0x2f, 0x82, 0xf8, 0x04, 0xdb, 0x18, 0x93, 0x7f, 0x1b, 0xfe, 0xfb, 0xf9, 0xb2, 0xe0, - 0xb2, 0xa0, 0xe8, 0xac, 0xb2, 0x10, 0x53, 0x56, 0x3e, 0x04, 0xf1, 0x09, 0xb6, 0x2d, 0x39, 0x65, - 0xe5, 0xcb, 0xf2, 0x5d, 0xbc, 0xa4, 0xbe, 0x9b, 0x1c, 0x11, 0x59, 0x84, 0x4a, 0x6c, 0x63, 0xc3, - 0x7b, 0xd0, 0x43, 0x3e, 0xbf, 0x2f, 0x4c, 0x00, 0x3b, 0x43, 0x4a, 0xd0, 0xef, 0x6e, 0x55, 0x28, - 0x43, 0xff, 0x89, 0x2a, 0x89, 0x42, 0x6e, 0xaa, 0xf8, 0x54, 0xd6, 0xbc, 0x84, 0xa6, 0xb6, 0xd3, - 0x64, 0x39, 0x37, 0x07, 0xdf, 0xc3, 0x31, 0xa5, 0xd4, 0xbb, 0x43, 0xa1, 0xfd, 0x81, 0xa0, 0x21, - 0x2a, 0x10, 0xa3, 0x73, 0x6e, 0xaa, 0xf8, 0xf3, 0xbc, 0xa5, 0xb4, 0xd1, 0xe4, 0x4a, 0xb8, 0x8f, - 0x6a, 0x3a, 0xfb, 0xa7, 0xbe, 0x9c, 0x4e, 0x4d, 0x5f, 0x60, 0xbd, 0xa2, 0xe5, 0x5c, 0x9a, 0x58, - 0x58, 0x5a, 0xd6, 0xac, 0x1c, 0xac, 0x77, 0xfb, 0x82, 0x84, 0x6f, 0x17, 0x8b, 0x8f, 0x65, 0xcf, - 0xdc, 0xad, 0xca, 0x41, 0x32, 0x67, 0x89, 0x3a, 0x69, 0x20, 0x1b, 0xe7, 0xd7, 0xa9, 0xab, 0x9d, - 0x19, 0xf5, 0xb2, 0xe9, 0xdf, 0x1c, 0x1b, 0x04, 0x1f, 0x0b, 0x31, 0x13, 0xe9, 0x4f, 0xc6, 0x22, - 0x73, 0x89, 0xa8, 0x98, 0x8e, 0xf4, 0x68, 0xe7, 0x7a, 0xe9, 0xc6, 0x96, 0x38, 0xad, 0xf5, 0xf4, - 0x69, 0x53, 0x87, 0x33, 0xea, 0x65, 0xd9, 0x20, 0x55, 0xf6, 0xef, 0x17, 0xa1, 0x87, 0x0c, 0x51, - 0x2e, 0xa8, 0x78, 0x15, 0x7f, 0xd8, 0xe7, 0x6e, 0xe1, 0x9f, 0x44, 0x45, 0x21, 0xa2, 0x72, 0x6d, - 0x35, 0x87, 0xd2, 0x02, 0xe0, 0x54, 0xcb, 0x9f, 0x05, 0x06, 0x95, 0xf1, 0x52, 0x29, 0x43, 0xcb, - 0x3d, 0x2d, 0x3e, 0xc5, 0x1f, 0x06, 0xc5, 0x1f, 0x04, 0x24, 0xd9, 0x06, 0xe3, 0x7f, 0x84, 0x05, - 0x1f, 0x4c, 0x4e, 0xf2, 0x7a, 0x83, 0x4a, 0x28, 0x04, 0x82, 0x8f, 0x6c, 0x07, 0x92, 0xfb, 0x7d, - 0x6e, 0xa7, 0x12, 0x0c, 0xd7, 0xb8, 0xc3, 0x6e, 0xd0, 0xa0, 0x64, 0x06, 0x82, 0xeb, 0x81, 0x87, - 0xb9, 0x31, 0xd0, 0xac, 0x80, 0xe2, 0x51, 0x24, 0x5b, 0x00, 0x5c, 0x06, 0xad, 0x54, 0x0d, 0x48, - 0x6a, 0xcb, 0xa0, 0x0c, 0x1b, 0x90, 0x77, 0xa0, 0x62, 0x0f, 0x88, 0xb0, 0xe6, 0xa1, 0x5c, 0x91, - 0xcc, 0x82, 0xb2, 0x6e, 0x19, 0x16, 0xdd, 0xe3, 0x96, 0x21, 0xca, 0xb9, 0x65, 0x88, 0xf3, 0x93, - 0xb6, 0xe3, 0x7a, 0x83, 0xf3, 0x8e, 0xcc, 0x40, 0xa0, 0x37, 0xf1, 0x17, 0xee, 0xeb, 0xe5, 0x46, - 0x6f, 0x52, 0x80, 0xe1, 0x3f, 0x97, 0x3b, 0x46, 0xe2, 0xb3, 0x7b, 0x3c, 0xa1, 0x2a, 0xcc, 0xdc, - 0xab, 0xdc, 0x4d, 0x8a, 0x3f, 0x9c, 0x8c, 0x1d, 0xd1, 0x8f, 0xe0, 0x4d, 0x9d, 0x75, 0xad, 0x2b, - 0xfb, 0x1f, 0x16, 0xa1, 0xa2, 0x3a, 0x77, 0xab, 0x12, 0x6a, 0x73, 0x7b, 0x14, 0x9e, 0x47, 0x8b, - 0xad, 0x05, 0x25, 0x93, 0xdf, 0xfc, 0x86, 0xfc, 0x37, 0xb0, 0x61, 0x58, 0xf3, 0x5e, 0x8d, 0x7e, - 0x92, 0xbd, 0x46, 0x0c, 0xa3, 0xcb, 0x5c, 0x0d, 0x5e, 0x6b, 0xbb, 0x1a, 0x0c, 0xe3, 0xca, 0xde, - 0xdf, 0x7d, 0xc3, 0xdc, 0xf0, 0x61, 0x07, 0xce, 0x51, 0x8f, 0xcc, 0xea, 0xb2, 0xdb, 0xbd, 0xb9, - 0x89, 0xaf, 0x41, 0x85, 0xad, 0xee, 0x03, 0x6f, 0xb7, 0x07, 0xc2, 0x6e, 0x3a, 0xe4, 0xe6, 0x77, - 0xd6, 0x48, 0x2d, 0xbb, 0xc7, 0x48, 0x15, 0xe6, 0x8c, 0xd4, 0xeb, 0xa8, 0xe8, 0x37, 0x98, 0xd0, - 0x36, 0x5f, 0x28, 0x4c, 0x98, 0x7a, 0x9e, 0xad, 0x44, 0x56, 0x42, 0xe4, 0x8c, 0x85, 0x94, 0x28, - 0x5b, 0xf8, 0xdf, 0x81, 0x89, 0x6e, 0x7a, 0x4e, 0x95, 0x9e, 0x45, 0xcf, 0x08, 0xd6, 0x40, 0x89, - 0x8f, 0xb0, 0x57, 0xd5, 0xfd, 0x74, 0x87, 0x2d, 0xfb, 0x0f, 0x05, 0xa8, 0xc4, 0x56, 0x3e, 0x1e, - 0x0a, 0xbf, 0x91, 0xc9, 0x58, 0xa7, 0x26, 0xe0, 0xdb, 0x0d, 0xad, 0xc7, 0x7e, 0x09, 0x9f, 0x5d, - 0xd9, 0x3f, 0x42, 0x25, 0x41, 0xb6, 0x78, 0x63, 0xd5, 0xda, 0x80, 0xfc, 0xa3, 0xf6, 0xcb, 0xee, - 0xa6, 0xb7, 0x98, 0x7d, 0x74, 0x96, 0xde, 0x63, 0x74, 0x96, 0xe5, 0x8c, 0xce, 0xa3, 0xe6, 0xf1, - 0x20, 0x8c, 0x9c, 0x71, 0x8a, 0x57, 0x6a, 0x79, 0x3a, 0xc3, 0xe2, 0x34, 0x3e, 0x37, 0xad, 0x53, - 0xa5, 0x17, 0x50, 0x85, 0x60, 0xef, 0x33, 0xb1, 0x94, 0xed, 0x5b, 0xf0, 0xf1, 0xc9, 0xf4, 0x0c, - 0x64, 0x3e, 0x3e, 0x57, 0x36, 0xb0, 0x08, 0x21, 0x86, 0x09, 0xe6, 0x0e, 0x21, 0xae, 0x82, 0xe2, - 0x09, 0x1a, 0x82, 0xbc, 0x4c, 0xbf, 0xf8, 0xe7, 0xd0, 0x8a, 0x50, 0xfb, 0x1e, 0xf3, 0xae, 0x81, - 0xd9, 0x77, 0x59, 0x50, 0x3c, 0x79, 0xc3, 0x8a, 0xdf, 0x4d, 0x5c, 0xcf, 0xa1, 0xef, 0xcc, 0x6f, - 0xbe, 0x12, 0x3d, 0x64, 0xf4, 0x23, 0xd9, 0x96, 0x89, 0x09, 0x1f, 0x7a, 0x30, 0x37, 0x01, 0x53, - 0x02, 0x1e, 0x61, 0xc4, 0x06, 0x90, 0xcd, 0x6f, 0x8b, 0x01, 0x37, 0x40, 0x5d, 0x97, 0xb1, 0x0c, - 0x18, 0x60, 0xbc, 0x88, 0x1e, 0xa1, 0xaa, 0x0b, 0x75, 0x19, 0xa7, 0xb8, 0xd0, 0xb5, 0x79, 0xd3, - 0x30, 0xdd, 0xa6, 0x66, 0xa5, 0xde, 0x5c, 0xfa, 0xd0, 0xdb, 0x36, 0xd8, 0xa6, 0xad, 0xaa, 0xf4, - 0x16, 0xda, 0x2c, 0x30, 0xdd, 0x28, 0xbe, 0x0a, 0x87, 0x26, 0xd0, 0xeb, 0xe0, 0xb6, 0xae, 0xf7, - 0xdd, 0x36, 0x76, 0x2d, 0x70, 0x5a, 0xd3, 0x7a, 0xc6, 0x33, 0xbd, 0x43, 0xa6, 0x4f, 0x3b, 0x48, - 0xd5, 0x65, 0xc3, 0x4b, 0x50, 0x31, 0xe3, 0xe5, 0xcc, 0x6f, 0x46, 0x4b, 0xe1, 0x62, 0x2d, 0x95, - 0x08, 0xf0, 0xf8, 0x0a, 0x14, 0x24, 0x3e, 0x43, 0x4d, 0x55, 0x64, 0xe7, 0x9d, 0x4b, 0x44, 0xf5, - 0xd1, 0x6b, 0x00, 0x49, 0xc6, 0xe2, 0x7b, 0x9a, 0x43, 0x81, 0xb6, 0x90, 0x4c, 0x51, 0xf9, 0x5f, - 0xa3, 0xc5, 0x2d, 0x3e, 0x7f, 0x33, 0xdd, 0xf1, 0x7f, 0xa1, 0x4a, 0x5b, 0x04, 0x02, 0x10, 0x7f, - 0x0e, 0x88, 0xe0, 0xa2, 0x97, 0xf9, 0xe8, 0x6b, 0x7d, 0xf0, 0xb2, 0x79, 0xe8, 0xa3, 0x0d, 0x1d, - 0x4b, 0x7f, 0x75, 0x5b, 0xbf, 0xd8, 0xab, 0xf5, 0x1e, 0x4e, 0xcf, 0x0e, 0xa7, 0xa6, 0x6f, 0x26, - 0xe3, 0x47, 0xb5, 0x23, 0x63, 0xe9, 0xd9, 0xd1, 0xd4, 0xf8, 0x51, 0xb8, 0x9a, 0x29, 0x13, 0x32, - 0xfc, 0x65, 0x0e, 0x2d, 0x6d, 0x73, 0x07, 0xdd, 0xad, 0xc6, 0xd1, 0xd4, 0xf3, 0x0b, 0xf8, 0x6e, - 0xaf, 0xab, 0x27, 0x98, 0xa0, 0x62, 0x78, 0x55, 0xc9, 0x2d, 0xd0, 0xbc, 0xe2, 0x3b, 0xb6, 0xda, - 0xc0, 0x51, 0x1a, 0x51, 0x70, 0x2c, 0xed, 0x60, 0xf2, 0x7c, 0xe6, 0x4c, 0x0f, 0xbd, 0x16, 0x7a, - 0xea, 0x16, 0x75, 0xc3, 0x05, 0xe0, 0x58, 0x14, 0x2b, 0x17, 0x86, 0xf6, 0xa5, 0xf7, 0x9d, 0x84, - 0x33, 0x26, 0x2d, 0x7a, 0x52, 0xa6, 0x05, 0x60, 0xe5, 0xf9, 0x61, 0x77, 0x4b, 0x4b, 0x60, 0x7f, - 0x43, 0xb3, 0xaf, 0xed, 0x9d, 0x7d, 0x8a, 0x7f, 0x33, 0xf1, 0x41, 0x23, 0x53, 0xb3, 0xb0, 0xba, - 0x59, 0x95, 0xf6, 0x09, 0xf9, 0xd2, 0xc5, 0xb7, 0xf3, 0x00, 0xe9, 0x31, 0x4f, 0xff, 0xd5, 0xf4, - 0x58, 0xd4, 0xf4, 0x6d, 0xa3, 0x9a, 0x65, 0x4f, 0x67, 0x7a, 0x32, 0x96, 0xbe, 0xfd, 0x65, 0x7a, - 0xb6, 0xd7, 0x30, 0xdb, 0x60, 0xad, 0x91, 0x01, 0xcb, 0xf9, 0xca, 0xc1, 0x2c, 0x95, 0xe9, 0x9c, - 0x07, 0x62, 0xa9, 0xbb, 0x54, 0xa9, 0x01, 0xbd, 0x2d, 0xb0, 0xd3, 0x47, 0xac, 0x66, 0x07, 0x8f, - 0xbd, 0x8d, 0x06, 0x53, 0xd3, 0x1c, 0x69, 0x7a, 0x5a, 0x13, 0x3d, 0xa9, 0xdd, 0xbe, 0x9c, 0x9c, - 0x19, 0x05, 0x07, 0x26, 0xc0, 0x29, 0xfb, 0x62, 0x09, 0x5a, 0x2a, 0x81, 0x59, 0xb2, 0x03, 0xa1, - 0xb6, 0xa0, 0x02, 0x1f, 0xc6, 0x29, 0x34, 0xb9, 0x7f, 0xc5, 0x80, 0xc5, 0x5a, 0x3a, 0x0e, 0xfd, - 0x78, 0x42, 0x9b, 0x84, 0xa1, 0x70, 0xb8, 0x12, 0x3d, 0x97, 0x88, 0xba, 0x09, 0xb2, 0x36, 0x3a, - 0xae, 0x7f, 0x34, 0x90, 0x9c, 0x19, 0x65, 0xb3, 0x40, 0x87, 0xca, 0x0c, 0x49, 0xfe, 0x00, 0x2a, - 0x6e, 0x0b, 0x84, 0xc2, 0x46, 0xc1, 0x05, 0x0b, 0x17, 0x3c, 0x3c, 0xf8, 0xc0, 0x05, 0x93, 0x2c, - 0xb4, 0x60, 0xb6, 0x28, 0xbe, 0x19, 0x2d, 0x6b, 0x23, 0x5d, 0x69, 0xcc, 0xeb, 0x9c, 0x3b, 0xd1, - 0x80, 0xb9, 0x0e, 0x3a, 0x9c, 0xce, 0x69, 0xe2, 0x64, 0x60, 0x64, 0x14, 0xd7, 0x6a, 0x3d, 0xb7, - 0x93, 0x33, 0x1f, 0x41, 0x51, 0xd4, 0x37, 0xec, 0xc8, 0x78, 0x72, 0x66, 0x14, 0xb4, 0x64, 0xd9, - 0x40, 0x5c, 0xf3, 0x0e, 0x5a, 0xce, 0x92, 0xf9, 0xde, 0x2e, 0x48, 0x6c, 0x9a, 0xe3, 0x54, 0xe9, - 0x7f, 0xe7, 0x50, 0x9a, 0x13, 0xe8, 0x48, 0x8a, 0xff, 0x81, 0x83, 0xd1, 0x35, 0x55, 0x71, 0xb8, - 0xc7, 0x63, 0xf6, 0x1a, 0xad, 0x2c, 0xe9, 0xbb, 0x4a, 0x87, 0x36, 0x75, 0x47, 0x1f, 0xbc, 0xfc, - 0x61, 0x60, 0x0f, 0xb0, 0x9a, 0x4a, 0x87, 0x36, 0x19, 0xd5, 0xfb, 0x86, 0x4d, 0xd5, 0x1f, 0xfa, - 0xf2, 0x75, 0x47, 0xf6, 0x5d, 0xc1, 0x91, 0x6e, 0xf8, 0x0d, 0xe9, 0xfa, 0xf8, 0x58, 0xaa, 0xbf, - 0x0f, 0x56, 0x72, 0x66, 0x34, 0x62, 0xe6, 0x86, 0x5c, 0xda, 0xa5, 0xab, 0x10, 0x12, 0x01, 0x90, - 0xb1, 0x9a, 0x3f, 0xdd, 0x03, 0x36, 0x33, 0x98, 0x17, 0xd0, 0x67, 0x78, 0x55, 0x93, 0xd1, 0xa2, - 0x5d, 0x38, 0xf0, 0xa5, 0x36, 0x34, 0x65, 0x9c, 0x3f, 0xa7, 0x8e, 0xdf, 0x00, 0xdf, 0xa9, 0xb2, - 0xbe, 0x62, 0x84, 0x8c, 0xc3, 0xb8, 0xa6, 0x20, 0xbf, 0x17, 0xad, 0x72, 0x77, 0xb8, 0x7d, 0xc4, - 0xfe, 0x62, 0x1c, 0x1d, 0xc1, 0xf4, 0x25, 0x47, 0xa8, 0x39, 0x89, 0xe2, 0xb3, 0xda, 0xed, 0x2f, - 0xe0, 0x40, 0x21, 0x35, 0xd2, 0x6d, 0x1d, 0x1e, 0x3b, 0xe8, 0xa1, 0x31, 0xdc, 0xec, 0xcf, 0xc9, - 0xc6, 0xff, 0x35, 0x2a, 0x81, 0xed, 0xdd, 0xb8, 0x22, 0x08, 0xe3, 0xf4, 0x68, 0xfe, 0x49, 0x03, - 0x0e, 0x77, 0xf6, 0x1c, 0xc6, 0x35, 0x25, 0x30, 0x28, 0xea, 0xa7, 0x6e, 0xc1, 0x89, 0xbc, 0x35, - 0x9d, 0x61, 0xfe, 0xc0, 0xcc, 0xb1, 0x67, 0xc5, 0xa5, 0x93, 0xb3, 0x04, 0xb3, 0xf4, 0x45, 0xf7, - 0x51, 0xba, 0x2d, 0x87, 0x55, 0xfa, 0xc5, 0xcc, 0x99, 0x4b, 0xf7, 0x2a, 0xdd, 0x96, 0x95, 0x3f, - 0xca, 0xa1, 0x87, 0xdc, 0x5e, 0x2f, 0xb9, 0x34, 0xdb, 0x18, 0x30, 0xaa, 0xb0, 0x78, 0xc1, 0x2a, - 0xd4, 0xaa, 0x52, 0xb5, 0x90, 0x9b, 0x4b, 0xac, 0x62, 0xef, 0x86, 0x6a, 0x7d, 0xd7, 0x8d, 0x90, - 0x47, 0x13, 0xf9, 0x6b, 0x92, 0x4b, 0x81, 0xbf, 0xc8, 0xa1, 0x47, 0xa1, 0x7e, 0x24, 0x61, 0x73, - 0x30, 0xd0, 0x6a, 0x54, 0x69, 0xc9, 0x82, 0x55, 0xaa, 0x57, 0xa5, 0xed, 0xc2, 0x3c, 0x59, 0xc5, - 0x17, 0x93, 0xd3, 0x83, 0x6c, 0x0f, 0x99, 0x36, 0xbf, 0x85, 0xfa, 0x69, 0x1e, 0x62, 0xfc, 0x1f, - 0x50, 0x09, 0xbd, 0xae, 0x47, 0x2b, 0xb6, 0x74, 0xc1, 0x8a, 0x11, 0x1f, 0x51, 0x7b, 0x0e, 0xb1, - 0x0a, 0xee, 0xc7, 0x99, 0x97, 0x18, 0xa1, 0x1a, 0xa9, 0x91, 0xee, 0x79, 0x46, 0xcc, 0x96, 0x9b, - 0xff, 0x03, 0x7a, 0xc8, 0x43, 0x2e, 0x9e, 0x92, 0xdb, 0x69, 0x50, 0x0c, 0x35, 0x5e, 0xcd, 0x57, - 0x09, 0xe2, 0xd8, 0x94, 0x9b, 0x4b, 0x7c, 0x86, 0x56, 0x81, 0x5c, 0x7b, 0x9b, 0x67, 0x90, 0x72, - 0x72, 0xe1, 0x41, 0x7a, 0xd2, 0xb3, 0x4f, 0xf1, 0x34, 0xd7, 0x1e, 0x08, 0x2b, 0x41, 0xbf, 0xbb, - 0x05, 0xf7, 0x51, 0x6d, 0x6b, 0x5b, 0xf8, 0x20, 0xad, 0x4c, 0xe1, 0x82, 0x95, 0xa9, 0x51, 0x25, - 0x49, 0x58, 0x90, 0x80, 0x51, 0xaf, 0xd4, 0xb5, 0x6b, 0x10, 0x59, 0x85, 0x5a, 0x11, 0x3e, 0x8d, - 0x67, 0x4e, 0x7d, 0xa1, 0x7f, 0x12, 0xd1, 0x2f, 0x5c, 0x96, 0x17, 0x24, 0xc0, 0x77, 0x73, 0xa8, - 0x04, 0x8a, 0xf5, 0xd2, 0xfb, 0xa4, 0xf3, 0x68, 0x49, 0xdb, 0x59, 0x24, 0x70, 0xf0, 0xb4, 0x67, - 0x14, 0x5f, 0x60, 0x5d, 0x1e, 0xd2, 0x57, 0xbb, 0xf5, 0x8b, 0x09, 0x90, 0xfa, 0x0c, 0x67, 0xc7, - 0x48, 0x17, 0xec, 0xc6, 0x8d, 0x5b, 0x6b, 0x65, 0x7b, 0xde, 0x4d, 0x10, 0x73, 0x06, 0xdd, 0xe0, - 0x04, 0x86, 0xad, 0x89, 0x1f, 0x73, 0xac, 0xa0, 0x49, 0x27, 0xe6, 0x8d, 0xae, 0xcc, 0xb9, 0x8f, - 0xc1, 0x25, 0xf6, 0x6e, 0xa4, 0x93, 0xdd, 0xf4, 0xb1, 0xf8, 0x14, 0x9b, 0xd4, 0x8e, 0x7c, 0xca, - 0xb2, 0x98, 0x64, 0x8c, 0x7a, 0xb4, 0xaf, 0x83, 0x5a, 0x24, 0xa7, 0x7b, 0x80, 0xf1, 0xc1, 0x4e, - 0x59, 0xce, 0xde, 0x79, 0x5f, 0x0f, 0xb3, 0x9e, 0x7e, 0x18, 0x43, 0x6e, 0xad, 0xd4, 0xf5, 0xb9, - 0x6b, 0xa3, 0xa2, 0xec, 0x15, 0x54, 0x62, 0xeb, 0x1b, 0xac, 0x92, 0x87, 0xda, 0x14, 0x8f, 0xa1, - 0x92, 0xe3, 0xdf, 0x18, 0xe6, 0x55, 0x42, 0x1e, 0x2a, 0xd5, 0x90, 0xdf, 0x65, 0x87, 0x4b, 0xd0, - 0x72, 0xf3, 0x3a, 0x12, 0xe6, 0xe2, 0x3d, 0x1c, 0x5a, 0x09, 0x1c, 0xcf, 0x04, 0xdf, 0x83, 0xc1, - 0x92, 0xbb, 0x3f, 0xd9, 0x79, 0xc4, 0x2a, 0x3a, 0x0b, 0xa6, 0xbb, 0xef, 0x8b, 0xcb, 0x66, 0xe7, - 0x27, 0xf5, 0xb0, 0xd6, 0x34, 0xd4, 0x63, 0xd1, 0x7d, 0xd4, 0x23, 0x2b, 0x8f, 0xad, 0x1e, 0xf7, - 0xc1, 0x6f, 0xb3, 0xf3, 0xf3, 0xd3, 0x1c, 0x5a, 0xd5, 0x1a, 0xe8, 0x50, 0x28, 0xeb, 0xb3, 0xce, - 0xd3, 0xe6, 0xaf, 0x08, 0xb9, 0xd9, 0xf6, 0x08, 0x93, 0xc9, 0xaa, 0xcd, 0xaf, 0x52, 0x57, 0xa7, - 0xb5, 0x23, 0x34, 0x7c, 0x43, 0xba, 0xf7, 0x4b, 0xb3, 0x72, 0x0b, 0x57, 0xab, 0xdc, 0x6a, 0xc4, - 0xa5, 0x93, 0x86, 0x91, 0x8e, 0x10, 0x62, 0x48, 0x54, 0xc8, 0x39, 0x15, 0xe5, 0xff, 0x11, 0x87, - 0x1e, 0x09, 0x2a, 0x26, 0x18, 0x73, 0x46, 0x68, 0xc1, 0xc2, 0xfc, 0xb9, 0x5d, 0x95, 0x82, 0x42, - 0x69, 0x56, 0x46, 0xab, 0x15, 0xbb, 0x92, 0xd3, 0x83, 0x59, 0xdd, 0x7a, 0x3f, 0x4c, 0x3a, 0x7f, - 0x2b, 0x32, 0x67, 0x2e, 0xa5, 0x26, 0x4e, 0xa6, 0x4e, 0x5c, 0xae, 0x90, 0xf3, 0x56, 0x95, 0x3f, - 0xc6, 0xa1, 0x87, 0x3c, 0x2d, 0x8a, 0xdb, 0x4f, 0xe0, 0x2e, 0x3f, 0x34, 0x60, 0x61, 0x3e, 0x4e, - 0xfc, 0xce, 0x73, 0x73, 0x89, 0x2f, 0x9a, 0x55, 0x20, 0x97, 0x09, 0xef, 0xdc, 0xd7, 0xde, 0x92, - 0x4b, 0x07, 0xd7, 0x89, 0x07, 0x1b, 0x42, 0x8d, 0x12, 0xf2, 0x05, 0x15, 0xd8, 0x19, 0xef, 0xc1, - 0xd7, 0xc9, 0xcd, 0xb3, 0x3c, 0xd9, 0xc4, 0x0d, 0xd6, 0x34, 0xe8, 0xb7, 0x6a, 0xb5, 0x50, 0x95, - 0xf2, 0x50, 0xe1, 0x63, 0x1c, 0x7a, 0xdc, 0xed, 0xf5, 0xb2, 0x4c, 0x96, 0x91, 0x11, 0x16, 0xe6, - 0xf2, 0x7b, 0x54, 0x69, 0xb7, 0x30, 0x7f, 0x6e, 0xb1, 0xda, 0xac, 0x61, 0x32, 0x76, 0x44, 0x3f, - 0x7f, 0x2b, 0x2f, 0xc7, 0xbf, 0x47, 0x37, 0xce, 0x4f, 0x9e, 0xff, 0xc7, 0x1c, 0x5a, 0x0b, 0x0b, - 0xcf, 0x86, 0xc0, 0x0a, 0x14, 0x45, 0x0b, 0xd6, 0x9f, 0x28, 0xb8, 0xf7, 0x20, 0x21, 0xfe, 0x3c, - 0x6b, 0xce, 0xe6, 0xdf, 0xb6, 0x16, 0x68, 0xc1, 0x3d, 0x0a, 0xd8, 0x74, 0xa7, 0x40, 0x95, 0xbe, - 0x2a, 0x40, 0x5f, 0x14, 0x08, 0x36, 0x9e, 0x2a, 0x8e, 0x15, 0xe4, 0xd9, 0x42, 0xd8, 0x5b, 0xad, - 0xf7, 0xb1, 0x9d, 0xd8, 0xf0, 0xed, 0x9b, 0x4a, 0xa5, 0x43, 0x53, 0xa3, 0xa0, 0xff, 0xa4, 0x46, - 0xba, 0x21, 0x6e, 0x01, 0xb9, 0x1c, 0x48, 0xbd, 0xc7, 0x21, 0xc2, 0x9d, 0xd1, 0xf6, 0xbb, 0x91, - 0x4e, 0x76, 0xc9, 0x02, 0x64, 0x3e, 0xb6, 0x74, 0x37, 0xd2, 0x39, 0xdf, 0x5a, 0xbf, 0x1b, 0xe9, - 0xcc, 0x3b, 0x6d, 0x6d, 0xf0, 0x58, 0x4f, 0x6a, 0xf8, 0x30, 0x1b, 0x08, 0x49, 0xbb, 0x73, 0x2b, - 0x73, 0x3c, 0xa2, 0x4f, 0x75, 0xea, 0xa3, 0x71, 0xed, 0xcc, 0x78, 0x6a, 0x82, 0xea, 0x35, 0x65, - 0x7f, 0xbb, 0x04, 0x2d, 0xdd, 0xd1, 0x40, 0x0e, 0x6b, 0xba, 0xb8, 0x79, 0x35, 0x09, 0xa2, 0x8f, - 0xe6, 0x6a, 0x12, 0x3f, 0x07, 0xef, 0x19, 0xd0, 0x9c, 0xcc, 0x10, 0x3e, 0xd4, 0xe5, 0x9d, 0x84, - 0x46, 0x4a, 0xc6, 0x22, 0xc9, 0xf8, 0x59, 0x88, 0x92, 0x65, 0x43, 0x06, 0x87, 0xb5, 0x5c, 0x2d, - 0xe3, 0x3c, 0x97, 0x75, 0x49, 0x1b, 0x14, 0xe2, 0xdf, 0xaa, 0xd2, 0xfe, 0xac, 0x4b, 0xda, 0x4d, - 0x40, 0x8f, 0x36, 0x68, 0x81, 0xc2, 0xc1, 0xf3, 0x9a, 0x54, 0x01, 0xd0, 0x20, 0xcb, 0x5c, 0x22, - 0xaa, 0x9f, 0xbc, 0x93, 0xfc, 0x7a, 0x16, 0xdc, 0x3b, 0xb4, 0xd1, 0x71, 0x4f, 0x8b, 0xef, 0x6e, - 0xa4, 0xb3, 0xc1, 0xed, 0x6e, 0x80, 0xfb, 0xac, 0xe0, 0x05, 0x9b, 0x75, 0xcf, 0x7b, 0x88, 0x43, - 0xab, 0xbd, 0xca, 0x5e, 0x77, 0x7b, 0x4b, 0x38, 0xeb, 0x2c, 0x6f, 0x11, 0xa9, 0x29, 0xb9, 0x1d, - 0x92, 0x1f, 0x43, 0x7c, 0xc3, 0xf4, 0xbd, 0x4c, 0xc6, 0x8e, 0xb0, 0x8e, 0x1f, 0xf7, 0x57, 0x91, - 0xfc, 0x54, 0xf9, 0xd3, 0x1c, 0x5a, 0x06, 0x46, 0x59, 0xe3, 0xd4, 0x3d, 0x47, 0x91, 0x87, 0x11, - 0x5e, 0x27, 0x03, 0x16, 0x28, 0xf2, 0xa4, 0xa2, 0x46, 0x46, 0x71, 0x2b, 0x1b, 0xae, 0x10, 0xab, - 0xa0, 0xc4, 0xa3, 0x80, 0x75, 0x29, 0x9d, 0x4b, 0x44, 0x9b, 0x95, 0x83, 0xfa, 0x69, 0xdb, 0x85, - 0x78, 0xa2, 0x87, 0x87, 0xf4, 0xd3, 0x53, 0xc9, 0xd8, 0x84, 0x7e, 0xb2, 0x37, 0x3d, 0x75, 0x53, - 0x3f, 0x3d, 0x28, 0x1b, 0x54, 0xd7, 0x6c, 0x42, 0xcb, 0xd9, 0x32, 0x1f, 0xc8, 0xe6, 0x43, 0x2f, - 0x2d, 0xd2, 0xd9, 0x29, 0xfe, 0xc2, 0x66, 0x77, 0x84, 0x91, 0x25, 0x2b, 0x37, 0x35, 0xd2, 0x0d, - 0x73, 0x2a, 0xcb, 0xad, 0x1b, 0xd6, 0xef, 0x8e, 0x06, 0x58, 0xe5, 0xf4, 0x2e, 0x3f, 0x09, 0x81, - 0x51, 0xf6, 0x2f, 0x97, 0xa2, 0x65, 0xd4, 0x18, 0xca, 0x57, 0xa3, 0x42, 0x30, 0xfb, 0x9a, 0xb1, - 0x08, 0xc8, 0xfd, 0x7a, 0x13, 0x28, 0x3e, 0x96, 0xee, 0xf9, 0x3a, 0x3d, 0x39, 0x65, 0x5a, 0x33, - 0x8d, 0x04, 0xd9, 0x44, 0xe1, 0x37, 0xa3, 0x22, 0xf8, 0xbd, 0x55, 0x39, 0x48, 0xcd, 0x90, 0x70, - 0x23, 0xdc, 0x84, 0x8a, 0xa5, 0x79, 0xa9, 0x6c, 0x55, 0x0e, 0xca, 0x16, 0x12, 0xbf, 0x35, 0xbf, - 0xe1, 0x19, 0xe2, 0x6f, 0x65, 0x25, 0x89, 0x2b, 0xa4, 0xdf, 0xb6, 0x07, 0x15, 0x47, 0x7a, 0xf2, - 0xe3, 0xcc, 0xe9, 0x1e, 0x57, 0x4d, 0x8e, 0x75, 0xfa, 0xb5, 0x6c, 0xeb, 0x74, 0xf5, 0x53, 0xaa, - 0xb4, 0x46, 0x30, 0x81, 0x06, 0x81, 0xd4, 0xd5, 0x0b, 0x7a, 0xdf, 0x6d, 0xdc, 0x1e, 0xd3, 0x78, - 0xfd, 0xfe, 0xbc, 0xc6, 0xeb, 0xea, 0x2a, 0x55, 0x12, 0x84, 0xdc, 0x54, 0x71, 0x35, 0xad, 0x0d, - 0x31, 0xc0, 0x63, 0x96, 0x05, 0xbe, 0xe7, 0x79, 0x6c, 0xdd, 0x5b, 0xb3, 0x6d, 0xdd, 0x34, 0x14, - 0xaf, 0x01, 0x14, 0x1d, 0x40, 0x8a, 0x5e, 0x74, 0x74, 0xd4, 0x07, 0x7d, 0x7e, 0x8f, 0xaf, 0xcd, - 0xdd, 0xe2, 0x70, 0x52, 0x0c, 0xc6, 0x38, 0xfe, 0x7e, 0x3e, 0xe3, 0x38, 0x0d, 0xe9, 0xc0, 0x26, - 0x88, 0x3f, 0x5a, 0x98, 0x28, 0x60, 0x65, 0x59, 0xd5, 0x3b, 0xb9, 0x85, 0xcc, 0xea, 0x70, 0x07, - 0x39, 0x2f, 0x82, 0x28, 0x6e, 0x21, 0x61, 0x9d, 0x1d, 0xc4, 0x75, 0xdb, 0x41, 0x51, 0x1c, 0x6e, - 0xc0, 0x49, 0x8d, 0x74, 0x7f, 0x18, 0x0a, 0xf8, 0xcd, 0x65, 0x94, 0xba, 0x7a, 0x3a, 0xa3, 0x5e, - 0x9e, 0xc7, 0x4a, 0xbf, 0x2d, 0x9f, 0x95, 0x1e, 0x66, 0x97, 0x2d, 0x41, 0x5c, 0x6d, 0x2b, 0xd2, - 0x8c, 0xf2, 0x6b, 0xb7, 0xe7, 0x53, 0x3b, 0xaa, 0x31, 0xf9, 0xc5, 0xcd, 0x74, 0xa9, 0x90, 0xbb, - 0xe0, 0xcc, 0x7d, 0x3c, 0xac, 0x65, 0x93, 0x69, 0x6a, 0xae, 0x29, 0x26, 0x11, 0x22, 0x49, 0x6b, - 0x3d, 0x09, 0x6d, 0xf2, 0x8e, 0x76, 0xa9, 0x3b, 0x35, 0x7c, 0xb8, 0xec, 0xe4, 0x32, 0xb4, 0xdc, - 0xc9, 0x44, 0xac, 0xe1, 0x77, 0xa2, 0x65, 0x04, 0xd7, 0x5c, 0x54, 0xc4, 0x49, 0xca, 0x80, 0x89, - 0x55, 0xd5, 0xce, 0x06, 0x88, 0xb3, 0x69, 0x1a, 0xa2, 0xcc, 0x50, 0xcb, 0x73, 0x89, 0x68, 0xfa, - 0xe8, 0x0d, 0xfd, 0x64, 0xaf, 0xd9, 0x41, 0xb2, 0x91, 0x8f, 0x6f, 0x62, 0xcf, 0x2a, 0x61, 0xa1, - 0x11, 0xe9, 0x8e, 0x09, 0x79, 0xfc, 0x1a, 0x5b, 0x0f, 0x33, 0x88, 0x02, 0xf4, 0x87, 0xd5, 0x9a, - 0xaf, 0x67, 0x93, 0xf1, 0x41, 0xfd, 0xc2, 0xe5, 0xf4, 0xd4, 0xc7, 0x9a, 0x1a, 0x4d, 0xcf, 0xf6, - 0xea, 0xd3, 0x97, 0xd8, 0x63, 0x4f, 0x37, 0x2a, 0x72, 0x9b, 0x61, 0x85, 0x16, 0x59, 0xb1, 0x16, - 0x2c, 0xa8, 0xf8, 0xa2, 0xd9, 0x06, 0x70, 0x09, 0x30, 0xfb, 0xcc, 0x55, 0x53, 0xe9, 0x30, 0xa3, - 0x6d, 0x97, 0x57, 0x3b, 0x1b, 0xaa, 0x48, 0x95, 0xaa, 0x5c, 0x35, 0x15, 0xb2, 0x95, 0x9f, 0xaf, - 0x45, 0xc5, 0xf4, 0x83, 0xb9, 0xde, 0x41, 0x56, 0x3a, 0x0b, 0x17, 0x1f, 0x62, 0xc2, 0x08, 0x19, - 0x17, 0x3a, 0x98, 0x74, 0xfe, 0x65, 0xaa, 0x5d, 0xc2, 0xf2, 0x24, 0x41, 0x3b, 0x09, 0x40, 0x7c, - 0x8c, 0xc9, 0x08, 0x11, 0xb4, 0xa8, 0x13, 0x0c, 0x49, 0xe6, 0x77, 0xa0, 0x65, 0x94, 0x0c, 0x95, - 0xe9, 0x1f, 0xcb, 0x95, 0xf1, 0x48, 0x32, 0xc4, 0x27, 0x01, 0x9a, 0x6c, 0x65, 0x28, 0x35, 0x83, - 0x0a, 0xbf, 0x03, 0x2d, 0x05, 0x27, 0x5a, 0xea, 0xd1, 0x4b, 0x16, 0x21, 0x05, 0x89, 0x02, 0x5b, - 0x19, 0xc6, 0x67, 0xb8, 0xd2, 0xbc, 0x05, 0x09, 0xdf, 0xa9, 0x91, 0x6e, 0x99, 0xe6, 0xe1, 0x5f, - 0xb1, 0xc2, 0x09, 0x17, 0x5a, 0xfc, 0xcb, 0x0c, 0x27, 0xbc, 0x72, 0xde, 0x40, 0xc2, 0xaf, 0x58, - 0xf1, 0x0b, 0x8b, 0x98, 0x8c, 0x46, 0xfc, 0xc2, 0x95, 0xf3, 0x46, 0x2e, 0xdc, 0x84, 0x8a, 0x08, - 0x0d, 0xeb, 0xe8, 0x1f, 0x1a, 0x6f, 0x41, 0xc5, 0xe5, 0xa6, 0x5a, 0x9d, 0x39, 0x75, 0x53, 0xb6, - 0x12, 0xf8, 0x37, 0x6c, 0xe7, 0x9d, 0xc5, 0x56, 0xb9, 0x0c, 0x58, 0x5c, 0x0e, 0x85, 0xd2, 0xdc, - 0x4c, 0xca, 0xa6, 0x9d, 0xaa, 0x24, 0xa3, 0x7a, 0xc1, 0xb6, 0x8a, 0xc4, 0x37, 0xe9, 0xad, 0x7c, - 0x72, 0x35, 0x69, 0xfe, 0xe5, 0x59, 0x9e, 0x9c, 0xee, 0xc1, 0x98, 0x33, 0xa3, 0x80, 0xa9, 0xa9, - 0x51, 0x70, 0x2b, 0xab, 0x28, 0x4b, 0x2e, 0x41, 0x8f, 0x3b, 0xa9, 0x21, 0xd5, 0x22, 0x2c, 0x2b, - 0xbf, 0x69, 0x57, 0x42, 0x61, 0xfe, 0xed, 0xec, 0x55, 0xfa, 0x0a, 0x6e, 0xad, 0xb9, 0x4a, 0x21, - 0x08, 0x95, 0xb9, 0x30, 0xbf, 0xa9, 0x2e, 0x0d, 0x3e, 0xba, 0xaa, 0xa0, 0x34, 0x52, 0x28, 0xae, - 0xfc, 0xf5, 0xfb, 0x1b, 0xaa, 0x5e, 0x73, 0x57, 0xfd, 0x56, 0xaa, 0x7a, 0xaf, 0xea, 0x83, 0x17, - 0x7e, 0x64, 0xad, 0xd0, 0x6d, 0xf6, 0x59, 0x5d, 0x60, 0xdc, 0x61, 0xb8, 0xe7, 0xac, 0xfe, 0xa6, - 0x7a, 0x71, 0xb0, 0x60, 0x15, 0x97, 0x7f, 0x72, 0x2f, 0x7a, 0xc0, 0xc9, 0xfd, 0x07, 0x6b, 0x72, - 0x2f, 0x5e, 0x78, 0x72, 0x6f, 0x53, 0x25, 0x97, 0x60, 0x20, 0x8b, 0x3f, 0x33, 0x5a, 0xcc, 0x76, - 0x2f, 0x7b, 0x51, 0x19, 0xe4, 0x31, 0x7d, 0xb4, 0x5f, 0x3f, 0xd1, 0xa7, 0x47, 0xae, 0x6a, 0x43, - 0x47, 0x58, 0x3e, 0x68, 0x2d, 0x86, 0x0f, 0xcd, 0xc5, 0x00, 0x1a, 0xff, 0x9a, 0x75, 0x10, 0xe8, - 0x7f, 0x9d, 0x11, 0xe8, 0x7f, 0x5d, 0x75, 0x20, 0xd0, 0xb2, 0x0b, 0x0b, 0x3b, 0x34, 0xce, 0x0a, - 0x5d, 0x28, 0x15, 0xf6, 0x1a, 0xb0, 0xde, 0xea, 0x96, 0x1b, 0x27, 0xf9, 0x34, 0xd7, 0xc9, 0x66, - 0x6b, 0x9d, 0x2c, 0x35, 0x6e, 0x07, 0x3f, 0x6d, 0xad, 0x93, 0x47, 0xd8, 0xae, 0x36, 0x16, 0xcb, - 0x37, 0xd5, 0xcb, 0x82, 0x4b, 0xc8, 0x58, 0x5a, 0xcb, 0x66, 0x57, 0x6e, 0x3c, 0xf9, 0x57, 0x49, - 0xa8, 0x3a, 0x8b, 0xb9, 0x3e, 0x73, 0x4f, 0xe6, 0x0a, 0xc3, 0x58, 0xc0, 0xf0, 0xd2, 0x4d, 0x6e, - 0x55, 0xfa, 0x35, 0xfa, 0x95, 0x30, 0xff, 0x3c, 0x14, 0x1f, 0x86, 0x78, 0x6f, 0xa4, 0xa2, 0xc6, - 0x2e, 0xf9, 0x47, 0xce, 0x98, 0x53, 0x7f, 0xe4, 0xd8, 0x39, 0xf1, 0x47, 0x6e, 0x19, 0x83, 0x01, - 0x55, 0x2f, 0x3b, 0x5c, 0x80, 0xd6, 0xe4, 0x23, 0x1f, 0x6a, 0x0b, 0xf8, 0x43, 0x0a, 0xbf, 0x0e, - 0x2d, 0xf6, 0x04, 0xbc, 0x0a, 0xbd, 0x10, 0xba, 0x46, 0x95, 0x1e, 0x13, 0x08, 0x40, 0x5c, 0x99, - 0x9e, 0x3d, 0xae, 0x9d, 0x3d, 0x9f, 0x39, 0x7e, 0x26, 0x3d, 0x35, 0x95, 0xba, 0xd8, 0x29, 0x13, - 0x30, 0xbf, 0xc9, 0xf2, 0x41, 0x28, 0xb0, 0x62, 0x9e, 0x98, 0xd1, 0xd6, 0x78, 0x36, 0x97, 0xc1, - 0x06, 0x8d, 0xa8, 0x6a, 0x1b, 0xd1, 0xd2, 0xa0, 0x12, 0x6a, 0x6f, 0x81, 0x9b, 0x9d, 0x85, 0x34, - 0x6e, 0x3a, 0x80, 0xc4, 0xe5, 0x90, 0x33, 0x35, 0xfd, 0x91, 0x7e, 0x7e, 0x54, 0xa6, 0x50, 0xde, - 0x85, 0x16, 0x7b, 0xdd, 0xd4, 0xff, 0x22, 0x4f, 0x1c, 0x03, 0xb6, 0x49, 0xd5, 0x8f, 0xa9, 0xd2, - 0x23, 0x02, 0x41, 0x37, 0x88, 0xd1, 0x10, 0x26, 0x04, 0x56, 0xf6, 0x2f, 0x96, 0xa2, 0xc7, 0x77, - 0x12, 0xae, 0x92, 0x6f, 0xbd, 0xff, 0x3a, 0x7b, 0xbd, 0xd7, 0xa8, 0xd2, 0x73, 0xd6, 0x7a, 0x7f, - 0x62, 0x81, 0x3d, 0xf8, 0xbe, 0x16, 0xff, 0xbb, 0xec, 0xae, 0x69, 0x3a, 0x47, 0x3f, 0xc5, 0xee, - 0x9a, 0xab, 0xec, 0xf3, 0xdb, 0x55, 0xb3, 0x10, 0xe1, 0xf9, 0x77, 0xcb, 0x45, 0xdf, 0x71, 0xb7, - 0x5c, 0xfc, 0x80, 0x0c, 0xe5, 0xcf, 0xb9, 0x9e, 0x77, 0xb0, 0xeb, 0x70, 0xa9, 0x75, 0xeb, 0xf3, - 0x81, 0xd6, 0x21, 0x2b, 0xcc, 0xbc, 0x6e, 0xed, 0x87, 0xb0, 0xac, 0x9f, 0xc1, 0x93, 0xc8, 0xdc, - 0x0f, 0x8b, 0xcc, 0x9d, 0x90, 0xe5, 0x0a, 0xc6, 0x9e, 0xf8, 0xbe, 0xc5, 0x4a, 0x0b, 0x17, 0x66, - 0xa5, 0x44, 0x28, 0x35, 0x59, 0xe9, 0x1a, 0x90, 0x15, 0x09, 0xe9, 0x2c, 0x86, 0x6a, 0xb2, 0xc9, - 0x4d, 0xe7, 0x38, 0x55, 0x3a, 0xc3, 0xa1, 0x93, 0x9c, 0x30, 0xff, 0xac, 0x15, 0xdf, 0x05, 0x22, - 0xcc, 0x00, 0xa5, 0xa7, 0x6e, 0x43, 0x50, 0x66, 0xd3, 0xef, 0x00, 0xa3, 0x1c, 0xbf, 0x93, 0x25, - 0xb3, 0x66, 0x4e, 0x7f, 0xa1, 0x4f, 0x7c, 0xac, 0x4d, 0xdd, 0xd1, 0x26, 0x4e, 0x67, 0x7a, 0x87, - 0x8c, 0x17, 0x3e, 0xae, 0xa6, 0x8e, 0x5f, 0xd0, 0x66, 0x6e, 0x68, 0x1f, 0x0d, 0xb0, 0x3c, 0xc6, - 0x9a, 0x6b, 0x7f, 0xe4, 0x8c, 0xc6, 0x97, 0x4d, 0x73, 0x68, 0x4d, 0xbe, 0x8a, 0xfd, 0x20, 0xf8, - 0x4a, 0xd9, 0xbf, 0x5a, 0x8c, 0xd6, 0x6c, 0xf7, 0x35, 0x05, 0xff, 0x42, 0xdc, 0x60, 0x2f, 0x42, - 0x66, 0x9f, 0x86, 0xd8, 0xab, 0x3b, 0xeb, 0x2d, 0x70, 0x26, 0x32, 0x92, 0x9e, 0xed, 0xad, 0xcc, - 0x8c, 0x1c, 0xd7, 0x12, 0x11, 0xb8, 0x31, 0x09, 0x86, 0x29, 0xf0, 0x94, 0x87, 0x01, 0xcd, 0x65, - 0x1a, 0x32, 0x43, 0x99, 0xbf, 0xcd, 0xa1, 0x65, 0x8a, 0xdf, 0x13, 0x3c, 0xd8, 0x16, 0xa6, 0x47, - 0x15, 0x39, 0x07, 0x58, 0x3b, 0x82, 0xbe, 0x26, 0x9f, 0xbf, 0x16, 0x90, 0x20, 0x92, 0xe9, 0x2f, - 0x69, 0x16, 0x6d, 0xf0, 0x82, 0x76, 0x95, 0xdc, 0xd0, 0x3f, 0x72, 0x51, 0x9b, 0x3a, 0xac, 0x9f, - 0xbc, 0xa3, 0x25, 0x86, 0xd2, 0x33, 0xd7, 0xf4, 0x81, 0x8f, 0x93, 0xb1, 0x78, 0x7a, 0xea, 0x32, - 0xc4, 0x06, 0xc9, 0x42, 0x80, 0xe7, 0x61, 0x52, 0x9f, 0xc6, 0xe1, 0xd6, 0x84, 0x7e, 0x7a, 0x90, - 0x74, 0x0f, 0x56, 0xa3, 0xc4, 0xa7, 0x6d, 0x94, 0x73, 0xc9, 0xca, 0x46, 0x6d, 0xf9, 0x4d, 0x68, - 0x91, 0xbb, 0xa5, 0x85, 0x3a, 0xe8, 0x40, 0xc8, 0x03, 0x77, 0x4b, 0x8b, 0xb8, 0xd6, 0xdd, 0xd2, - 0x42, 0xdd, 0x0a, 0xfa, 0x23, 0xfa, 0x68, 0xbf, 0x29, 0xee, 0xa5, 0x67, 0x3b, 0x53, 0x57, 0xa7, - 0x65, 0x8c, 0xb4, 0x29, 0xac, 0x4a, 0xbf, 0x41, 0x01, 0x61, 0x81, 0x01, 0x16, 0xb7, 0x00, 0x7e, - 0xfe, 0x85, 0x63, 0x85, 0x63, 0x85, 0x06, 0xc2, 0x1a, 0x01, 0x34, 0xb3, 0xb1, 0x40, 0xc0, 0x5a, - 0x26, 0x65, 0x6f, 0xa3, 0x12, 0x5b, 0x5f, 0xf2, 0x0e, 0x54, 0x4c, 0x5b, 0x43, 0xac, 0x75, 0x60, - 0xd9, 0x61, 0x41, 0xfc, 0x0a, 0x54, 0xd0, 0xdc, 0x41, 0xcd, 0x3b, 0x05, 0xcd, 0x1d, 0xf8, 0xdb, - 0xd7, 0x41, 0x3d, 0xea, 0x0a, 0x7c, 0x1d, 0x65, 0x09, 0x0e, 0x3d, 0x91, 0xb7, 0x11, 0x3f, 0x8c, - 0x45, 0xf6, 0x8f, 0x0b, 0xd0, 0xe3, 0x35, 0xd4, 0x59, 0xe0, 0xcf, 0xbf, 0xc6, 0xde, 0xcb, 0xdd, - 0x71, 0x7f, 0xaa, 0x4a, 0x6b, 0xd9, 0x1d, 0xd7, 0xdc, 0x12, 0x4d, 0x37, 0xbd, 0xfb, 0xdb, 0x72, - 0x37, 0x35, 0xab, 0xd2, 0x3e, 0xb4, 0x57, 0x98, 0xbf, 0x75, 0xe2, 0x2b, 0x60, 0x98, 0x66, 0x0a, - 0x80, 0x09, 0x56, 0xe9, 0x48, 0x1f, 0xbd, 0x0c, 0xb6, 0x70, 0xc3, 0xbb, 0x81, 0xf2, 0x69, 0xc8, - 0xc0, 0xf2, 0x5d, 0x78, 0xcc, 0x88, 0x70, 0xda, 0x7c, 0x05, 0xfd, 0x30, 0x26, 0xc1, 0x3f, 0x5f, - 0x84, 0x9e, 0xd8, 0xe6, 0x0b, 0x85, 0xd9, 0xba, 0xd7, 0x2b, 0xc1, 0x56, 0x63, 0x1a, 0x74, 0xb0, - 0x5b, 0x3a, 0x4c, 0x04, 0x12, 0x29, 0x8a, 0xd9, 0xd2, 0xdf, 0xba, 0x1f, 0xbb, 0x05, 0x2c, 0x58, - 0xb0, 0x5b, 0x00, 0x0e, 0x7d, 0x94, 0x09, 0x02, 0x00, 0x40, 0xec, 0x60, 0x66, 0xe7, 0x7f, 0xc3, - 0x3e, 0x3d, 0x16, 0x19, 0x81, 0x26, 0x99, 0xe9, 0xb1, 0xd2, 0x0a, 0x3d, 0x0c, 0x9e, 0x3f, 0x8c, - 0xd0, 0xf5, 0x76, 0x3e, 0xa1, 0x8b, 0x58, 0xeb, 0x6c, 0x42, 0xd7, 0x53, 0xd4, 0x90, 0x42, 0x8e, - 0x42, 0x6c, 0xdc, 0xe6, 0x8a, 0x7e, 0xa8, 0xc7, 0x26, 0x80, 0x6d, 0x1a, 0xe3, 0x54, 0xe9, 0x1c, - 0x87, 0x46, 0x38, 0x61, 0xa1, 0x0e, 0x13, 0x7f, 0x07, 0x24, 0xcd, 0xba, 0x99, 0x8c, 0x0b, 0x6e, - 0x66, 0x68, 0x63, 0x9f, 0x6b, 0x87, 0xcf, 0x24, 0xe3, 0x87, 0x53, 0x67, 0x27, 0xf5, 0x8b, 0x78, - 0xcd, 0xe8, 0x93, 0x5f, 0xe1, 0xd4, 0xbe, 0x33, 0xc4, 0xf6, 0xd8, 0x07, 0x70, 0xaa, 0xe8, 0x13, - 0x52, 0x56, 0xde, 0x9e, 0x71, 0x60, 0xdd, 0x5a, 0xdf, 0x99, 0x64, 0x2c, 0x6e, 0xd4, 0x9d, 0x78, - 0xac, 0x82, 0x63, 0xb6, 0x5e, 0x80, 0x9e, 0xcc, 0x5f, 0xb9, 0x1f, 0x86, 0x3e, 0x51, 0x67, 0xea, - 0x13, 0x8b, 0xee, 0xa9, 0x4f, 0x50, 0xe3, 0x0e, 0xd6, 0x27, 0x6c, 0xb2, 0x33, 0xcc, 0x05, 0x92, - 0xb0, 0xe9, 0x1d, 0x55, 0x6a, 0x44, 0xb2, 0xb0, 0x60, 0x9f, 0x88, 0xcf, 0x64, 0x8d, 0x98, 0x7e, - 0xee, 0x50, 0xe6, 0xcc, 0x30, 0x28, 0x27, 0x50, 0xcb, 0x3f, 0x72, 0xa4, 0x37, 0xfe, 0xc8, 0x19, - 0x6d, 0x2b, 0x1b, 0x5a, 0x8c, 0x1e, 0xcb, 0x26, 0x6a, 0x2c, 0x99, 0xad, 0xd9, 0x9c, 0x73, 0xe3, - 0x03, 0x70, 0xce, 0x25, 0xc1, 0x45, 0xa0, 0xda, 0x52, 0x36, 0x59, 0x9b, 0xcb, 0x26, 0x49, 0x9c, - 0x1a, 0x66, 0x1d, 0x3c, 0x36, 0xcf, 0x24, 0x66, 0xd7, 0x43, 0x47, 0xce, 0x55, 0x89, 0x3f, 0xcf, - 0x32, 0x7e, 0x0b, 0x15, 0x06, 0xda, 0x94, 0x20, 0x51, 0xf1, 0x17, 0x5b, 0x01, 0xc0, 0x4c, 0xa0, - 0xf8, 0x94, 0xf1, 0x2b, 0xab, 0xfb, 0xe9, 0x30, 0x9a, 0x88, 0x8c, 0xc0, 0x3d, 0x5f, 0xc7, 0xff, - 0x65, 0x97, 0xde, 0x7f, 0x2b, 0x40, 0x8f, 0xef, 0x52, 0x82, 0xbe, 0xbd, 0x07, 0xff, 0x4c, 0xf6, - 0xaa, 0x97, 0x59, 0xe7, 0x9c, 0x6f, 0x67, 0x61, 0x5a, 0xf4, 0x97, 0xb0, 0x30, 0x6d, 0x92, 0x55, - 0x69, 0x07, 0xda, 0x2e, 0xcc, 0xdf, 0x5b, 0xe2, 0x93, 0xe0, 0x04, 0x66, 0xb3, 0xaa, 0xd0, 0x33, - 0xd3, 0xc8, 0x55, 0x76, 0x0b, 0x36, 0x68, 0x92, 0x4d, 0x38, 0x1f, 0xbd, 0x1f, 0xc6, 0x26, 0xbc, - 0x17, 0xad, 0x62, 0xab, 0x4d, 0xce, 0xb4, 0x5f, 0xb6, 0x86, 0x89, 0xbb, 0xb7, 0x75, 0xc5, 0xb2, - 0xdf, 0x91, 0x0b, 0x19, 0x04, 0x8f, 0xba, 0x64, 0xcb, 0xe6, 0x77, 0xd9, 0xbf, 0x5f, 0x84, 0x4a, - 0x73, 0x17, 0xcf, 0x0f, 0x63, 0x6b, 0x90, 0x6d, 0x5b, 0x83, 0x63, 0xa1, 0xce, 0x20, 0x17, 0x15, - 0xef, 0x63, 0x7b, 0xe0, 0x0f, 0x71, 0x68, 0xe5, 0x7e, 0x65, 0xcf, 0x6e, 0xe6, 0xd9, 0x53, 0x6a, - 0x25, 0xc9, 0x79, 0xfc, 0xeb, 0x1d, 0x65, 0x8f, 0x64, 0x61, 0x81, 0x83, 0x72, 0x76, 0x5e, 0xf1, - 0x47, 0x70, 0x0e, 0x9e, 0xcb, 0x18, 0x59, 0xce, 0x26, 0xaf, 0xd8, 0x6f, 0xa3, 0xb5, 0x69, 0x8b, - 0x2a, 0xd5, 0xa0, 0x6a, 0x61, 0xde, 0x91, 0x11, 0x57, 0x67, 0xf3, 0xb5, 0x79, 0x36, 0xa5, 0xd9, - 0x22, 0x54, 0x48, 0x08, 0xec, 0xaa, 0x77, 0x12, 0xdb, 0xaa, 0x8d, 0xe3, 0x80, 0xfb, 0xbb, 0xc1, - 0x71, 0xd6, 0x2e, 0xb0, 0x0b, 0xcd, 0x25, 0xa2, 0x16, 0x9b, 0xd9, 0x64, 0xde, 0xa2, 0x62, 0x18, - 0x8d, 0x11, 0xb8, 0x7b, 0x75, 0x47, 0x9b, 0x87, 0x8d, 0xda, 0x9d, 0xf5, 0x6a, 0xa8, 0x13, 0x21, - 0xf8, 0x95, 0x6d, 0xf9, 0x62, 0xc0, 0x22, 0x0f, 0xbf, 0x81, 0x00, 0xb5, 0x7c, 0x31, 0xe9, 0xfc, - 0x07, 0xf6, 0xf8, 0x35, 0x8b, 0x99, 0xc8, 0x05, 0x6c, 0xf4, 0x9a, 0x0a, 0xe6, 0xc3, 0x16, 0xc3, - 0x92, 0x3e, 0xba, 0xb4, 0xde, 0x78, 0x86, 0xa9, 0xc2, 0x1e, 0x3d, 0xa6, 0xca, 0x78, 0xd9, 0x14, - 0x8e, 0xa1, 0x88, 0x95, 0x92, 0xbe, 0x6c, 0x5a, 0x4c, 0xfe, 0xd0, 0x36, 0xd1, 0xa7, 0x4b, 0x37, - 0xa2, 0x65, 0x1d, 0x6d, 0x1e, 0xd2, 0x9e, 0xa5, 0x56, 0x06, 0x03, 0x26, 0x16, 0x75, 0xb4, 0x79, - 0x68, 0x1b, 0x0c, 0x18, 0xff, 0x01, 0x2a, 0x32, 0x9d, 0x45, 0xa8, 0x19, 0x8b, 0x38, 0xa2, 0x5a, - 0x50, 0x71, 0x7d, 0x7a, 0xea, 0x32, 0xee, 0x4a, 0x1a, 0x00, 0x01, 0x73, 0x3a, 0x08, 0x3d, 0x42, - 0x7e, 0xce, 0x25, 0xa2, 0x24, 0xba, 0x08, 0x89, 0x70, 0x80, 0x01, 0x15, 0xb2, 0x95, 0x97, 0x7f, - 0x05, 0x2d, 0x21, 0xf7, 0xe9, 0xe9, 0x51, 0xd3, 0x33, 0x58, 0x89, 0x02, 0x08, 0x0c, 0x0f, 0xd9, - 0x01, 0xe0, 0x45, 0x0c, 0xa3, 0x29, 0x24, 0x95, 0x3d, 0xa5, 0x2a, 0xfa, 0xb6, 0xa7, 0x54, 0xe8, - 0xdb, 0x9f, 0x52, 0x15, 0x7f, 0x97, 0x53, 0xaa, 0xe5, 0x0f, 0x78, 0x4a, 0xc5, 0xbf, 0x4f, 0xae, - 0x0c, 0x2a, 0xc1, 0x0e, 0xc5, 0xeb, 0xaa, 0xaf, 0x6b, 0x6f, 0x25, 0xe1, 0x48, 0x4b, 0xe0, 0x2e, - 0xb7, 0x3d, 0x45, 0x7c, 0xa6, 0xa3, 0xcd, 0x03, 0xcf, 0x3f, 0xba, 0xea, 0x21, 0x7c, 0xb1, 0xf9, - 0xc8, 0xca, 0x00, 0xc0, 0x65, 0x7b, 0x0e, 0xfe, 0x5d, 0xdb, 0x55, 0x53, 0x26, 0x20, 0x29, 0xfb, - 0x0a, 0x6d, 0xb9, 0xf5, 0xec, 0x6c, 0x72, 0x66, 0x34, 0x75, 0x7c, 0x1c, 0x68, 0xc1, 0x4b, 0x2c, - 0xe6, 0xcb, 0xb3, 0x1d, 0x6d, 0x1e, 0xdb, 0x2d, 0x55, 0x19, 0x19, 0xaf, 0x86, 0x91, 0x60, 0xa4, - 0x79, 0x9e, 0xc9, 0x70, 0xfa, 0xbc, 0x41, 0x58, 0x95, 0x06, 0xa6, 0xf8, 0x08, 0xfd, 0xe1, 0xaa, - 0x77, 0x38, 0x5d, 0x35, 0x32, 0xf8, 0x33, 0x9b, 0xcf, 0x8f, 0xf1, 0xbb, 0x90, 0xf9, 0x26, 0x19, - 0x09, 0x35, 0x3a, 0x1f, 0x51, 0xf2, 0xb8, 0x91, 0x89, 0x2a, 0xae, 0x36, 0x7e, 0xd9, 0xc9, 0x9a, - 0x08, 0x9b, 0xde, 0x54, 0xa5, 0x37, 0xd0, 0xeb, 0x82, 0xc9, 0x83, 0xc4, 0xf5, 0xac, 0xe7, 0x0b, - 0x7d, 0x1e, 0xe7, 0x8e, 0x16, 0x3f, 0x0e, 0x42, 0x03, 0xac, 0x78, 0x78, 0x57, 0x90, 0x0a, 0x51, - 0x87, 0x38, 0xb4, 0x18, 0x17, 0xcd, 0xaf, 0x47, 0x4b, 0x3c, 0x3e, 0x6f, 0x30, 0x34, 0x5f, 0xe8, - 0x50, 0x27, 0x89, 0x74, 0xeb, 0x0e, 0x2b, 0x32, 0xe0, 0xd1, 0x2b, 0xa1, 0xcc, 0xf8, 0x62, 0x6e, - 0x55, 0x92, 0x3d, 0x50, 0x0c, 0x96, 0x93, 0x90, 0x27, 0x9e, 0x4f, 0xb2, 0x1d, 0x58, 0xf6, 0x13, - 0x54, 0x64, 0xd2, 0xe7, 0x79, 0xb4, 0x18, 0x97, 0x60, 0xf8, 0x45, 0xe3, 0xdf, 0xfc, 0x23, 0x68, - 0xc9, 0x9e, 0x96, 0x80, 0x07, 0x2e, 0xee, 0x15, 0xca, 0xf0, 0x51, 0xf6, 0x6f, 0x8b, 0xd0, 0x6a, - 0xe6, 0x28, 0x67, 0x57, 0xbd, 0xd3, 0x90, 0xfe, 0x3e, 0xc8, 0xe6, 0xc5, 0xce, 0x07, 0xd0, 0x08, - 0x1e, 0x0b, 0xae, 0x5e, 0x55, 0x50, 0xea, 0x5d, 0x40, 0x12, 0xcc, 0x7a, 0xb6, 0xae, 0xc0, 0x88, - 0x9b, 0xf9, 0xad, 0x39, 0xe4, 0x37, 0xd5, 0xab, 0x83, 0x0f, 0x5b, 0xcf, 0xd5, 0x59, 0x2f, 0xd8, - 0xd9, 0x38, 0x67, 0xa3, 0xb9, 0x33, 0x2c, 0x32, 0xcc, 0x37, 0xf7, 0xda, 0x19, 0x16, 0x68, 0x4d, - 0xfe, 0x3d, 0x63, 0xf1, 0xb7, 0xdb, 0x33, 0xb6, 0x5a, 0x5c, 0x7a, 0x89, 0xa1, 0x82, 0xe5, 0xe5, - 0xd2, 0x0b, 0x75, 0xaf, 0xc1, 0xbf, 0xb7, 0xd8, 0xdf, 0xbe, 0xde, 0x38, 0xcf, 0x0e, 0xb1, 0x00, - 0x29, 0xba, 0x77, 0x04, 0x72, 0x37, 0x82, 0xb7, 0xbf, 0xe3, 0x46, 0xf0, 0x4d, 0xf5, 0xca, 0x60, - 0x89, 0xbc, 0x18, 0xa3, 0xc8, 0x4b, 0x20, 0x20, 0xe0, 0xf7, 0xb1, 0x35, 0xbc, 0x99, 0xbd, 0x35, - 0x3c, 0xb7, 0xe0, 0xd6, 0xf0, 0x4d, 0xf5, 0xd2, 0xe0, 0x62, 0xdc, 0x74, 0x6b, 0x8f, 0xc8, 0xe1, - 0xb7, 0xe8, 0x4f, 0xc6, 0x6f, 0x8b, 0xff, 0x44, 0xfc, 0x76, 0xf9, 0x9f, 0x82, 0xdf, 0x96, 0x7c, - 0x8f, 0xfc, 0x76, 0xaf, 0x2a, 0x79, 0x90, 0x5b, 0xc8, 0xcf, 0x74, 0xc4, 0xd5, 0x30, 0x3c, 0xa0, - 0x44, 0x75, 0xb4, 0x79, 0x40, 0x1b, 0xb6, 0x1d, 0x4e, 0x33, 0xab, 0xf9, 0x8f, 0x1c, 0x5d, 0x80, - 0x7f, 0xe4, 0x8c, 0x89, 0x6f, 0x5a, 0x38, 0x6f, 0x73, 0xe8, 0xd1, 0xec, 0x32, 0x7e, 0x18, 0x8a, - 0x95, 0x56, 0x88, 0x56, 0x33, 0xa7, 0x60, 0x7f, 0x3e, 0x96, 0xfc, 0x41, 0x3e, 0x96, 0xfc, 0xfd, - 0x09, 0xad, 0x9b, 0xb2, 0x58, 0xef, 0xb7, 0x17, 0xca, 0xbf, 0x25, 0x83, 0xdd, 0x98, 0xcd, 0x60, - 0xef, 0x2d, 0x06, 0x7f, 0x6f, 0x6c, 0xf4, 0x37, 0xb9, 0x6c, 0xb4, 0xe1, 0x3b, 0xb3, 0xd1, 0x87, - 0x82, 0x2b, 0xe5, 0xbf, 0x9a, 0x97, 0x91, 0x6e, 0xb2, 0x24, 0xde, 0x42, 0x63, 0xda, 0xce, 0x73, - 0x0e, 0x6d, 0x72, 0x42, 0x43, 0xe8, 0x0d, 0x64, 0x73, 0xc2, 0x22, 0xaa, 0xce, 0x67, 0x9f, 0xc3, - 0xef, 0x74, 0xf9, 0xc3, 0x2f, 0x8a, 0x70, 0x12, 0x4f, 0x02, 0x5e, 0x65, 0xf1, 0xc9, 0xc7, 0xa0, - 0x94, 0x1c, 0x6e, 0x99, 0xcd, 0x1d, 0xf7, 0xe7, 0x70, 0xc7, 0x7c, 0xa5, 0x35, 0x84, 0x83, 0x3e, - 0x7f, 0x13, 0x94, 0xf6, 0xff, 0x43, 0xde, 0xb9, 0x4d, 0x95, 0x5c, 0x68, 0x8b, 0x90, 0x9f, 0x3b, - 0x88, 0xbc, 0x79, 0xfa, 0xbf, 0xab, 0xde, 0x99, 0xcb, 0x38, 0x61, 0x22, 0x32, 0xa7, 0xed, 0x47, - 0x0a, 0xd0, 0xa3, 0xd9, 0x94, 0x7e, 0x18, 0x66, 0x95, 0xb7, 0x6d, 0x1e, 0x3c, 0xa5, 0x79, 0xcd, - 0x2a, 0xbb, 0xea, 0x9d, 0xc0, 0x21, 0xc0, 0x9c, 0x52, 0x0a, 0x9d, 0xa3, 0x0d, 0x0f, 0x82, 0x71, - 0x63, 0x57, 0xbd, 0xd3, 0x34, 0x30, 0xba, 0xc3, 0xee, 0xb2, 0x43, 0x05, 0x68, 0x35, 0x73, 0x20, - 0xf6, 0xe7, 0x63, 0xba, 0x26, 0x87, 0x29, 0xf8, 0x6e, 0x1c, 0x66, 0x53, 0xb5, 0x2a, 0xfd, 0x1c, - 0xbd, 0x21, 0xe4, 0x6f, 0x85, 0xc8, 0xd3, 0x40, 0xb1, 0x0b, 0x4e, 0x0e, 0x32, 0x25, 0xb2, 0xf3, - 0xff, 0x7f, 0x77, 0x4a, 0x68, 0xb7, 0xbf, 0x80, 0x5e, 0xc9, 0x3f, 0x25, 0x6e, 0x2c, 0x46, 0x0f, - 0x9b, 0xe6, 0x2d, 0x66, 0x42, 0xfc, 0x22, 0x7b, 0x42, 0x6c, 0x78, 0x80, 0x09, 0xb1, 0x38, 0x58, - 0x50, 0xfa, 0xc8, 0xf7, 0x63, 0xa8, 0x32, 0x8d, 0x40, 0x8b, 0xee, 0xcb, 0x08, 0xd4, 0x9e, 0xcf, - 0x24, 0xf5, 0xa7, 0x57, 0xb8, 0x1a, 0x6c, 0x8c, 0x1d, 0xf6, 0x5d, 0xf2, 0xfc, 0x02, 0xcb, 0xba, - 0xcb, 0x2c, 0xd6, 0x0d, 0xce, 0xe1, 0xf0, 0x6d, 0xb2, 0xee, 0x2c, 0xa6, 0xbd, 0xe9, 0x24, 0xa7, - 0x4a, 0x2a, 0x87, 0x86, 0x38, 0x21, 0xdf, 0x08, 0x89, 0x07, 0x4c, 0xdb, 0xa3, 0x39, 0xd9, 0xff, - 0x4c, 0x07, 0x2a, 0xff, 0xac, 0x00, 0x3d, 0x62, 0xaf, 0xd1, 0x0f, 0x63, 0xf9, 0xec, 0xb8, 0x8f, - 0x33, 0x4c, 0xda, 0x1c, 0x30, 0x60, 0xc1, 0x12, 0xe2, 0xe1, 0x05, 0x02, 0xad, 0xef, 0x3a, 0x5e, - 0x42, 0xcc, 0xe2, 0x31, 0xcc, 0x2a, 0x79, 0x3b, 0x43, 0xe4, 0x6d, 0xe3, 0x33, 0x8f, 0x61, 0xb8, - 0xb3, 0x90, 0x5e, 0x72, 0xa0, 0x39, 0xff, 0xde, 0x38, 0xfc, 0xf7, 0xc6, 0xe1, 0x7b, 0x58, 0x00, - 0xde, 0xcf, 0x27, 0xb5, 0x7e, 0x5f, 0xfa, 0xfb, 0x3b, 0x68, 0x85, 0x59, 0x45, 0xd6, 0x3a, 0x40, - 0x1c, 0x34, 0xb2, 0x92, 0xc4, 0x35, 0xda, 0xcc, 0x47, 0x5a, 0xff, 0x00, 0xee, 0xbb, 0xa1, 0x29, - 0xe3, 0xfd, 0x26, 0x2a, 0xf9, 0x66, 0xe1, 0xf2, 0xbf, 0xb2, 0x24, 0xd0, 0xe2, 0xfc, 0xe7, 0x38, - 0x58, 0x58, 0xac, 0x51, 0xc2, 0x6e, 0x5f, 0x0b, 0x39, 0x25, 0x7a, 0x20, 0x59, 0xf4, 0x1f, 0x30, - 0xb2, 0xe8, 0xf2, 0xfb, 0x22, 0xff, 0x80, 0x52, 0x69, 0x96, 0x61, 0xa3, 0xe4, 0x7b, 0x34, 0x6c, - 0x94, 0x0d, 0x71, 0x68, 0x85, 0xbd, 0x76, 0x7f, 0x2a, 0x23, 0xeb, 0x73, 0x39, 0xa3, 0x4b, 0x62, - 0x41, 0x67, 0x0f, 0x56, 0xd9, 0x18, 0xc7, 0xf8, 0x50, 0xd0, 0xcb, 0x96, 0x7f, 0x02, 0xc1, 0x60, - 0xd3, 0x26, 0x55, 0x7a, 0x05, 0xfd, 0x44, 0x98, 0xaf, 0x2c, 0x71, 0x0d, 0xb0, 0x50, 0xe3, 0x7e, - 0x8a, 0x36, 0x7a, 0xdd, 0x64, 0x56, 0x65, 0xff, 0xae, 0x80, 0x39, 0x31, 0x35, 0xf3, 0xfd, 0x10, - 0x9d, 0x69, 0x9e, 0xc8, 0xbb, 0x11, 0x41, 0x93, 0xee, 0x6f, 0x1f, 0xda, 0xa1, 0x4a, 0xdb, 0xd0, - 0x2f, 0x84, 0x79, 0xfb, 0xc3, 0xf0, 0xa6, 0x02, 0x43, 0x3f, 0xd3, 0x8b, 0xf3, 0x6d, 0x4b, 0xbb, - 0x51, 0x31, 0x43, 0x87, 0x2f, 0xcd, 0x1a, 0x73, 0x6b, 0x9b, 0x59, 0x6b, 0xdb, 0x2a, 0xc0, 0x21, - 0x93, 0xdd, 0x05, 0x1e, 0xb5, 0x9b, 0x43, 0x8c, 0x2d, 0xa6, 0x2c, 0xca, 0xa1, 0x87, 0xb6, 0x28, - 0xe1, 0x5d, 0xf5, 0x4e, 0x3c, 0x95, 0x8d, 0xb9, 0x55, 0x6b, 0x30, 0x75, 0xce, 0xf2, 0x0a, 0xa3, - 0x4c, 0xfd, 0x59, 0xd8, 0xaf, 0x20, 0x3b, 0x08, 0x4b, 0x0e, 0x3c, 0xf5, 0xe1, 0xd4, 0x18, 0x7a, - 0xc6, 0x50, 0x12, 0x36, 0xa8, 0x52, 0x15, 0x7a, 0x41, 0xc8, 0x2d, 0x40, 0x7c, 0x14, 0xfa, 0xa1, - 0xa3, 0xcd, 0x93, 0x1a, 0xe9, 0xc6, 0xd9, 0xe9, 0x64, 0xfa, 0xa7, 0x05, 0x88, 0x67, 0xb1, 0x7f, - 0x18, 0xd3, 0xe8, 0x17, 0xb6, 0x69, 0x94, 0xe3, 0x2c, 0x42, 0x5b, 0x73, 0x7f, 0x53, 0x68, 0xb3, - 0x2a, 0x39, 0x91, 0x24, 0xe4, 0xe9, 0x05, 0x63, 0x15, 0xee, 0xaa, 0x77, 0x3a, 0xac, 0x2e, 0x9b, - 0x6f, 0xe6, 0x78, 0xd0, 0x32, 0x9a, 0x9f, 0x5f, 0x85, 0x16, 0x75, 0xb4, 0x19, 0x61, 0x6b, 0xf0, - 0x4f, 0xf3, 0xc4, 0xa6, 0x80, 0x39, 0xb1, 0x59, 0x83, 0x0a, 0x09, 0xd3, 0xd9, 0x43, 0xe3, 0x6f, - 0x95, 0xc8, 0xe6, 0x37, 0x13, 0xcf, 0x73, 0x31, 0x1b, 0xcf, 0xb3, 0xec, 0xdf, 0xae, 0x46, 0x4b, - 0xc8, 0xfc, 0xe4, 0x6b, 0xb3, 0xb9, 0x11, 0x31, 0xcf, 0x14, 0x11, 0x18, 0x91, 0x2f, 0x9e, 0xb8, - 0xaf, 0x3b, 0xa0, 0x2f, 0xd1, 0xa8, 0xb7, 0xcc, 0xa8, 0x11, 0x80, 0xb8, 0xda, 0xcc, 0x0e, 0x97, - 0xd1, 0xa9, 0x90, 0x00, 0x71, 0x71, 0x0f, 0x71, 0xa8, 0x50, 0xf1, 0xfa, 0xc2, 0x66, 0x54, 0xfd, - 0xc2, 0xea, 0x26, 0x55, 0xf2, 0x0a, 0x26, 0x50, 0xfc, 0xa5, 0x36, 0x75, 0x27, 0x19, 0x1f, 0x6c, - 0x70, 0xbb, 0xe9, 0x95, 0x71, 0xf3, 0x05, 0x6a, 0x4b, 0x66, 0x48, 0x9c, 0x4c, 0x7f, 0x7d, 0x8c, - 0x0d, 0xe2, 0x0f, 0x81, 0x06, 0x52, 0x23, 0xdd, 0x66, 0x60, 0x78, 0xe3, 0xd1, 0xea, 0x01, 0x8a, - 0x3f, 0x75, 0x4c, 0x36, 0xcb, 0xe0, 0x8f, 0x72, 0x08, 0x05, 0x8c, 0x28, 0x76, 0xc6, 0x6d, 0xfd, - 0x1f, 0xe7, 0xe5, 0x29, 0xeb, 0xcc, 0x68, 0x77, 0xf4, 0xbe, 0x3e, 0x89, 0x08, 0xc5, 0xe4, 0x16, - 0x5f, 0x04, 0xe7, 0x79, 0x36, 0x0c, 0x22, 0xbc, 0x3c, 0x94, 0x1a, 0xe9, 0x86, 0x50, 0x71, 0x10, - 0x45, 0x03, 0x1e, 0x83, 0x81, 0x88, 0x8e, 0x32, 0x43, 0x80, 0x1f, 0xe7, 0xd0, 0x72, 0x22, 0xa7, - 0x18, 0xf5, 0x59, 0x92, 0x3f, 0xbc, 0x25, 0xd4, 0xa7, 0x96, 0xc1, 0x84, 0x1a, 0xbd, 0xaf, 0x4a, - 0xbf, 0x14, 0x6c, 0x14, 0xc4, 0xb7, 0x32, 0x1f, 0x9f, 0xd3, 0x2e, 0x9d, 0x64, 0x8b, 0xb7, 0x05, - 0x62, 0x84, 0x90, 0x7a, 0x24, 0x15, 0x8f, 0xf1, 0xd4, 0x65, 0x88, 0x8b, 0x07, 0xce, 0xc1, 0xe0, - 0xf7, 0x01, 0x9d, 0x2c, 0xdb, 0xe8, 0xf2, 0xff, 0x1b, 0x87, 0x56, 0x92, 0x09, 0x60, 0x45, 0x22, - 0xa5, 0xd7, 0x56, 0xd7, 0xe4, 0xd4, 0xd6, 0xc4, 0xa8, 0x3e, 0xcb, 0xa9, 0xd2, 0x29, 0x4e, 0xc8, - 0xce, 0x29, 0x1e, 0xe2, 0xf0, 0xd8, 0xc6, 0x8f, 0x25, 0x63, 0x47, 0x53, 0xd3, 0x17, 0x92, 0xb1, - 0x88, 0x19, 0xd3, 0x9f, 0x75, 0x93, 0x86, 0xeb, 0x08, 0xc9, 0xe9, 0xcb, 0xa0, 0x62, 0x99, 0x4a, - 0x97, 0x3e, 0xda, 0x0f, 0x22, 0x07, 0x28, 0x69, 0xda, 0xcc, 0x47, 0x34, 0x10, 0xc9, 0xdd, 0x48, - 0x27, 0xbd, 0x6a, 0x9d, 0x8c, 0x1d, 0xd5, 0xbf, 0x18, 0xd3, 0x47, 0xe9, 0x7b, 0x71, 0xfa, 0xa9, - 0x5b, 0xc9, 0xc4, 0x08, 0xdc, 0xc9, 0xc4, 0x6d, 0x06, 0x81, 0x25, 0xbb, 0x5a, 0xfc, 0xef, 0xd0, - 0xf2, 0x40, 0x08, 0xe2, 0x49, 0xb5, 0x2a, 0xfe, 0xf0, 0x7c, 0x61, 0x6d, 0x20, 0x20, 0x02, 0x08, - 0xb8, 0xb6, 0x0c, 0x62, 0xa5, 0xd9, 0x2c, 0x23, 0xec, 0x81, 0xd9, 0x30, 0x68, 0x27, 0xbd, 0x49, - 0x0a, 0xcc, 0xc4, 0x96, 0x97, 0x57, 0x49, 0xb8, 0x1f, 0x08, 0xbf, 0x65, 0x55, 0xa1, 0x70, 0x9e, - 0x3e, 0x36, 0xe3, 0x74, 0x55, 0xbf, 0xa5, 0x4a, 0xb5, 0x42, 0x6e, 0x4e, 0x71, 0x83, 0x59, 0x17, - 0xf6, 0x7d, 0x3d, 0xa8, 0x15, 0x9e, 0xa0, 0x64, 0x6e, 0xd8, 0xea, 0x93, 0x4b, 0x04, 0xaf, 0x97, - 0x87, 0xcd, 0xa7, 0xf7, 0x99, 0x6a, 0xa1, 0xfc, 0xbe, 0x5c, 0x6c, 0xf4, 0x17, 0xd0, 0x5f, 0xf2, - 0xe5, 0x16, 0x9f, 0x31, 0xab, 0xc6, 0x46, 0x77, 0xb1, 0xd5, 0x25, 0x5f, 0x3e, 0xd6, 0xd5, 0xa3, - 0xf8, 0xdb, 0xba, 0x7a, 0x2c, 0xff, 0xf6, 0xae, 0x1e, 0x25, 0xdf, 0xc5, 0xd5, 0x63, 0xc5, 0x83, - 0xba, 0x7a, 0x4c, 0x72, 0xa8, 0x84, 0x4c, 0xd0, 0xfa, 0x60, 0xa0, 0xc3, 0xe7, 0x55, 0x82, 0xf4, - 0x19, 0xd7, 0x5e, 0x4e, 0x95, 0x0e, 0x71, 0x82, 0x3d, 0x4d, 0x0c, 0x42, 0x8c, 0x4d, 0xf0, 0x9e, - 0xb5, 0xde, 0x3f, 0x23, 0x3a, 0x07, 0x7c, 0xd2, 0x67, 0x8f, 0x47, 0xfb, 0x7f, 0x43, 0x72, 0xae, - 0xdf, 0xd3, 0xd2, 0xae, 0x34, 0xfb, 0xfc, 0x4d, 0xeb, 0x21, 0x2c, 0xee, 0x7a, 0xf7, 0xfe, 0x10, - 0x84, 0xc0, 0x4d, 0x0d, 0x5e, 0xd7, 0x86, 0xba, 0xd2, 0x91, 0x43, 0x74, 0x70, 0xab, 0xe8, 0xe8, - 0x26, 0x63, 0x47, 0x49, 0xce, 0x36, 0x5a, 0xa6, 0x6c, 0xaf, 0x02, 0x1f, 0xe1, 0xd0, 0x52, 0x0f, - 0x84, 0xb1, 0x5b, 0x65, 0xbd, 0xbb, 0x43, 0x41, 0xe2, 0xfb, 0xc0, 0x74, 0xc0, 0xba, 0x52, 0xe9, - 0x48, 0xce, 0x9e, 0xd3, 0x26, 0x4e, 0x67, 0x22, 0x5d, 0x99, 0x9e, 0x01, 0x6d, 0xb8, 0x3b, 0x75, - 0x75, 0xc0, 0x10, 0x5c, 0xe9, 0x53, 0xc4, 0x34, 0x9e, 0x31, 0xb0, 0x58, 0xf0, 0xb4, 0x30, 0x82, - 0xfc, 0x38, 0x3e, 0x0c, 0x05, 0xfc, 0xe9, 0xab, 0x9f, 0xe8, 0xe7, 0x87, 0xe9, 0x4a, 0xa6, 0x85, - 0xf0, 0x6f, 0xa3, 0x62, 0xaf, 0x62, 0xc6, 0xe0, 0xa0, 0x6f, 0xfd, 0x83, 0xbf, 0x3c, 0x03, 0x17, - 0x9f, 0x02, 0x85, 0x11, 0xfc, 0xe9, 0xa6, 0xae, 0xa4, 0xa6, 0x0f, 0x27, 0xa7, 0x8f, 0xa6, 0xa6, - 0x07, 0x8c, 0x47, 0x2a, 0x18, 0x5c, 0x7e, 0x1b, 0x42, 0x8a, 0xbf, 0xc9, 0xe7, 0x87, 0x60, 0x38, - 0xbc, 0x65, 0x66, 0x60, 0xc0, 0xe2, 0x13, 0x5a, 0xfc, 0x84, 0x76, 0xa3, 0xcb, 0x7a, 0x53, 0x28, - 0x71, 0x42, 0xff, 0x68, 0x90, 0xbe, 0x29, 0xcc, 0x20, 0xf2, 0x1f, 0x98, 0xd7, 0x18, 0xe1, 0x2d, - 0x7f, 0x12, 0xa3, 0xd2, 0xb8, 0xaa, 0xf8, 0x6a, 0x32, 0x7e, 0x0c, 0xe2, 0x98, 0xc2, 0x86, 0x67, - 0xc8, 0x31, 0x67, 0x68, 0x5c, 0x9a, 0xa1, 0xa9, 0xf4, 0xd5, 0xce, 0x72, 0x2d, 0x92, 0x48, 0xc6, - 0xe2, 0x58, 0x73, 0xd6, 0xfb, 0x4e, 0xd2, 0xe7, 0x9a, 0x8c, 0x9b, 0x8b, 0xff, 0xd0, 0xb4, 0x23, - 0x60, 0x0e, 0x45, 0x1e, 0xfc, 0x9f, 0xcf, 0xc9, 0xb0, 0xce, 0xc2, 0x03, 0xdd, 0x8c, 0xcd, 0x29, - 0x3e, 0x9f, 0x9f, 0x3f, 0x13, 0x9b, 0x03, 0x3b, 0x40, 0x32, 0x9b, 0x8b, 0xff, 0x10, 0x15, 0xe2, - 0x81, 0x20, 0x65, 0xaf, 0x26, 0x65, 0x3f, 0x9d, 0xb7, 0x6c, 0x88, 0xd5, 0x47, 0x8a, 0x26, 0xe1, - 0x4c, 0xcc, 0x5c, 0xe2, 0xda, 0xac, 0x72, 0x93, 0xf1, 0x63, 0xb6, 0xe2, 0x4c, 0x4c, 0xfe, 0xf7, - 0x68, 0x79, 0x5b, 0x8b, 0x3b, 0xbc, 0x37, 0x10, 0x6c, 0x25, 0xe5, 0x3d, 0xba, 0xd0, 0xd6, 0x59, - 0xcf, 0x60, 0xc2, 0xd6, 0x49, 0x2e, 0x74, 0xda, 0x28, 0x88, 0x6b, 0x21, 0x98, 0x04, 0x1b, 0x61, - 0xd6, 0x56, 0xb6, 0x0d, 0x7b, 0xcd, 0x7b, 0x68, 0x65, 0x96, 0x80, 0xf0, 0xbd, 0x85, 0xd4, 0x5d, - 0xf3, 0x2b, 0xf4, 0x50, 0xce, 0x66, 0xff, 0xfd, 0x51, 0xff, 0x39, 0x7a, 0x28, 0xa7, 0x3f, 0x1e, - 0x28, 0x30, 0x50, 0x37, 0xa7, 0x4a, 0x11, 0x0e, 0xfd, 0x5e, 0x00, 0xb9, 0x52, 0x6c, 0xc7, 0x23, - 0x66, 0xee, 0xd8, 0x97, 0x46, 0x70, 0xdf, 0xd1, 0x88, 0x09, 0x47, 0x69, 0x7c, 0x13, 0x78, 0xc4, - 0x87, 0x3c, 0xbc, 0x6c, 0x62, 0x9a, 0x32, 0x9c, 0x36, 0x7a, 0x1d, 0xc4, 0xb8, 0xf4, 0x47, 0xe7, - 0x32, 0x5f, 0xc4, 0xf0, 0x98, 0x1b, 0xc2, 0x1c, 0x96, 0x51, 0x8c, 0xb8, 0x3d, 0x59, 0x12, 0x5e, - 0xd9, 0xd0, 0x32, 0xb4, 0x32, 0x6b, 0x3a, 0xf1, 0x3e, 0xf4, 0x30, 0x88, 0xa9, 0x7e, 0x08, 0x55, - 0x06, 0x4f, 0xd4, 0xd1, 0x77, 0xd3, 0x48, 0x40, 0x8c, 0x7c, 0xe9, 0xe2, 0x53, 0x70, 0x57, 0x96, - 0x7d, 0xee, 0xee, 0x70, 0x4f, 0xe6, 0xd0, 0x38, 0x65, 0x2f, 0xf9, 0xf2, 0x60, 0x5e, 0x43, 0xc0, - 0xf4, 0x35, 0x8c, 0x02, 0x86, 0xd7, 0x30, 0x70, 0x4a, 0x1a, 0x3e, 0x80, 0x28, 0x98, 0x00, 0x29, - 0x69, 0x16, 0x97, 0x7f, 0x17, 0x95, 0xb4, 0xba, 0x3d, 0xfb, 0x7c, 0x7e, 0xa5, 0x86, 0x7d, 0x0c, - 0x8d, 0x18, 0xc7, 0xed, 0x29, 0xe2, 0xd3, 0xb6, 0xcf, 0x3c, 0x84, 0xed, 0xf8, 0x7c, 0x10, 0x3d, - 0xe2, 0xf5, 0x85, 0x70, 0xc5, 0x9d, 0xb6, 0x18, 0xc2, 0x70, 0xf5, 0x91, 0x44, 0xeb, 0xcd, 0x8b, - 0x20, 0x3e, 0xcb, 0x76, 0x4d, 0xcf, 0x97, 0x99, 0x53, 0x13, 0x6c, 0xd0, 0x4e, 0x78, 0xce, 0x53, - 0xce, 0x9b, 0x95, 0x29, 0xd3, 0x65, 0x0b, 0x45, 0xbb, 0x24, 0xb7, 0x4c, 0x1b, 0x42, 0xbe, 0x32, - 0x49, 0x7c, 0x82, 0xbc, 0x65, 0xda, 0xb2, 0xf2, 0x1e, 0xb4, 0x8a, 0xc2, 0xad, 0xf0, 0x99, 0xcc, - 0x1b, 0x8a, 0x39, 0x89, 0xa2, 0x23, 0xa7, 0x2c, 0x1a, 0xd4, 0xef, 0xc6, 0x45, 0x5a, 0x50, 0x4e, - 0x1e, 0xde, 0x85, 0x8a, 0x3a, 0xda, 0x3c, 0xec, 0x33, 0x28, 0x54, 0x95, 0x32, 0xa1, 0xe2, 0x13, - 0xe6, 0xcf, 0x3c, 0x63, 0x63, 0xe1, 0xf1, 0x43, 0x1c, 0x7a, 0xdc, 0xe8, 0xbc, 0x7d, 0x8a, 0xa7, - 0x99, 0x14, 0x60, 0x3c, 0xb0, 0x40, 0x5f, 0x53, 0x7c, 0x5b, 0x95, 0xea, 0x84, 0xf9, 0xb1, 0xc4, - 0x8d, 0xf3, 0x37, 0x01, 0xc2, 0x41, 0x91, 0x57, 0x35, 0xf4, 0x8b, 0x63, 0x99, 0xcf, 0xa2, 0xf4, - 0x01, 0xc7, 0xf9, 0xa9, 0x6d, 0xc2, 0x9b, 0x01, 0x7a, 0x49, 0xc8, 0x5e, 0x5a, 0xe2, 0x33, 0x59, - 0xef, 0x0e, 0xd0, 0x97, 0xaa, 0x19, 0x0e, 0x59, 0x36, 0xbe, 0x8c, 0xde, 0x00, 0x60, 0x36, 0x17, - 0x7e, 0x0b, 0x32, 0x1f, 0xf4, 0x27, 0x16, 0xba, 0x12, 0xe8, 0x2b, 0x13, 0x28, 0x3e, 0x89, 0x7f, - 0x41, 0xe0, 0x41, 0x88, 0xa7, 0xa7, 0x4f, 0x5c, 0xce, 0x9c, 0x98, 0xa5, 0x4f, 0x2c, 0x99, 0x78, - 0x7c, 0x2f, 0x87, 0x8a, 0x8c, 0x0f, 0xb8, 0x14, 0x90, 0x87, 0xe7, 0xd5, 0xfa, 0x3b, 0x9c, 0x14, - 0x07, 0x2e, 0x7e, 0x58, 0x59, 0xc4, 0x9f, 0x2e, 0x54, 0x50, 0x79, 0x66, 0x64, 0x88, 0x5e, 0xc4, - 0x1d, 0x22, 0x97, 0xd5, 0x49, 0xc3, 0xd2, 0x91, 0xa8, 0x36, 0x74, 0x5a, 0x8b, 0x9e, 0xac, 0x90, - 0x2d, 0x42, 0xfc, 0x2e, 0xb4, 0x9c, 0xc6, 0x8a, 0x82, 0xba, 0x2c, 0x22, 0xcd, 0x12, 0x55, 0x69, - 0xbd, 0x60, 0x4b, 0x10, 0x9f, 0xa6, 0x5f, 0x60, 0xe7, 0xcd, 0xd3, 0x3a, 0x1b, 0x3a, 0x2f, 0xa3, - 0x92, 0x36, 0x25, 0x88, 0xe7, 0x59, 0x7d, 0xc0, 0x5b, 0xd7, 0xde, 0x4a, 0xf4, 0xd3, 0x12, 0x10, - 0x37, 0xec, 0x29, 0x62, 0xa9, 0x36, 0x70, 0x02, 0x46, 0xb9, 0x2d, 0xe0, 0x05, 0xf2, 0xc6, 0xc2, - 0xb7, 0x21, 0xf2, 0x41, 0x54, 0x62, 0xd8, 0x65, 0xa1, 0xb2, 0x4b, 0x08, 0x4d, 0xd2, 0x37, 0xf6, - 0x14, 0xf1, 0x55, 0xe3, 0x33, 0xe7, 0xd5, 0x7a, 0xb8, 0x0e, 0x70, 0x54, 0x3b, 0x82, 0x75, 0x45, - 0x2c, 0xb1, 0x91, 0xb7, 0x1d, 0xb1, 0x16, 0x41, 0x1a, 0x23, 0xdb, 0x09, 0xf1, 0x07, 0xd0, 0x43, - 0x06, 0x40, 0x6a, 0x0f, 0x07, 0xa0, 0xdc, 0xa5, 0xa4, 0x5c, 0xf2, 0x3a, 0x44, 0x6e, 0xaa, 0x28, - 0xce, 0x53, 0x36, 0x0d, 0x48, 0x99, 0xb7, 0xd4, 0x5c, 0x32, 0x7c, 0x9b, 0xd5, 0x5a, 0xd9, 0x1d, - 0xf6, 0x05, 0xc8, 0xea, 0xfc, 0x7e, 0x4b, 0xb5, 0x17, 0xc0, 0x77, 0xa0, 0xe2, 0x8e, 0x36, 0x8f, - 0xd3, 0xef, 0xdb, 0x4e, 0x22, 0xa1, 0x16, 0xe6, 0x9f, 0x96, 0x74, 0x41, 0x60, 0x1c, 0x60, 0x44, - 0x6c, 0x26, 0xf1, 0xc7, 0xf4, 0xa9, 0x79, 0xe3, 0x81, 0x8d, 0xa3, 0x66, 0x50, 0x2e, 0xb6, 0x5e, - 0x32, 0x9b, 0xc7, 0x78, 0xc8, 0x28, 0x67, 0xbd, 0x91, 0xdb, 0x1b, 0xe6, 0x3a, 0x85, 0x45, 0x9a, - 0x2b, 0xb7, 0x95, 0xbd, 0x88, 0x8a, 0x99, 0xa5, 0x82, 0xb7, 0x7f, 0xc5, 0xdf, 0x61, 0x6c, 0xff, - 0x8a, 0xbf, 0x83, 0x04, 0x52, 0xc6, 0x4b, 0x16, 0x6c, 0xe3, 0xe4, 0x77, 0xd9, 0x0e, 0x54, 0xcc, - 0x34, 0x04, 0xa3, 0xb4, 0x1a, 0x16, 0xbf, 0x22, 0x99, 0xfc, 0xe6, 0x4b, 0xd1, 0x32, 0x1a, 0x24, - 0x91, 0x7a, 0x15, 0x1b, 0x9f, 0xe6, 0x63, 0x49, 0x8b, 0xac, 0xc7, 0x92, 0xca, 0x3e, 0x7e, 0x14, - 0x15, 0x59, 0x6c, 0xf5, 0xe7, 0xa8, 0xd8, 0xd4, 0xfa, 0x4c, 0x1b, 0x15, 0xd1, 0x98, 0x58, 0xb8, - 0x58, 0x6c, 0x86, 0xd9, 0x74, 0xd5, 0xc8, 0x6c, 0x0a, 0xbf, 0xce, 0x66, 0x99, 0x02, 0x13, 0x24, - 0xb1, 0x4c, 0xad, 0xb4, 0x22, 0x79, 0xb2, 0x36, 0xa9, 0xdd, 0x39, 0xcf, 0xf3, 0x40, 0x20, 0x74, - 0x0b, 0x2a, 0x6e, 0x64, 0x62, 0x7d, 0x46, 0xe0, 0x46, 0xb5, 0xf9, 0x26, 0x14, 0x18, 0x50, 0x5c, - 0x35, 0xc9, 0x58, 0x1c, 0xcb, 0x32, 0xf0, 0xc6, 0x75, 0x0d, 0xfb, 0xc2, 0x8f, 0xd3, 0xb4, 0xe8, - 0x2e, 0x66, 0x9e, 0x35, 0xa5, 0x07, 0x8b, 0x6b, 0x73, 0x49, 0xe7, 0x3d, 0x61, 0xdc, 0x8b, 0x56, - 0x82, 0x78, 0x8f, 0xe7, 0x6d, 0xc8, 0xe3, 0xa6, 0x31, 0x50, 0x0a, 0xab, 0x7f, 0xaa, 0x4a, 0xaf, - 0x09, 0xd9, 0x69, 0xe2, 0x73, 0x36, 0x31, 0x86, 0xd1, 0xaf, 0xcd, 0x70, 0x27, 0xe0, 0x17, 0x96, - 0x9d, 0x91, 0xf7, 0xa3, 0x62, 0x37, 0x5e, 0x19, 0x1e, 0x77, 0x8b, 0xcf, 0xdf, 0x44, 0xad, 0x3b, - 0x39, 0xca, 0x83, 0x64, 0xa1, 0x90, 0x6e, 0xa7, 0xcf, 0xff, 0x31, 0x39, 0xc5, 0x52, 0x5b, 0xcc, - 0x56, 0xa2, 0x91, 0x1a, 0xd2, 0x0e, 0x83, 0xc6, 0x47, 0x39, 0xb4, 0xa2, 0xc5, 0xdd, 0xee, 0xf7, - 0xec, 0x6b, 0x54, 0x5a, 0xb1, 0x6c, 0xad, 0x50, 0x83, 0x4b, 0x4e, 0xf4, 0xcc, 0x6d, 0x04, 0x0b, - 0xf6, 0xa2, 0x76, 0x78, 0x63, 0x09, 0xac, 0x2f, 0x59, 0xf9, 0x45, 0x01, 0xca, 0xd4, 0x4f, 0xdd, - 0xa2, 0xcf, 0xde, 0x1b, 0xea, 0x70, 0xf2, 0xeb, 0xa3, 0xa6, 0x38, 0x0f, 0x61, 0x66, 0xe5, 0xac, - 0xbc, 0xcc, 0xcb, 0x99, 0x85, 0xf3, 0x3c, 0xa4, 0x65, 0xcc, 0x34, 0xdb, 0xbb, 0x99, 0xa4, 0xf9, - 0xc6, 0xbb, 0x99, 0x4f, 0xe5, 0xbe, 0xe9, 0x48, 0x52, 0x8c, 0x11, 0xa5, 0x8f, 0x6e, 0xb5, 0x9a, - 0xcf, 0x45, 0x16, 0xdd, 0xab, 0x28, 0xf2, 0x70, 0x24, 0x2d, 0x0a, 0xde, 0xe7, 0xa1, 0xcf, 0x47, - 0x3e, 0x93, 0x5b, 0x14, 0xe6, 0x51, 0x37, 0xc6, 0x52, 0x5d, 0x77, 0xb2, 0x5e, 0x90, 0xdc, 0x8b, - 0x96, 0xe2, 0x55, 0xb2, 0xa3, 0x81, 0xde, 0x73, 0x21, 0x8f, 0xdf, 0x51, 0x90, 0x28, 0x99, 0x74, - 0x32, 0x91, 0x7e, 0xd0, 0x5e, 0x21, 0x9a, 0xe7, 0x8e, 0x06, 0x62, 0x7f, 0xeb, 0x4a, 0xf5, 0x5c, - 0x35, 0xe5, 0xfb, 0x64, 0x6c, 0x02, 0xfa, 0x10, 0x77, 0xa6, 0xf1, 0xa2, 0xa9, 0x4c, 0x49, 0x91, - 0x93, 0x0f, 0xd6, 0x3c, 0x63, 0xd9, 0x5f, 0x4a, 0xb3, 0xec, 0x2f, 0x96, 0x81, 0xc5, 0xfe, 0x8a, - 0x55, 0xc9, 0x3d, 0x5e, 0xb1, 0x5a, 0x91, 0xf3, 0x8a, 0x55, 0x3f, 0xc7, 0x5e, 0x09, 0x06, 0x0b, - 0x09, 0x79, 0x69, 0x87, 0xb9, 0x12, 0xfc, 0xbe, 0xd9, 0x9d, 0x0f, 0x14, 0x8e, 0x10, 0xaf, 0x17, - 0x78, 0x56, 0x37, 0x36, 0x48, 0xc7, 0x07, 0xf2, 0x27, 0x67, 0xcf, 0xe9, 0xd1, 0xce, 0x64, 0x2c, - 0x92, 0xee, 0xbd, 0xc9, 0xde, 0x12, 0xfe, 0x37, 0x1c, 0x2a, 0x34, 0x8c, 0x23, 0xd4, 0x04, 0x72, - 0x8b, 0x53, 0xa5, 0x2f, 0x38, 0xc1, 0x04, 0x8b, 0x97, 0x39, 0xb3, 0x32, 0x59, 0xb6, 0x1a, 0xca, - 0xb6, 0xe1, 0x79, 0x21, 0x52, 0x0e, 0x2d, 0x34, 0x19, 0x9b, 0x30, 0xad, 0x88, 0x06, 0x1d, 0x7a, - 0xae, 0x70, 0xfd, 0x90, 0x7e, 0xc2, 0xb2, 0x39, 0xa7, 0xa6, 0x0f, 0xa7, 0x8f, 0x74, 0xdd, 0x8d, - 0x74, 0x41, 0x73, 0xb4, 0xd1, 0x71, 0xac, 0x41, 0xc7, 0x3e, 0xc3, 0xfa, 0x18, 0x91, 0x6c, 0x92, - 0xb1, 0x09, 0xb0, 0xc2, 0x98, 0x96, 0x60, 0x3c, 0x65, 0xc8, 0x72, 0xc0, 0x9d, 0x40, 0xac, 0x17, - 0xa0, 0xfe, 0xca, 0x66, 0x8d, 0xf9, 0x7f, 0xc6, 0x99, 0x07, 0x0b, 0x60, 0x4f, 0x99, 0xe2, 0x54, - 0xc9, 0x27, 0x50, 0x98, 0xb8, 0xdb, 0x8a, 0x2c, 0x7e, 0xe4, 0x96, 0x1e, 0xe9, 0x04, 0xa3, 0x6d, - 0xfa, 0xd0, 0x0c, 0x7c, 0x3a, 0xe5, 0x5a, 0xa9, 0xd1, 0x55, 0xb7, 0x65, 0x2e, 0x11, 0x95, 0x77, - 0xd6, 0xd5, 0xc1, 0xaf, 0x9a, 0xda, 0x6d, 0xb5, 0x14, 0xb8, 0x59, 0xda, 0xb6, 0x53, 0xae, 0x9d, - 0x4b, 0x44, 0x5d, 0x75, 0xae, 0x46, 0x97, 0xb4, 0xcd, 0xf5, 0x9e, 0xd4, 0xe8, 0xda, 0x51, 0x67, - 0x20, 0xd5, 0xd6, 0x7c, 0x53, 0xfd, 0x66, 0xf0, 0x67, 0x72, 0xa1, 0x41, 0x47, 0x5e, 0x46, 0xc9, - 0xc8, 0x85, 0x06, 0x15, 0x79, 0x29, 0x10, 0x91, 0x57, 0xd8, 0x69, 0xc8, 0xcb, 0x28, 0x09, 0xf3, - 0x69, 0xb3, 0x7d, 0x08, 0x79, 0x02, 0xfe, 0x50, 0x7b, 0x2b, 0x61, 0xf8, 0x60, 0xcb, 0x21, 0xe6, - 0x53, 0x06, 0x2c, 0xbe, 0x62, 0xfd, 0x86, 0xa7, 0x69, 0x8c, 0x08, 0xaa, 0x60, 0x88, 0x0c, 0xc2, - 0x93, 0x36, 0xa9, 0xe3, 0x5f, 0xa6, 0xa7, 0x6e, 0x83, 0x78, 0x0d, 0x1d, 0x27, 0x33, 0x44, 0xf8, - 0x20, 0x5a, 0x8e, 0x17, 0x85, 0xc9, 0xd8, 0x1e, 0x9e, 0xdf, 0x5e, 0x6a, 0xe0, 0x54, 0x6f, 0x20, - 0x31, 0x45, 0xd9, 0x6c, 0xe2, 0x6a, 0x6b, 0xdf, 0x22, 0x4b, 0x14, 0xa4, 0xc6, 0x6f, 0xaa, 0x97, - 0x1c, 0xe1, 0x0a, 0x56, 0x71, 0xb2, 0x0d, 0x99, 0xdf, 0x83, 0x20, 0x4c, 0x4f, 0x1d, 0xb3, 0x87, - 0x3e, 0x42, 0xda, 0x48, 0x02, 0x62, 0xe5, 0x24, 0x8a, 0x4f, 0x9b, 0x1f, 0x0e, 0x6d, 0x74, 0x5c, - 0x1b, 0xee, 0x86, 0xb9, 0x92, 0x8c, 0x1d, 0x49, 0x8d, 0x74, 0x3b, 0x5c, 0x35, 0x72, 0x4e, 0x16, - 0xbe, 0x19, 0x2d, 0x0e, 0xbb, 0x9b, 0x42, 0xa5, 0xab, 0xf3, 0x87, 0x39, 0x66, 0xf9, 0x96, 0xf1, - 0xcc, 0x2f, 0x11, 0x8b, 0x49, 0x2e, 0xf1, 0xf9, 0xbc, 0x3c, 0x0b, 0x3a, 0x51, 0xbf, 0xd8, 0x9b, - 0x9a, 0xf8, 0xda, 0x38, 0x66, 0xc3, 0xe8, 0xfc, 0x57, 0x1c, 0x2a, 0x31, 0xb7, 0x77, 0x62, 0x7e, - 0x7b, 0x94, 0x34, 0x67, 0x90, 0x53, 0xa5, 0x23, 0x9c, 0x60, 0x4f, 0x13, 0x0f, 0x5a, 0x7a, 0x1b, - 0x38, 0xc5, 0xf8, 0x03, 0xc1, 0x56, 0x77, 0xcb, 0x7a, 0x85, 0x46, 0x2d, 0xaf, 0xb8, 0x1b, 0xe9, - 0xd2, 0xcf, 0x4c, 0x66, 0x22, 0x23, 0xec, 0xf6, 0x64, 0x66, 0xd2, 0xd4, 0xa8, 0x19, 0x11, 0x3d, - 0x2f, 0x42, 0xa5, 0x43, 0x1b, 0xf8, 0xd2, 0xb9, 0x6b, 0x3b, 0x05, 0xf4, 0x9d, 0x74, 0xd5, 0x38, - 0xe1, 0xb7, 0x6c, 0xaf, 0x09, 0x1f, 0xe1, 0xd0, 0x62, 0x77, 0x50, 0x71, 0x97, 0x3e, 0x46, 0x46, - 0xfd, 0xf1, 0xfc, 0x97, 0x7c, 0x83, 0x8a, 0x1b, 0x34, 0x3b, 0x82, 0x2b, 0x6e, 0xa6, 0x74, 0xc9, - 0xf3, 0xe9, 0x58, 0xbd, 0x62, 0x44, 0x81, 0x72, 0x90, 0xc0, 0x93, 0xb1, 0x01, 0x3d, 0xda, 0xab, - 0x4d, 0x8e, 0x54, 0x3a, 0xb4, 0xbe, 0x33, 0x30, 0xeb, 0xcc, 0x80, 0xd6, 0x80, 0x5f, 0x21, 0x13, - 0x6a, 0x84, 0x2d, 0x92, 0xf3, 0x1b, 0x62, 0x1b, 0x2b, 0x25, 0xa3, 0x55, 0x3e, 0xff, 0x68, 0xd5, - 0x1a, 0xa8, 0x30, 0x64, 0x20, 0x04, 0x99, 0xf9, 0x0d, 0x21, 0x48, 0xbf, 0x71, 0x11, 0xd8, 0x47, - 0x72, 0x76, 0xac, 0x12, 0x62, 0x2d, 0xd1, 0xb1, 0x33, 0xfa, 0x3c, 0x35, 0xd1, 0x6f, 0x44, 0x3f, - 0x33, 0x73, 0x7f, 0x97, 0xe7, 0x70, 0x5f, 0x43, 0xc5, 0xcc, 0x06, 0xf8, 0x40, 0x59, 0x5f, 0x41, - 0x45, 0xe6, 0x1c, 0xfc, 0x56, 0x4f, 0xf0, 0x7e, 0x3b, 0xdb, 0x18, 0x1e, 0x51, 0xb4, 0x4d, 0xb0, - 0xa4, 0x5a, 0x26, 0xfa, 0x3e, 0x66, 0x8d, 0x53, 0x77, 0xc0, 0xc8, 0x75, 0x37, 0xd2, 0x69, 0x1a, - 0xb6, 0xee, 0x46, 0x3a, 0xa5, 0x77, 0x1a, 0x6c, 0x93, 0xee, 0xd0, 0x8c, 0x76, 0xe4, 0xac, 0x76, - 0xbd, 0x33, 0xfd, 0x49, 0x4f, 0x59, 0x94, 0x43, 0x45, 0xe6, 0x94, 0xe1, 0x37, 0xa1, 0xa2, 0x3d, - 0xcd, 0x4e, 0xe6, 0x18, 0xb7, 0x84, 0x9e, 0x48, 0x98, 0x50, 0x71, 0xb9, 0x39, 0x1d, 0xf0, 0x22, - 0xb6, 0x12, 0x78, 0x27, 0x2a, 0xa6, 0x1f, 0x4c, 0x6c, 0x50, 0xe2, 0x4c, 0xc5, 0xc2, 0x49, 0x44, - 0x1a, 0x9b, 0xab, 0x1a, 0x9b, 0x5a, 0xd6, 0xc9, 0xa3, 0x55, 0xd9, 0x42, 0x20, 0xd6, 0xcd, 0x4b, - 0x18, 0xd9, 0xce, 0x94, 0xde, 0xdd, 0xaa, 0xf4, 0x6b, 0xc1, 0x9e, 0x22, 0x6e, 0xb7, 0x1d, 0xfa, - 0x60, 0x29, 0x1e, 0x6f, 0x3e, 0xcc, 0xd1, 0x0d, 0x79, 0xab, 0x7e, 0x26, 0x75, 0xe2, 0x32, 0x23, - 0x60, 0xe3, 0x1d, 0x6b, 0x3a, 0xee, 0xaa, 0x81, 0xb3, 0xd4, 0x64, 0xfc, 0x58, 0x7a, 0xf2, 0x6b, - 0xfd, 0xe4, 0x8c, 0xab, 0x46, 0xb6, 0x53, 0xe7, 0x77, 0xa2, 0x95, 0x0c, 0x80, 0x69, 0x27, 0x91, - 0xbd, 0xb3, 0xd3, 0xc4, 0xd5, 0x59, 0x95, 0xa1, 0x2d, 0xce, 0xc6, 0xe3, 0x7f, 0x81, 0x96, 0xb5, - 0xfa, 0xfc, 0x0d, 0xbe, 0xdf, 0x1a, 0x4f, 0xc2, 0x6f, 0x50, 0xa5, 0x67, 0x05, 0x03, 0x26, 0x96, - 0x9a, 0x04, 0xf4, 0xd1, 0x88, 0x76, 0x7d, 0x08, 0xb8, 0x9c, 0x7e, 0xe2, 0xfa, 0x37, 0xd5, 0xcb, - 0x84, 0x25, 0xa5, 0xe9, 0x65, 0xe5, 0x7f, 0x25, 0x1b, 0xc8, 0x7c, 0x3d, 0x5a, 0xd6, 0xea, 0x3e, - 0x40, 0x68, 0x2d, 0x26, 0xb4, 0x5e, 0x26, 0x6e, 0x8b, 0x14, 0x26, 0xae, 0xcd, 0xaa, 0x12, 0xa6, - 0x78, 0xe9, 0x6a, 0x7e, 0x8a, 0x90, 0x85, 0xdf, 0x41, 0xce, 0x3d, 0x7c, 0x41, 0xc5, 0x4b, 0xa8, - 0x2e, 0x21, 0x54, 0x89, 0x69, 0x9d, 0x85, 0x8b, 0x4f, 0xb0, 0x94, 0xf5, 0xd1, 0x0b, 0xfa, 0xe8, - 0x59, 0x93, 0xac, 0xcc, 0x62, 0xf2, 0x6f, 0xd8, 0x6f, 0xb9, 0x90, 0x58, 0x2d, 0xd4, 0xb9, 0xe4, - 0x89, 0xec, 0xea, 0x11, 0x59, 0x65, 0x57, 0xbd, 0x13, 0x4f, 0x36, 0xea, 0x41, 0x78, 0x10, 0xad, - 0xa4, 0x6a, 0x9f, 0x33, 0x10, 0x68, 0xf1, 0x06, 0xf6, 0xfb, 0xa9, 0x22, 0xbe, 0x43, 0x95, 0xb6, - 0x09, 0xd9, 0x69, 0xe2, 0x6b, 0x59, 0x24, 0xe9, 0xd1, 0x7e, 0xff, 0xa7, 0xf0, 0x58, 0x89, 0x76, - 0xf8, 0xb6, 0x36, 0x70, 0x53, 0x3b, 0x36, 0xae, 0x8f, 0x5e, 0x30, 0x95, 0x98, 0x17, 0x37, 0x6c, - 0x48, 0x5d, 0x55, 0xe5, 0x6c, 0x5a, 0xfc, 0x15, 0x0e, 0x15, 0x85, 0xda, 0xf7, 0xf8, 0x15, 0x12, - 0xf4, 0xae, 0x90, 0x84, 0x5c, 0xa2, 0x47, 0x66, 0x16, 0x5c, 0xec, 0xc8, 0x69, 0x04, 0x29, 0x08, - 0xe4, 0xe0, 0x2b, 0x27, 0xb1, 0x28, 0x3c, 0xd2, 0x9d, 0x1a, 0xe9, 0x06, 0xe5, 0x9f, 0xcc, 0x50, - 0xfa, 0x74, 0x3c, 0x05, 0xe8, 0xd1, 0xfe, 0x54, 0xcf, 0x55, 0xad, 0xa7, 0x4f, 0x1b, 0x1e, 0xcc, - 0x8c, 0xc5, 0xb5, 0xf8, 0x50, 0x6a, 0x6c, 0x12, 0x73, 0x62, 0xf2, 0x2a, 0x74, 0x2a, 0x7e, 0x95, - 0x3c, 0xea, 0x7f, 0x51, 0xeb, 0x1f, 0x30, 0x21, 0x99, 0xcf, 0x4f, 0xcb, 0x56, 0x15, 0xf8, 0xb3, - 0x1c, 0x5a, 0xf2, 0xdb, 0x80, 0x5f, 0x31, 0xde, 0x3b, 0x07, 0xab, 0xba, 0x00, 0x30, 0x71, 0xff, - 0xfd, 0x54, 0x90, 0xbe, 0xac, 0x10, 0x8d, 0xb3, 0x15, 0x34, 0x60, 0xdf, 0xb2, 0x86, 0x50, 0x3e, - 0x7f, 0xab, 0x00, 0x15, 0x07, 0x95, 0x70, 0xf0, 0x60, 0x7d, 0xa0, 0xc5, 0xe7, 0x39, 0x48, 0x35, - 0x87, 0x8f, 0x0a, 0x54, 0x69, 0xa8, 0x40, 0x60, 0x53, 0xc4, 0xff, 0x87, 0xa3, 0xba, 0x16, 0x6c, - 0xec, 0xc6, 0x5b, 0x95, 0x58, 0xc8, 0xee, 0x1d, 0x48, 0x4f, 0x9d, 0x80, 0x47, 0x6e, 0xe6, 0x12, - 0x23, 0xae, 0xed, 0xdb, 0x6b, 0x6b, 0x5c, 0x52, 0x63, 0xed, 0x6e, 0xb9, 0xb6, 0x51, 0x7e, 0xb7, - 0x1c, 0xe6, 0xf5, 0x4f, 0xf4, 0x6b, 0x63, 0x15, 0x44, 0xfe, 0x73, 0xca, 0xb5, 0xdb, 0x6b, 0xeb, - 0x1a, 0xa5, 0x6d, 0xbb, 0x5d, 0x75, 0x8d, 0xb5, 0xf2, 0x2e, 0x69, 0x1b, 0xd6, 0x40, 0xea, 0x76, - 0x00, 0xfa, 0xdd, 0x48, 0x97, 0xa9, 0x71, 0x24, 0x63, 0xf1, 0x2c, 0x62, 0x78, 0x6f, 0x07, 0xeb, - 0xda, 0xa9, 0x5b, 0x74, 0x4b, 0x4c, 0x8c, 0x80, 0xf7, 0x36, 0xf4, 0xb8, 0xa6, 0x46, 0x71, 0xc3, - 0x80, 0xcd, 0x64, 0x22, 0xc3, 0xc9, 0x58, 0x44, 0xbb, 0x7e, 0x2e, 0x3d, 0x75, 0xc2, 0x90, 0x47, - 0x70, 0x13, 0x52, 0x67, 0x6f, 0x6a, 0x7d, 0xd7, 0xe9, 0x7a, 0x83, 0x86, 0x5c, 0x1b, 0xd3, 0x4f, - 0x5c, 0xa7, 0x0e, 0x1c, 0x10, 0x0b, 0x90, 0x10, 0xd5, 0x7a, 0xc6, 0x01, 0xe1, 0x6e, 0xa4, 0x4b, - 0x66, 0xbb, 0x83, 0xff, 0x2f, 0x1c, 0x5a, 0xdd, 0xda, 0xde, 0x12, 0xf6, 0xbd, 0x17, 0xf0, 0x2b, - 0x0d, 0xa4, 0x6c, 0xda, 0x85, 0x70, 0x64, 0xfd, 0x25, 0xa7, 0x4a, 0x53, 0x9c, 0x90, 0x1f, 0x47, - 0x3c, 0xc1, 0x69, 0x43, 0x53, 0x99, 0x48, 0xbf, 0x16, 0x49, 0xcc, 0x25, 0x46, 0xea, 0x65, 0xd7, - 0x0e, 0xd9, 0xd5, 0xf8, 0xee, 0x5c, 0x22, 0x5a, 0xfb, 0xf6, 0x4e, 0x69, 0x9b, 0xab, 0x11, 0x37, - 0xd4, 0x82, 0x8e, 0x18, 0xe7, 0x27, 0xe3, 0x99, 0xcf, 0x4f, 0x9b, 0xa3, 0x68, 0x4e, 0xdb, 0x64, - 0x6c, 0xd0, 0x9c, 0x0d, 0xec, 0x18, 0xdd, 0x8d, 0x74, 0x19, 0xe4, 0xe6, 0x12, 0x23, 0xd0, 0x2c, - 0x13, 0xf1, 0x6e, 0xa4, 0x13, 0x72, 0xeb, 0xa3, 0xf1, 0x64, 0x62, 0x44, 0x3b, 0xd7, 0x9b, 0x1e, - 0x1b, 0x93, 0xf3, 0x57, 0x97, 0xbf, 0xca, 0xa1, 0x55, 0x41, 0xa5, 0xad, 0xc5, 0xed, 0x51, 0x76, - 0xfa, 0xf7, 0x29, 0xee, 0x96, 0xf0, 0x3e, 0xf0, 0x29, 0x2d, 0xac, 0xfe, 0x9d, 0x2a, 0x1d, 0x10, - 0x72, 0x12, 0x45, 0x2f, 0xd8, 0x25, 0x52, 0x67, 0x8f, 0xe9, 0x83, 0x57, 0xb1, 0xae, 0xd1, 0x79, - 0x59, 0x8b, 0xdf, 0xa6, 0xf2, 0xc5, 0xd9, 0x59, 0x7d, 0xe0, 0x63, 0x7d, 0x74, 0x40, 0x3b, 0x32, - 0x66, 0x37, 0x56, 0xdc, 0x8d, 0x74, 0xa5, 0x67, 0xcf, 0xa7, 0xa6, 0x27, 0x36, 0x6a, 0x7d, 0x87, - 0x33, 0xea, 0x85, 0x36, 0x9f, 0xbf, 0x29, 0x19, 0x1b, 0xc0, 0xb2, 0x5c, 0xdf, 0x99, 0xf4, 0xd5, - 0xc3, 0xc9, 0x58, 0xdc, 0xa4, 0x35, 0x97, 0xe8, 0x94, 0x73, 0xca, 0xe5, 0xff, 0x86, 0x43, 0xc5, - 0x21, 0xe0, 0xe7, 0xe4, 0x61, 0x72, 0x38, 0xcb, 0xff, 0xef, 0x39, 0x55, 0xfa, 0x27, 0x9c, 0xc0, - 0xa6, 0x88, 0x5f, 0x71, 0x74, 0x26, 0x11, 0xa3, 0xdb, 0x5c, 0x22, 0xea, 0xdc, 0x26, 0x35, 0x34, - 0xb8, 0x9c, 0xbb, 0x1b, 0x9c, 0xd2, 0x36, 0x57, 0xdd, 0x96, 0x72, 0xa8, 0x57, 0x05, 0xe9, 0x3a, - 0x3a, 0xe5, 0xe8, 0xbe, 0x65, 0x48, 0xb7, 0x58, 0x9b, 0x4b, 0x18, 0xb3, 0x91, 0xbc, 0xfa, 0x62, - 0xc0, 0xcf, 0xbe, 0x23, 0x6d, 0xad, 0xdd, 0xbd, 0xb3, 0x7e, 0x77, 0x43, 0xe3, 0x8e, 0xfa, 0xfa, - 0xda, 0x1a, 0x83, 0xe8, 0x5c, 0x62, 0xc4, 0xcc, 0xa1, 0xf5, 0x7c, 0x89, 0xfb, 0x3e, 0x36, 0x00, - 0x59, 0xe7, 0x12, 0x51, 0xb3, 0x1c, 0xfa, 0xe6, 0xfc, 0xf1, 0x4b, 0x99, 0xc3, 0x2a, 0xa0, 0x99, - 0x23, 0x2a, 0xb3, 0x8d, 0xe0, 0x3b, 0x10, 0x0a, 0xfb, 0x5a, 0x15, 0xd9, 0xed, 0x6f, 0x52, 0x42, - 0xa5, 0x2b, 0xf2, 0x3b, 0xc6, 0x36, 0x1a, 0x18, 0xe0, 0xaa, 0xc1, 0xe4, 0x10, 0x05, 0x6d, 0x72, - 0x44, 0x3f, 0x75, 0x8b, 0x35, 0x96, 0xb3, 0xaf, 0xd9, 0xd8, 0xce, 0x45, 0x99, 0x7c, 0x7c, 0x27, - 0x07, 0x46, 0xa4, 0x9d, 0x6d, 0x4d, 0x41, 0xb7, 0x57, 0x21, 0x0a, 0x79, 0x61, 0xf5, 0x6e, 0x55, - 0xfa, 0x95, 0xc0, 0xc2, 0xb1, 0x0c, 0x80, 0xa7, 0x01, 0xb5, 0xb3, 0x0e, 0xf4, 0xa6, 0xe2, 0x57, - 0xb7, 0x6c, 0xad, 0xa5, 0x0f, 0x60, 0x12, 0x4f, 0x86, 0x4a, 0xf0, 0xf5, 0x31, 0xc2, 0x17, 0xc6, - 0xb5, 0xa1, 0x63, 0x5a, 0xec, 0x10, 0x60, 0x54, 0x6a, 0x7d, 0x67, 0xb4, 0x44, 0x5c, 0xeb, 0xbb, - 0x45, 0x23, 0xf7, 0xb2, 0xb4, 0x79, 0x37, 0x2a, 0xa6, 0x56, 0x75, 0x39, 0xd0, 0xa2, 0x50, 0x45, - 0x9c, 0x98, 0x8b, 0x58, 0xb8, 0x58, 0x05, 0x83, 0xa6, 0x34, 0x87, 0x2c, 0xe9, 0xf6, 0xd4, 0x2d, - 0x10, 0xb0, 0x53, 0x23, 0xdd, 0x3e, 0x77, 0x6b, 0xfa, 0xaa, 0x9a, 0xee, 0xff, 0xc2, 0x90, 0x81, - 0x98, 0xbc, 0x65, 0xe9, 0x02, 0x54, 0x64, 0xf6, 0x1e, 0xff, 0x33, 0xf6, 0x19, 0xf8, 0x6a, 0x81, - 0x71, 0x88, 0x83, 0x5e, 0x84, 0x8d, 0xec, 0xc3, 0xc0, 0x1e, 0xe3, 0xb2, 0xbe, 0x19, 0xe4, 0x17, - 0xcc, 0x90, 0xb5, 0xa8, 0x30, 0xe4, 0xd9, 0xa7, 0x90, 0xd7, 0xfd, 0x41, 0x56, 0xa9, 0x50, 0xa5, - 0x27, 0x05, 0x13, 0x28, 0xae, 0x02, 0x3a, 0x9e, 0x60, 0xc0, 0x0f, 0x8e, 0x22, 0x0c, 0x09, 0x13, - 0x8b, 0xf7, 0xa0, 0xc5, 0x98, 0xc5, 0x51, 0x43, 0x26, 0xd9, 0x69, 0x09, 0x40, 0xac, 0xb1, 0x65, - 0xd7, 0xa2, 0x71, 0xda, 0xb7, 0x58, 0x9f, 0x20, 0xcf, 0xd2, 0x02, 0x54, 0xeb, 0x3b, 0x63, 0x3e, - 0x06, 0x00, 0x8b, 0x10, 0x94, 0x11, 0x48, 0x95, 0x09, 0x2d, 0xfe, 0x4d, 0x84, 0xa8, 0x9c, 0x00, - 0xe7, 0x13, 0x78, 0x53, 0x27, 0x2e, 0x80, 0x0c, 0x58, 0x5c, 0x09, 0xb2, 0x05, 0xed, 0xd7, 0x13, - 0xd7, 0x65, 0x26, 0x71, 0x13, 0x16, 0x4b, 0x50, 0xb9, 0x60, 0xf5, 0x9f, 0xf8, 0x84, 0x21, 0x6c, - 0x29, 0x6c, 0x7f, 0xd1, 0x47, 0xab, 0x8f, 0x14, 0xa0, 0xc2, 0x1a, 0x77, 0xd8, 0x5d, 0xe3, 0x0b, - 0x35, 0xf3, 0x27, 0x38, 0x54, 0xe8, 0xf5, 0x85, 0x9a, 0xad, 0x50, 0xa7, 0xd5, 0x07, 0x55, 0xa9, - 0x43, 0x30, 0x81, 0xe2, 0x87, 0x10, 0xf0, 0x2e, 0x75, 0xf6, 0xb4, 0xe9, 0xc8, 0xb8, 0x6d, 0x87, - 0x53, 0xda, 0xb6, 0xbb, 0x5a, 0x6a, 0x70, 0x39, 0xe7, 0x12, 0x7d, 0xd0, 0xc4, 0xb9, 0x44, 0x7f, - 0x25, 0xc0, 0x1b, 0x1a, 0x6a, 0x2a, 0x9d, 0xdb, 0x76, 0xec, 0xac, 0xc1, 0x18, 0xb5, 0xf4, 0xa7, - 0x05, 0xac, 0x97, 0x6b, 0xb7, 0xbb, 0x76, 0x6e, 0x2f, 0xcf, 0x7c, 0x7e, 0x5a, 0x8f, 0x5c, 0x4d, - 0x1f, 0x9a, 0x49, 0xc6, 0x8f, 0xa5, 0xc6, 0xae, 0xa5, 0xce, 0x9e, 0xae, 0x90, 0xcd, 0x52, 0xf9, - 0xbd, 0x50, 0x2d, 0x22, 0x7c, 0x31, 0xaf, 0x60, 0x9b, 0x40, 0xf1, 0x75, 0xb3, 0x5a, 0x78, 0x6b, - 0xb9, 0x8e, 0xd9, 0xca, 0xc6, 0x0d, 0x5b, 0xd2, 0x5f, 0xdd, 0x4e, 0xdf, 0xfe, 0xd2, 0x64, 0x75, - 0xc9, 0x58, 0x7c, 0x03, 0xc4, 0xb5, 0xdd, 0x80, 0xd7, 0x7a, 0x6c, 0x20, 0x7d, 0x73, 0x22, 0x79, - 0xe7, 0xba, 0x6c, 0x92, 0x29, 0x8b, 0x2e, 0x41, 0x25, 0x44, 0x12, 0xff, 0xfb, 0x1e, 0x01, 0x32, - 0xfc, 0x36, 0x84, 0xf6, 0xfa, 0x5a, 0x94, 0x06, 0x78, 0xc7, 0x7c, 0x11, 0xe3, 0x9e, 0x63, 0x81, - 0xc5, 0x27, 0xf4, 0x93, 0xbd, 0xe6, 0x5b, 0xe6, 0xe5, 0xca, 0x81, 0xf0, 0x8b, 0xeb, 0x95, 0x03, - 0xe1, 0x97, 0xd6, 0x1f, 0xd8, 0x1b, 0xaa, 0x90, 0x19, 0x44, 0xfe, 0x43, 0xc4, 0xe3, 0xb9, 0xb8, - 0x39, 0x10, 0x6c, 0x75, 0x87, 0x25, 0xbf, 0x77, 0xbb, 0xf9, 0x82, 0x41, 0x21, 0xc4, 0xca, 0xca, - 0x93, 0x2c, 0x3e, 0x43, 0xbd, 0x75, 0xcc, 0xa7, 0xd3, 0xc8, 0xd3, 0x23, 0xb8, 0x61, 0x77, 0x6e, - 0xe9, 0xd1, 0xae, 0xf4, 0xcc, 0x8c, 0x9c, 0x27, 0x1b, 0xff, 0x26, 0x2a, 0x6e, 0xc5, 0x3f, 0x1a, - 0xdd, 0xc1, 0x26, 0x25, 0x4c, 0xaf, 0xe6, 0xac, 0x55, 0xa5, 0x27, 0x04, 0x16, 0x2e, 0x2e, 0x07, - 0x12, 0xa9, 0xb3, 0x93, 0xda, 0xcc, 0x09, 0x99, 0x4d, 0xe2, 0xff, 0x80, 0x4a, 0x70, 0x3f, 0xd4, - 0xbb, 0x83, 0x61, 0x1f, 0xf1, 0x77, 0x02, 0x61, 0x9d, 0xbc, 0x2b, 0x65, 0x4f, 0x11, 0x6b, 0x81, - 0x4a, 0x7a, 0xf2, 0x6b, 0xed, 0x52, 0xaf, 0x36, 0x3c, 0xa0, 0xf7, 0x9d, 0xd4, 0xfa, 0x0e, 0xe3, - 0x45, 0x3f, 0x3c, 0x00, 0x7e, 0x62, 0xc9, 0xd8, 0xf1, 0xe4, 0x74, 0x8f, 0x36, 0xf3, 0x11, 0xbc, - 0xb9, 0xa9, 0xdd, 0xfe, 0x42, 0x1f, 0xed, 0x37, 0xdf, 0xb7, 0x03, 0x43, 0xa8, 0x6c, 0xa7, 0x5a, - 0x36, 0xb4, 0x04, 0xf1, 0xe0, 0x15, 0xa1, 0x84, 0x25, 0x8f, 0x47, 0x09, 0x85, 0x7c, 0x7b, 0x5a, - 0x14, 0x7e, 0xac, 0x00, 0xf1, 0x3e, 0x0a, 0x76, 0xee, 0xc3, 0x75, 0x65, 0x66, 0xe7, 0x7f, 0xe5, - 0x54, 0xe9, 0x6f, 0x38, 0x21, 0x0f, 0x82, 0xf8, 0x3f, 0x73, 0x70, 0x50, 0x95, 0x9e, 0x1c, 0x4b, - 0xdf, 0xbc, 0x03, 0xb3, 0xf5, 0x6e, 0xa4, 0xab, 0x5a, 0xaa, 0xab, 0x79, 0xc7, 0x55, 0xd3, 0xf8, - 0x16, 0x9e, 0x7a, 0xf5, 0x12, 0x96, 0x75, 0x47, 0x32, 0x1f, 0x77, 0x27, 0xa7, 0x4f, 0xa7, 0x6f, - 0xde, 0xd1, 0xa3, 0xfd, 0x5a, 0xec, 0x8a, 0x36, 0x39, 0x93, 0x9a, 0xfe, 0x28, 0x35, 0x79, 0x6a, - 0x2e, 0x11, 0x6d, 0x94, 0xa5, 0xcd, 0x9b, 0x5d, 0xce, 0xdd, 0xf5, 0x3b, 0x1a, 0x1a, 0x31, 0xf6, - 0xee, 0xea, 0x77, 0x77, 0xbf, 0xb5, 0x63, 0xa7, 0x8c, 0xf7, 0xeb, 0xaf, 0x3a, 0x33, 0xbd, 0x43, - 0x38, 0xcb, 0xf5, 0x21, 0xcc, 0xd5, 0x86, 0x07, 0x81, 0xc8, 0x5c, 0x22, 0xca, 0x14, 0x92, 0x9b, - 0x0f, 0x4a, 0xb8, 0x57, 0x3e, 0xc9, 0xb9, 0x55, 0xda, 0x52, 0x6b, 0xa2, 0x6b, 0xd1, 0x1e, 0x30, - 0xdb, 0xc8, 0x79, 0xda, 0xca, 0x1f, 0xe5, 0xd0, 0x23, 0x06, 0x78, 0xbb, 0xfb, 0x40, 0xb5, 0xdb, - 0xef, 0xdd, 0xef, 0xf3, 0x86, 0xf7, 0xd1, 0xc5, 0xf2, 0x8e, 0x2a, 0x35, 0x0a, 0x79, 0x11, 0xc4, - 0x9f, 0x6a, 0x3d, 0xd7, 0x52, 0x33, 0xc7, 0xb4, 0xde, 0x38, 0x94, 0x93, 0x8c, 0x1d, 0xc9, 0x9c, - 0x19, 0xc6, 0x83, 0x38, 0x70, 0x22, 0x39, 0x33, 0x30, 0x97, 0x18, 0xd9, 0xbe, 0xa7, 0x2d, 0xc4, - 0x8a, 0xcb, 0x73, 0x89, 0x91, 0x0d, 0x14, 0x26, 0xe7, 0xa5, 0xc9, 0x37, 0xa3, 0x55, 0x6d, 0xed, - 0x7b, 0x5a, 0x7c, 0x1e, 0x57, 0xbd, 0x14, 0x0a, 0xf9, 0x9a, 0xfc, 0x8a, 0x97, 0xfa, 0x68, 0x93, - 0x7d, 0x33, 0x27, 0x51, 0x2c, 0xa7, 0x87, 0x4c, 0x70, 0x42, 0x4a, 0x2a, 0xe4, 0xaa, 0x37, 0xcb, - 0x4c, 0xc6, 0xe2, 0x86, 0xd8, 0x26, 0xe7, 0xe4, 0xe5, 0xdf, 0x43, 0xfc, 0x1e, 0xa3, 0xe4, 0x7a, - 0xb7, 0xa7, 0xd9, 0xdd, 0xa4, 0xb8, 0xbc, 0xf4, 0x80, 0x8c, 0x9c, 0xa6, 0xe4, 0x49, 0x16, 0x1f, - 0x02, 0xe7, 0x21, 0xb3, 0x6b, 0x5d, 0x35, 0x72, 0x1e, 0xb4, 0xb2, 0xf8, 0xe3, 0xe8, 0x51, 0x97, - 0xf1, 0x5a, 0x1c, 0x35, 0x8c, 0xd2, 0x97, 0x61, 0x5f, 0x33, 0xcf, 0xe2, 0x38, 0xcb, 0xee, 0x61, - 0x9c, 0xc5, 0x3d, 0x62, 0x3c, 0x31, 0xc7, 0x5e, 0xf8, 0x30, 0x4f, 0xe0, 0x5e, 0xa0, 0x3b, 0x6b, - 0x81, 0x75, 0x1b, 0x0e, 0x76, 0xd6, 0xe5, 0x96, 0x7c, 0x7d, 0xe1, 0x02, 0xdd, 0x21, 0x37, 0xd8, - 0x2f, 0xe1, 0x92, 0x53, 0x48, 0xaa, 0x3a, 0xaf, 0xa0, 0x97, 0x9b, 0xc8, 0x2c, 0xb7, 0xb4, 0xe5, - 0x7a, 0x54, 0x68, 0xa8, 0x85, 0xb4, 0x1b, 0x5e, 0x52, 0xa5, 0x8d, 0x82, 0x09, 0x14, 0x7f, 0x6c, - 0x68, 0x9d, 0xf0, 0xe2, 0x21, 0x53, 0x26, 0x31, 0xf0, 0x47, 0x20, 0x1c, 0x95, 0x6c, 0x66, 0xe0, - 0xdf, 0x40, 0x85, 0xee, 0xb6, 0xb6, 0x96, 0x83, 0x78, 0x8f, 0x06, 0x63, 0x00, 0x69, 0xad, 0x09, - 0x14, 0x79, 0xb0, 0x5f, 0x9b, 0xda, 0x7f, 0xa6, 0x77, 0x48, 0x36, 0x53, 0xf9, 0x26, 0xb4, 0xc8, - 0x59, 0xbf, 0x93, 0xb0, 0x93, 0x92, 0xea, 0x9d, 0xaa, 0x24, 0x0b, 0xf8, 0x5b, 0xdc, 0x8a, 0xe5, - 0xcd, 0xf3, 0x47, 0x9d, 0xf5, 0x3b, 0x99, 0x57, 0xa9, 0x06, 0x01, 0xc8, 0x3e, 0xd1, 0x97, 0x8c, - 0xab, 0xfa, 0xc9, 0xcb, 0x58, 0x6e, 0x9d, 0x3a, 0x6e, 0x83, 0xb3, 0x7a, 0x26, 0xa6, 0x88, 0x0b, - 0xda, 0xae, 0xb4, 0x52, 0xdb, 0x00, 0x14, 0xb4, 0x5d, 0x69, 0x35, 0x0a, 0xda, 0xae, 0xb4, 0x7e, - 0x1f, 0x05, 0x6d, 0x57, 0x5a, 0xf9, 0xfd, 0x68, 0xd1, 0x96, 0xfa, 0x9d, 0xc4, 0x9f, 0xa6, 0xa4, - 0x5a, 0x51, 0xa5, 0x3d, 0x02, 0xfe, 0x16, 0xdf, 0x07, 0x9a, 0x5b, 0xbe, 0x8f, 0x16, 0x59, 0xde, - 0xea, 0x89, 0x11, 0xbc, 0x61, 0xc9, 0xb8, 0x04, 0xfe, 0x93, 0xec, 0xe7, 0x14, 0x21, 0x10, 0xd1, - 0x1f, 0x54, 0xe9, 0xaf, 0xb3, 0x9e, 0x53, 0x6c, 0x81, 0x62, 0xa9, 0x21, 0x8c, 0xb9, 0xa7, 0x9a, - 0x3e, 0x4a, 0x1d, 0xd6, 0x9d, 0xf5, 0x3b, 0xf1, 0xf0, 0x1f, 0xee, 0xd1, 0x26, 0x4e, 0x83, 0x69, - 0x8c, 0xe8, 0xc2, 0x03, 0x20, 0x0a, 0x9b, 0x9b, 0x66, 0xba, 0xf7, 0xb3, 0xf4, 0x58, 0x54, 0x1b, - 0x26, 0x6f, 0x1c, 0x5e, 0xbf, 0x91, 0x9e, 0x3d, 0xa6, 0x45, 0xb1, 0xc4, 0xce, 0xd2, 0xcf, 0x7a, - 0x53, 0xf1, 0xdf, 0x11, 0x8e, 0x0d, 0x00, 0x86, 0x63, 0x83, 0xd2, 0xff, 0x69, 0x81, 0x2a, 0xfd, - 0x37, 0xc2, 0xb1, 0xb3, 0x11, 0xc4, 0x24, 0x07, 0x44, 0x81, 0x63, 0x63, 0x8d, 0x89, 0xc8, 0x17, - 0x61, 0xc5, 0xef, 0x51, 0xfc, 0x70, 0xbb, 0x4a, 0x8b, 0xf6, 0x68, 0xc3, 0x9f, 0x67, 0x33, 0xd5, - 0xbc, 0xbc, 0xb4, 0xa1, 0x7e, 0x07, 0x41, 0x4a, 0x7d, 0x7e, 0x3e, 0x39, 0x7d, 0xdb, 0x04, 0x53, - 0xae, 0x8f, 0x09, 0xdd, 0xb9, 0xa9, 0x45, 0x7b, 0xf4, 0xd1, 0xbe, 0xbb, 0x91, 0x2e, 0xf7, 0xfe, - 0x10, 0x90, 0xde, 0x51, 0xb7, 0xbb, 0xa6, 0x76, 0xbb, 0x54, 0x57, 0xa3, 0x47, 0xfb, 0x33, 0xa3, - 0x11, 0xc8, 0x56, 0x89, 0x69, 0xb1, 0x74, 0xee, 0x46, 0xba, 0xb4, 0x2b, 0x5d, 0x58, 0x82, 0x20, - 0x47, 0x28, 0xe0, 0x7e, 0xa8, 0x8f, 0x74, 0x99, 0xf6, 0x02, 0xf0, 0x40, 0x64, 0x0b, 0x49, 0x8d, - 0x74, 0x1b, 0x71, 0x6c, 0x9f, 0x0f, 0xfe, 0x58, 0x5e, 0x46, 0xeb, 0x21, 0xaf, 0xca, 0x6e, 0x8c, - 0x5c, 0x68, 0xd4, 0x5c, 0xce, 0xd3, 0x49, 0xfc, 0x00, 0x87, 0x50, 0x88, 0xc8, 0x17, 0x58, 0x62, - 0xa3, 0x37, 0x3a, 0x73, 0xe2, 0x11, 0x18, 0x12, 0x5d, 0x75, 0x83, 0x2a, 0xd5, 0x0b, 0x4c, 0x06, - 0xb1, 0x9a, 0xbe, 0xd8, 0x79, 0xf6, 0x74, 0xae, 0xeb, 0x24, 0xb4, 0x26, 0x19, 0x8b, 0xdb, 0xa4, - 0xb1, 0xb3, 0x64, 0x32, 0x12, 0xb1, 0x2a, 0x19, 0x8b, 0xff, 0x64, 0xc3, 0x16, 0x99, 0xa1, 0xc7, - 0x5f, 0xe3, 0x50, 0x91, 0x97, 0x96, 0x16, 0x2a, 0x5d, 0x4e, 0x74, 0xc3, 0xf9, 0xab, 0x13, 0x56, - 0xa5, 0xdf, 0x08, 0x16, 0xbe, 0xe8, 0x35, 0xe5, 0x36, 0xb3, 0x36, 0xfa, 0xa9, 0x8b, 0x6c, 0x6d, - 0xc8, 0x55, 0x78, 0x2a, 0xa9, 0x95, 0x6b, 0xb7, 0xbf, 0xd0, 0xe2, 0x17, 0xb4, 0xc4, 0x21, 0x7d, - 0xb0, 0x1f, 0xab, 0xc5, 0xc4, 0xab, 0x17, 0x9c, 0xba, 0x1d, 0x36, 0x49, 0x16, 0x1c, 0xc3, 0x21, - 0xd4, 0x6e, 0x85, 0x6c, 0x15, 0xc8, 0xb7, 0xa1, 0x22, 0x5f, 0x2b, 0xe6, 0xee, 0xfe, 0xbd, 0x01, - 0x1a, 0x3b, 0x25, 0x47, 0x93, 0x75, 0x19, 0x08, 0xe0, 0x5c, 0x63, 0x65, 0x60, 0x8f, 0x9c, 0x86, - 0xa7, 0xb0, 0x2e, 0x0b, 0x96, 0x29, 0xb2, 0x9e, 0x32, 0x27, 0x46, 0xb5, 0x43, 0x43, 0xc6, 0x81, - 0x85, 0x99, 0x87, 0xef, 0xe1, 0xd0, 0x43, 0x3e, 0xbf, 0x2f, 0xbc, 0x2d, 0xd0, 0xe4, 0xf3, 0xd7, - 0xbb, 0x43, 0xa1, 0xfd, 0x81, 0xa0, 0x97, 0x3a, 0xf0, 0x93, 0x8d, 0x39, 0x37, 0x55, 0xfc, 0x79, - 0xd6, 0xd1, 0x16, 0x74, 0x45, 0x1b, 0x4d, 0xb6, 0x14, 0x2e, 0x80, 0xc3, 0x88, 0x82, 0xc4, 0x08, - 0x8f, 0xd7, 0xc9, 0xb9, 0x34, 0xf9, 0x0b, 0x1c, 0x5a, 0x15, 0x62, 0x9f, 0x1a, 0x75, 0xd5, 0x84, - 0x4a, 0x57, 0x12, 0x63, 0x61, 0x48, 0x95, 0xda, 0x84, 0x9c, 0x44, 0xf1, 0x57, 0x56, 0x2d, 0x8c, - 0xc7, 0x4d, 0x4d, 0x9f, 0x15, 0x57, 0x0d, 0x5c, 0xff, 0x33, 0xaf, 0xd1, 0x60, 0xce, 0x41, 0x42, - 0x1f, 0x98, 0x67, 0xbf, 0x50, 0x2d, 0xfa, 0x04, 0xe9, 0x48, 0xb7, 0x49, 0x83, 0x76, 0x51, 0x4e, - 0x79, 0x58, 0x8a, 0x79, 0xc8, 0x17, 0x32, 0x9e, 0x43, 0xa5, 0x6f, 0x3b, 0x12, 0x8d, 0xbb, 0xb0, - 0xfa, 0x03, 0x55, 0x7a, 0x4f, 0xc8, 0x4d, 0x15, 0x6b, 0xf3, 0x8e, 0x08, 0xeb, 0xb4, 0x92, 0x8c, - 0x1f, 0x83, 0xa2, 0x2b, 0x1d, 0x99, 0x48, 0xbf, 0x36, 0xf6, 0xb9, 0x03, 0xae, 0x2c, 0xd8, 0x1e, - 0xeb, 0xc9, 0xa5, 0x4c, 0xde, 0xcf, 0xf5, 0x85, 0xb6, 0x07, 0xfc, 0xbe, 0x70, 0x20, 0x68, 0x54, - 0xe6, 0x21, 0x52, 0x19, 0x78, 0x3f, 0x37, 0x3b, 0x91, 0x1d, 0xb5, 0xf9, 0xeb, 0x02, 0xb6, 0x2a, - 0xb3, 0x2e, 0xb6, 0x5a, 0xe4, 0x90, 0xe4, 0xff, 0x4f, 0x0e, 0x41, 0x18, 0xec, 0x1a, 0x73, 0x89, - 0xf1, 0xf9, 0x1f, 0xf5, 0xb7, 0x4d, 0xff, 0xea, 0x6b, 0x9c, 0x2a, 0x8d, 0x73, 0x42, 0x56, 0x5e, - 0xf1, 0x04, 0x67, 0x6a, 0xd1, 0xec, 0xaa, 0x2b, 0x07, 0xde, 0x97, 0xfa, 0xa4, 0x33, 0x75, 0xf6, - 0x34, 0xc8, 0xf6, 0xd4, 0x43, 0x63, 0xfa, 0xb2, 0x36, 0x74, 0x84, 0xbe, 0x10, 0x19, 0x3d, 0xc9, - 0x46, 0x3c, 0xd7, 0xfb, 0x6e, 0xa7, 0x8f, 0x5e, 0x4e, 0xc6, 0x06, 0x40, 0x98, 0xd7, 0x86, 0xa6, - 0xe8, 0x4e, 0x41, 0x02, 0x5b, 0x9b, 0x59, 0x80, 0x5a, 0xc5, 0xc2, 0xeb, 0x5a, 0xce, 0xaa, 0x27, - 0xef, 0x61, 0x96, 0xcc, 0xce, 0x90, 0x12, 0x24, 0x06, 0x11, 0xb8, 0xe3, 0x40, 0x2e, 0xdb, 0xe7, - 0xa6, 0xe6, 0x38, 0xcb, 0x40, 0x29, 0xed, 0x34, 0x59, 0xce, 0xcd, 0xc1, 0x77, 0x72, 0x68, 0x59, - 0xb3, 0x72, 0xb0, 0xde, 0xed, 0x0b, 0xd2, 0xbb, 0x0d, 0x39, 0xf7, 0x38, 0xb7, 0x2a, 0x07, 0x09, - 0x1f, 0x20, 0x3e, 0x2e, 0x06, 0xb2, 0xf8, 0xa6, 0xf1, 0xea, 0x7a, 0x67, 0x46, 0xbd, 0x6c, 0x5c, - 0x2d, 0x49, 0xc6, 0x06, 0xb5, 0xa9, 0xc3, 0xa9, 0x8b, 0x9d, 0x62, 0x26, 0xd2, 0x9f, 0x8c, 0x45, - 0xe6, 0x12, 0x51, 0x31, 0x1d, 0xe9, 0xd1, 0xce, 0xf5, 0x52, 0xae, 0x0a, 0xc6, 0xb6, 0xa9, 0xc3, - 0x19, 0xf5, 0xb2, 0x6c, 0x90, 0x82, 0xf7, 0xf9, 0x03, 0x9e, 0x66, 0x25, 0xb8, 0x25, 0xe8, 0x6e, - 0xdb, 0x57, 0xef, 0x0e, 0xef, 0x23, 0x77, 0x1d, 0x8a, 0xe0, 0x36, 0x5e, 0x76, 0x9a, 0x58, 0x4b, - 0x1f, 0x97, 0x9e, 0x1d, 0xa6, 0x86, 0x96, 0xc9, 0x3b, 0xda, 0x99, 0x71, 0x50, 0xe7, 0x72, 0x39, - 0xf9, 0x7a, 0xcc, 0xf7, 0xd6, 0xef, 0xf1, 0x84, 0xd6, 0x53, 0x73, 0xd3, 0x7a, 0xa0, 0x27, 0x67, - 0xd3, 0xe5, 0x3f, 0xe6, 0x50, 0xa1, 0x3f, 0xe0, 0x05, 0x1b, 0x17, 0x9c, 0x8b, 0xf7, 0x70, 0xaa, - 0xd4, 0xc9, 0x09, 0x26, 0x58, 0x6c, 0xa7, 0x65, 0x13, 0x3b, 0x56, 0xa5, 0x43, 0x1b, 0x3a, 0xa9, - 0x45, 0x12, 0x9b, 0xb6, 0x4b, 0x0d, 0x8d, 0xb5, 0xf2, 0xee, 0xda, 0x46, 0x67, 0x4d, 0xa5, 0xe3, - 0x9d, 0x1d, 0xf2, 0xd6, 0x5a, 0xf9, 0x6e, 0xa4, 0x8b, 0x81, 0x6a, 0x43, 0x9f, 0xe9, 0xa3, 0xfd, - 0xda, 0xe8, 0x38, 0x58, 0xc8, 0x1c, 0xae, 0xba, 0x9a, 0xda, 0xfa, 0xda, 0xba, 0x9a, 0xda, 0xba, - 0xc6, 0xdd, 0xce, 0x6d, 0x3b, 0x31, 0x9e, 0x23, 0x75, 0xf4, 0x5a, 0xea, 0x73, 0x7a, 0xb3, 0xcc, - 0xd4, 0x0f, 0xc1, 0x78, 0x26, 0x9b, 0x15, 0xe0, 0x2f, 0x72, 0x68, 0xa9, 0x87, 0xec, 0x84, 0xf4, - 0x2c, 0x3c, 0xc7, 0xd3, 0xc9, 0x65, 0xdb, 0x2f, 0xeb, 0x83, 0x4a, 0x9b, 0xdb, 0xe7, 0x85, 0x63, - 0x43, 0x9a, 0x53, 0x6c, 0x34, 0xfd, 0xb7, 0x2c, 0x31, 0x23, 0x31, 0x84, 0x37, 0xf4, 0x99, 0x8f, - 0x72, 0xb7, 0xdb, 0x64, 0x2c, 0xce, 0x6e, 0xe2, 0xfa, 0x29, 0x2c, 0x18, 0x51, 0xae, 0x3b, 0x3d, - 0x81, 0xf5, 0x4a, 0x72, 0x1e, 0x21, 0x53, 0xea, 0x7c, 0x1f, 0x87, 0x56, 0xf8, 0x6c, 0x3a, 0x6c, - 0x69, 0x29, 0xa9, 0x6a, 0x59, 0x6e, 0x55, 0xb3, 0x35, 0x5d, 0xf0, 0xc0, 0xcb, 0xca, 0x2e, 0x3e, - 0x0f, 0xfa, 0x10, 0x75, 0xd1, 0x31, 0xc4, 0x0d, 0xf3, 0x0e, 0x4f, 0x26, 0x42, 0x2f, 0x25, 0xca, - 0x59, 0x19, 0xcb, 0xfe, 0xcd, 0x62, 0xb4, 0x3a, 0x6f, 0x7f, 0xf0, 0x1f, 0x71, 0x68, 0x69, 0x9b, - 0x12, 0xf4, 0x05, 0xbc, 0xf4, 0xc8, 0x97, 0x58, 0xd7, 0x29, 0x48, 0xf4, 0xc3, 0x9a, 0x34, 0xbb, - 0x09, 0x8f, 0xc7, 0x89, 0x59, 0x56, 0x23, 0x04, 0x91, 0x09, 0xc6, 0x3f, 0x1d, 0x3d, 0xa4, 0x9d, - 0xbd, 0x39, 0x97, 0x18, 0xd9, 0x58, 0xe9, 0x10, 0x2b, 0x1d, 0x2f, 0x56, 0x3a, 0x5e, 0xaa, 0x74, - 0xfc, 0xa4, 0xd2, 0xf1, 0x72, 0xa5, 0xe3, 0x95, 0x4a, 0xc7, 0xab, 0x95, 0x8e, 0xd7, 0x2a, 0x1d, - 0x1b, 0x37, 0x54, 0x3a, 0x36, 0x6e, 0xac, 0x74, 0x6c, 0x14, 0x2b, 0x1d, 0xe2, 0x4b, 0x95, 0x8e, - 0x17, 0x5f, 0xae, 0x74, 0xbc, 0xf4, 0x6a, 0xa5, 0xe3, 0xe5, 0x0d, 0x58, 0xa5, 0xa3, 0xe5, 0xf2, - 0x9f, 0x2c, 0x42, 0x45, 0x41, 0xc5, 0xaf, 0xec, 0xdf, 0xdc, 0xe2, 0x6e, 0xa2, 0xca, 0x51, 0xf7, - 0x22, 0x55, 0x8a, 0x2c, 0x12, 0x2c, 0xb8, 0xf8, 0xb7, 0x05, 0x74, 0x9f, 0x23, 0xbd, 0xaf, 0x5f, - 0xec, 0x4d, 0x4f, 0x1d, 0xce, 0xad, 0x4c, 0xdd, 0x8e, 0x46, 0xd7, 0xe6, 0x77, 0x77, 0x4b, 0x75, - 0x35, 0xbb, 0xa5, 0x9d, 0x8d, 0x3b, 0x76, 0xcb, 0xb5, 0x75, 0xb5, 0xef, 0x60, 0x45, 0x3f, 0x32, - 0x92, 0xba, 0x70, 0x39, 0x3d, 0xdb, 0xab, 0x8f, 0x5e, 0x48, 0xc6, 0x8e, 0xb3, 0xa4, 0x5e, 0x77, - 0x30, 0x99, 0xb6, 0x4b, 0x75, 0x3b, 0xa5, 0x6d, 0xf3, 0x64, 0x1b, 0xb0, 0x65, 0xab, 0x71, 0x35, - 0x48, 0xd5, 0xdb, 0x6a, 0x77, 0xcf, 0x9f, 0x1b, 0x8e, 0x16, 0xe6, 0x23, 0xb0, 0xce, 0xd8, 0x02, - 0x48, 0x0b, 0xec, 0x75, 0x67, 0x09, 0xdd, 0x8d, 0x74, 0xa5, 0x8f, 0x5e, 0xc6, 0x52, 0xfa, 0x50, - 0x17, 0x66, 0xdf, 0x64, 0x71, 0x24, 0x63, 0xf1, 0x79, 0x9a, 0x1a, 0xd5, 0x46, 0xc7, 0xe9, 0xed, - 0xd7, 0x99, 0x33, 0x99, 0x8f, 0xcf, 0x69, 0x3d, 0x3d, 0xe9, 0x5b, 0x5f, 0xe2, 0xe1, 0x3c, 0xd4, - 0xa3, 0x1d, 0xfe, 0x2a, 0x19, 0x3b, 0x0a, 0xd7, 0xf3, 0x08, 0xbf, 0xbc, 0xae, 0x8f, 0x5e, 0xd0, - 0x86, 0x07, 0xb5, 0xeb, 0x87, 0xf5, 0x68, 0xbf, 0x3e, 0xda, 0xc7, 0xd6, 0x0f, 0x0f, 0x91, 0xd5, - 0xff, 0x65, 0x7f, 0xfb, 0x28, 0x7a, 0x38, 0x8f, 0x03, 0x25, 0xff, 0x07, 0xb4, 0xba, 0x25, 0x17, - 0x6c, 0x9e, 0xdc, 0x93, 0x67, 0x7d, 0xf3, 0x63, 0x88, 0x55, 0xec, 0x29, 0x00, 0xf8, 0x8f, 0x91, - 0x13, 0xc8, 0x9c, 0x43, 0xfa, 0x64, 0xec, 0x88, 0xab, 0x46, 0xce, 0x4f, 0x85, 0xff, 0x35, 0x7a, - 0xd8, 0x9e, 0xa0, 0x30, 0xa7, 0xf5, 0xc4, 0x86, 0x97, 0x2f, 0x5d, 0xe4, 0xd9, 0x62, 0xa9, 0x71, - 0x3e, 0x1f, 0x22, 0x16, 0x4e, 0x72, 0x5e, 0x0b, 0x69, 0x55, 0xa5, 0x0f, 0x59, 0xd7, 0xc0, 0x0f, - 0xa8, 0xd7, 0xdd, 0xd8, 0xb8, 0x7e, 0x7a, 0xd0, 0xbc, 0x19, 0xac, 0xdd, 0x38, 0x9f, 0x8c, 0x0f, - 0x6a, 0x1f, 0x7d, 0x96, 0x8c, 0x7d, 0x06, 0x9e, 0x82, 0xa6, 0x8f, 0x20, 0x7c, 0x6a, 0x97, 0x06, - 0x20, 0x66, 0x0d, 0xce, 0x02, 0xae, 0x84, 0xb1, 0x01, 0xfd, 0xf4, 0x14, 0xe6, 0xe6, 0xf3, 0xbc, - 0x01, 0x48, 0x75, 0xea, 0xc5, 0x7f, 0x2e, 0x9d, 0x7a, 0xc9, 0x9f, 0x4b, 0xa7, 0x5e, 0xfa, 0x97, - 0xd7, 0xa9, 0x97, 0xfd, 0x5d, 0xd4, 0xa9, 0xff, 0x86, 0xcb, 0xab, 0x53, 0x43, 0x04, 0xa3, 0x69, - 0x4e, 0x95, 0x6e, 0xe7, 0xd7, 0xa9, 0x2f, 0xe6, 0xd7, 0xa9, 0xbf, 0x7f, 0x0d, 0xfa, 0x5b, 0xeb, - 0xc3, 0xf7, 0xa3, 0xe5, 0x16, 0xfd, 0xa5, 0xb5, 0xdc, 0x76, 0x56, 0xc9, 0x45, 0xf7, 0x50, 0x72, - 0xdf, 0x50, 0xa5, 0x4d, 0xac, 0x92, 0x5b, 0xf5, 0x40, 0x4a, 0x2e, 0xab, 0xad, 0x76, 0xe5, 0x8a, - 0x13, 0xc5, 0xf7, 0x2d, 0x4e, 0x10, 0x3f, 0xcd, 0x6c, 0x71, 0xe2, 0x99, 0xbc, 0xe2, 0x84, 0x36, - 0x1d, 0x4f, 0x4f, 0x4e, 0xe6, 0x17, 0x24, 0x6c, 0xc2, 0xb8, 0xa9, 0xbf, 0x2e, 0xcf, 0x27, 0x8c, - 0x9b, 0xfa, 0xeb, 0x53, 0x0b, 0xea, 0xaf, 0xf9, 0xb4, 0xd3, 0xa9, 0x7c, 0xda, 0x69, 0x09, 0xd1, - 0x4e, 0xbb, 0x38, 0x55, 0xfa, 0x43, 0x1e, 0xf5, 0xb4, 0xf9, 0xdb, 0xaa, 0xa7, 0xe6, 0x4c, 0x00, - 0x3d, 0x55, 0x1b, 0xee, 0x36, 0x5d, 0xd2, 0xe9, 0x51, 0x74, 0x6c, 0x82, 0x86, 0x8f, 0x1a, 0x99, - 0x5f, 0x5b, 0xb5, 0x59, 0x12, 0x56, 0xfc, 0x39, 0x2c, 0x09, 0x47, 0xf2, 0xea, 0xc7, 0x70, 0x28, - 0xfe, 0x2b, 0x55, 0x7a, 0x37, 0x9f, 0x7e, 0x5c, 0xf3, 0x2d, 0xf4, 0xe3, 0x83, 0xed, 0xfe, 0xb0, - 0x8f, 0x4a, 0x25, 0xe4, 0x02, 0xe0, 0x7d, 0xab, 0xc7, 0xab, 0xfe, 0xcc, 0xea, 0x71, 0x08, 0x15, - 0x62, 0x0d, 0x0f, 0xaf, 0x3c, 0xea, 0x4e, 0x4e, 0x2c, 0x2a, 0x26, 0x50, 0x7c, 0x2b, 0x35, 0x3d, - 0x94, 0x9e, 0xed, 0x75, 0x54, 0xbb, 0x43, 0xca, 0xcb, 0x2f, 0x39, 0x52, 0x89, 0x93, 0xa9, 0x8b, - 0x9d, 0x10, 0xa4, 0xd5, 0x8a, 0x5f, 0x42, 0x56, 0x27, 0x5e, 0x94, 0xc4, 0x55, 0x27, 0x73, 0x62, - 0x56, 0x8b, 0x5f, 0xc1, 0xcb, 0xf1, 0x56, 0x4f, 0x7a, 0xb6, 0x77, 0xe3, 0xcb, 0x5b, 0xab, 0xb1, - 0x0c, 0x64, 0xd2, 0xcc, 0xaf, 0x9c, 0xf2, 0xdf, 0xb3, 0x72, 0x7a, 0x85, 0x43, 0x85, 0x21, 0xa5, - 0x45, 0xf1, 0x84, 0x03, 0xc1, 0xd2, 0x87, 0x09, 0xc3, 0xd9, 0x78, 0x1f, 0x17, 0x59, 0xd6, 0x35, - 0xd0, 0x3c, 0xe0, 0x7a, 0x0b, 0xbd, 0x61, 0xd0, 0x11, 0xdf, 0xa2, 0x92, 0x16, 0x31, 0x98, 0x19, - 0xd0, 0xd4, 0x48, 0x37, 0xec, 0x3e, 0xa0, 0xca, 0x54, 0x62, 0x81, 0xa4, 0x7f, 0xc0, 0x7a, 0x83, - 0xde, 0x70, 0x63, 0x86, 0xbc, 0x80, 0x2a, 0x9b, 0x34, 0xff, 0x4e, 0x68, 0xd1, 0x8c, 0x62, 0xb8, - 0xfa, 0xef, 0xa6, 0x62, 0xb8, 0xe6, 0x75, 0x54, 0x62, 0x1b, 0x9a, 0x07, 0x71, 0x03, 0x2e, 0xfb, - 0x8f, 0x1c, 0x5a, 0x46, 0x3b, 0x91, 0x7f, 0x0d, 0x2d, 0x69, 0x56, 0x0e, 0x9a, 0x82, 0x35, 0x09, - 0x0e, 0x09, 0x10, 0xf1, 0x31, 0xe8, 0x17, 0x70, 0xdf, 0x9b, 0xed, 0xc1, 0xfc, 0x8e, 0x98, 0x41, - 0x65, 0x48, 0xe7, 0xb7, 0xa2, 0xa2, 0x66, 0xe5, 0x60, 0x83, 0xe2, 0x09, 0x2a, 0x61, 0x2a, 0x18, - 0x13, 0xaf, 0x4e, 0x0b, 0x2a, 0x3e, 0xd5, 0xac, 0x1c, 0x64, 0x47, 0xa4, 0x7c, 0x0f, 0x59, 0x38, - 0xe0, 0x9e, 0x5d, 0x21, 0x5b, 0x98, 0x94, 0x58, 0x3d, 0x39, 0x8e, 0xa3, 0xe2, 0xb0, 0x49, 0x0c, - 0xa0, 0x84, 0x98, 0xd6, 0x73, 0x6d, 0x21, 0x62, 0x80, 0x59, 0xf6, 0x5f, 0x38, 0x54, 0x64, 0xf2, - 0x4a, 0xfe, 0xe7, 0x68, 0x19, 0x30, 0x3d, 0xa3, 0x91, 0x3f, 0x56, 0xa5, 0x32, 0xc1, 0x80, 0x89, - 0x8f, 0x01, 0x7f, 0xcc, 0x6d, 0xa6, 0x81, 0xc1, 0xbf, 0x42, 0x59, 0x33, 0xa3, 0x01, 0x90, 0x98, - 0x5e, 0x16, 0x54, 0x2c, 0x02, 0x22, 0xda, 0xf0, 0x80, 0x6c, 0x41, 0x79, 0x0f, 0xcd, 0x48, 0x64, - 0xab, 0x45, 0x56, 0x4c, 0x0d, 0x0b, 0x2a, 0xfe, 0x04, 0x32, 0xd2, 0x5b, 0x01, 0xf5, 0x3b, 0xab, - 0xb7, 0xb9, 0x9c, 0xbb, 0x5d, 0xdb, 0xa5, 0x2d, 0xb5, 0xeb, 0xeb, 0x65, 0xd7, 0x2e, 0xa9, 0xb1, - 0x96, 0x7e, 0x6d, 0x97, 0xe4, 0xad, 0xb5, 0x8d, 0xf0, 0x51, 0x21, 0x5b, 0x14, 0xca, 0xfe, 0x53, - 0x15, 0x2a, 0xa5, 0x17, 0xcc, 0x19, 0xcf, 0xe7, 0x1d, 0x10, 0x20, 0xe4, 0x37, 0x84, 0xc5, 0x7b, - 0xdc, 0x2d, 0x4a, 0x4d, 0x60, 0xbf, 0xdf, 0x16, 0x70, 0xc0, 0xa9, 0x4a, 0x6f, 0x0a, 0xb9, 0xa9, - 0xe2, 0x0b, 0xe4, 0xc2, 0x5d, 0x95, 0x37, 0xb0, 0xdf, 0x5f, 0x05, 0xb7, 0xf0, 0xbc, 0x95, 0xc6, - 0xf5, 0x6d, 0x12, 0x87, 0x89, 0xb8, 0x82, 0xd1, 0xcb, 0x05, 0xb9, 0xf9, 0xf9, 0xfd, 0xa8, 0x50, - 0x39, 0xd0, 0xe6, 0xf6, 0x7b, 0x15, 0x1a, 0x1e, 0x0c, 0x6c, 0x4f, 0x26, 0x50, 0xdc, 0x66, 0xfc, - 0xaa, 0x04, 0xdf, 0xad, 0xd4, 0xe4, 0x29, 0xfd, 0xcb, 0x13, 0x73, 0x89, 0x28, 0xeb, 0xee, 0x11, - 0x74, 0xfb, 0xbd, 0x81, 0xd6, 0x4a, 0x47, 0x8b, 0xe2, 0x0e, 0x85, 0xab, 0xf6, 0xbb, 0x43, 0x61, - 0xa5, 0xd2, 0xd1, 0x1a, 0x08, 0x85, 0xab, 0xda, 0x02, 0xde, 0x50, 0xa5, 0xa3, 0x2d, 0xe8, 0x0b, - 0xe0, 0xfd, 0x43, 0x36, 0xe9, 0xf2, 0xbf, 0x45, 0x7c, 0xab, 0xfb, 0x40, 0x6d, 0x6b, 0x5b, 0xf8, - 0x60, 0x75, 0x7b, 0x4b, 0x33, 0x04, 0x86, 0xa6, 0x0e, 0xd1, 0xc4, 0xbf, 0x23, 0x4f, 0xb2, 0xb8, - 0xb1, 0xd5, 0x7d, 0xa0, 0x4a, 0xc1, 0xc0, 0xaa, 0x3d, 0xed, 0x2d, 0xcd, 0x55, 0x5e, 0x02, 0xae, - 0xd4, 0x06, 0x4e, 0xe8, 0xd7, 0xc6, 0xa8, 0xd7, 0x1b, 0xe1, 0xe3, 0x96, 0xbf, 0x50, 0x1e, 0x32, - 0xfc, 0xef, 0xd0, 0x8a, 0x90, 0xd1, 0x0f, 0x35, 0x4a, 0x8b, 0xfb, 0x20, 0xd5, 0xa5, 0x88, 0x24, - 0x99, 0x95, 0x24, 0xfe, 0x8c, 0x5a, 0xa6, 0xc0, 0x6b, 0x76, 0x78, 0x50, 0xbb, 0x34, 0x92, 0x39, - 0x31, 0x0b, 0xce, 0x53, 0x78, 0x6f, 0xba, 0x7a, 0x54, 0xeb, 0xbb, 0xa4, 0x4d, 0x52, 0xa7, 0x3b, - 0x53, 0xcc, 0xdf, 0xb8, 0x01, 0xfc, 0x0b, 0xe5, 0x2c, 0x7a, 0xfc, 0x7f, 0xc7, 0xa1, 0xd5, 0x26, - 0x68, 0xa7, 0xdf, 0xaf, 0x28, 0x5e, 0xc5, 0x4b, 0xae, 0xa4, 0x81, 0x9e, 0x15, 0xe5, 0x54, 0xa9, - 0x8f, 0x13, 0xf2, 0xe3, 0x88, 0x01, 0x66, 0xbc, 0xdb, 0x69, 0x42, 0x55, 0xd8, 0xd7, 0xaa, 0x54, - 0x82, 0xff, 0x15, 0xd4, 0x22, 0x35, 0xd1, 0xaf, 0x7d, 0xdd, 0x03, 0x75, 0xc4, 0xac, 0x89, 0xda, - 0x0d, 0xcf, 0xa7, 0xa6, 0x27, 0x52, 0x9f, 0xc6, 0x33, 0xa7, 0xbe, 0xd0, 0x2e, 0x8d, 0x68, 0xd7, - 0x8f, 0x41, 0x0d, 0xb5, 0xe1, 0xc1, 0xf4, 0xc7, 0x9f, 0xcf, 0x57, 0xfd, 0xfc, 0xf5, 0xe0, 0xff, - 0x2b, 0x87, 0x9e, 0xb2, 0x52, 0xc2, 0xbe, 0x16, 0xdf, 0x6f, 0xc9, 0x1e, 0xd4, 0xb8, 0x2f, 0xa8, - 0xb8, 0xf7, 0x05, 0x5a, 0xbc, 0x54, 0x99, 0xfb, 0x94, 0x53, 0xa5, 0xcb, 0x9c, 0xb0, 0x30, 0xae, - 0x78, 0x88, 0x63, 0x9b, 0x65, 0x61, 0x54, 0x85, 0xf7, 0x05, 0x95, 0x10, 0x46, 0xa9, 0x4c, 0x5f, - 0xbd, 0xa2, 0x0d, 0x1d, 0xa3, 0xd3, 0x99, 0x5c, 0x15, 0xc9, 0x9c, 0xee, 0x23, 0x46, 0x13, 0xa3, - 0x79, 0xcc, 0x05, 0xaa, 0x4c, 0xef, 0x50, 0x72, 0x66, 0x10, 0x2b, 0xde, 0xa4, 0x9d, 0xa9, 0x33, - 0x5f, 0x6b, 0x7d, 0x87, 0xf5, 0xa9, 0xe3, 0x30, 0x52, 0x10, 0x03, 0x2c, 0x73, 0xea, 0x0b, 0xd6, - 0x39, 0xe8, 0x27, 0x1b, 0xe4, 0x85, 0x2b, 0x89, 0xd5, 0x92, 0xc7, 0x43, 0xcd, 0xbe, 0xb6, 0xba, - 0x80, 0x57, 0x09, 0xbd, 0xe3, 0x0b, 0xef, 0xdb, 0x16, 0xf0, 0xb8, 0x5b, 0x1a, 0xc2, 0x81, 0xa0, - 0xbb, 0x09, 0x14, 0xc7, 0x42, 0x70, 0x95, 0x9b, 0x1f, 0x4b, 0x5c, 0x0f, 0xb7, 0x11, 0xf4, 0xd1, - 0x7e, 0x7d, 0xf4, 0x9a, 0x36, 0x7a, 0x1d, 0xd8, 0x21, 0xde, 0x76, 0x48, 0x1b, 0xd8, 0x0a, 0xc1, - 0xd5, 0xda, 0xf9, 0x69, 0xf1, 0xe7, 0x39, 0xf4, 0x98, 0x2d, 0x15, 0x3c, 0x8f, 0xea, 0x03, 0xde, - 0x10, 0x8d, 0xf6, 0xe0, 0x55, 0x25, 0xb7, 0x30, 0x1f, 0x8e, 0xb8, 0x19, 0xea, 0xd2, 0xdc, 0xbe, - 0x47, 0xa9, 0x02, 0x6d, 0xc7, 0x51, 0xd7, 0x90, 0x8c, 0x1d, 0xcd, 0x9c, 0x3b, 0x5f, 0xe3, 0x56, - 0x5a, 0x03, 0xfe, 0x06, 0x25, 0x0c, 0xc1, 0x57, 0x52, 0x23, 0xdd, 0xf5, 0x01, 0x6f, 0x6e, 0x2d, - 0xa1, 0x8a, 0xf3, 0x15, 0x80, 0xa5, 0xc4, 0x27, 0x7c, 0x4d, 0xfe, 0x40, 0x50, 0x31, 0xe9, 0x85, - 0x98, 0x9e, 0x25, 0x8a, 0x5d, 0x61, 0xf5, 0x9b, 0xaa, 0xf4, 0x86, 0xb0, 0x10, 0x9e, 0xb8, 0x16, - 0x2a, 0x6a, 0x55, 0xca, 0xb8, 0xe8, 0x95, 0x9e, 0x1c, 0x4b, 0x4d, 0x9e, 0x92, 0x17, 0xca, 0x8c, - 0x45, 0x94, 0x87, 0x03, 0xcd, 0x8d, 0x81, 0xb0, 0xbb, 0x65, 0xa7, 0x3f, 0xa8, 0xb8, 0xbd, 0x07, - 0x9d, 0xc4, 0x13, 0x0b, 0x59, 0x97, 0x08, 0xf2, 0xa5, 0x8b, 0x3f, 0x09, 0x34, 0x57, 0x85, 0x31, - 0xb4, 0xaa, 0x1d, 0xc0, 0x55, 0xe4, 0x09, 0xc2, 0x4a, 0x60, 0xab, 0x0e, 0x0a, 0x74, 0x50, 0x39, - 0x66, 0xa4, 0x9b, 0x7a, 0x3e, 0xe4, 0xa3, 0xc5, 0xff, 0x91, 0x43, 0x8f, 0xb7, 0xba, 0x0f, 0xb0, - 0x09, 0xf5, 0x4a, 0xd0, 0xa3, 0xf8, 0xc3, 0x78, 0xe6, 0x14, 0x93, 0x9a, 0x7c, 0xc4, 0xa9, 0xd2, - 0x10, 0x27, 0xcc, 0x8f, 0x27, 0x06, 0x31, 0xf3, 0xb3, 0x57, 0xa9, 0xcd, 0x4c, 0xad, 0xa4, 0x20, - 0xba, 0x16, 0x88, 0xf4, 0x4a, 0x19, 0x57, 0x64, 0xda, 0xac, 0xa4, 0xb9, 0x10, 0xf0, 0xaa, 0x21, - 0x38, 0xfa, 0xc4, 0x25, 0x58, 0x47, 0x5a, 0xdf, 0x19, 0xad, 0x73, 0x54, 0x9f, 0xf8, 0x98, 0x75, - 0xd4, 0x95, 0xe7, 0xaf, 0x0e, 0xaf, 0x72, 0xe8, 0x11, 0x86, 0x37, 0x90, 0x64, 0xf3, 0x25, 0xba, - 0x92, 0xea, 0x5f, 0xab, 0xd2, 0xfb, 0x42, 0x5e, 0x04, 0xd1, 0x69, 0xe3, 0x61, 0xd0, 0x12, 0xc2, - 0xc2, 0x6c, 0x6d, 0xc8, 0xcb, 0xc9, 0xc0, 0x0c, 0x9d, 0xba, 0xaa, 0xca, 0x79, 0x49, 0xf3, 0xff, - 0x0b, 0x87, 0x9e, 0xc0, 0x54, 0x9a, 0x7c, 0x78, 0x87, 0x55, 0xc8, 0x85, 0x43, 0x59, 0x69, 0x0d, - 0x74, 0xb8, 0x5b, 0xcc, 0x5b, 0xc1, 0x25, 0xd5, 0x27, 0x38, 0x55, 0x3a, 0xc6, 0x09, 0x0b, 0x61, - 0x8a, 0x41, 0x23, 0x64, 0x99, 0xdb, 0xb8, 0xd5, 0x1e, 0x84, 0xba, 0xd8, 0xf8, 0xff, 0xf5, 0xc3, - 0x10, 0xe4, 0x5f, 0x1f, 0xfd, 0x4c, 0x1b, 0x1d, 0xc7, 0x4b, 0x09, 0xeb, 0xce, 0x4a, 0x28, 0x19, - 0x9b, 0xd0, 0xbf, 0x1c, 0xd7, 0x0e, 0x47, 0x73, 0x17, 0xcd, 0x8b, 0x94, 0xb3, 0x62, 0x9d, 0x83, - 0x18, 0x49, 0xf4, 0x2f, 0xc6, 0xe8, 0xb5, 0xcf, 0x85, 0x2a, 0xc4, 0xd7, 0xb1, 0x26, 0xc8, 0x15, - 0x46, 0x08, 0xe0, 0x2a, 0xd6, 0x04, 0xe9, 0x00, 0x8b, 0x21, 0x08, 0x47, 0x66, 0x80, 0x81, 0x79, - 0xac, 0x88, 0xdb, 0xd9, 0x88, 0x05, 0x2b, 0xad, 0x90, 0x43, 0x4c, 0xc4, 0x82, 0xa7, 0x99, 0x58, - 0x04, 0x36, 0x92, 0x79, 0xe2, 0x13, 0x30, 0x01, 0xf5, 0x56, 0x3d, 0x50, 0x40, 0x3d, 0xa7, 0xed, - 0xda, 0xf6, 0x43, 0x4c, 0xd4, 0x73, 0x0b, 0x2c, 0xf2, 0x59, 0x97, 0xba, 0x48, 0x84, 0x3b, 0xe6, - 0x6e, 0x37, 0x13, 0x95, 0x8f, 0x7f, 0xa0, 0xa8, 0x7c, 0x4e, 0xdb, 0xa5, 0xf0, 0x87, 0x99, 0xd2, - 0x99, 0xc8, 0x7a, 0x3c, 0x9b, 0x3d, 0x4f, 0x7c, 0xbd, 0x7f, 0xcf, 0xde, 0xd6, 0x86, 0x7b, 0xb2, - 0xb3, 0x9c, 0x2a, 0x4d, 0xb3, 0xb7, 0xb5, 0x27, 0xb9, 0x5c, 0xb1, 0xef, 0x07, 0x72, 0x6d, 0x7b, - 0x9c, 0xcb, 0x0d, 0x1b, 0xb1, 0x9a, 0xf0, 0xee, 0xdf, 0xab, 0xd2, 0xef, 0x72, 0xc3, 0x46, 0xec, - 0x63, 0xd5, 0x7a, 0x93, 0x9d, 0x98, 0x02, 0x06, 0x0d, 0x27, 0x31, 0x3c, 0x98, 0x4c, 0x8c, 0x68, - 0xa3, 0x24, 0x88, 0x26, 0x99, 0x4f, 0x99, 0x43, 0xe3, 0xa9, 0x99, 0x2f, 0x1c, 0xb9, 0xdd, 0xe4, - 0x48, 0x4d, 0x77, 0x27, 0xa7, 0x6f, 0xb1, 0x9b, 0xa3, 0x63, 0x9e, 0xc0, 0x13, 0xff, 0x8c, 0x43, - 0x0f, 0xef, 0x69, 0xdf, 0xbb, 0x57, 0x09, 0x1a, 0x41, 0x88, 0x20, 0x76, 0xcb, 0xa3, 0xec, 0xba, - 0xcf, 0x87, 0x21, 0xfe, 0x16, 0x80, 0x55, 0xc6, 0x15, 0xed, 0x2a, 0xa2, 0x53, 0x53, 0xb1, 0x03, - 0xb8, 0x21, 0x2b, 0x76, 0xb0, 0x9c, 0x94, 0x5e, 0x67, 0x60, 0xe4, 0x8f, 0xd4, 0x60, 0x2f, 0xb0, - 0x57, 0x30, 0x02, 0x43, 0x70, 0x51, 0x96, 0x94, 0xd9, 0x16, 0xc7, 0xc6, 0x0d, 0x1b, 0xe4, 0x7c, - 0x15, 0xe2, 0x2f, 0xc1, 0xa6, 0xb1, 0x25, 0xe8, 0xf6, 0x28, 0x7b, 0xdb, 0x5b, 0x1a, 0x95, 0x60, - 0xab, 0xcf, 0x4f, 0xf6, 0xb4, 0x06, 0xc5, 0x43, 0xce, 0x40, 0x4b, 0xaa, 0xf7, 0xaa, 0x92, 0x47, - 0x98, 0x1f, 0x4b, 0xdc, 0x8c, 0xb7, 0x8c, 0x26, 0x9a, 0x56, 0x15, 0xb6, 0x12, 0xab, 0x42, 0x8a, - 0xa7, 0xd2, 0xbc, 0x26, 0x82, 0xe7, 0x1e, 0xe1, 0x6d, 0x8e, 0xfa, 0x80, 0xd7, 0x91, 0x89, 0x44, - 0xb4, 0xde, 0xb8, 0x3e, 0x1a, 0x31, 0xd9, 0x9c, 0x3c, 0x7f, 0x11, 0x7c, 0x37, 0x87, 0x96, 0x87, - 0x3c, 0x6e, 0x3f, 0xb1, 0x41, 0x76, 0xb8, 0x5b, 0xc8, 0x91, 0x67, 0x49, 0xf5, 0x3f, 0x50, 0xa5, - 0x0f, 0x04, 0x5b, 0x82, 0xb8, 0x1d, 0x7f, 0x55, 0xf9, 0xe8, 0x67, 0x65, 0xd6, 0xc4, 0xd0, 0x3f, - 0x89, 0xe8, 0x5f, 0x1d, 0x85, 0xf2, 0xf0, 0xff, 0x91, 0xe3, 0x26, 0xbb, 0xc7, 0xf2, 0xda, 0x55, - 0xd5, 0x36, 0xfc, 0x1b, 0x37, 0xc8, 0x36, 0xe2, 0x58, 0x18, 0x7a, 0xa4, 0xd5, 0x7d, 0x80, 0x44, - 0x2b, 0xc2, 0xf3, 0x36, 0x84, 0x45, 0x37, 0xbc, 0xa4, 0x1f, 0x27, 0xd5, 0xf9, 0x50, 0x95, 0x9a, - 0x84, 0xbc, 0x08, 0xe2, 0x0e, 0xdc, 0x47, 0xfe, 0x80, 0x57, 0xa9, 0x6a, 0x33, 0xe0, 0xb0, 0x1b, - 0x41, 0x97, 0x50, 0x4d, 0x82, 0x98, 0xb0, 0xd9, 0x3e, 0x61, 0x37, 0x23, 0x6b, 0x34, 0x5f, 0xdb, - 0xb0, 0x41, 0xce, 0x5b, 0x0c, 0x96, 0x43, 0x56, 0x92, 0x39, 0xba, 0xb3, 0x6d, 0x73, 0x30, 0xd0, - 0xfa, 0x9e, 0x12, 0x0c, 0x94, 0xae, 0x21, 0x8b, 0x88, 0xd8, 0x69, 0xb2, 0xd3, 0x44, 0x09, 0x36, - 0xc9, 0xf6, 0xb6, 0xaa, 0xbd, 0xc1, 0x40, 0x6b, 0xd5, 0x6f, 0x95, 0x60, 0x80, 0xca, 0x1e, 0xec, - 0x06, 0x3d, 0x97, 0xe8, 0x83, 0xe0, 0xb4, 0x0e, 0x56, 0x1c, 0x21, 0x43, 0xda, 0x2f, 0x67, 0xd3, - 0xe4, 0xcf, 0x71, 0xe8, 0x51, 0xbb, 0x36, 0x22, 0xed, 0xc5, 0x4b, 0xcd, 0xeb, 0x2d, 0x7d, 0xc2, - 0x3a, 0x7a, 0x99, 0x07, 0x45, 0x7c, 0x8b, 0xd9, 0xb6, 0xbd, 0x38, 0xa5, 0xca, 0xbd, 0x97, 0x6c, - 0x90, 0x5e, 0x6f, 0xa5, 0xa5, 0x1d, 0xf5, 0x5d, 0xd2, 0x4f, 0x4e, 0x58, 0x57, 0x96, 0x72, 0x06, - 0x13, 0xef, 0xdd, 0xf3, 0x94, 0xc0, 0x5f, 0xc1, 0x12, 0x76, 0x6e, 0x12, 0xd5, 0x0d, 0x9f, 0x24, - 0x55, 0x24, 0x91, 0x40, 0xe7, 0xc7, 0x9a, 0xb7, 0x96, 0x54, 0x55, 0x04, 0x25, 0x28, 0x19, 0xbb, - 0x64, 0x29, 0x8c, 0xf3, 0xd5, 0x72, 0xfe, 0x42, 0xf8, 0x09, 0x0e, 0xad, 0xc9, 0x93, 0xba, 0xd9, - 0xed, 0x6b, 0x69, 0x0f, 0x2a, 0xa5, 0x4f, 0x91, 0x9a, 0x92, 0x03, 0xc2, 0x05, 0xd0, 0xc4, 0x6d, - 0xf3, 0x54, 0x75, 0x2f, 0xa4, 0xd3, 0xf5, 0x09, 0x97, 0x03, 0xb5, 0xe1, 0x41, 0xb8, 0x03, 0x39, - 0x6f, 0x75, 0x17, 0x28, 0x89, 0xef, 0x2a, 0x40, 0x0e, 0x33, 0x79, 0x4b, 0x5b, 0x7b, 0x96, 0x7e, - 0x43, 0x34, 0xac, 0xd2, 0xb5, 0xa4, 0xd6, 0x5f, 0x71, 0xaa, 0x74, 0x83, 0x13, 0xee, 0x89, 0x2e, - 0x46, 0x59, 0x9d, 0xad, 0xa9, 0xad, 0xfd, 0x01, 0xf5, 0xb6, 0xf2, 0x2d, 0xf5, 0x3b, 0x2b, 0xbe, - 0x47, 0xe5, 0xed, 0x9e, 0x15, 0x26, 0x41, 0x65, 0x69, 0xf4, 0x91, 0xa7, 0x99, 0xa0, 0xb2, 0x34, - 0xf8, 0xc8, 0xfb, 0x10, 0x64, 0xa4, 0xd2, 0x51, 0xb7, 0x43, 0xde, 0x2e, 0x6d, 0xdb, 0xa4, 0x4f, - 0x7c, 0xa2, 0xc5, 0x62, 0x73, 0x89, 0xe8, 0xce, 0xfa, 0x1a, 0x12, 0x2e, 0x64, 0x13, 0x7d, 0x01, - 0x2d, 0x36, 0x61, 0x00, 0x6b, 0xab, 0x36, 0x4b, 0xae, 0x6d, 0xb5, 0x35, 0x34, 0x05, 0x06, 0x6a, - 0x2e, 0x11, 0xa5, 0x17, 0xf2, 0x36, 0x69, 0xb7, 0xbf, 0x00, 0x91, 0xda, 0x8c, 0x1a, 0xe2, 0x44, - 0xcb, 0x95, 0x60, 0x30, 0x10, 0xdc, 0x4e, 0xa3, 0xd5, 0x3b, 0x48, 0x3d, 0x9e, 0x56, 0xa5, 0x27, - 0x05, 0x5b, 0x82, 0xb8, 0xdc, 0x16, 0xac, 0xde, 0x96, 0xc6, 0xff, 0x6b, 0x0e, 0x3d, 0x6a, 0xdf, - 0x30, 0x9c, 0x6d, 0xed, 0xb0, 0xcd, 0x3d, 0x43, 0x86, 0xf0, 0x34, 0xa7, 0x4a, 0xc7, 0x39, 0x61, - 0x1e, 0xa4, 0xbf, 0xe8, 0x4e, 0x37, 0x4f, 0x9d, 0xf2, 0xb4, 0x69, 0xbb, 0xd2, 0x0a, 0x6d, 0x2a, - 0x5b, 0xa0, 0x4d, 0x06, 0xd2, 0xdf, 0xa5, 0x36, 0x19, 0x75, 0xe2, 0x03, 0x68, 0x69, 0x6b, 0x80, - 0xdc, 0xc4, 0x7b, 0x36, 0x7f, 0xe4, 0xed, 0xed, 0x24, 0x95, 0x58, 0xc7, 0xc9, 0xad, 0x49, 0x8a, - 0x2e, 0xae, 0x83, 0xbf, 0x10, 0x1d, 0xc6, 0x30, 0x8e, 0x3b, 0x25, 0xba, 0x52, 0x66, 0xae, 0xa5, - 0xae, 0x4e, 0xb3, 0x69, 0x32, 0xcd, 0xc7, 0xff, 0x01, 0x2d, 0xdb, 0xaf, 0xec, 0xd9, 0x17, 0x08, - 0x34, 0x97, 0xfe, 0x28, 0x7f, 0x18, 0xd7, 0x77, 0x20, 0x99, 0xc4, 0x8e, 0x23, 0xd1, 0x6a, 0x8c, - 0x0c, 0xe2, 0x26, 0xa7, 0xe4, 0xa0, 0xbf, 0xc1, 0xf6, 0x9d, 0x15, 0x3b, 0x99, 0x39, 0x32, 0xcb, - 0x9c, 0x3b, 0x6f, 0xc3, 0x94, 0x0d, 0x22, 0xfc, 0xbf, 0xe0, 0xd0, 0x93, 0xca, 0x81, 0x36, 0xc5, - 0xef, 0xc5, 0x52, 0x59, 0x7d, 0xc0, 0x1b, 0xaa, 0xa7, 0x86, 0x3f, 0x67, 0x7b, 0x38, 0xb0, 0x77, - 0x6f, 0xe9, 0x8f, 0x1d, 0x5c, 0xf9, 0x12, 0xe3, 0x0e, 0xfd, 0x82, 0xa8, 0xa2, 0xc7, 0x3c, 0xbc, - 0x07, 0x66, 0xa0, 0x4f, 0x5c, 0xc2, 0x03, 0x37, 0xd2, 0xed, 0x68, 0x0b, 0x78, 0xe7, 0x12, 0x51, - 0x9c, 0x15, 0xcb, 0x86, 0xc9, 0xd8, 0x40, 0x32, 0x31, 0x92, 0x35, 0x3a, 0x26, 0x67, 0x4f, 0x26, - 0x46, 0x52, 0x67, 0x6f, 0xea, 0x83, 0x97, 0x1d, 0xcd, 0xbe, 0x96, 0x16, 0xdc, 0x8b, 0xe6, 0x55, - 0x96, 0xaa, 0x8d, 0x1b, 0xe4, 0x05, 0xab, 0x80, 0x35, 0x5c, 0xde, 0xaf, 0xec, 0xaf, 0x0f, 0x78, - 0x1b, 0x60, 0x23, 0x05, 0x5b, 0xe1, 0x73, 0x64, 0x42, 0xee, 0x51, 0xa5, 0x5f, 0x0a, 0x79, 0x92, - 0xc5, 0xea, 0x5c, 0x18, 0x56, 0xf5, 0x4e, 0x5e, 0x6f, 0x0b, 0x78, 0xb5, 0xe9, 0x78, 0xea, 0xf3, - 0xa3, 0xda, 0xa5, 0x91, 0xe4, 0x9d, 0x9e, 0xe4, 0x9d, 0xa3, 0xda, 0xf0, 0xa0, 0xde, 0x3f, 0x00, - 0x75, 0x77, 0x4a, 0x46, 0x2f, 0x3b, 0x36, 0x7c, 0x53, 0xbd, 0x58, 0x28, 0x28, 0xff, 0x2b, 0x39, - 0x0f, 0x79, 0x2c, 0xe8, 0xf0, 0x5e, 0xa5, 0xc3, 0xe7, 0x51, 0xea, 0x03, 0x81, 0x16, 0x33, 0xa0, - 0xf7, 0xf3, 0x84, 0x93, 0xf8, 0x55, 0xa9, 0x59, 0xc8, 0x93, 0x2c, 0xee, 0xcc, 0x85, 0x99, 0xf1, - 0x56, 0x68, 0xc0, 0xdc, 0x48, 0x4f, 0xa5, 0x23, 0x19, 0x9b, 0x4e, 0x5f, 0xe9, 0xd4, 0xe2, 0xc7, - 0xcd, 0x28, 0xff, 0xa9, 0x8b, 0xc7, 0x93, 0xf1, 0x63, 0xc9, 0xf8, 0x55, 0xed, 0xa3, 0x4e, 0x2d, - 0x7a, 0xd2, 0xac, 0x23, 0x39, 0x26, 0x94, 0xf3, 0x14, 0x55, 0x76, 0x97, 0x43, 0xc5, 0xcc, 0x3c, - 0xe3, 0x65, 0x36, 0xb4, 0x1f, 0x84, 0x6a, 0x25, 0x00, 0xf1, 0xc5, 0xec, 0x29, 0x57, 0x4e, 0x4f, - 0x9f, 0x8c, 0xc2, 0x92, 0xd3, 0x3d, 0x10, 0xbd, 0xf0, 0x1d, 0x65, 0x0f, 0x60, 0x54, 0xd0, 0xd0, - 0x80, 0x5b, 0xd0, 0x52, 0xf2, 0xbe, 0x4e, 0x90, 0x8d, 0x95, 0x4b, 0x41, 0x62, 0x59, 0x36, 0x5d, - 0x80, 0xdb, 0x2e, 0x1a, 0x53, 0x5c, 0xfe, 0x15, 0xb4, 0x24, 0x1c, 0x68, 0x56, 0x8c, 0xf0, 0xb8, - 0xf0, 0x1a, 0x14, 0x81, 0x88, 0xab, 0xb3, 0xc9, 0x10, 0xb0, 0x0c, 0xa9, 0x65, 0x5f, 0x73, 0x68, - 0x09, 0x89, 0x27, 0xc3, 0x3f, 0xc7, 0x9c, 0xe5, 0x54, 0x3f, 0xa2, 0x4a, 0x0f, 0x09, 0xf8, 0x5b, - 0x44, 0x10, 0x3f, 0xcd, 0xb1, 0x55, 0x39, 0x08, 0x27, 0x3c, 0xeb, 0x6c, 0x27, 0x3c, 0xd5, 0xa5, - 0xaa, 0xb4, 0x5a, 0x00, 0x88, 0xb8, 0x9c, 0xe2, 0x92, 0xb7, 0x47, 0xe9, 0xd9, 0x0f, 0x89, 0xef, - 0xbd, 0x77, 0xaf, 0xe2, 0x09, 0xb3, 0x67, 0x11, 0x14, 0x24, 0xbe, 0x0a, 0x39, 0xf4, 0x13, 0x7d, - 0xfa, 0xf9, 0xd1, 0xb9, 0x44, 0xb4, 0xbc, 0x2e, 0xd0, 0x40, 0x2f, 0xef, 0x56, 0x3a, 0xea, 0x83, - 0xca, 0x5e, 0x25, 0xc8, 0x42, 0xea, 0x02, 0xb5, 0x07, 0x14, 0x4f, 0x7b, 0x98, 0xc4, 0xf7, 0x26, - 0x14, 0xca, 0x22, 0xe5, 0x68, 0x39, 0x1b, 0x33, 0x8a, 0xdf, 0x8a, 0x56, 0xb0, 0x31, 0xa0, 0xec, - 0x87, 0x4c, 0x59, 0x49, 0xe2, 0x0a, 0x2a, 0x68, 0x92, 0x10, 0xe3, 0xae, 0x1a, 0x39, 0x2b, 0x9d, - 0xdf, 0x68, 0x0b, 0x9f, 0x08, 0x2f, 0xa1, 0x90, 0xc3, 0x50, 0x9e, 0xcd, 0x68, 0x8b, 0xa0, 0xf8, - 0x61, 0xae, 0x8b, 0x15, 0x44, 0x5d, 0xb5, 0xec, 0x1b, 0x3f, 0x65, 0x33, 0xdb, 0x82, 0x28, 0x1a, - 0x9e, 0x55, 0x8c, 0x13, 0x55, 0x1c, 0xa2, 0xe3, 0x98, 0xa9, 0xac, 0xed, 0xa3, 0xc5, 0x0c, 0xd0, - 0xb7, 0x78, 0xfe, 0x78, 0x46, 0x46, 0x73, 0xbe, 0x73, 0x8c, 0xbe, 0xf7, 0xcc, 0x18, 0x7d, 0xf0, - 0x28, 0xc7, 0xea, 0x9c, 0xdb, 0xf3, 0x38, 0x95, 0x46, 0x74, 0xa4, 0x31, 0xf9, 0xd6, 0xe6, 0x92, - 0x86, 0x94, 0xac, 0x80, 0x7c, 0xe7, 0xf2, 0xf8, 0x10, 0xc3, 0xdd, 0x4d, 0xe2, 0xd7, 0x9f, 0xe3, - 0x43, 0xfc, 0x41, 0x96, 0x0f, 0x71, 0x32, 0x16, 0x07, 0x14, 0xfd, 0xd4, 0x2d, 0x7a, 0xca, 0x0a, - 0xb6, 0x0e, 0xea, 0xb5, 0xf2, 0x5d, 0x7d, 0x8b, 0xff, 0xaf, 0x02, 0xfb, 0xdd, 0x54, 0xf0, 0xaf, - 0xfa, 0x63, 0x81, 0x2a, 0xfd, 0xcb, 0x02, 0xfb, 0xed, 0xd4, 0xaf, 0x0b, 0xb2, 0xdc, 0xd3, 0xe9, - 0x6d, 0xd5, 0xae, 0x3b, 0xe6, 0xf6, 0x13, 0x1b, 0x00, 0x98, 0x89, 0x72, 0x37, 0xd2, 0xa5, 0xdd, - 0xfe, 0xc2, 0xf4, 0x37, 0xc7, 0xbb, 0x83, 0x72, 0x20, 0xfc, 0xe2, 0x5c, 0x22, 0xaa, 0x1c, 0x08, - 0xbf, 0x34, 0x97, 0x88, 0x1e, 0xd8, 0x1b, 0x72, 0xb0, 0x37, 0x76, 0xc1, 0x50, 0x4b, 0x2f, 0x0b, - 0x5f, 0x3f, 0x0c, 0x7b, 0x03, 0x10, 0xd5, 0x7a, 0x6e, 0x25, 0xa7, 0x4f, 0xb2, 0xc8, 0x7a, 0xdf, - 0x49, 0x7d, 0xf4, 0x33, 0x96, 0x3a, 0x9b, 0x97, 0xaa, 0x61, 0xa6, 0x7b, 0x7c, 0x2c, 0x8e, 0xcb, - 0x74, 0x94, 0x87, 0x5b, 0x7c, 0xfe, 0xf6, 0x03, 0x94, 0x82, 0xe9, 0x09, 0xdf, 0x37, 0x7c, 0x60, - 0x6f, 0xa8, 0xc2, 0xbc, 0xc6, 0x7b, 0x37, 0xd2, 0xa5, 0x9f, 0xba, 0x68, 0x35, 0x15, 0x97, 0xd4, - 0x8f, 0xe5, 0xdd, 0x73, 0xa7, 0xac, 0x3b, 0xd6, 0xe4, 0xe1, 0xd0, 0x64, 0x6c, 0x5a, 0x1f, 0x8d, - 0xeb, 0x13, 0xa6, 0xe7, 0xd2, 0x40, 0xea, 0xf8, 0x05, 0xfd, 0x44, 0xdf, 0xdd, 0x48, 0x97, 0x39, - 0x28, 0x64, 0x38, 0xec, 0x17, 0x7a, 0xaf, 0x2c, 0x42, 0xa8, 0x3d, 0xa4, 0x04, 0x1b, 0xc8, 0xeb, - 0x03, 0xd4, 0x55, 0xac, 0x67, 0x91, 0x2a, 0x75, 0x2e, 0x12, 0x98, 0x04, 0xf1, 0x6f, 0x0b, 0xa8, - 0x74, 0x04, 0x07, 0xfc, 0xc3, 0x83, 0xa9, 0x99, 0xc9, 0x74, 0xf7, 0x88, 0x3e, 0x7a, 0xad, 0xd2, - 0x01, 0x27, 0xb6, 0xe0, 0x36, 0x91, 0x1a, 0xe9, 0xa6, 0x7e, 0xff, 0x24, 0x71, 0x9d, 0xa3, 0xf9, - 0xd5, 0x10, 0x98, 0x65, 0x60, 0x2a, 0x91, 0xad, 0xec, 0x6a, 0x7a, 0x2c, 0x6a, 0x85, 0x3a, 0x9c, - 0x3d, 0x97, 0x9e, 0xea, 0x04, 0x74, 0x08, 0x30, 0x93, 0xe9, 0x1d, 0xd0, 0x7a, 0x2e, 0x6b, 0x6a, - 0x14, 0x34, 0x99, 0x4c, 0x64, 0x3a, 0xfd, 0xf5, 0x31, 0xf0, 0x1e, 0xd3, 0xcf, 0x8f, 0xa6, 0xaf, - 0x74, 0xea, 0x37, 0xba, 0xa8, 0x93, 0x02, 0x5c, 0x2b, 0x18, 0x1d, 0x4f, 0xcf, 0x9e, 0xc5, 0xc4, - 0x8d, 0x25, 0xa0, 0x4d, 0x46, 0xf5, 0xbe, 0x61, 0xd8, 0x36, 0xb5, 0xa1, 0x29, 0xed, 0xc8, 0x45, - 0xad, 0xe7, 0x72, 0xfa, 0xfa, 0x21, 0x2d, 0x7e, 0x05, 0xd3, 0xef, 0x19, 0xd0, 0x86, 0xfb, 0x1c, - 0xed, 0x7e, 0x1a, 0xc7, 0x00, 0x6f, 0xeb, 0x0e, 0xf0, 0x98, 0x05, 0xc9, 0xa5, 0xd2, 0xa1, 0x8d, - 0x8e, 0x3b, 0xac, 0xd6, 0x3b, 0xf4, 0xd1, 0x08, 0xd1, 0x59, 0xff, 0x5f, 0xf6, 0xde, 0x34, 0x3a, - 0x8a, 0x6b, 0x4d, 0x10, 0xac, 0xd0, 0x86, 0xb8, 0x6c, 0x22, 0xd8, 0x64, 0xb0, 0xb1, 0x90, 0xb1, - 0x8d, 0xe2, 0x89, 0xc5, 0xe1, 0x0d, 0xcb, 0x6b, 0x68, 0x01, 0xcb, 0x06, 0x21, 0x87, 0x80, 0xe7, - 0xe7, 0xe5, 0xf9, 0x25, 0x52, 0x18, 0xa7, 0x91, 0x32, 0xf5, 0x32, 0x53, 0x78, 0x79, 0x4b, 0x25, - 0x8b, 0x40, 0x02, 0x09, 0x89, 0x30, 0xab, 0x2c, 0x36, 0x9b, 0xcd, 0x8b, 0x90, 0x79, 0xf8, 0x81, - 0x48, 0x49, 0x66, 0xba, 0x4e, 0x77, 0x75, 0x57, 0x4d, 0xf5, 0x52, 0x4c, 0xd5, 0x74, 0xd5, 0x54, - 0x77, 0xcd, 0x54, 0x91, 0x91, 0x99, 0x9a, 0xd3, 0x3d, 0xcc, 0x9c, 0x9e, 0x39, 0xa7, 0x0f, 0x67, - 0xce, 0x99, 0x39, 0x71, 0xbf, 0x7b, 0x6f, 0xdc, 0x58, 0x32, 0x25, 0x30, 0x66, 0xb1, 0xe1, 0x0f, - 0xca, 0xbb, 0xc7, 0xbd, 0xdf, 0xfd, 0xee, 0xb7, 0x7f, 0xce, 0xe1, 0x4b, 0x8b, 0xc0, 0x75, 0xb9, - 0x68, 0x43, 0xcb, 0x3a, 0xad, 0x3e, 0xd2, 0x58, 0xd4, 0x12, 0xa8, 0x0f, 0x86, 0x1a, 0x82, 0x81, - 0x22, 0x13, 0xcf, 0x99, 0xe8, 0xaa, 0x68, 0xe1, 0x42, 0x5c, 0x87, 0xed, 0x2f, 0x9e, 0x5f, 0x1c, - 0x0a, 0x06, 0x23, 0x8b, 0x17, 0x99, 0x25, 0x8b, 0xa1, 0xa8, 0xc8, 0xd8, 0x3d, 0x1c, 0x1f, 0x34, - 0x29, 0x26, 0xb2, 0xb3, 0xdc, 0x52, 0x55, 0xee, 0x00, 0xc4, 0x4b, 0x02, 0x9a, 0xd4, 0x12, 0xa8, - 0xb3, 0x56, 0x4c, 0xf2, 0x0a, 0x12, 0x82, 0xd7, 0x5e, 0x27, 0x6f, 0x16, 0x88, 0xcd, 0x18, 0x1e, - 0x8e, 0x09, 0x97, 0x69, 0x56, 0xa3, 0xcd, 0xf1, 0x81, 0x5d, 0x30, 0x07, 0x23, 0x51, 0x8d, 0xe8, - 0xd0, 0x92, 0xd4, 0xb1, 0xd3, 0xc9, 0xe3, 0x31, 0x67, 0xf5, 0xa1, 0xc3, 0xa4, 0x02, 0x27, 0x38, - 0xb2, 0xea, 0x16, 0x90, 0xb5, 0x52, 0x51, 0x82, 0xd1, 0xd5, 0x0f, 0x32, 0x49, 0xd8, 0xca, 0x12, - 0xd5, 0xbe, 0x26, 0xf1, 0x5c, 0x96, 0xdb, 0x3e, 0x6e, 0x14, 0x0f, 0x95, 0xff, 0x47, 0xd0, 0x95, - 0xff, 0x4b, 0xe0, 0xcd, 0xe4, 0xae, 0x08, 0xd7, 0x65, 0x27, 0xb7, 0xa8, 0xc8, 0x38, 0xde, 0x63, - 0x5e, 0x1c, 0x3b, 0xb2, 0xa0, 0x5d, 0x7b, 0x4c, 0xec, 0x39, 0x18, 0x63, 0x9f, 0x90, 0xea, 0xbf, - 0x90, 0x3c, 0x76, 0xc6, 0x84, 0x48, 0xdc, 0xbb, 0x62, 0xed, 0x4a, 0x0c, 0x91, 0x18, 0x32, 0x86, - 0x8e, 0x8e, 0x44, 0xf5, 0x78, 0x6c, 0x1b, 0xb1, 0x7c, 0xc7, 0x91, 0x8f, 0x6c, 0x77, 0x10, 0x04, - 0xad, 0xd4, 0xf6, 0x1a, 0x48, 0xa4, 0xc4, 0x81, 0xfe, 0x11, 0xbd, 0xcd, 0xe8, 0xbf, 0xc8, 0x1c, - 0xaf, 0xe2, 0xb1, 0x53, 0x89, 0xde, 0x98, 0x71, 0xf0, 0x74, 0x7c, 0x60, 0x0f, 0x59, 0xef, 0xf1, - 0x1e, 0x0b, 0x5f, 0xf4, 0xc6, 0x12, 0x07, 0xfb, 0x79, 0xeb, 0xbe, 0xf6, 0x2c, 0x12, 0x56, 0x4f, - 0x09, 0xad, 0x0f, 0x17, 0x4e, 0xc0, 0xbb, 0xf6, 0xb3, 0x8c, 0xcf, 0x50, 0x15, 0x6d, 0x0d, 0x2f, - 0xd1, 0xb0, 0xa0, 0x2b, 0x17, 0x05, 0xc9, 0x1a, 0x44, 0xfe, 0x4a, 0x20, 0x36, 0xc7, 0xdd, 0x5b, - 0x81, 0x3f, 0x60, 0x42, 0x5e, 0x58, 0xba, 0x79, 0xe8, 0x34, 0xf1, 0x41, 0xb2, 0x67, 0xeb, 0x06, - 0xed, 0xa3, 0xf8, 0x40, 0xcc, 0x84, 0xd9, 0x46, 0x2d, 0x82, 0x69, 0x8e, 0xf8, 0x40, 0xcc, 0xea, - 0x7b, 0xe9, 0xd3, 0xe4, 0x69, 0x62, 0xac, 0xc5, 0xba, 0xd3, 0xb8, 0x50, 0x78, 0x23, 0x2e, 0xee, - 0x1c, 0xd9, 0xff, 0x2d, 0x5c, 0xac, 0x67, 0x99, 0x3c, 0xc2, 0x7c, 0xb0, 0x4e, 0x6e, 0x7e, 0x15, - 0x06, 0x2d, 0x2b, 0x32, 0xef, 0xc5, 0xc2, 0x06, 0x7f, 0xe8, 0xf9, 0xc5, 0x1b, 0x7d, 0xa1, 0xc5, - 0x8d, 0xfe, 0x75, 0x8b, 0xc9, 0x7c, 0xcf, 0xaa, 0xd6, 0xc2, 0xc5, 0x7f, 0x2f, 0x20, 0xb1, 0x39, - 0xa4, 0xd5, 0x45, 0x7c, 0xa1, 0xc8, 0x1a, 0x0b, 0x69, 0x81, 0x99, 0xe1, 0x61, 0x41, 0x57, 0x7a, - 0x04, 0xc9, 0xa3, 0x81, 0xbc, 0x45, 0xb0, 0x21, 0xaf, 0xf6, 0x4e, 0x17, 0xf2, 0x2a, 0x4a, 0x83, - 0xbd, 0xb0, 0x47, 0x0a, 0xb9, 0xf5, 0xd0, 0xdb, 0x24, 0xc7, 0xdb, 0x3b, 0x19, 0x0e, 0x4b, 0x9c, - 0x3b, 0x9d, 0xd8, 0xda, 0x05, 0x04, 0xa9, 0xd1, 0xf5, 0xa5, 0xd1, 0x7f, 0xd1, 0x1d, 0xcc, 0x00, - 0x10, 0xb1, 0xea, 0xb1, 0x32, 0xf3, 0x74, 0xa7, 0xae, 0xab, 0x07, 0x6b, 0x8b, 0x55, 0x2d, 0x11, - 0xa5, 0xa1, 0x21, 0x18, 0x08, 0x13, 0x97, 0x43, 0x57, 0x12, 0x28, 0xa5, 0x1e, 0x87, 0x21, 0xfe, - 0x33, 0x41, 0x57, 0xbe, 0x13, 0x24, 0x77, 0x3f, 0xf9, 0xb4, 0x10, 0x1f, 0xd8, 0x91, 0x38, 0x7c, - 0xde, 0x82, 0x67, 0x8c, 0x16, 0xcb, 0x2b, 0xea, 0x8c, 0x6d, 0xad, 0xc9, 0xe1, 0x33, 0x10, 0xec, - 0xdb, 0x38, 0xd3, 0x9e, 0xfa, 0xbc, 0x15, 0x88, 0x20, 0xe2, 0xc1, 0x35, 0xd4, 0x93, 0xfc, 0xf6, - 0x33, 0x63, 0x68, 0x2f, 0xd8, 0xcf, 0xc3, 0x65, 0xe2, 0xe9, 0x60, 0x82, 0x5e, 0xfb, 0x2f, 0x26, - 0xfa, 0xf7, 0x98, 0xf7, 0xff, 0xd8, 0x09, 0xa3, 0xd5, 0x1c, 0x01, 0xe6, 0xb5, 0x42, 0x42, 0x81, - 0x22, 0x11, 0x4b, 0x44, 0xd8, 0xb6, 0x01, 0xff, 0x02, 0x23, 0xa4, 0xbe, 0xd9, 0x92, 0xdc, 0x73, - 0xfa, 0x4a, 0x74, 0xb3, 0xea, 0x5e, 0xbd, 0xb8, 0x2d, 0x0b, 0x15, 0xd0, 0xd2, 0xea, 0x00, 0xd9, - 0x8a, 0xc9, 0x19, 0xb7, 0xe2, 0x5f, 0x08, 0xba, 0x32, 0x2c, 0x48, 0xae, 0x6e, 0x78, 0x27, 0x76, - 0xde, 0x1d, 0x3b, 0xe1, 0x5a, 0xbc, 0xb8, 0x3b, 0x0b, 0x4d, 0x0b, 0x93, 0xbd, 0x81, 0xcb, 0x0c, - 0x7b, 0x31, 0x25, 0xe3, 0x5e, 0xfc, 0xb9, 0xa0, 0x2b, 0x7f, 0x26, 0x48, 0x5e, 0x3d, 0xe5, 0x2f, - 0x9d, 0x80, 0x01, 0x50, 0xce, 0x27, 0x6e, 0x03, 0xfc, 0xc6, 0xf0, 0x18, 0x9f, 0xa9, 0x2d, 0x3e, - 0x10, 0x03, 0x4b, 0xd7, 0x78, 0xac, 0x23, 0xb1, 0xef, 0xe2, 0x62, 0x30, 0xf5, 0x5b, 0x0c, 0x01, - 0x7b, 0x8c, 0xbd, 0xdb, 0xc8, 0x00, 0xf8, 0x86, 0xa7, 0xdb, 0x0a, 0x90, 0x9a, 0xc1, 0x86, 0xb8, - 0xf7, 0x21, 0x3e, 0xb0, 0x0b, 0xce, 0xc2, 0xdc, 0x10, 0xaf, 0x2f, 0x10, 0xdb, 0xb2, 0x90, 0x18, - 0x86, 0x5d, 0xe2, 0xb7, 0xa4, 0x20, 0xe3, 0x96, 0x10, 0xe5, 0x9a, 0x47, 0x47, 0xf9, 0xb8, 0x13, - 0x40, 0xee, 0xcc, 0xbd, 0xf0, 0x58, 0xba, 0xf8, 0x38, 0x8b, 0xad, 0x0d, 0x4a, 0xd0, 0x39, 0xba, - 0x52, 0xc8, 0x62, 0x6b, 0xdb, 0x18, 0xae, 0x55, 0x75, 0x5e, 0x81, 0xb2, 0xa7, 0xa5, 0x0d, 0x94, - 0x3d, 0x3d, 0x53, 0xa0, 0xec, 0x19, 0xa3, 0x04, 0xca, 0x9e, 0xe9, 0x0a, 0x94, 0xfd, 0x34, 0xca, - 0x69, 0xd0, 0xc2, 0xa0, 0x83, 0x1a, 0x4f, 0x93, 0xde, 0x6b, 0xe1, 0x7a, 0xb9, 0x90, 0x2d, 0x32, - 0x71, 0xe8, 0x12, 0x24, 0xc6, 0x62, 0xc9, 0x2e, 0xb5, 0x70, 0xbd, 0xd8, 0x82, 0xc6, 0x85, 0x5a, - 0x02, 0x11, 0x73, 0xd4, 0x42, 0x6f, 0x01, 0x95, 0xda, 0x82, 0xb5, 0x25, 0x58, 0x26, 0x86, 0x45, - 0x05, 0xb4, 0x83, 0xbc, 0xc4, 0x4a, 0x44, 0xe2, 0xf0, 0x82, 0xec, 0xea, 0x67, 0x7f, 0x43, 0x4c, - 0x2f, 0x9a, 0xe2, 0x93, 0x74, 0x15, 0xb7, 0x08, 0x4c, 0x12, 0x77, 0xdf, 0xa8, 0x92, 0x38, 0x6c, - 0x11, 0x42, 0x25, 0x71, 0xe5, 0x8e, 0x49, 0xe3, 0x03, 0x3b, 0x00, 0xbc, 0xcc, 0x79, 0x71, 0x42, - 0x34, 0x1a, 0x54, 0xac, 0xc7, 0xd8, 0x71, 0x2c, 0x3e, 0xb0, 0x33, 0x83, 0x74, 0xee, 0x23, 0x54, - 0x40, 0x0e, 0xbd, 0x36, 0xa4, 0x91, 0x17, 0x6e, 0x36, 0xde, 0xc1, 0x95, 0xba, 0xf2, 0x8a, 0xe4, - 0xaa, 0x94, 0x9f, 0xe2, 0x6d, 0xf7, 0xbc, 0x1e, 0x37, 0xef, 0xb7, 0x4d, 0x75, 0x8d, 0x24, 0xfe, - 0x16, 0x4d, 0xa5, 0x65, 0xc1, 0x70, 0x84, 0xcc, 0x3d, 0xc7, 0x0a, 0xe0, 0xee, 0xae, 0x75, 0x4c, - 0x3e, 0x66, 0xb6, 0x40, 0x75, 0x0f, 0x25, 0x7e, 0x84, 0x26, 0xf8, 0x02, 0x81, 0x60, 0x04, 0x8b, - 0xe3, 0xc3, 0x85, 0xf7, 0x63, 0x52, 0x67, 0x61, 0x46, 0x52, 0x47, 0xb1, 0xda, 0x03, 0xb1, 0xb3, - 0x40, 0x57, 0x1e, 0x96, 0xf8, 0x61, 0xe4, 0x99, 0xb0, 0x34, 0xab, 0x88, 0x38, 0x30, 0xf0, 0x8d, - 0xc4, 0x37, 0xd1, 0xe4, 0x26, 0xdf, 0x87, 0x58, 0xb4, 0x07, 0x99, 0x4c, 0x88, 0x6a, 0x06, 0xa7, - 0x41, 0x72, 0x54, 0xc9, 0x73, 0x13, 0xfd, 0x5d, 0xf1, 0x81, 0x2f, 0x2d, 0x8b, 0x1e, 0x6c, 0x49, - 0x58, 0x4b, 0x73, 0xa2, 0xa8, 0x8e, 0xf6, 0x62, 0x23, 0x9a, 0x1c, 0xde, 0xe0, 0x6f, 0x06, 0x83, - 0xa7, 0xea, 0x80, 0x3f, 0x82, 0x35, 0x28, 0xf9, 0x90, 0xdc, 0xd3, 0x51, 0x25, 0x2f, 0x26, 0x91, - 0x9d, 0x2e, 0x9c, 0x4b, 0x5d, 0xda, 0x4e, 0x4c, 0xf5, 0x30, 0x8b, 0xc8, 0x5e, 0x11, 0xca, 0xe5, - 0x42, 0xa5, 0xea, 0x18, 0x40, 0xfc, 0x4c, 0x40, 0x73, 0x7c, 0x8d, 0x8d, 0xc1, 0x0f, 0xea, 0xcc, - 0x72, 0x82, 0x49, 0x7f, 0xfe, 0x9e, 0x16, 0x58, 0xe6, 0xf3, 0x37, 0x6a, 0x0d, 0x58, 0xa5, 0x91, - 0x0f, 0x6a, 0xd7, 0x4c, 0xed, 0xe4, 0x17, 0x88, 0xaa, 0x8e, 0x06, 0xd7, 0xe4, 0x8d, 0x45, 0xc9, - 0xea, 0x70, 0x3a, 0x47, 0x8e, 0xe9, 0xe6, 0x2b, 0xd5, 0x4c, 0x83, 0x8b, 0x9f, 0x08, 0x68, 0xb6, - 0xbd, 0xbe, 0x3a, 0xc0, 0xad, 0xb1, 0x08, 0xaf, 0x91, 0x58, 0x59, 0xda, 0xf7, 0xe7, 0x05, 0x5e, - 0xd9, 0x75, 0x03, 0xcb, 0xca, 0x30, 0xed, 0xf7, 0x89, 0x1a, 0x4d, 0x23, 0x38, 0x33, 0xb2, 0xfb, - 0xba, 0x7a, 0xbf, 0x80, 0x0a, 0x9c, 0x90, 0x7c, 0x5d, 0x11, 0xa0, 0xdf, 0xd6, 0x95, 0x37, 0xd0, - 0xeb, 0x92, 0x4d, 0x4e, 0x47, 0xed, 0xf8, 0xe1, 0x25, 0xa0, 0x22, 0x5b, 0x92, 0x1b, 0xad, 0xff, - 0xa2, 0x65, 0x82, 0xc4, 0x07, 0x59, 0x4c, 0xf6, 0x6c, 0x1d, 0x89, 0xf6, 0x24, 0xf7, 0x9c, 0x86, - 0x3c, 0x54, 0x70, 0x55, 0x8a, 0xbf, 0xca, 0x46, 0x93, 0x68, 0xf6, 0x4f, 0xc0, 0x51, 0xbf, 0x32, - 0xef, 0x8b, 0xf5, 0x9b, 0xc9, 0x00, 0x97, 0xea, 0xca, 0x93, 0x92, 0xa3, 0x4a, 0x7e, 0xa8, 0xa2, - 0x02, 0x10, 0x5d, 0x75, 0x65, 0x29, 0x54, 0xb9, 0x35, 0x14, 0xaa, 0xa3, 0x93, 0xf8, 0x3e, 0x2a, - 0xe0, 0x4b, 0x38, 0x23, 0x6d, 0x8c, 0xee, 0x5d, 0x95, 0xf2, 0xa3, 0x74, 0x16, 0x10, 0x16, 0xa6, - 0x9f, 0xc9, 0xd5, 0xd5, 0xfc, 0x9a, 0x0f, 0x82, 0xa1, 0x0d, 0xdc, 0xd7, 0x64, 0x73, 0x5f, 0x63, - 0xaf, 0xb2, 0x7d, 0x0d, 0x54, 0x79, 0x7d, 0x8d, 0xbd, 0x93, 0xf9, 0x35, 0x7c, 0x09, 0xfe, 0x9a, - 0x1c, 0xee, 0x6b, 0x9c, 0x95, 0xae, 0xaf, 0x49, 0x3b, 0x93, 0xab, 0x6b, 0xf1, 0xb1, 0x5c, 0x84, - 0xac, 0x77, 0x4a, 0x7c, 0x8f, 0x3c, 0x27, 0xab, 0x5a, 0x22, 0x8e, 0xc3, 0xc2, 0x9e, 0xe4, 0xae, - 0x4a, 0xf9, 0x61, 0xee, 0x03, 0x2b, 0x14, 0x9e, 0x71, 0xb2, 0x4f, 0xec, 0xec, 0x28, 0x6a, 0xc4, - 0x70, 0xa1, 0x3a, 0xc0, 0x26, 0x82, 0x13, 0xc3, 0x4a, 0x2b, 0x67, 0x9d, 0x63, 0x1e, 0xfe, 0x19, - 0xb1, 0xcd, 0xe3, 0xec, 0x27, 0x06, 0xd1, 0x24, 0x3a, 0x75, 0xb9, 0xff, 0x63, 0x76, 0x58, 0xd8, - 0x79, 0xd8, 0x5e, 0x23, 0x3f, 0xc9, 0xaf, 0xbe, 0xa2, 0xc2, 0xca, 0xfe, 0xcf, 0x82, 0x4e, 0x52, - 0x9b, 0x6d, 0x9c, 0x63, 0x83, 0x54, 0xab, 0xf6, 0x51, 0xc4, 0x46, 0x6c, 0xb8, 0x62, 0xae, 0x01, - 0xe6, 0xcb, 0xb1, 0x92, 0x38, 0xd8, 0x2a, 0xe4, 0x27, 0xf9, 0x8f, 0x18, 0xfb, 0x74, 0xb6, 0x41, - 0xc4, 0x10, 0xa1, 0x73, 0xd9, 0xce, 0x62, 0x60, 0x81, 0x50, 0x7d, 0xe5, 0xba, 0xf2, 0xa2, 0xe4, - 0x51, 0x2d, 0x97, 0x38, 0xc0, 0x25, 0xc3, 0xb9, 0x79, 0x74, 0x17, 0x83, 0xec, 0xdd, 0xe7, 0xa6, - 0xcc, 0xb3, 0x92, 0x13, 0xb9, 0x6b, 0x3d, 0x66, 0x4c, 0x7b, 0x82, 0xee, 0xde, 0xc5, 0xfd, 0x02, - 0x9a, 0xc0, 0x91, 0x70, 0xa2, 0x8a, 0x0a, 0xea, 0x83, 0x81, 0x88, 0xcf, 0x1f, 0xd0, 0x42, 0x2a, - 0xa1, 0xfc, 0x00, 0x48, 0x1f, 0xd1, 0x95, 0x87, 0x24, 0x57, 0xa5, 0x3c, 0x05, 0x62, 0x5a, 0x30, - 0x82, 0x4e, 0x75, 0x35, 0x11, 0x57, 0xa0, 0xc9, 0x84, 0xb0, 0x5b, 0xab, 0x85, 0xc2, 0xfe, 0x20, - 0xcd, 0x97, 0x38, 0x5f, 0x57, 0xe6, 0x49, 0x8e, 0x2a, 0x79, 0x8a, 0x83, 0x34, 0x54, 0x1d, 0x0d, - 0x8a, 0x2f, 0xce, 0x45, 0xf7, 0x41, 0xaa, 0x41, 0x1e, 0xc9, 0xd2, 0xc4, 0xf8, 0xef, 0xf2, 0x3a, - 0x09, 0x81, 0xc2, 0x87, 0xc4, 0xeb, 0x24, 0x1e, 0xb0, 0xd1, 0xbc, 0xf6, 0xa4, 0x30, 0xd5, 0x95, - 0xd7, 0xca, 0x0b, 0x43, 0x33, 0x0b, 0x84, 0xc2, 0x68, 0x81, 0x3c, 0xe5, 0x97, 0x6f, 0x2e, 0x59, - 0xf8, 0x8c, 0x6f, 0xe1, 0xc7, 0xca, 0xc2, 0x37, 0x16, 0xbe, 0xfd, 0xb3, 0xf9, 0xbc, 0x3e, 0x62, - 0xa9, 0x4d, 0x5d, 0x32, 0xdf, 0x4b, 0x5d, 0xc2, 0x3c, 0xd4, 0xaf, 0x95, 0xe7, 0x84, 0xb2, 0x0a, - 0x04, 0xa2, 0x35, 0xa1, 0xb4, 0x78, 0xf6, 0xf5, 0xd2, 0xe2, 0x1f, 0x39, 0x54, 0x20, 0x4f, 0x7a, - 0xe4, 0xde, 0xf6, 0xde, 0x95, 0x7b, 0xfa, 0x90, 0x7b, 0xfa, 0x90, 0xbb, 0x4e, 0x1f, 0xf2, 0xff, - 0x0a, 0x1e, 0xfa, 0x90, 0x7f, 0x10, 0x74, 0xe5, 0x3f, 0x0a, 0x36, 0x7d, 0xc8, 0xbf, 0xb1, 0x49, - 0x54, 0xc6, 0xcc, 0xf8, 0x5c, 0x1d, 0xea, 0xb8, 0xd3, 0x14, 0x22, 0xf7, 0xb4, 0x0c, 0xf7, 0xb4, - 0x0c, 0xe2, 0x3e, 0x0f, 0x2d, 0xc3, 0xd2, 0xb1, 0x63, 0xfa, 0x1f, 0xaf, 0xca, 0xe1, 0xaf, 0x33, - 0xa9, 0x1c, 0x8e, 0x0a, 0xba, 0xd2, 0xeb, 0xad, 0x72, 0x68, 0xb5, 0xe3, 0x07, 0x4e, 0x2a, 0x73, - 0x75, 0xa8, 0x23, 0x93, 0xce, 0x01, 0xa2, 0xf2, 0xfc, 0xa0, 0x4a, 0x87, 0x74, 0xf2, 0xe5, 0x49, - 0xf7, 0xe4, 0xcb, 0x4e, 0xf9, 0xf2, 0xe4, 0x9f, 0xb4, 0x7c, 0x79, 0xca, 0xd8, 0xe5, 0xcb, 0xcb, - 0x2c, 0xf9, 0xf2, 0x54, 0x1a, 0x4d, 0xe9, 0x41, 0xcb, 0xad, 0x67, 0x3a, 0x8e, 0xdd, 0x97, 0xfa, - 0xf6, 0xa4, 0xd1, 0x75, 0x81, 0xf9, 0xf6, 0x70, 0x29, 0x05, 0x98, 0x34, 0xfa, 0x4b, 0xc1, 0x92, - 0xfd, 0x8a, 0xa3, 0xcb, 0x7e, 0x31, 0xb1, 0xc6, 0x64, 0xbf, 0xda, 0xf5, 0xca, 0x7e, 0x4b, 0x8b, - 0x20, 0x3c, 0x21, 0x04, 0xca, 0x32, 0x1f, 0x58, 0x10, 0x86, 0xb0, 0x7e, 0x7a, 0x07, 0x6d, 0xce, - 0xe5, 0x5f, 0x64, 0x02, 0xe3, 0x73, 0x96, 0xc0, 0x78, 0xda, 0xa8, 0x02, 0x63, 0x1c, 0x2b, 0x88, - 0x0a, 0x8c, 0x43, 0x1c, 0xf3, 0x5b, 0xf4, 0xfd, 0x85, 0xc7, 0x10, 0x5e, 0x08, 0x4c, 0x9e, 0x59, - 0x4e, 0x05, 0xf3, 0x79, 0xe2, 0xf9, 0x30, 0x2a, 0x60, 0xde, 0x2f, 0xa0, 0x82, 0x3a, 0xa7, 0x84, - 0x79, 0x3a, 0xc9, 0x16, 0xb8, 0x3e, 0x18, 0x5c, 0xdf, 0xa8, 0x2d, 0x6a, 0x0e, 0x05, 0x23, 0xc1, - 0x75, 0x2d, 0xef, 0x2e, 0xaa, 0x8b, 0x84, 0xfc, 0x81, 0xf5, 0xd8, 0xe0, 0x6c, 0x6c, 0xf2, 0xe7, - 0xb1, 0x8b, 0x80, 0x5d, 0x8b, 0x10, 0x7b, 0x04, 0x34, 0xb5, 0xce, 0x25, 0x80, 0x9e, 0x31, 0x86, - 0xa5, 0xdd, 0x74, 0xf1, 0xb4, 0x6b, 0x19, 0x62, 0xa3, 0x5d, 0x3c, 0x3d, 0xd3, 0x3b, 0x98, 0xcb, - 0x4a, 0x5f, 0x73, 0x5d, 0x24, 0xd4, 0x52, 0x1f, 0x21, 0x79, 0xf9, 0x79, 0x51, 0xf4, 0x03, 0x64, - 0x0e, 0xfc, 0x1e, 0x3b, 0xc5, 0xd2, 0x61, 0x9b, 0x44, 0xfa, 0xb6, 0xc9, 0x22, 0x69, 0x36, 0xb9, - 0xf4, 0xcc, 0xae, 0x2c, 0x92, 0x0b, 0xcc, 0xf1, 0x8d, 0x97, 0x05, 0x8b, 0x49, 0xbd, 0x2c, 0x60, - 0x8e, 0xf3, 0xb2, 0x40, 0xef, 0x74, 0xf1, 0xf9, 0x2c, 0x34, 0xdb, 0x6b, 0xb8, 0x70, 0x73, 0x30, - 0x10, 0xd6, 0xc4, 0x45, 0x28, 0xa7, 0x9e, 0x1a, 0x7e, 0x4e, 0x22, 0x29, 0x94, 0xcd, 0x02, 0x93, - 0x29, 0xdf, 0x63, 0x7c, 0x7a, 0x18, 0x4c, 0xdc, 0x93, 0x47, 0x37, 0xa9, 0xb8, 0x58, 0x2c, 0x43, - 0xe3, 0x9a, 0x88, 0x5d, 0x3c, 0xf0, 0xc1, 0x38, 0x19, 0x08, 0x2d, 0x93, 0x45, 0xbe, 0x17, 0x55, - 0xf1, 0x90, 0x4a, 0xf1, 0x31, 0x94, 0x17, 0xd2, 0xc2, 0x2d, 0x8d, 0x11, 0x12, 0x6b, 0x1e, 0x47, - 0x7c, 0x20, 0x45, 0xf2, 0x44, 0xe8, 0x99, 0x1c, 0xfc, 0x24, 0x71, 0xb8, 0x57, 0x25, 0xa5, 0xe2, - 0x47, 0x68, 0xca, 0x07, 0xda, 0xba, 0x77, 0xf8, 0xb3, 0xcf, 0xf1, 0xce, 0x53, 0xfc, 0x73, 0x6d, - 0x1d, 0x27, 0xc6, 0x5d, 0x2b, 0x43, 0xf6, 0x5c, 0x67, 0x6f, 0xb9, 0x90, 0x26, 0x37, 0x8f, 0x1a, - 0x67, 0x0f, 0x83, 0x00, 0x20, 0x71, 0x68, 0xcb, 0xc8, 0xc1, 0x6e, 0x75, 0xf2, 0x07, 0xb6, 0x11, - 0x8a, 0xff, 0xac, 0x08, 0xdd, 0xb7, 0x06, 0xeb, 0xd3, 0xbc, 0x84, 0x0e, 0x4f, 0xb9, 0x85, 0x0e, - 0xd8, 0x58, 0x94, 0x13, 0x3a, 0xe4, 0x53, 0xf9, 0x02, 0x2f, 0x44, 0x58, 0xe7, 0x32, 0xe0, 0x84, - 0x6d, 0xc4, 0xd9, 0x26, 0x9c, 0x06, 0x9c, 0x0f, 0xdb, 0x7f, 0x83, 0x07, 0x83, 0x45, 0xe9, 0x8f, - 0x66, 0xd7, 0x99, 0x9d, 0xde, 0xae, 0xd3, 0x0a, 0xa5, 0x67, 0x97, 0x50, 0xe4, 0xdc, 0xb8, 0x84, - 0x22, 0xd7, 0x5b, 0x42, 0x91, 0x76, 0x0b, 0x6f, 0xa2, 0x84, 0x22, 0xef, 0x96, 0x48, 0x28, 0xc6, - 0xdd, 0xc1, 0x12, 0x8a, 0xfc, 0x7b, 0x12, 0x8a, 0x5b, 0x22, 0xa1, 0xe8, 0xb4, 0x5b, 0x6c, 0x42, - 0x70, 0xff, 0xff, 0x92, 0xa5, 0x2b, 0xa9, 0x2c, 0x9b, 0x84, 0xe2, 0xef, 0xb3, 0xee, 0x2e, 0x39, - 0xc4, 0xdd, 0x6a, 0x98, 0xf9, 0x9f, 0x5d, 0x22, 0x13, 0x94, 0x86, 0x60, 0x59, 0x53, 0x1d, 0x88, - 0x3c, 0x2e, 0x03, 0xc1, 0x72, 0xb7, 0x0a, 0x54, 0x26, 0xdc, 0x13, 0xa8, 0xdc, 0x80, 0x40, 0x65, - 0xa2, 0xb7, 0x40, 0x25, 0xfd, 0xc3, 0xf4, 0xe3, 0x15, 0xa8, 0xfc, 0xd1, 0x5b, 0xa0, 0x02, 0xc9, - 0x11, 0x49, 0x42, 0x52, 0x2f, 0x81, 0xca, 0xfb, 0x77, 0xa8, 0xd0, 0x64, 0xf2, 0x3d, 0xa1, 0x89, - 0x53, 0x68, 0x32, 0xe5, 0x27, 0x2d, 0x34, 0x29, 0x18, 0xbb, 0xd0, 0xe4, 0x59, 0x67, 0x34, 0x92, - 0x79, 0xba, 0x32, 0xdd, 0x8a, 0x46, 0x32, 0x9e, 0xc5, 0x21, 0xe1, 0x25, 0x25, 0xd4, 0x3a, 0x8f, - 0x97, 0x94, 0x4c, 0xbb, 0x8b, 0x24, 0x25, 0xd3, 0xef, 0x72, 0x49, 0xc9, 0x8c, 0x3b, 0x57, 0x52, - 0x32, 0xf3, 0x8e, 0x94, 0x94, 0xcc, 0xfa, 0x91, 0x4a, 0x4a, 0x8e, 0x0b, 0xba, 0x72, 0x54, 0x40, - 0x87, 0x04, 0x89, 0x30, 0xe9, 0x90, 0x31, 0xbf, 0x1e, 0xc7, 0xff, 0xa2, 0xc2, 0x92, 0x5f, 0xc0, - 0x1d, 0xe6, 0xc4, 0x9f, 0xa9, 0xfe, 0x0b, 0x89, 0xb3, 0x9b, 0x71, 0x88, 0x72, 0x62, 0x9a, 0x66, - 0x36, 0xd9, 0x73, 0x11, 0x6a, 0x19, 0x94, 0x8e, 0x1c, 0xf8, 0x43, 0xa2, 0xef, 0x33, 0xa3, 0xff, - 0xa2, 0xd1, 0x77, 0x60, 0x64, 0x7b, 0x17, 0x01, 0xec, 0xd8, 0xa9, 0xe4, 0x9e, 0x23, 0xc6, 0xf0, - 0x59, 0xe3, 0x93, 0x4e, 0xbb, 0xcc, 0xc5, 0xc1, 0x80, 0x5f, 0x16, 0x28, 0x9e, 0xc0, 0xd2, 0x17, - 0x2f, 0x42, 0xe3, 0x9e, 0xf4, 0x65, 0x14, 0xe9, 0xcb, 0xe7, 0x59, 0xe8, 0x3e, 0x88, 0xe3, 0xe1, - 0x25, 0x7d, 0x59, 0xe5, 0x96, 0xbe, 0x3c, 0xa6, 0x2b, 0x8b, 0x78, 0xe9, 0xcb, 0x3c, 0x1e, 0x20, - 0x1c, 0x26, 0x1f, 0xee, 0x38, 0x5b, 0xb7, 0x40, 0x2c, 0xc3, 0x84, 0x7b, 0x69, 0x3f, 0x4b, 0x16, - 0x21, 0x4e, 0x19, 0x3f, 0x4e, 0x46, 0x40, 0xc3, 0xe0, 0xe5, 0x35, 0xdc, 0x3d, 0xf0, 0x1a, 0x05, - 0xbc, 0xfe, 0x9b, 0x80, 0x66, 0x2e, 0xd7, 0x22, 0x37, 0x53, 0xb2, 0xf7, 0x6a, 0x1a, 0x10, 0xba, - 0x11, 0xd7, 0xec, 0xb2, 0xd5, 0xba, 0xf2, 0x1a, 0x5a, 0x25, 0xa5, 0x59, 0xa3, 0x5c, 0x98, 0x38, - 0x72, 0x22, 0xd5, 0xff, 0x19, 0x2f, 0x9b, 0x4b, 0xf5, 0x9f, 0x4c, 0x6c, 0x69, 0xcd, 0x0c, 0x2e, - 0x7f, 0x9b, 0x8d, 0x66, 0xb9, 0x46, 0xbc, 0x3b, 0x60, 0x65, 0x15, 0xca, 0x31, 0xf9, 0x3b, 0x02, - 0x20, 0xf7, 0x67, 0x32, 0x4c, 0x27, 0x12, 0x4f, 0xb3, 0xb9, 0x5d, 0xe2, 0x09, 0x5b, 0xa4, 0xe2, - 0x1a, 0x2f, 0xe0, 0xcb, 0xbd, 0x35, 0xc0, 0x57, 0xb6, 0x4a, 0x57, 0x56, 0xa0, 0x57, 0xa4, 0x74, - 0x47, 0x21, 0xcf, 0x4d, 0x77, 0xba, 0xb0, 0x33, 0x97, 0x05, 0x7c, 0x02, 0x97, 0x05, 0xba, 0x9f, - 0xc5, 0xff, 0x36, 0x0b, 0xcd, 0x5a, 0xe1, 0x0f, 0xdf, 0xb9, 0xe0, 0x0c, 0xc9, 0xce, 0xd0, 0x09, - 0x41, 0x4a, 0xb7, 0x4e, 0xf9, 0xf7, 0x5e, 0x1f, 0x4d, 0x1e, 0x6b, 0x10, 0x71, 0x41, 0x76, 0x80, - 0x78, 0x6c, 0x9b, 0xb9, 0xb3, 0x47, 0xb7, 0x43, 0x48, 0x69, 0x88, 0xfb, 0x92, 0x1c, 0xdc, 0x6a, - 0x74, 0xb7, 0x41, 0x39, 0x11, 0xb4, 0xe2, 0xd1, 0xac, 0xbe, 0xad, 0xa7, 0x19, 0xd9, 0x19, 0x1f, - 0x88, 0x41, 0xad, 0xd1, 0x8a, 0xc3, 0x18, 0xe1, 0xf6, 0xfc, 0xc5, 0x29, 0xfe, 0x9f, 0xb3, 0x50, - 0xa1, 0x7b, 0x9d, 0x77, 0xdb, 0x45, 0xc9, 0xbe, 0xe1, 0x8b, 0x02, 0x99, 0x19, 0xe0, 0xa2, 0x94, - 0xbd, 0xa2, 0x2b, 0xcb, 0x51, 0x95, 0x94, 0x76, 0x43, 0x3c, 0x91, 0x51, 0x1a, 0x40, 0xfd, 0x9b, - 0x02, 0x34, 0xae, 0x16, 0xb6, 0x59, 0x7c, 0xd3, 0x0d, 0x98, 0x90, 0x96, 0xc3, 0x02, 0xcc, 0x85, - 0x14, 0x30, 0x4b, 0x69, 0xc8, 0xff, 0xd8, 0xe3, 0x72, 0x7c, 0xb8, 0x93, 0x65, 0x76, 0x29, 0xb5, - 0xa5, 0x54, 0xe4, 0xa0, 0xb7, 0xc6, 0x66, 0xab, 0x89, 0x5f, 0x71, 0x50, 0x81, 0x2c, 0xa6, 0x91, - 0x27, 0xfa, 0x12, 0xfb, 0xb6, 0x83, 0x0a, 0xc4, 0xa4, 0xf7, 0x58, 0x46, 0x81, 0x2d, 0xc3, 0x10, - 0x55, 0xe8, 0xa9, 0x27, 0x60, 0x12, 0xa2, 0x1f, 0x09, 0xa1, 0x09, 0x5a, 0x60, 0x7d, 0xa3, 0x3f, - 0xfc, 0x5e, 0x8d, 0xa5, 0x59, 0xa9, 0xd5, 0x95, 0x95, 0x12, 0x5f, 0x2e, 0xbf, 0x00, 0xa3, 0xa7, - 0x76, 0x9e, 0x4d, 0xec, 0xdb, 0x6e, 0xd2, 0xf4, 0xdb, 0x0e, 0xb2, 0x39, 0x8c, 0x3d, 0xfd, 0x10, - 0x2e, 0xdf, 0x3d, 0xd9, 0xe3, 0x32, 0x99, 0x8c, 0x1f, 0x8c, 0x0f, 0xd6, 0x99, 0xe3, 0x15, 0xac, - 0x93, 0xa4, 0x26, 0x72, 0x07, 0xeb, 0x7c, 0xde, 0xe2, 0x6c, 0x73, 0xad, 0x3b, 0xcb, 0x38, 0xdb, - 0x19, 0x3c, 0x11, 0xe4, 0x11, 0x6d, 0xf3, 0x17, 0x68, 0x02, 0xd9, 0x48, 0x1c, 0x64, 0x1d, 0x42, - 0x44, 0xe3, 0xec, 0x18, 0x39, 0x91, 0x8f, 0x9a, 0x35, 0xb9, 0x14, 0xfa, 0xb3, 0xec, 0xf2, 0x90, - 0xe3, 0xec, 0xb1, 0x32, 0x13, 0x2a, 0xde, 0x0d, 0x86, 0x9a, 0xae, 0x0e, 0x75, 0xc8, 0x65, 0xeb, - 0x5a, 0xc2, 0xfe, 0x80, 0x16, 0x0e, 0xab, 0xfc, 0x58, 0xe2, 0x87, 0x38, 0x1b, 0x44, 0xf9, 0xab, - 0xaa, 0x16, 0x26, 0xb1, 0x98, 0x71, 0x56, 0x0c, 0x56, 0x28, 0xaf, 0x04, 0x69, 0x2b, 0x48, 0x0b, - 0x20, 0x36, 0x08, 0x44, 0xbe, 0x61, 0xe1, 0x84, 0x13, 0x67, 0x8f, 0x62, 0xf2, 0xdd, 0x72, 0xa8, - 0x60, 0x61, 0x86, 0x21, 0xf9, 0x0d, 0x1f, 0xf5, 0x98, 0x0d, 0x2c, 0x2e, 0x43, 0x13, 0x1a, 0xb4, - 0x30, 0x66, 0x91, 0xfc, 0xc1, 0x00, 0xd1, 0x97, 0x60, 0x6b, 0x64, 0xbe, 0x5c, 0x16, 0xc9, 0xb7, - 0x9d, 0xc1, 0xe9, 0xed, 0xb0, 0xba, 0x4b, 0xe5, 0x1b, 0x88, 0xab, 0xd1, 0x78, 0x7f, 0x78, 0xd5, - 0xbb, 0xef, 0x36, 0xfa, 0x03, 0x1a, 0x89, 0x8d, 0x8c, 0xb3, 0xb8, 0x58, 0xa5, 0xf2, 0x23, 0x04, - 0xf9, 0x83, 0xdc, 0xf8, 0xc2, 0x1f, 0x92, 0x83, 0x5d, 0xc9, 0x93, 0x83, 0xc9, 0xd8, 0x25, 0xc7, - 0xe2, 0xac, 0x2e, 0x62, 0x03, 0xca, 0xd9, 0xe0, 0x0f, 0x34, 0x90, 0x04, 0xbc, 0x18, 0xae, 0x70, - 0x81, 0x5c, 0xc5, 0xc0, 0x95, 0x08, 0x4a, 0xec, 0x9b, 0xbe, 0x61, 0x69, 0x78, 0x71, 0x93, 0x16, - 0x0e, 0x86, 0x71, 0x6e, 0x8c, 0x2f, 0x13, 0x87, 0x70, 0xfa, 0x31, 0xc8, 0xac, 0xda, 0xd5, 0x9f, - 0xda, 0x32, 0x0c, 0xb9, 0x58, 0x55, 0x3c, 0x98, 0xb8, 0x02, 0x21, 0x7a, 0x2c, 0xd5, 0x95, 0x38, - 0xa2, 0x31, 0xcd, 0x9d, 0x6f, 0x15, 0xcb, 0x73, 0x60, 0xd7, 0x2b, 0x56, 0x56, 0x96, 0xc7, 0x07, - 0xfa, 0xa8, 0x9d, 0x3c, 0x41, 0x4c, 0x5c, 0x43, 0x31, 0x2a, 0x20, 0xd4, 0xa0, 0x35, 0x37, 0x06, - 0x3f, 0xc2, 0x60, 0x32, 0xd1, 0x8a, 0x28, 0xc9, 0x15, 0xcb, 0xab, 0x60, 0x04, 0x08, 0x1b, 0x6a, - 0xad, 0xbe, 0x73, 0x6f, 0x72, 0xe7, 0xd7, 0x10, 0xfe, 0x25, 0xf9, 0xe9, 0x77, 0xf1, 0x4b, 0x87, - 0x92, 0x7b, 0x0f, 0x5e, 0x1d, 0xea, 0x78, 0xac, 0x2c, 0xd9, 0xfe, 0x45, 0xb2, 0x7b, 0x5b, 0xa2, - 0x37, 0x06, 0x3d, 0x30, 0x2c, 0x81, 0xb9, 0x39, 0x14, 0xa8, 0xdc, 0xe0, 0xe2, 0x4b, 0x28, 0x67, - 0xdd, 0xfa, 0xea, 0x4a, 0x22, 0xbf, 0xc4, 0x9f, 0x82, 0x0b, 0xe4, 0x79, 0xf1, 0xd8, 0xce, 0xf8, - 0x40, 0x0f, 0x8d, 0x89, 0x9b, 0x38, 0x74, 0x22, 0x11, 0xeb, 0x36, 0x41, 0x85, 0x7d, 0x9b, 0x8a, - 0x1b, 0x8a, 0xaf, 0xa0, 0xbc, 0x75, 0xeb, 0xf1, 0x95, 0x86, 0x60, 0xbd, 0xb2, 0xae, 0x2c, 0x96, - 0x48, 0x91, 0xfc, 0x30, 0x1b, 0x85, 0x5d, 0x62, 0xaf, 0x91, 0x48, 0x73, 0xb1, 0x02, 0xe5, 0x35, - 0x68, 0xcd, 0x11, 0x16, 0xa8, 0x17, 0x14, 0x8f, 0x50, 0x24, 0xcf, 0x1d, 0xd9, 0x72, 0x7a, 0x64, - 0xff, 0xe9, 0xb4, 0xcb, 0x21, 0xed, 0xc4, 0x95, 0x28, 0xdf, 0xfc, 0x0b, 0x2f, 0xa9, 0xc0, 0x62, - 0x6c, 0x58, 0xa1, 0x5c, 0x0c, 0x03, 0x65, 0x5c, 0x11, 0x6b, 0x2d, 0x56, 0xa3, 0xfc, 0x7a, 0x2d, - 0x00, 0xe1, 0x83, 0xa7, 0x5a, 0x29, 0x20, 0x58, 0xa1, 0x3c, 0x37, 0x3e, 0xd0, 0x67, 0x5c, 0xda, - 0x92, 0x76, 0x5d, 0xac, 0xa5, 0x58, 0x87, 0x10, 0xfc, 0x5d, 0x63, 0x65, 0x53, 0xc1, 0x2e, 0x7a, - 0x5c, 0xb1, 0x5c, 0x0c, 0xc3, 0x65, 0x5c, 0x1d, 0xd7, 0x5e, 0x7c, 0x0d, 0xe5, 0xe3, 0xc4, 0x35, - 0x21, 0x2d, 0x82, 0xe5, 0x68, 0xf9, 0x90, 0xa0, 0x85, 0x15, 0xca, 0x8f, 0x10, 0x84, 0x30, 0x10, - 0x8b, 0x5f, 0x3a, 0x64, 0xf4, 0x6f, 0x63, 0x41, 0x84, 0x1c, 0x21, 0xd8, 0x59, 0x0f, 0xf1, 0x4b, - 0x01, 0x4d, 0xa8, 0x0f, 0x69, 0x0d, 0x5a, 0x20, 0xe2, 0xf7, 0x35, 0x86, 0x0b, 0xa7, 0x7b, 0x07, - 0x0f, 0x22, 0xcf, 0xd0, 0xa2, 0x0a, 0xab, 0x29, 0x88, 0xfb, 0x71, 0x4c, 0x6c, 0x7e, 0x04, 0x79, - 0x05, 0xbd, 0x84, 0x3b, 0x93, 0x7b, 0x0f, 0x1a, 0x7d, 0x07, 0x92, 0x3d, 0x5b, 0x21, 0x23, 0x11, - 0x0d, 0xd7, 0xbb, 0x93, 0x84, 0xa4, 0xeb, 0xd9, 0x6a, 0x75, 0x63, 0xb2, 0x04, 0x90, 0xfe, 0x9b, - 0xad, 0x21, 0x99, 0x16, 0x3f, 0xb4, 0x58, 0x86, 0xc6, 0x63, 0xac, 0x6d, 0x39, 0xf9, 0x96, 0xdf, - 0xaf, 0x2b, 0xf7, 0x49, 0x56, 0xa9, 0x3c, 0xd1, 0x16, 0x4f, 0xd9, 0xaa, 0x10, 0x9f, 0x77, 0x7b, - 0x00, 0xc3, 0x13, 0xc1, 0x47, 0x45, 0x9e, 0x98, 0x2e, 0x1e, 0xf2, 0xec, 0x37, 0x50, 0x81, 0xf3, - 0xdb, 0x3d, 0x24, 0x30, 0x4b, 0x78, 0x09, 0x8c, 0x87, 0xe4, 0xd0, 0x1a, 0x82, 0x97, 0xce, 0x34, - 0xe9, 0xca, 0xfb, 0xe8, 0x3d, 0x89, 0xbe, 0xf5, 0xf2, 0xdb, 0xfc, 0x93, 0x63, 0x82, 0xc5, 0xde, - 0x6f, 0xe3, 0xc3, 0x9f, 0x18, 0xfd, 0x17, 0x47, 0x86, 0xbb, 0x1b, 0xb4, 0x8d, 0xc1, 0x66, 0xa2, - 0x7f, 0xbf, 0x12, 0xdd, 0x0c, 0xfe, 0x9d, 0x80, 0x35, 0x20, 0x17, 0x1c, 0xa8, 0x70, 0x59, 0x6a, - 0x3e, 0x90, 0x0c, 0x03, 0x69, 0x3d, 0xd2, 0xb3, 0x27, 0x79, 0x72, 0xb0, 0xd8, 0x98, 0x82, 0x72, - 0x56, 0xfb, 0xc2, 0x1b, 0xc4, 0xd7, 0x50, 0x5e, 0xc4, 0x17, 0xde, 0xc0, 0x08, 0x8a, 0x67, 0x74, - 0xe5, 0x29, 0x89, 0x14, 0xc9, 0xa5, 0xf1, 0xc1, 0x41, 0x8c, 0xcc, 0xac, 0x28, 0xce, 0x97, 0x86, - 0x13, 0xb1, 0xfe, 0xf8, 0xc0, 0xae, 0xe4, 0xb1, 0x33, 0x26, 0x30, 0xe1, 0x7a, 0x90, 0x45, 0xab, - 0xa4, 0x97, 0xf8, 0x3b, 0x94, 0x6f, 0xfe, 0x85, 0x71, 0x1c, 0x50, 0x13, 0x38, 0x27, 0x0d, 0x2b, - 0x94, 0x55, 0xd2, 0x8d, 0xe2, 0x36, 0x50, 0xcc, 0x80, 0xc9, 0x0d, 0x71, 0xdc, 0x03, 0xb1, 0x37, - 0x8e, 0xbe, 0xbf, 0x3a, 0x68, 0x95, 0x59, 0x9c, 0x7b, 0x78, 0x59, 0x28, 0xd8, 0x44, 0x2a, 0x92, - 0x7d, 0xed, 0x2a, 0x1b, 0x5d, 0xfc, 0x90, 0x85, 0xc3, 0x04, 0x9a, 0xe3, 0x57, 0x98, 0x02, 0x24, - 0xe1, 0x30, 0x27, 0xf2, 0x2b, 0xbe, 0x56, 0x5e, 0x19, 0x2a, 0x57, 0x27, 0x56, 0xd7, 0x54, 0xaf, - 0xae, 0x56, 0x56, 0x54, 0xbf, 0x51, 0x5d, 0xb3, 0x5c, 0x1d, 0xa7, 0xae, 0xa9, 0xa9, 0xc1, 0x7f, - 0xd4, 0xad, 0xa9, 0xa8, 0xa8, 0xaa, 0xab, 0x53, 0xc7, 0x2d, 0x53, 0xaa, 0x57, 0xac, 0x51, 0xab, - 0xd4, 0x71, 0xab, 0xab, 0x57, 0x56, 0xad, 0x5a, 0xb3, 0x5a, 0x9d, 0xbc, 0x6c, 0x95, 0x5a, 0x51, - 0xb5, 0xba, 0x4a, 0x5d, 0x59, 0x5d, 0xa3, 0xac, 0xae, 0x62, 0x61, 0x30, 0x7f, 0x69, 0xd1, 0xad, - 0x40, 0x7e, 0x60, 0x97, 0x59, 0x46, 0xb7, 0x3e, 0x05, 0x73, 0x83, 0x86, 0xc7, 0x3a, 0xd8, 0x1d, - 0x27, 0x46, 0xf6, 0x1c, 0x04, 0x03, 0x08, 0x20, 0x69, 0x13, 0x5d, 0xdd, 0xc9, 0xe3, 0x31, 0x76, - 0xbc, 0x16, 0x6d, 0xfb, 0x04, 0xca, 0x0d, 0x47, 0x7c, 0xa1, 0x08, 0xa1, 0x51, 0xe6, 0xea, 0xca, - 0x1c, 0x09, 0x4a, 0x64, 0x11, 0xc6, 0x66, 0x49, 0xa8, 0x4c, 0xd0, 0x85, 0x2a, 0x71, 0x11, 0xca, - 0xd6, 0x02, 0x0d, 0xc4, 0x5b, 0x04, 0x5f, 0x15, 0xf3, 0x37, 0xed, 0x61, 0xd2, 0xc2, 0x87, 0x8e, - 0x90, 0x1e, 0x66, 0x85, 0xb8, 0x02, 0x4d, 0xd2, 0x70, 0x54, 0x35, 0x1a, 0x6a, 0x78, 0x1c, 0x7e, - 0xa7, 0xb0, 0x67, 0x93, 0xbd, 0x86, 0x8e, 0x01, 0x5f, 0x44, 0xc6, 0xb0, 0x37, 0x11, 0xd7, 0xa0, - 0x09, 0xf5, 0x2d, 0xa1, 0x90, 0x16, 0x88, 0xd4, 0x45, 0xb4, 0x66, 0x42, 0x45, 0x60, 0x24, 0xc8, - 0x97, 0xcb, 0xf3, 0xc8, 0x48, 0x7d, 0x9f, 0x1b, 0xbd, 0xa7, 0x89, 0x1f, 0x71, 0xcf, 0xd6, 0x44, - 0xdf, 0x89, 0x91, 0x2f, 0xc9, 0x53, 0xa2, 0xf2, 0xed, 0xc5, 0x6a, 0x34, 0x31, 0x1c, 0xd1, 0x9a, - 0xeb, 0x4c, 0x56, 0x28, 0x50, 0x6f, 0xd2, 0x15, 0xd9, 0x34, 0xa7, 0x8e, 0xad, 0xc2, 0xb1, 0x44, - 0x3c, 0x9e, 0x6a, 0x6b, 0x21, 0x6e, 0x16, 0xcc, 0x6d, 0xd5, 0x9a, 0xa9, 0xf5, 0xfd, 0x83, 0x6e, - 0xa3, 0x98, 0xf0, 0x86, 0x45, 0xe6, 0xac, 0x04, 0xdd, 0xbd, 0xaa, 0x2b, 0x2f, 0x4b, 0xd0, 0x45, - 0x7e, 0x11, 0x86, 0x4f, 0xf5, 0x9f, 0x4c, 0x0e, 0x6e, 0x83, 0xe1, 0xb9, 0x9c, 0x8e, 0x16, 0xc5, - 0x05, 0x85, 0x70, 0x69, 0x70, 0xac, 0xf0, 0xcd, 0xc6, 0xc0, 0x40, 0x62, 0xff, 0x79, 0x15, 0xc6, - 0x11, 0x5f, 0xe2, 0xa3, 0xd6, 0x03, 0x9d, 0x51, 0xac, 0x2b, 0x0f, 0xf2, 0x51, 0xeb, 0xd9, 0x97, - 0x60, 0x6e, 0x19, 0xd3, 0x36, 0x7c, 0xa0, 0xfa, 0x97, 0x78, 0xe6, 0x60, 0x22, 0x37, 0x82, 0xc5, - 0x1c, 0xd8, 0x47, 0x70, 0x45, 0x8f, 0xe3, 0xa8, 0xe7, 0x49, 0x9e, 0xa1, 0xee, 0x01, 0xc4, 0x30, - 0x6e, 0x8d, 0xc7, 0x62, 0xb6, 0x50, 0xf7, 0x8d, 0xbe, 0x70, 0x04, 0xa4, 0xb6, 0x84, 0x2c, 0x80, - 0x60, 0xf3, 0x56, 0xb1, 0x2c, 0xc6, 0x07, 0x76, 0x24, 0xbe, 0x3e, 0x66, 0x47, 0xae, 0x56, 0x3d, - 0x1f, 0xea, 0x7e, 0x8a, 0x67, 0xa8, 0x7b, 0x58, 0x3b, 0x04, 0xab, 0x35, 0x67, 0xa7, 0xc4, 0x77, - 0x13, 0x9a, 0xfc, 0x6e, 0x30, 0x54, 0xaf, 0xd1, 0x00, 0xde, 0x34, 0x63, 0x1b, 0x0e, 0x2c, 0xe8, - 0xa8, 0x92, 0x97, 0x90, 0xf3, 0xa2, 0xe9, 0x12, 0x21, 0x89, 0x65, 0x72, 0xb0, 0x2d, 0xd1, 0xf7, - 0x19, 0x43, 0x72, 0xe0, 0x92, 0x9d, 0xd8, 0x75, 0xca, 0x68, 0x3b, 0xaf, 0x3a, 0x46, 0x10, 0x3b, - 0x05, 0x34, 0xb1, 0x3e, 0xd8, 0xd4, 0x14, 0x0c, 0xd4, 0xfa, 0x42, 0xbe, 0xa6, 0x70, 0xe1, 0x54, - 0x0c, 0x35, 0x8f, 0x78, 0x42, 0x4d, 0x05, 0xd7, 0x10, 0x80, 0x07, 0x3b, 0x28, 0xda, 0x06, 0x90, - 0x17, 0x19, 0xad, 0x5f, 0x1b, 0xad, 0x67, 0x99, 0x26, 0x1b, 0x82, 0xdc, 0xa7, 0x2e, 0x9c, 0x36, - 0x61, 0x0e, 0x4c, 0x44, 0x68, 0xb4, 0x97, 0xa3, 0x23, 0x51, 0x5d, 0xb5, 0xf5, 0x16, 0x2b, 0x00, - 0xdb, 0x72, 0x24, 0xc6, 0xa3, 0xba, 0x32, 0x5f, 0x62, 0x85, 0x72, 0x21, 0x8f, 0x6d, 0x79, 0x2e, - 0x4e, 0x65, 0x6d, 0xc4, 0x1a, 0x84, 0x02, 0xc1, 0x06, 0xad, 0xba, 0xd6, 0x64, 0x59, 0x71, 0x6a, - 0xb6, 0xf1, 0x20, 0xb3, 0xe1, 0x8a, 0xe5, 0x07, 0x40, 0x67, 0x45, 0x0e, 0xe2, 0x93, 0xce, 0xf8, - 0x70, 0x6f, 0xb2, 0x67, 0x6b, 0x75, 0x2d, 0xe1, 0x7d, 0xb9, 0xa6, 0xe2, 0x3a, 0x34, 0xc1, 0xfc, - 0x45, 0xf2, 0x0a, 0x92, 0xdc, 0x01, 0x38, 0x23, 0x0a, 0x5f, 0x2e, 0x2f, 0x4a, 0x9d, 0xf9, 0xc6, - 0x18, 0xde, 0x8b, 0xdd, 0x3f, 0xad, 0xd8, 0xa6, 0x00, 0x66, 0xfd, 0x17, 0x8d, 0xd8, 0x9e, 0x64, - 0xcf, 0x56, 0xae, 0xbd, 0xca, 0x77, 0x9e, 0x5d, 0x83, 0x90, 0x75, 0x29, 0x3d, 0xde, 0x61, 0xc9, - 0xfe, 0x0e, 0x4f, 0x77, 0x1e, 0x90, 0xd9, 0x99, 0xd7, 0xae, 0xbc, 0x88, 0xa6, 0xba, 0x8e, 0xeb, - 0xba, 0x14, 0x2c, 0xbb, 0x05, 0x5d, 0xe9, 0x14, 0xd0, 0x0e, 0x41, 0xc2, 0x4f, 0xab, 0xbc, 0x49, - 0x20, 0x1c, 0x08, 0x4e, 0x36, 0xc3, 0x62, 0x42, 0xc3, 0xcf, 0xd4, 0x16, 0x30, 0x61, 0x8a, 0x26, - 0x0e, 0x1c, 0x35, 0xbe, 0xd9, 0x0a, 0x1f, 0xed, 0x40, 0x1d, 0x26, 0x21, 0x47, 0x43, 0x41, 0x02, - 0xdb, 0x6e, 0x74, 0xec, 0x03, 0x24, 0x73, 0x75, 0xa8, 0x2d, 0xb1, 0xf7, 0x5b, 0xa3, 0xbb, 0x2d, - 0x1e, 0xdb, 0xed, 0x6b, 0xf6, 0xc7, 0x07, 0x08, 0xb9, 0x98, 0x38, 0xba, 0xdd, 0xd8, 0xbe, 0x2d, - 0x75, 0xa9, 0x3b, 0x39, 0xf8, 0xed, 0xd5, 0xa1, 0xf6, 0xe2, 0x4f, 0x27, 0xa1, 0x1c, 0x8c, 0x30, - 0x7f, 0x46, 0xd8, 0x7b, 0x78, 0xe5, 0x67, 0xe9, 0xca, 0x74, 0xc2, 0xde, 0x4f, 0xb4, 0x21, 0x59, - 0xe0, 0xdd, 0x5f, 0x41, 0x79, 0x90, 0x39, 0x87, 0xbc, 0xdf, 0x40, 0xe3, 0x43, 0x91, 0xfc, 0x30, - 0x1f, 0xa1, 0x12, 0xac, 0xcb, 0xd8, 0x1b, 0xbe, 0x6e, 0x43, 0x38, 0xd8, 0x1c, 0x5e, 0xec, 0x6b, - 0xf6, 0xab, 0xa4, 0xb9, 0xf8, 0x34, 0xca, 0x69, 0xf4, 0x07, 0x36, 0xd8, 0x3c, 0x39, 0xcd, 0x02, - 0xb9, 0x10, 0x82, 0x11, 0x41, 0x33, 0xc2, 0x5a, 0xb7, 0x47, 0x93, 0x7b, 0x4e, 0xab, 0xb8, 0x5e, - 0x6c, 0x42, 0x79, 0xcd, 0x70, 0xc3, 0x40, 0x30, 0x53, 0xe4, 0x75, 0x80, 0x8b, 0xf8, 0xbb, 0x85, - 0x9f, 0x15, 0xd2, 0x49, 0x7e, 0x84, 0x7c, 0x17, 0x35, 0x29, 0x61, 0xd7, 0x6b, 0x83, 0xf6, 0xd1, - 0x95, 0xe8, 0x26, 0x7c, 0x6c, 0x46, 0xff, 0x45, 0x95, 0xb4, 0x17, 0x9f, 0x46, 0xb9, 0x21, 0x2d, - 0x12, 0xfa, 0x88, 0xa4, 0xab, 0x82, 0x90, 0xa9, 0xb8, 0x44, 0x9e, 0x91, 0xea, 0x3f, 0x01, 0xa3, - 0x91, 0x58, 0xe5, 0x5f, 0x1f, 0x4b, 0xec, 0xfd, 0x46, 0x85, 0x5a, 0x71, 0x11, 0x7d, 0x95, 0xf3, - 0xb8, 0x00, 0xa8, 0xf0, 0x2a, 0x4f, 0xf4, 0x7a, 0x8f, 0x17, 0xc0, 0x7b, 0x0c, 0xb6, 0x91, 0x33, - 0x75, 0x65, 0x1a, 0xbc, 0xc7, 0x13, 0xdd, 0x2f, 0xf1, 0x32, 0xe7, 0x4b, 0x9c, 0x8f, 0x97, 0x86, - 0xa5, 0x61, 0x8e, 0x97, 0x78, 0x62, 0xa6, 0x37, 0x58, 0xb7, 0x22, 0x84, 0x83, 0xf9, 0xdd, 0xc7, - 0x26, 0xc7, 0x40, 0x49, 0xa2, 0x05, 0xf0, 0x69, 0x40, 0x12, 0x61, 0xe1, 0xe0, 0x21, 0xe3, 0xd4, - 0x4e, 0xc6, 0x2c, 0xd4, 0xac, 0x5a, 0x5d, 0xb7, 0x5a, 0x51, 0x57, 0x57, 0x55, 0x5e, 0x2b, 0x2f, - 0x0f, 0xbd, 0xa4, 0x22, 0xab, 0xe0, 0x7b, 0x11, 0x4b, 0x6f, 0x5a, 0xc4, 0x12, 0xb2, 0x5c, 0xb7, - 0x19, 0xb1, 0xf4, 0x38, 0xac, 0xca, 0x41, 0x2c, 0xf1, 0x4f, 0x2a, 0x90, 0x49, 0x44, 0x8f, 0x8e, - 0x09, 0x27, 0x8b, 0x52, 0xaa, 0xb6, 0xbd, 0x48, 0xf0, 0x9e, 0x96, 0xe8, 0xca, 0x23, 0xb6, 0x17, - 0x89, 0x20, 0xc6, 0x51, 0xde, 0xa5, 0x57, 0x10, 0x32, 0xd1, 0xe4, 0x4a, 0x2d, 0xf2, 0x5e, 0x90, - 0xa6, 0x88, 0xc5, 0xb6, 0xb7, 0x5c, 0xb1, 0x7c, 0x9f, 0xf9, 0x37, 0x43, 0x59, 0xf1, 0xc1, 0xcf, - 0x93, 0x47, 0x37, 0x19, 0xdb, 0x87, 0x4d, 0x28, 0xe1, 0x9a, 0x89, 0x95, 0x1c, 0xae, 0x86, 0x27, - 0x16, 0x07, 0x80, 0xb1, 0x70, 0xb5, 0x63, 0x1c, 0x6f, 0x64, 0x7d, 0x49, 0x40, 0x13, 0xc3, 0x1b, - 0xfc, 0xcd, 0xab, 0x68, 0xfc, 0x91, 0xc9, 0xf8, 0xbd, 0xeb, 0x11, 0x74, 0x65, 0x9f, 0x20, 0xd9, - 0xaa, 0xe4, 0x56, 0x81, 0x85, 0x1e, 0x01, 0x0c, 0x42, 0x82, 0x8e, 0x1c, 0xe9, 0x86, 0xfd, 0x2d, - 0x4d, 0xee, 0x39, 0xcb, 0x2b, 0xaf, 0x21, 0x35, 0x24, 0xb5, 0x18, 0x33, 0x7b, 0x92, 0x0e, 0x90, - 0x4d, 0x03, 0xdf, 0x76, 0x7e, 0x20, 0xd8, 0x7e, 0x32, 0x07, 0xc1, 0x4c, 0x1d, 0x70, 0x68, 0x46, - 0xf7, 0xae, 0xe4, 0x60, 0x1f, 0xbc, 0xa5, 0xaa, 0x6d, 0x55, 0x62, 0x10, 0x8d, 0x8f, 0x84, 0x7c, - 0x81, 0x70, 0xa3, 0x79, 0x3a, 0xf0, 0xda, 0xbf, 0xa6, 0x2b, 0x35, 0x92, 0x55, 0x2a, 0x2b, 0xa9, - 0x53, 0x9f, 0x1b, 0xdb, 0xce, 0x19, 0xc3, 0x9f, 0xd0, 0x84, 0xb6, 0x1d, 0xf1, 0x81, 0xa8, 0xb5, - 0x97, 0x89, 0xfd, 0xe7, 0x49, 0x42, 0xc0, 0xd4, 0xf0, 0xd7, 0x89, 0xce, 0xcf, 0x92, 0x97, 0x06, - 0x53, 0xfd, 0xbb, 0x8d, 0xb3, 0x7b, 0x93, 0xc7, 0x63, 0x89, 0x7d, 0xdb, 0x13, 0xbd, 0x5f, 0xab, - 0xd6, 0x68, 0xe2, 0x5f, 0x09, 0x68, 0x3c, 0x8b, 0xa4, 0x42, 0xe8, 0x83, 0x3e, 0x41, 0x57, 0xbe, - 0x10, 0x24, 0xab, 0x5c, 0xfe, 0x54, 0x80, 0xdc, 0xfb, 0xec, 0xba, 0xb3, 0xbd, 0x33, 0xa2, 0x07, - 0x6d, 0xd9, 0x07, 0x89, 0xde, 0x62, 0x27, 0xdb, 0x07, 0xd8, 0xb7, 0xf8, 0x40, 0x2c, 0x12, 0x6a, - 0xd1, 0xf8, 0x6e, 0xe9, 0x3a, 0x94, 0x16, 0x51, 0x46, 0x9c, 0xb5, 0x86, 0x46, 0xf1, 0xc1, 0xd6, - 0xd4, 0x96, 0x61, 0x48, 0x67, 0x0a, 0xe8, 0x06, 0x76, 0x42, 0xb5, 0x16, 0x3a, 0xfb, 0x19, 0x34, - 0xe1, 0x46, 0x1f, 0xa9, 0x1d, 0x82, 0xae, 0x6c, 0x13, 0xd0, 0x16, 0x41, 0xc2, 0xef, 0x82, 0xfc, - 0x1b, 0x9e, 0x3e, 0x36, 0xd1, 0xe4, 0x8e, 0xd3, 0xf1, 0xe1, 0x5e, 0x76, 0x94, 0x24, 0x00, 0x0b, - 0x46, 0xa2, 0x2c, 0x47, 0x08, 0x58, 0xd1, 0x98, 0x8d, 0x87, 0x36, 0x27, 0xfa, 0x4e, 0x40, 0x17, - 0xf6, 0x06, 0x80, 0xdd, 0xe1, 0xc8, 0xf6, 0xce, 0xc4, 0xbe, 0x6f, 0x98, 0x89, 0x9b, 0x09, 0x15, - 0x5c, 0x0c, 0xbb, 0x64, 0x5f, 0xfb, 0x95, 0xe8, 0xe6, 0xe2, 0x63, 0xd9, 0x68, 0xdc, 0xea, 0x0d, - 0x5a, 0x85, 0xbf, 0x21, 0x24, 0x3e, 0x81, 0xb2, 0xd7, 0xd6, 0x56, 0x90, 0xf7, 0x09, 0x53, 0xae, - 0xe6, 0x6f, 0xb9, 0x30, 0x39, 0xbc, 0x3b, 0x71, 0xe6, 0x8f, 0x4c, 0x1d, 0xbd, 0xb6, 0xb6, 0x82, - 0x48, 0xd6, 0xcc, 0x6a, 0xf3, 0x59, 0xab, 0xa8, 0xae, 0x54, 0xc9, 0x3b, 0x05, 0xcf, 0x9a, 0x59, - 0x20, 0x4f, 0x84, 0x24, 0x44, 0xd0, 0x5b, 0xc5, 0x65, 0x62, 0x15, 0xca, 0xaf, 0xae, 0xad, 0x69, - 0x69, 0x5a, 0xa7, 0x85, 0x48, 0x46, 0x46, 0x8c, 0x13, 0x58, 0xa1, 0x3c, 0x1b, 0x9a, 0x1b, 0x1d, - 0xad, 0x46, 0xf7, 0x57, 0x46, 0x57, 0x7f, 0x72, 0xcf, 0xe9, 0xea, 0x5a, 0xa3, 0xf7, 0x1b, 0xe3, - 0x50, 0x54, 0x65, 0xad, 0xc4, 0xa7, 0x19, 0x36, 0xcd, 0xb1, 0xf2, 0x1c, 0x50, 0x6c, 0x2a, 0x92, - 0x21, 0xf0, 0xbd, 0xa0, 0x8c, 0x31, 0x41, 0x79, 0x65, 0x68, 0x1c, 0x79, 0xc2, 0x08, 0x07, 0x07, - 0x7a, 0x0d, 0x52, 0x66, 0x75, 0xd5, 0x2d, 0x02, 0x9f, 0x56, 0x3a, 0x82, 0x9b, 0xe5, 0x8d, 0x12, - 0xdc, 0x6c, 0x9c, 0x33, 0xb8, 0x59, 0xd9, 0xd3, 0xba, 0xf2, 0x04, 0x92, 0x25, 0xba, 0xdd, 0xf2, - 0xa3, 0x70, 0xb2, 0x40, 0x8c, 0xac, 0x7e, 0xb5, 0x8a, 0x90, 0x2a, 0xb0, 0x82, 0x36, 0xdd, 0x68, - 0xdb, 0x06, 0xdb, 0x5c, 0xbc, 0x57, 0x40, 0x13, 0x49, 0x27, 0xc8, 0xfa, 0x36, 0x1d, 0xe5, 0x62, - 0x0b, 0x01, 0x50, 0xe7, 0xa8, 0xf0, 0xc3, 0x84, 0x41, 0xf3, 0xf8, 0x00, 0xde, 0xf0, 0xd1, 0xcc, - 0x76, 0xee, 0x36, 0xb7, 0x85, 0x33, 0xed, 0x5b, 0x48, 0x77, 0xa8, 0xcc, 0x3c, 0x0f, 0x34, 0x5f, - 0xb2, 0x4d, 0x28, 0x4f, 0x5f, 0xfd, 0x6a, 0x55, 0x91, 0x79, 0x80, 0xb0, 0x58, 0xb2, 0xae, 0x7f, - 0x5c, 0x82, 0xa5, 0x31, 0x96, 0xc8, 0x40, 0xd5, 0x7e, 0x2d, 0xee, 0x16, 0x78, 0x3e, 0x4a, 0xb0, - 0xdc, 0x0f, 0x38, 0x3e, 0xaa, 0x9e, 0x4b, 0xfd, 0x05, 0x10, 0x5b, 0x5e, 0x51, 0xb7, 0xf0, 0xd5, - 0xa5, 0x75, 0x0b, 0x97, 0xe0, 0x7f, 0x0b, 0x8c, 0x6d, 0x07, 0x8d, 0x56, 0x12, 0x60, 0xd1, 0xbc, - 0x96, 0xc4, 0x34, 0x7f, 0xbb, 0x71, 0xa6, 0x87, 0x8d, 0x02, 0xa1, 0xef, 0x2d, 0x39, 0x53, 0x6f, - 0xd4, 0xb8, 0x78, 0xce, 0xe8, 0xfa, 0x06, 0xf4, 0x2a, 0x25, 0x3c, 0x63, 0xf6, 0x0a, 0x9a, 0x40, - 0x7e, 0x70, 0x51, 0x81, 0x16, 0x98, 0xbc, 0x3b, 0x5f, 0x2e, 0x4f, 0x84, 0x65, 0xd1, 0x60, 0x18, - 0xe3, 0x42, 0xb9, 0x05, 0x42, 0x61, 0x34, 0x5f, 0xe5, 0x1b, 0x89, 0x61, 0x2e, 0x21, 0x57, 0x36, - 0xcd, 0x0d, 0xbd, 0x92, 0x4b, 0xc7, 0xa5, 0x90, 0x90, 0x2d, 0x34, 0xf6, 0xbd, 0xf9, 0x8d, 0xb1, - 0xdd, 0xa0, 0x62, 0x82, 0x64, 0x67, 0xd8, 0x18, 0x07, 0x2e, 0x47, 0x3c, 0xb6, 0x3b, 0x75, 0xe6, - 0xbb, 0xc4, 0xbe, 0x61, 0xd8, 0x58, 0x40, 0xd5, 0x38, 0x0e, 0x47, 0x61, 0x11, 0x97, 0x27, 0xeb, - 0x35, 0x94, 0x17, 0xd2, 0xd6, 0xfb, 0x83, 0x01, 0x02, 0xef, 0xcf, 0x60, 0x78, 0x87, 0x22, 0x59, - 0xb4, 0x62, 0xc4, 0xf4, 0x9e, 0x36, 0xaf, 0xca, 0x91, 0x23, 0xd7, 0xca, 0x67, 0x85, 0x66, 0x14, - 0x08, 0x85, 0x0d, 0xee, 0xd8, 0x20, 0xa4, 0x97, 0xa8, 0xa2, 0xdc, 0x8d, 0xcd, 0xf5, 0xd5, 0x95, - 0xe4, 0x1e, 0x3c, 0x67, 0xd2, 0x23, 0x50, 0x22, 0x97, 0x10, 0x48, 0x3c, 0xb5, 0x29, 0xd1, 0xdb, - 0x9e, 0x1c, 0xde, 0x9d, 0x1c, 0xec, 0xf5, 0x37, 0xc0, 0x67, 0xc4, 0x07, 0x76, 0x90, 0x4d, 0xc2, - 0x7a, 0x4d, 0xba, 0x52, 0xe8, 0x68, 0x4f, 0x24, 0x97, 0x47, 0x13, 0xc9, 0x79, 0xab, 0x6d, 0xaf, - 0x95, 0xcf, 0x08, 0x4d, 0xf3, 0x5a, 0x20, 0xc7, 0x0e, 0xaf, 0xb1, 0xc9, 0xfe, 0xc7, 0xd1, 0x5c, - 0xd8, 0xb3, 0x6d, 0xb2, 0xff, 0x89, 0x20, 0xf5, 0x07, 0x91, 0x7f, 0xda, 0x51, 0x79, 0x25, 0x40, - 0x18, 0x4d, 0xd0, 0x02, 0x1b, 0xfd, 0xa1, 0x60, 0xa0, 0x49, 0x0b, 0x50, 0x37, 0x94, 0xd7, 0x74, - 0xe5, 0x29, 0x89, 0x2f, 0x97, 0x1f, 0x25, 0xdb, 0x80, 0xe5, 0xa5, 0xa5, 0x45, 0x00, 0xa8, 0x6f, - 0x36, 0x87, 0x82, 0x0d, 0xa5, 0x45, 0x0d, 0xda, 0xba, 0x96, 0xf5, 0xa5, 0x45, 0xe1, 0x88, 0x6f, - 0xfd, 0xdb, 0x78, 0x4e, 0x35, 0xc7, 0xfc, 0x5b, 0xcd, 0xc5, 0x15, 0x6a, 0x8e, 0xd9, 0x4a, 0xe5, - 0x47, 0x13, 0xdf, 0x40, 0x48, 0x0b, 0xac, 0xf7, 0x07, 0x20, 0x09, 0xf0, 0x78, 0xaa, 0xe2, 0x7b, - 0x44, 0xe2, 0x8a, 0xe5, 0x42, 0x63, 0x68, 0x6f, 0xe2, 0x93, 0x5d, 0x4c, 0x2c, 0x07, 0x24, 0xe0, - 0x86, 0xa5, 0xe1, 0x6b, 0xe5, 0x93, 0x43, 0x13, 0xd5, 0xec, 0x0d, 0x4b, 0xc3, 0x6a, 0x2e, 0xd6, - 0x9d, 0xa8, 0x5c, 0x37, 0x71, 0x15, 0x9a, 0xe0, 0x0f, 0x57, 0x7d, 0x68, 0x82, 0xa9, 0x7f, 0x23, - 0x10, 0x73, 0xf9, 0x20, 0x33, 0xe7, 0xcb, 0xe5, 0x39, 0x96, 0x58, 0x1a, 0x6f, 0x57, 0x72, 0xe7, - 0xd7, 0x46, 0xe7, 0x51, 0x82, 0xe6, 0xf8, 0x96, 0xe2, 0xbf, 0x12, 0xd8, 0x8d, 0xc1, 0xcb, 0x05, - 0xf2, 0xed, 0x33, 0x41, 0x57, 0x5a, 0x05, 0x89, 0xaf, 0x91, 0x37, 0xf2, 0x2a, 0x1e, 0xb6, 0x49, - 0xef, 0x6a, 0x0d, 0x1a, 0x64, 0x0e, 0x2f, 0x2d, 0x0a, 0xfb, 0x03, 0xeb, 0x1b, 0xb5, 0xb7, 0x4b, - 0x8b, 0xac, 0x42, 0xea, 0x65, 0x10, 0x4b, 0x6d, 0xda, 0x33, 0xb2, 0xf9, 0x24, 0x0c, 0x71, 0x75, - 0xa8, 0x03, 0x9a, 0x42, 0x6d, 0x72, 0xe7, 0xd7, 0xc9, 0xaf, 0x76, 0xb2, 0x2a, 0x46, 0x0c, 0x43, - 0x9b, 0x6b, 0xe5, 0x33, 0x43, 0xd3, 0x55, 0x64, 0x0d, 0xa9, 0xe6, 0x41, 0x85, 0xca, 0xaf, 0x4e, - 0xdc, 0x2f, 0xa0, 0x69, 0x56, 0x9b, 0x0a, 0x86, 0x96, 0x80, 0x86, 0xc4, 0x39, 0xa9, 0xbc, 0xea, - 0xe5, 0x57, 0x89, 0x7f, 0x0a, 0x4d, 0x20, 0xe7, 0x58, 0x2a, 0x26, 0x0c, 0xa3, 0x60, 0x49, 0x0c, - 0x2f, 0x74, 0xaa, 0xff, 0x44, 0x75, 0x25, 0xb0, 0xd2, 0xd0, 0xf0, 0xe5, 0x60, 0x38, 0x42, 0x5e, - 0x49, 0xaf, 0x19, 0xc4, 0xcf, 0x04, 0xe6, 0x83, 0x36, 0x09, 0xf3, 0x56, 0xa5, 0xde, 0xb1, 0x13, - 0x2c, 0xcc, 0x6a, 0x73, 0x3d, 0x7b, 0x4b, 0x57, 0x5e, 0x63, 0xae, 0x67, 0xcb, 0xd9, 0xaa, 0xa0, - 0xc0, 0x92, 0xa2, 0x74, 0xc7, 0x8c, 0x81, 0x93, 0x60, 0x12, 0xcd, 0x9b, 0x41, 0x43, 0xfc, 0xc1, - 0xf8, 0x40, 0xa7, 0xf1, 0xdd, 0x7e, 0x50, 0xe6, 0xca, 0x4b, 0xe2, 0x03, 0x5f, 0x5e, 0x2b, 0xcf, - 0xed, 0x11, 0xb2, 0x0a, 0xa6, 0x33, 0x67, 0xb5, 0x32, 0x4b, 0x1c, 0x35, 0x99, 0xbe, 0x96, 0xd3, - 0x2d, 0x71, 0xd4, 0x78, 0x26, 0x88, 0xba, 0x56, 0x9e, 0x17, 0xca, 0x29, 0xc8, 0x2a, 0x9c, 0x6e, - 0x49, 0xa4, 0x36, 0x09, 0x68, 0x72, 0x30, 0xd0, 0xf8, 0x11, 0x7c, 0x46, 0x75, 0xe0, 0xdd, 0x20, - 0x26, 0x33, 0xf3, 0xcb, 0x7f, 0xa1, 0x2b, 0x6b, 0x25, 0x47, 0x95, 0x5c, 0x19, 0x1f, 0x6c, 0x85, - 0xd1, 0xc8, 0x86, 0x5b, 0xec, 0x46, 0x27, 0xc8, 0xce, 0x93, 0xbd, 0x47, 0x8c, 0x33, 0xe4, 0x4d, - 0x86, 0x96, 0x6e, 0x7d, 0x8a, 0x63, 0x54, 0xf1, 0xaa, 0x80, 0xc6, 0xaf, 0xab, 0x0f, 0x13, 0x23, - 0x73, 0x90, 0x12, 0x2d, 0x1e, 0x75, 0x9f, 0xcb, 0x69, 0x0f, 0xd8, 0xea, 0x23, 0x82, 0xae, 0x7c, - 0x2a, 0x48, 0xd6, 0x40, 0x72, 0xa7, 0xc0, 0x2f, 0xf5, 0x16, 0x84, 0x0a, 0xe6, 0x4d, 0x49, 0x88, - 0xa5, 0x06, 0xbc, 0x88, 0x58, 0x70, 0xad, 0x5a, 0x4b, 0x13, 0x13, 0x02, 0x9a, 0xa0, 0x71, 0x86, - 0xf5, 0xa2, 0x77, 0x8a, 0x7f, 0xd7, 0x37, 0x73, 0x86, 0xe9, 0xf0, 0xd5, 0xdd, 0x82, 0xae, 0x74, - 0x08, 0x12, 0x3f, 0x98, 0xfc, 0x3b, 0xc7, 0x67, 0xff, 0x30, 0xb6, 0xf6, 0xec, 0x63, 0x47, 0xf6, - 0x1c, 0xb4, 0x7d, 0x26, 0xbf, 0x16, 0xb1, 0xc2, 0x24, 0xe4, 0x82, 0x2d, 0x0d, 0xd5, 0x95, 0x24, - 0xb5, 0x26, 0xa6, 0x23, 0x69, 0x99, 0x3c, 0xc7, 0x19, 0xad, 0x30, 0x3e, 0xb0, 0x03, 0x54, 0xee, - 0xd5, 0x95, 0x2a, 0x6d, 0x25, 0x7e, 0x27, 0x20, 0x04, 0x5b, 0x82, 0xb1, 0x1c, 0xc8, 0xc8, 0x0e, - 0x09, 0xba, 0x72, 0x50, 0x90, 0xb8, 0x0a, 0x79, 0x87, 0x4d, 0x8c, 0x64, 0x29, 0x84, 0x5b, 0xbf, - 0x4e, 0xf4, 0xb6, 0x9b, 0x8f, 0xbb, 0xc9, 0x39, 0x1c, 0x49, 0xec, 0x6d, 0xbb, 0x3a, 0xd4, 0xb1, - 0x52, 0xa9, 0x51, 0x96, 0x57, 0x55, 0xbe, 0x53, 0xb1, 0x62, 0x4d, 0xdd, 0xea, 0x2a, 0x75, 0x01, - 0x9c, 0x75, 0xa2, 0xfd, 0x40, 0xf2, 0xcc, 0x31, 0x18, 0xa5, 0x84, 0x01, 0x6e, 0xe2, 0x40, 0x7f, - 0x51, 0x75, 0x4d, 0x65, 0x55, 0x6d, 0x55, 0x4d, 0x65, 0x55, 0xcd, 0x6a, 0xd6, 0xc7, 0x81, 0xfb, - 0x52, 0xdb, 0xbf, 0x34, 0x2f, 0xc0, 0xe0, 0xb7, 0x89, 0x1d, 0xc7, 0x4b, 0x54, 0x6e, 0x61, 0x62, - 0x19, 0xca, 0x83, 0xd8, 0x84, 0x85, 0x33, 0xb0, 0xc0, 0x10, 0x13, 0xed, 0xa4, 0x48, 0x9e, 0x01, - 0x03, 0xc0, 0xaf, 0x22, 0x26, 0x24, 0x24, 0xd5, 0xe2, 0x93, 0x28, 0x37, 0x10, 0x6c, 0xd0, 0xc2, - 0x85, 0x33, 0x71, 0x57, 0x4c, 0x42, 0x43, 0x89, 0x3c, 0x0d, 0x7a, 0x9a, 0x3f, 0xac, 0x7e, 0x50, - 0x27, 0x1e, 0x10, 0xd0, 0x94, 0x80, 0x16, 0xf9, 0x20, 0x18, 0xda, 0x50, 0xa7, 0x45, 0x22, 0xfe, - 0xc0, 0x7a, 0x6a, 0xaf, 0x3d, 0xd7, 0x65, 0xb6, 0x63, 0x6b, 0x56, 0x5e, 0xa3, 0x2b, 0x15, 0x92, - 0xb3, 0xaf, 0xbc, 0x84, 0x91, 0xbd, 0xc9, 0xc1, 0x5e, 0xe3, 0x48, 0x2c, 0x79, 0x2c, 0x0a, 0xbc, - 0x2f, 0xf3, 0x2a, 0x04, 0x7f, 0x8a, 0xc4, 0xbe, 0x8b, 0x50, 0x7e, 0xad, 0x3c, 0xf7, 0x33, 0x21, - 0x2b, 0x5f, 0x50, 0x9d, 0x43, 0x89, 0xff, 0x93, 0x80, 0xa6, 0x93, 0x25, 0x94, 0xfb, 0xc2, 0xfe, - 0x7a, 0xb6, 0x3e, 0x08, 0x09, 0xfc, 0x90, 0xdb, 0x05, 0xcd, 0xd5, 0xb6, 0xfc, 0x63, 0x5d, 0x09, - 0x4a, 0x9e, 0xa3, 0xc8, 0x3f, 0x27, 0xc8, 0x07, 0xaf, 0x91, 0x5c, 0x58, 0xba, 0x52, 0x78, 0xf7, - 0x88, 0x46, 0x15, 0x7b, 0x35, 0xf0, 0x59, 0x6d, 0x37, 0x36, 0xd7, 0x27, 0xfb, 0xda, 0xcd, 0x93, - 0xa4, 0x9f, 0x42, 0xbe, 0xcc, 0xfe, 0x41, 0x9e, 0xd3, 0x8a, 0xff, 0x2c, 0xa0, 0x99, 0xa4, 0x42, - 0x69, 0xd8, 0xe8, 0x0b, 0xd4, 0x6b, 0xec, 0xbb, 0x20, 0xe6, 0xf0, 0xc3, 0x69, 0xbe, 0xcb, 0xde, - 0xba, 0x7c, 0xb3, 0xa0, 0x2b, 0x7f, 0x2a, 0xcd, 0x32, 0xdb, 0x6a, 0xee, 0xb1, 0xe4, 0x06, 0xea, - 0x9e, 0xf1, 0xe9, 0xc8, 0x81, 0xf3, 0x7c, 0x30, 0x4f, 0xf6, 0x75, 0x46, 0xb7, 0xc9, 0x8d, 0xf9, - 0x9b, 0x37, 0x86, 0xa1, 0xda, 0xfc, 0x42, 0x7b, 0x4c, 0x3d, 0xe8, 0x00, 0x9c, 0xa5, 0xe7, 0xd9, - 0xa9, 0x69, 0xbe, 0x44, 0xfc, 0x1b, 0x01, 0x4d, 0x34, 0xe1, 0x8b, 0x7d, 0xda, 0x6c, 0x6f, 0xff, - 0x94, 0x1a, 0xab, 0x4d, 0xb9, 0x2e, 0xe8, 0xca, 0x2e, 0x41, 0xb2, 0xf5, 0x93, 0x7f, 0xcf, 0x07, - 0x27, 0x75, 0x7c, 0x00, 0x71, 0x22, 0xa6, 0x7e, 0xcc, 0xc4, 0xd7, 0x99, 0x73, 0x6e, 0x86, 0x43, - 0x32, 0x5b, 0xee, 0x3f, 0x9a, 0x6c, 0xbf, 0x68, 0xb4, 0x7d, 0x35, 0xd2, 0x1b, 0x25, 0xd6, 0x7c, - 0x58, 0xab, 0x6b, 0xbe, 0x46, 0x74, 0xcc, 0xf2, 0x8a, 0x3a, 0xa0, 0xf1, 0x89, 0x5b, 0x10, 0x16, - 0x6e, 0xaa, 0xb6, 0xd5, 0x88, 0x9b, 0x05, 0x34, 0x05, 0xa4, 0xab, 0xaa, 0xe6, 0x0f, 0x84, 0x23, - 0xbe, 0xc6, 0x46, 0x1c, 0x1d, 0x39, 0xbf, 0xfc, 0x75, 0x5d, 0x59, 0x23, 0x39, 0xeb, 0xe4, 0x72, - 0xa0, 0xd0, 0x46, 0xb6, 0x77, 0xa6, 0x3e, 0x6f, 0xe5, 0xe3, 0x91, 0xf2, 0x72, 0x5e, 0xe0, 0xee, - 0x53, 0x9f, 0x7d, 0x05, 0x48, 0x25, 0xb1, 0xa5, 0xd5, 0xd8, 0xf6, 0xc7, 0xf8, 0xc0, 0xce, 0x44, - 0x6f, 0x7b, 0x62, 0x6f, 0x9b, 0xea, 0x1c, 0x54, 0x3c, 0x28, 0xa0, 0xa9, 0xfe, 0x80, 0x3f, 0xb2, - 0x22, 0xb8, 0xde, 0x1f, 0xa8, 0xf5, 0x85, 0xc3, 0x1f, 0x04, 0x43, 0x0d, 0x38, 0xe7, 0xe5, 0xf8, - 0xf2, 0x0d, 0xba, 0xf2, 0x9e, 0xe4, 0xae, 0x95, 0xeb, 0x32, 0x2c, 0x01, 0x04, 0x51, 0x4c, 0xae, - 0xd0, 0x4c, 0xfa, 0x8c, 0xbe, 0x32, 0xf7, 0x3c, 0xe2, 0xeb, 0x68, 0x02, 0xb9, 0xc5, 0x18, 0x03, - 0x3f, 0x80, 0x17, 0x85, 0x6d, 0x93, 0xf8, 0x72, 0x79, 0x3e, 0x8f, 0x24, 0x00, 0xff, 0x2e, 0x68, - 0x09, 0x34, 0x68, 0xa1, 0x46, 0xdf, 0x47, 0x8b, 0x83, 0x1b, 0xf1, 0xff, 0x25, 0x2a, 0xdf, 0x45, - 0xfc, 0x73, 0x01, 0xcd, 0xf2, 0xb5, 0x44, 0x82, 0xcb, 0xb5, 0x80, 0x49, 0x7c, 0x69, 0x2b, 0xf1, - 0xa7, 0x60, 0xbd, 0x35, 0x89, 0xa6, 0xbc, 0x53, 0xd0, 0x95, 0xed, 0x82, 0x94, 0xae, 0x95, 0xdc, - 0xc8, 0x3f, 0x77, 0x2b, 0xb9, 0x9d, 0x00, 0xfb, 0x10, 0xea, 0x89, 0x8e, 0x49, 0x0f, 0x42, 0xd1, - 0x82, 0x9c, 0x8c, 0x73, 0x0f, 0x7c, 0xb6, 0x88, 0x08, 0xa4, 0x12, 0xfb, 0xcf, 0x97, 0x16, 0xc1, - 0x9d, 0x00, 0x06, 0x95, 0xa0, 0x65, 0x7c, 0x48, 0x81, 0x7a, 0x4d, 0x4d, 0xb7, 0x0c, 0xf1, 0xff, - 0x14, 0xd0, 0x78, 0xda, 0x2a, 0x5c, 0xf8, 0xa0, 0xb7, 0xaa, 0xab, 0x9a, 0x34, 0xa0, 0x76, 0x8e, - 0x15, 0xd8, 0x23, 0xb9, 0xfc, 0x0b, 0x41, 0x57, 0x4e, 0x08, 0x92, 0xd5, 0x5f, 0xde, 0xef, 0xa4, - 0x5d, 0x8a, 0xd2, 0xcc, 0x4b, 0x17, 0x5e, 0x5a, 0xc4, 0x8b, 0x1c, 0xf9, 0xb5, 0xc3, 0x17, 0xd2, - 0xaf, 0x02, 0xee, 0x9c, 0x4d, 0x04, 0x0d, 0x93, 0x3d, 0x5b, 0x6d, 0xd9, 0xfe, 0x20, 0xe9, 0x1a, - 0xa4, 0x81, 0x06, 0xe1, 0x8e, 0xd1, 0x11, 0x83, 0xd0, 0x06, 0xaa, 0xb5, 0x48, 0xf1, 0x5b, 0x81, - 0xb8, 0xc2, 0x62, 0xb2, 0xb1, 0x68, 0x8c, 0x74, 0x5b, 0x15, 0xed, 0x01, 0x14, 0x0c, 0xa6, 0xee, - 0xad, 0x61, 0xe4, 0x35, 0x46, 0xdf, 0x01, 0x63, 0x33, 0xcd, 0xb3, 0x00, 0x34, 0x07, 0x71, 0x54, - 0x03, 0xf4, 0xa0, 0x85, 0xd7, 0xbd, 0xd3, 0x12, 0x6a, 0x5c, 0x4c, 0x52, 0xb3, 0xbd, 0xe3, 0x6f, - 0xf2, 0xad, 0xd7, 0x16, 0x37, 0x87, 0xfc, 0x1b, 0xfd, 0x8d, 0x5a, 0xc3, 0x7a, 0x0d, 0x0a, 0x92, - 0x7d, 0xed, 0x7c, 0x67, 0xd5, 0x9a, 0x41, 0xfc, 0x15, 0xca, 0x6f, 0xa2, 0x71, 0x6c, 0xe7, 0x59, - 0xd6, 0x07, 0xac, 0x50, 0x7e, 0x92, 0x4c, 0x4e, 0xbc, 0xd3, 0x16, 0x54, 0x28, 0xe0, 0x50, 0xca, - 0xbc, 0x17, 0x89, 0x73, 0x2d, 0xf6, 0x2c, 0x2b, 0x59, 0x00, 0x76, 0x70, 0x25, 0x2a, 0x1b, 0x40, - 0xfc, 0x3d, 0x9a, 0x8c, 0xa7, 0xb3, 0x38, 0x99, 0x62, 0x3c, 0xcf, 0x5a, 0x5d, 0xa9, 0x93, 0x1c, - 0x55, 0xb2, 0x62, 0xf4, 0x0f, 0x19, 0xad, 0x27, 0x18, 0x73, 0x00, 0xe4, 0x1a, 0x15, 0xbd, 0x80, - 0x9c, 0x95, 0xec, 0x00, 0x21, 0x47, 0xf6, 0x9f, 0x4f, 0x7e, 0x11, 0x33, 0xa2, 0x43, 0x6c, 0x66, - 0xc7, 0x90, 0xa2, 0x1f, 0x4d, 0xf1, 0x87, 0x41, 0x45, 0x47, 0x0a, 0x71, 0x06, 0xca, 0xfc, 0xf2, - 0x17, 0x75, 0xe5, 0x39, 0xc9, 0x59, 0x27, 0x97, 0x30, 0x86, 0x13, 0xf4, 0xab, 0x30, 0x77, 0x29, - 0x77, 0x6f, 0xd8, 0x4c, 0xce, 0xbe, 0x4e, 0xdb, 0xc7, 0xf9, 0x69, 0x6d, 0x1f, 0x09, 0x65, 0x96, - 0xce, 0xf6, 0xf1, 0x84, 0x80, 0xa6, 0x10, 0xc8, 0xa9, 0xf0, 0x45, 0xb4, 0xf5, 0xc1, 0xd0, 0x47, - 0x38, 0x59, 0xe4, 0xf8, 0xf2, 0xdf, 0xe8, 0xca, 0x87, 0x92, 0xb3, 0x4e, 0xd6, 0x2c, 0x86, 0xb6, - 0xed, 0x2b, 0x87, 0xbe, 0xc3, 0x04, 0xd6, 0xb6, 0x6d, 0x8c, 0x2b, 0x84, 0xaf, 0x4b, 0x1c, 0xc0, - 0x99, 0xc8, 0x07, 0x63, 0x57, 0xa2, 0x9b, 0x60, 0xc7, 0x17, 0xac, 0x6b, 0xf1, 0x37, 0x36, 0x68, - 0xa1, 0xc5, 0xfe, 0xa6, 0xe6, 0x60, 0x28, 0xa2, 0x85, 0x4a, 0xb8, 0x80, 0xbe, 0xd0, 0x56, 0x75, - 0xce, 0x2b, 0xd6, 0xa0, 0xf1, 0xfe, 0xf0, 0x3b, 0xe1, 0xf7, 0x7c, 0x21, 0xad, 0x01, 0x27, 0x82, - 0xcc, 0x27, 0xde, 0x41, 0xac, 0x54, 0x9e, 0xc7, 0x6d, 0xe7, 0xd9, 0x78, 0xec, 0x2b, 0xf7, 0x76, - 0x62, 0x8b, 0x32, 0xdc, 0x58, 0xfc, 0xdf, 0x05, 0x34, 0xb9, 0x9e, 0xf3, 0x26, 0xaa, 0xae, 0x24, - 0x99, 0x1c, 0x49, 0x06, 0x14, 0x47, 0xa5, 0xfc, 0x25, 0xa1, 0x71, 0x19, 0xd1, 0x12, 0x8f, 0xed, - 0x06, 0x07, 0xb3, 0xea, 0xca, 0x52, 0xc6, 0x67, 0x25, 0xbf, 0x88, 0x5d, 0x89, 0x6e, 0x26, 0xc9, - 0x1c, 0x77, 0x1c, 0x49, 0x6d, 0x19, 0x36, 0x3f, 0x69, 0xd7, 0x05, 0xa3, 0x6b, 0x1f, 0x6b, 0x6f, - 0x6c, 0xef, 0x4b, 0xf5, 0x6f, 0xba, 0x12, 0xdd, 0x0c, 0x02, 0xa4, 0x78, 0x6c, 0x37, 0x38, 0xbb, - 0xc7, 0x07, 0x76, 0x26, 0x07, 0x8f, 0xc4, 0x07, 0xa2, 0x40, 0x46, 0x73, 0x0e, 0x6e, 0x26, 0x65, - 0x14, 0xb5, 0xc8, 0x69, 0x68, 0x9e, 0x8c, 0x9d, 0x4b, 0x9e, 0x39, 0x06, 0xb8, 0xc2, 0x31, 0xb6, - 0xea, 0x58, 0xbc, 0xb8, 0xde, 0x65, 0xf7, 0xbf, 0x00, 0x7f, 0x2b, 0x06, 0x4b, 0xa7, 0xdd, 0xbf, - 0x64, 0x63, 0x34, 0x1d, 0x0e, 0xd5, 0x9c, 0x43, 0x54, 0xe2, 0xd0, 0x25, 0x57, 0x94, 0x9a, 0x26, - 0xd0, 0xd2, 0x63, 0x05, 0x78, 0xb8, 0xb0, 0x04, 0x63, 0xa6, 0xfb, 0xbc, 0x88, 0x14, 0xdc, 0x02, - 0xb4, 0xb6, 0x5c, 0x0f, 0x79, 0x9e, 0x03, 0xfb, 0x5a, 0xf3, 0x9d, 0x3d, 0x4a, 0xcd, 0x55, 0xad, - 0xe6, 0xe2, 0x5b, 0x68, 0x9c, 0x3f, 0xbc, 0xd2, 0xff, 0xa1, 0xd6, 0x50, 0x28, 0x61, 0x90, 0xc0, - 0xf1, 0x9c, 0x69, 0x99, 0xfc, 0x84, 0x79, 0x89, 0xcf, 0x7c, 0xe3, 0x06, 0xc8, 0xc4, 0x85, 0x0b, - 0x23, 0x5b, 0x08, 0xaa, 0xe3, 0x60, 0x0f, 0x60, 0x84, 0x76, 0x17, 0xd7, 0x99, 0x10, 0x02, 0x57, - 0xdb, 0xd7, 0xa4, 0x06, 0x1b, 0xb5, 0xc2, 0x9f, 0x71, 0xfe, 0x63, 0xf6, 0x2a, 0xf9, 0x61, 0xdf, - 0x07, 0xe1, 0x64, 0xcf, 0x56, 0xbf, 0xaf, 0xa9, 0x28, 0x14, 0x6c, 0x34, 0x9f, 0x05, 0xb8, 0x12, - 0xf8, 0x7b, 0xb4, 0x0d, 0x84, 0xcd, 0x52, 0x1d, 0xdd, 0xbe, 0x8f, 0xaf, 0xe5, 0x2f, 0xd0, 0x64, - 0x3b, 0x2b, 0xee, 0xd1, 0xfb, 0x31, 0xbb, 0x85, 0x81, 0x8b, 0x5e, 0x2c, 0x7f, 0x75, 0x55, 0x73, - 0xb8, 0xb6, 0xb1, 0x65, 0xbd, 0x3f, 0xc0, 0x0f, 0xfd, 0x26, 0x2a, 0x70, 0x72, 0xbc, 0x37, 0x6f, - 0x70, 0xea, 0x23, 0xca, 0x9e, 0xa2, 0xeb, 0xd2, 0x0e, 0xb5, 0x67, 0xe9, 0x4a, 0x6b, 0x16, 0xda, - 0x9c, 0x25, 0xb9, 0x64, 0xeb, 0xf2, 0xbb, 0x3c, 0xf4, 0x38, 0x1c, 0x4d, 0xc8, 0xed, 0xc5, 0x96, - 0xdb, 0xe6, 0x4b, 0xd7, 0x6b, 0xf2, 0xd2, 0x3c, 0xff, 0x7c, 0x25, 0xba, 0x19, 0x34, 0xac, 0xbc, - 0x84, 0x25, 0xd5, 0x7f, 0x01, 0x88, 0x16, 0x50, 0xb5, 0x26, 0x76, 0x9d, 0x30, 0xba, 0x3e, 0xbf, - 0x2c, 0x58, 0xb2, 0xf3, 0xcb, 0x02, 0x2f, 0xfd, 0xbe, 0x2c, 0x30, 0x99, 0xf4, 0x65, 0x81, 0x48, - 0x92, 0xed, 0xde, 0x5b, 0x9c, 0x9c, 0xf5, 0xb2, 0xc0, 0x0b, 0x40, 0x2f, 0x0b, 0x9c, 0xc4, 0xf2, - 0xb2, 0xc0, 0x8b, 0x1b, 0xad, 0x39, 0xa0, 0x8e, 0x85, 0x01, 0xfb, 0xcb, 0x1c, 0x34, 0xd5, 0xb1, - 0x09, 0xe1, 0xe6, 0x3b, 0xdd, 0x97, 0xa5, 0xd6, 0xe6, 0xf4, 0x35, 0x2b, 0x1d, 0xd3, 0x49, 0xc2, - 0x55, 0xf9, 0x22, 0x3e, 0xb9, 0x30, 0xf5, 0xd9, 0x57, 0x70, 0xb2, 0xe6, 0x2b, 0xcd, 0x9d, 0x0e, - 0xf1, 0xfa, 0xfa, 0x1d, 0xca, 0x89, 0xf8, 0xc2, 0x1b, 0x88, 0xab, 0xd7, 0x74, 0x2f, 0x33, 0x27, - 0x48, 0x7d, 0x81, 0x9b, 0xc9, 0x2f, 0xf3, 0x42, 0x32, 0xd0, 0x2d, 0x5e, 0x1d, 0x6a, 0x03, 0x28, - 0x49, 0xf4, 0xb6, 0x5f, 0x1d, 0x6a, 0x07, 0x7e, 0x86, 0xc8, 0x08, 0xc1, 0x0f, 0x86, 0xda, 0xb6, - 0x58, 0x26, 0x89, 0x87, 0x7b, 0x55, 0x3c, 0x9e, 0xf8, 0x5b, 0xb7, 0xd3, 0x59, 0xde, 0x18, 0x9d, - 0xce, 0xf0, 0x0b, 0xe6, 0x72, 0x3a, 0x9b, 0xc3, 0x3b, 0x9d, 0xb1, 0x4f, 0x4e, 0xe3, 0x77, 0xb6, - 0x5c, 0x57, 0x2a, 0x51, 0xb9, 0xe4, 0x86, 0x03, 0x79, 0x06, 0x7f, 0x1b, 0x4c, 0x44, 0xea, 0xed, - 0xbf, 0x73, 0x59, 0xc0, 0xbb, 0x58, 0xfc, 0x57, 0x59, 0x68, 0x86, 0xd2, 0xd0, 0x50, 0xd7, 0xb2, - 0x2e, 0xa0, 0x45, 0x98, 0x45, 0xab, 0xaa, 0xfd, 0x5a, 0x5c, 0xeb, 0xd6, 0x58, 0x2d, 0xc5, 0x6a, - 0x0b, 0x4b, 0x63, 0x95, 0x4f, 0xc9, 0xa6, 0x6b, 0xe5, 0x0f, 0x84, 0xe6, 0x78, 0x6a, 0x56, 0xca, - 0x72, 0xca, 0x2b, 0xea, 0x16, 0xf2, 0x6a, 0xa7, 0xd7, 0x51, 0x5e, 0x18, 0xcf, 0x46, 0x10, 0x88, - 0xcb, 0xaf, 0x09, 0xd6, 0x52, 0x87, 0x93, 0x7b, 0x13, 0xd9, 0x0d, 0x74, 0x90, 0x67, 0x90, 0x48, - 0x23, 0x7d, 0xdd, 0x26, 0xcf, 0x43, 0xdd, 0x48, 0x54, 0x52, 0x2d, 0x3e, 0x81, 0xf2, 0x83, 0xcd, - 0x26, 0xc5, 0x1e, 0xa4, 0x4a, 0x28, 0x6c, 0xf3, 0xc2, 0x0a, 0xe5, 0xf1, 0x60, 0x1c, 0x16, 0x8f, - 0xc5, 0x54, 0x56, 0x58, 0xf6, 0xaa, 0xae, 0xbc, 0x8c, 0x96, 0x49, 0xde, 0xbb, 0x20, 0x17, 0x92, - 0x63, 0xe0, 0x26, 0x06, 0x14, 0x63, 0x47, 0x07, 0x64, 0x09, 0xc5, 0x9b, 0xb3, 0xd1, 0x4c, 0xaf, - 0x81, 0xee, 0xfc, 0x0b, 0xfa, 0xdb, 0x1b, 0xf7, 0xe0, 0xbd, 0x09, 0xf0, 0x4c, 0x0e, 0x21, 0xcd, - 0xde, 0xc9, 0x73, 0xdc, 0xa7, 0x90, 0x1e, 0xb4, 0x8b, 0xf7, 0xe7, 0xa2, 0x07, 0xeb, 0x3e, 0xf0, - 0x47, 0xea, 0xdf, 0x23, 0x63, 0xac, 0x21, 0x4c, 0x31, 0x11, 0xbd, 0xfd, 0x90, 0xd0, 0x5d, 0x83, - 0xc6, 0x35, 0xf8, 0xc3, 0x38, 0x7c, 0x55, 0x16, 0xde, 0xfa, 0x27, 0x74, 0xe5, 0x31, 0x89, 0x96, - 0xc9, 0x8f, 0x18, 0x43, 0x51, 0xa3, 0xf5, 0x1c, 0xcf, 0xb8, 0x43, 0xb2, 0x6b, 0x2b, 0x1b, 0xd1, - 0x27, 0xc6, 0x50, 0x54, 0xa5, 0x1d, 0xb8, 0xdb, 0x92, 0x7d, 0x93, 0x6f, 0xcb, 0xcf, 0xd1, 0x64, - 0x7f, 0xb8, 0xce, 0x3c, 0x80, 0xfa, 0xea, 0xe6, 0x95, 0x26, 0x64, 0xe6, 0xe0, 0x05, 0xe3, 0x28, - 0x12, 0x8e, 0x2a, 0x79, 0x36, 0xb1, 0x32, 0x19, 0x8a, 0x1a, 0xdd, 0xfd, 0x23, 0x87, 0x0e, 0x26, - 0xa2, 0x9b, 0xaa, 0x6b, 0x49, 0x3a, 0x7a, 0x47, 0x5b, 0xf1, 0x77, 0x68, 0x5a, 0x7d, 0xa3, 0xcf, - 0xdf, 0x54, 0xf5, 0x61, 0xb3, 0x3f, 0xa4, 0x35, 0xd4, 0x69, 0xf5, 0xc1, 0x40, 0x43, 0x98, 0x98, - 0xaf, 0x61, 0x1b, 0x65, 0xaf, 0x7a, 0xf9, 0xb1, 0xb5, 0xb5, 0x15, 0x0b, 0x2b, 0x6a, 0xaa, 0xf9, - 0x5d, 0x89, 0x0f, 0xec, 0x2c, 0x35, 0x86, 0x2e, 0x26, 0xa2, 0xa7, 0x92, 0xc3, 0xbb, 0x8d, 0xce, - 0x63, 0xd5, 0xb5, 0xc6, 0xa7, 0x87, 0x13, 0x7b, 0xce, 0x13, 0x73, 0x28, 0xaf, 0x71, 0x6c, 0x58, - 0x20, 0x6f, 0xcc, 0x58, 0xa0, 0x41, 0x57, 0x7c, 0xe8, 0x1d, 0x69, 0x34, 0xb8, 0x91, 0x1f, 0x31, - 0xda, 0xb6, 0x27, 0x3a, 0x3f, 0x83, 0x03, 0xa4, 0xc2, 0x16, 0x7e, 0xc9, 0x5e, 0xd8, 0x81, 0x9e, - 0x66, 0xf1, 0x7f, 0xcd, 0x41, 0x45, 0x99, 0x67, 0xb8, 0xf3, 0x11, 0x05, 0x7d, 0x77, 0x73, 0xee, - 0x98, 0x77, 0x37, 0xf7, 0x96, 0xe1, 0x29, 0xb1, 0xce, 0xb2, 0x94, 0xc9, 0xcb, 0x4c, 0xc9, 0x38, - 0x4c, 0x68, 0xc8, 0x21, 0xc0, 0xd8, 0x58, 0xb8, 0xca, 0x4c, 0x68, 0xca, 0x5e, 0xd7, 0x95, 0x35, - 0xa8, 0x4e, 0x1a, 0x15, 0x32, 0xe4, 0xb9, 0x3c, 0xf0, 0xd9, 0x80, 0x2e, 0x0d, 0x26, 0xec, 0xbc, - 0x1f, 0xcd, 0x02, 0x12, 0x61, 0xad, 0x3f, 0x14, 0x69, 0xf1, 0x35, 0xde, 0x33, 0x49, 0xb9, 0x67, - 0x92, 0x72, 0xcf, 0x24, 0xe5, 0xc7, 0x63, 0x92, 0xf2, 0xef, 0x3c, 0x4d, 0x52, 0xbe, 0xba, 0x93, - 0x4c, 0x52, 0x1e, 0x0c, 0x3d, 0xe0, 0x69, 0x92, 0x32, 0x6e, 0x23, 0xa0, 0x24, 0xbb, 0x6d, 0x4a, - 0xab, 0x80, 0x26, 0xbd, 0x17, 0x0c, 0x47, 0x9c, 0x56, 0x29, 0xef, 0xe8, 0xca, 0x5b, 0x92, 0xbd, - 0x46, 0x7e, 0xd5, 0xf6, 0x33, 0x75, 0xb0, 0x27, 0xb1, 0xf3, 0x08, 0x61, 0x14, 0xbf, 0x3b, 0x94, - 0x68, 0x3f, 0x90, 0xec, 0xd9, 0x6a, 0xb6, 0xe0, 0x79, 0xc7, 0x52, 0xde, 0x78, 0x85, 0x97, 0x17, - 0xaa, 0xf6, 0xb1, 0xc5, 0x73, 0x02, 0x12, 0xb9, 0x12, 0x82, 0x85, 0x89, 0x71, 0xf4, 0x66, 0x41, - 0x57, 0x36, 0x48, 0x1e, 0xf5, 0xf2, 0x1a, 0x77, 0x99, 0x87, 0x92, 0xa6, 0x41, 0xdb, 0x18, 0xd0, - 0x22, 0x8b, 0xfd, 0x0d, 0xf5, 0x25, 0xf8, 0xf1, 0xdb, 0x67, 0x6c, 0x3b, 0x17, 0x8f, 0xed, 0xb2, - 0x16, 0x9b, 0xec, 0xd9, 0xca, 0x77, 0xb8, 0x56, 0x3e, 0x35, 0x34, 0x45, 0xcd, 0x83, 0x6e, 0x6a, - 0xb6, 0xbf, 0xa1, 0x5e, 0xfd, 0x13, 0xd5, 0x63, 0x7a, 0xf1, 0x0b, 0xcb, 0x7e, 0x66, 0x32, 0x96, - 0xc2, 0x3d, 0xee, 0xad, 0x1f, 0x70, 0xbd, 0x06, 0xb7, 0xd7, 0x8c, 0x66, 0xca, 0x4d, 0x30, 0xa3, - 0x29, 0xb8, 0xd5, 0x66, 0x34, 0x96, 0x95, 0xc1, 0xd4, 0xeb, 0xb6, 0x32, 0xe8, 0xf6, 0x30, 0x17, - 0x10, 0xc7, 0x64, 0x2e, 0xb0, 0xec, 0xe6, 0x98, 0x0b, 0xb8, 0xcd, 0x04, 0xfe, 0xc7, 0x74, 0x66, - 0x02, 0xd3, 0xc6, 0x6e, 0x26, 0x10, 0xba, 0xf5, 0x66, 0x02, 0xd7, 0x6f, 0x1e, 0x30, 0xfd, 0xc7, - 0x6b, 0x1e, 0x30, 0xe3, 0x47, 0x61, 0x1e, 0x30, 0x68, 0xd3, 0x73, 0xce, 0xc4, 0x78, 0xec, 0xa9, - 0xb1, 0xe2, 0xb1, 0xdb, 0xae, 0xee, 0x74, 0x68, 0xe8, 0x66, 0xdd, 0xa8, 0x86, 0x2e, 0x2a, 0xa0, - 0xac, 0x00, 0x35, 0xd2, 0x71, 0xc5, 0x89, 0x36, 0x29, 0xdc, 0x70, 0xb3, 0xaf, 0x1e, 0x02, 0x7d, - 0x62, 0x1f, 0x95, 0xac, 0x40, 0x58, 0x7e, 0xd9, 0xd8, 0x3d, 0x6c, 0x52, 0xc5, 0x5f, 0xc4, 0x46, - 0xf6, 0x7f, 0xcb, 0x02, 0x8e, 0xba, 0x1e, 0x46, 0xe7, 0x5b, 0x93, 0x38, 0xd2, 0x1d, 0x1f, 0xf8, - 0x92, 0xef, 0xab, 0x66, 0x05, 0xc2, 0xe2, 0x0b, 0x2c, 0x7a, 0x4c, 0x85, 0xc9, 0x8f, 0xde, 0x67, - 0x39, 0x6a, 0xf3, 0xe5, 0x32, 0x02, 0x4a, 0xd1, 0x64, 0x3d, 0x54, 0xbe, 0xe2, 0x66, 0x44, 0x94, - 0xbc, 0x31, 0x6d, 0xc1, 0xbe, 0x2c, 0x5d, 0xd1, 0xb3, 0x50, 0x57, 0x96, 0x94, 0x8e, 0xfb, 0xa1, - 0x66, 0x0c, 0xfc, 0xde, 0xfc, 0x04, 0x54, 0x07, 0xff, 0x77, 0x36, 0x9a, 0x64, 0x03, 0x1d, 0x96, - 0x60, 0x42, 0x70, 0x25, 0x98, 0xe0, 0xc1, 0xc1, 0xe6, 0x84, 0xb9, 0x8e, 0xd1, 0x18, 0x59, 0xf8, - 0x6e, 0x96, 0x64, 0x04, 0x4e, 0x1b, 0x65, 0x01, 0x1e, 0x29, 0x84, 0xb2, 0xb0, 0xcd, 0x90, 0x38, - 0xba, 0x3d, 0xd9, 0xf7, 0x1d, 0x23, 0x0e, 0x36, 0xda, 0x43, 0x9f, 0x66, 0xe3, 0x89, 0x16, 0x65, - 0x9e, 0xc8, 0x95, 0xc4, 0x1c, 0x6e, 0x1d, 0xcf, 0xeb, 0xdb, 0xa7, 0x3c, 0x77, 0x3a, 0x75, 0xea, - 0x73, 0x7b, 0x02, 0xf3, 0x5f, 0xa0, 0xdc, 0x5f, 0xb7, 0x04, 0x99, 0x9e, 0x62, 0x6e, 0xda, 0x19, - 0x5f, 0x33, 0x5b, 0x81, 0xba, 0x02, 0x7a, 0xc8, 0xb3, 0xf8, 0xb1, 0x71, 0xd1, 0xc8, 0xc1, 0x6e, - 0xa3, 0xed, 0xbc, 0x0a, 0xf5, 0xdf, 0xe7, 0x36, 0x7c, 0xcf, 0xbc, 0xd6, 0xc5, 0xbd, 0x02, 0x9a, - 0x6c, 0x5f, 0xb9, 0x58, 0x84, 0x26, 0xd4, 0x37, 0xb7, 0x90, 0x88, 0x6d, 0x61, 0x32, 0x0c, 0x5f, - 0x24, 0xde, 0x8f, 0xc6, 0xd7, 0x37, 0xb7, 0xac, 0xf0, 0x37, 0xf9, 0x23, 0x61, 0x32, 0xa4, 0x55, - 0x20, 0x3e, 0x82, 0x26, 0x37, 0x69, 0x4d, 0xc1, 0xd0, 0x47, 0x6c, 0x08, 0xcc, 0x63, 0xab, 0x8e, - 0x52, 0xb1, 0x18, 0x4d, 0x84, 0x12, 0x32, 0x10, 0xb8, 0xd5, 0xd8, 0xca, 0x8a, 0xff, 0x31, 0x07, - 0x15, 0x7a, 0xdf, 0xd3, 0x7b, 0x7a, 0xad, 0x9f, 0x98, 0x5e, 0x8b, 0x04, 0xcb, 0x4c, 0x0b, 0x0e, - 0xf2, 0x1c, 0x37, 0xde, 0x1e, 0x5d, 0xc9, 0x75, 0x52, 0x40, 0x93, 0x5e, 0x6d, 0x59, 0x47, 0xec, - 0xbf, 0x54, 0xed, 0xd7, 0x62, 0x0d, 0x42, 0x1b, 0x58, 0x01, 0x41, 0x7e, 0x8b, 0x74, 0x65, 0xbe, - 0xc4, 0x15, 0xcb, 0x33, 0x61, 0x7c, 0xab, 0x04, 0x52, 0x9f, 0xd0, 0x84, 0xc0, 0x5c, 0xd3, 0xb2, - 0x2a, 0x5d, 0x29, 0x47, 0x2f, 0x49, 0xf6, 0x59, 0xe4, 0x62, 0xe2, 0xc1, 0xfa, 0xdd, 0x27, 0x46, - 0xeb, 0x89, 0xc4, 0xe7, 0xd1, 0xc4, 0x1f, 0x77, 0x3a, 0x07, 0xbb, 0x2c, 0x70, 0xc3, 0x14, 0xef, - 0xcb, 0x43, 0xd3, 0xad, 0x21, 0x2a, 0x82, 0x81, 0x80, 0x56, 0x1f, 0x31, 0xd7, 0xbb, 0xc6, 0x2d, - 0xab, 0xc3, 0x61, 0xdc, 0x38, 0x59, 0xdd, 0xa3, 0xf1, 0xd8, 0x6e, 0x2a, 0xae, 0x5b, 0x00, 0xc4, - 0x4c, 0x59, 0x51, 0xaa, 0xf5, 0xbb, 0xd4, 0x99, 0xfe, 0x78, 0x6c, 0x77, 0x59, 0x51, 0x7d, 0x63, - 0x78, 0xe1, 0x87, 0x1f, 0x7e, 0x68, 0x93, 0xb7, 0xfd, 0x1a, 0x21, 0xf3, 0xd9, 0x88, 0x84, 0x7c, - 0x54, 0x1f, 0x97, 0x0f, 0xc4, 0x04, 0x57, 0x2c, 0xbf, 0xc4, 0x99, 0xd2, 0x14, 0x81, 0x55, 0x0b, - 0xb6, 0xe8, 0xdf, 0x6d, 0x32, 0x7b, 0xe0, 0xe9, 0x0a, 0x85, 0xc7, 0xf7, 0x25, 0x87, 0x77, 0xa7, - 0xce, 0x5c, 0x1a, 0xd9, 0x7f, 0x26, 0xd9, 0xb3, 0xd5, 0xca, 0x0a, 0xa2, 0x72, 0xa3, 0x89, 0xeb, - 0x2c, 0x13, 0xf5, 0x6c, 0x9a, 0xe0, 0xf9, 0x59, 0xf3, 0x3b, 0x82, 0x2d, 0x0d, 0x58, 0x50, 0xb1, - 0x08, 0x84, 0x70, 0x38, 0xfa, 0x64, 0x69, 0x91, 0x2d, 0xd3, 0x77, 0x6c, 0x37, 0x89, 0x18, 0x84, - 0xa5, 0x6f, 0x20, 0x89, 0xe3, 0xc4, 0x7f, 0xcc, 0x82, 0xfd, 0x73, 0x01, 0x8d, 0xf7, 0x31, 0x03, - 0x9f, 0x1c, 0x96, 0x12, 0xe1, 0x23, 0xc9, 0x2a, 0x96, 0x1b, 0x79, 0x43, 0x30, 0xc6, 0x6d, 0xe0, - 0x21, 0xc0, 0x9e, 0x86, 0xd2, 0x4f, 0x94, 0x8a, 0x8d, 0x25, 0xbf, 0x88, 0x3d, 0x5b, 0x04, 0xde, - 0xb4, 0xc9, 0x2f, 0x62, 0xd8, 0x76, 0x11, 0xea, 0xc0, 0x29, 0x16, 0x4c, 0x77, 0xf0, 0x56, 0xb8, - 0x46, 0xb9, 0x56, 0x9e, 0x1b, 0xca, 0x36, 0xd7, 0x68, 0x2d, 0x40, 0x5c, 0xc5, 0x64, 0x85, 0xb9, - 0xf4, 0x40, 0x47, 0x91, 0x15, 0xa6, 0x11, 0x99, 0x51, 0x49, 0x61, 0x3d, 0x9a, 0x1a, 0xd2, 0xc2, - 0x58, 0x13, 0x84, 0x2d, 0x65, 0xb8, 0xf4, 0xe3, 0x38, 0x14, 0x97, 0xbb, 0x56, 0x7e, 0x40, 0x79, - 0xb5, 0x8e, 0xdf, 0x62, 0xda, 0xa2, 0x68, 0xbd, 0xd9, 0x44, 0x75, 0xf7, 0x28, 0x8b, 0xe8, 0xca, - 0xaf, 0x51, 0x50, 0xf2, 0x04, 0x53, 0x59, 0x01, 0x20, 0x27, 0x09, 0x18, 0xe8, 0xed, 0xb4, 0x00, - 0x1c, 0x80, 0x83, 0x6c, 0xf9, 0xb6, 0xd6, 0xc5, 0x00, 0x32, 0xc4, 0x40, 0x07, 0xa7, 0x0c, 0x30, - 0x89, 0x15, 0x38, 0x45, 0x9e, 0x68, 0x2a, 0x6e, 0xcd, 0x42, 0x93, 0xf9, 0xbb, 0x75, 0xc7, 0x3f, - 0x0c, 0x14, 0x93, 0x39, 0x56, 0x2d, 0x3f, 0xec, 0x44, 0x03, 0x80, 0x9a, 0x13, 0xd1, 0x53, 0xd0, - 0x7f, 0x14, 0x4c, 0xd6, 0x91, 0x85, 0x66, 0x78, 0xec, 0xfc, 0x4f, 0x75, 0x3b, 0xfe, 0x36, 0x07, - 0x4d, 0xa9, 0xc6, 0xe6, 0x84, 0x38, 0x44, 0x38, 0x56, 0x3f, 0xae, 0xb2, 0x10, 0x8c, 0x60, 0xc1, - 0x3e, 0xf3, 0x81, 0x19, 0x33, 0x9a, 0x64, 0xd8, 0x64, 0xb9, 0xed, 0xad, 0xc8, 0xb2, 0x42, 0xd9, - 0x8c, 0xe1, 0xad, 0xe0, 0x1f, 0x09, 0xf1, 0xf7, 0x28, 0xd7, 0x1f, 0x88, 0x10, 0x75, 0x44, 0x7e, - 0xf9, 0x7b, 0xba, 0xa2, 0x49, 0x50, 0x22, 0xbf, 0x45, 0xf8, 0x61, 0xb8, 0x0f, 0xfb, 0x2e, 0x1a, - 0x43, 0x5d, 0x80, 0x9e, 0x4a, 0x39, 0x53, 0x69, 0x23, 0x7a, 0x30, 0x3e, 0x78, 0x02, 0x70, 0x2f, - 0xdf, 0x66, 0x51, 0x11, 0x0b, 0x15, 0x19, 0x1f, 0x6c, 0x35, 0xfa, 0x2f, 0xc6, 0x63, 0xbb, 0xa1, - 0x86, 0xe4, 0x61, 0x81, 0x49, 0xc4, 0xb7, 0xd0, 0x24, 0xdb, 0x7d, 0x26, 0x98, 0x11, 0x1b, 0x96, - 0xdb, 0x6b, 0xe4, 0x62, 0x1e, 0xfd, 0x30, 0xdd, 0x71, 0x72, 0x70, 0xeb, 0x02, 0xdf, 0xc7, 0x2d, - 0x21, 0x2d, 0x1e, 0xdb, 0x5d, 0xa2, 0xda, 0xbb, 0x88, 0xba, 0x80, 0xc6, 0xe1, 0x48, 0x3b, 0xcd, - 0x90, 0x40, 0x6e, 0x7c, 0xf9, 0x87, 0xba, 0xd2, 0x22, 0xd1, 0x32, 0xf9, 0x7d, 0xde, 0x64, 0x3c, - 0xd1, 0xb6, 0x2f, 0x15, 0x6d, 0x05, 0x81, 0x03, 0x95, 0x8e, 0x31, 0x9b, 0xe9, 0xae, 0x6e, 0xa3, - 0xbd, 0x13, 0x0c, 0x1d, 0x53, 0xdb, 0xcf, 0x41, 0xfc, 0x18, 0x50, 0x19, 0x5d, 0x89, 0x6e, 0x06, - 0x5c, 0x6b, 0x74, 0x75, 0x1a, 0xdd, 0xbb, 0xe3, 0x83, 0x9f, 0x27, 0xbb, 0xb7, 0x19, 0x67, 0x0e, - 0x27, 0x77, 0x11, 0x26, 0x0c, 0x7a, 0xa9, 0x74, 0xd2, 0x32, 0xf3, 0xec, 0xd1, 0x12, 0xc9, 0x09, - 0x24, 0xf2, 0x03, 0xf1, 0xd8, 0x6e, 0xca, 0x78, 0xf1, 0xef, 0x00, 0xa8, 0xd3, 0x8a, 0xff, 0xa9, - 0x10, 0x15, 0xd0, 0x2e, 0x4c, 0x61, 0x76, 0xc8, 0x43, 0x61, 0x86, 0x53, 0x6c, 0x70, 0x8f, 0x70, - 0x70, 0x34, 0x85, 0x19, 0x84, 0x5a, 0x30, 0x86, 0xf7, 0x8e, 0xaa, 0x36, 0x23, 0x01, 0x71, 0x61, - 0x75, 0xf1, 0xa1, 0x1e, 0x80, 0x10, 0x50, 0x9a, 0xd1, 0x59, 0x7e, 0x30, 0xe5, 0x99, 0x43, 0x8a, - 0x91, 0x7d, 0xa3, 0x52, 0x8c, 0x7a, 0x4e, 0x09, 0x07, 0xd0, 0xb6, 0x5c, 0x57, 0xca, 0x38, 0x25, + // 75047 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6d, 0x70, 0x1b, 0x47, + 0x96, 0x20, 0x38, 0x45, 0x7d, 0x91, 0x49, 0x51, 0x92, 0xcb, 0x96, 0x4d, 0xcb, 0xb6, 0x0c, 0xd3, + 0xdd, 0x36, 0x59, 0x26, 0xf5, 0x51, 0x76, 0xfb, 0x43, 0x6e, 0x77, 0xbb, 0x08, 0x52, 0x32, 0x5a, + 0x12, 0x45, 0x17, 0x29, 0xb9, 0x6d, 0xb7, 0x5b, 0x0b, 0x01, 0x25, 0x0a, 0x26, 0x09, 0xb0, 0x01, + 0x90, 0x92, 0xba, 0x67, 0xbb, 0x41, 0x8a, 0x94, 0x48, 0x09, 0xfc, 0x50, 0x59, 0x9f, 0x14, 0xf5, + 0x41, 0x59, 0x1f, 0xb4, 0x2d, 0x92, 0x92, 0x2d, 0x4b, 0x10, 0x08, 0x9a, 0xb1, 0x71, 0xbb, 0xb1, + 0x73, 0x3b, 0x13, 0x73, 0xbb, 0xbd, 0x77, 0x1b, 0x17, 0x13, 0xb3, 0x1f, 0x77, 0x42, 0x15, 0x80, + 0xb9, 0x89, 0xe3, 0xc6, 0xc4, 0x5d, 0x5c, 0x84, 0xf7, 0xc7, 0x5d, 0x54, 0xbe, 0xac, 0xac, 0x2c, + 0x00, 0xa4, 0x24, 0xdb, 0xdd, 0x3d, 0xbe, 0x1d, 0x85, 0x22, 0x88, 0x7a, 0xf9, 0xf2, 0xe5, 0xf7, + 0xcb, 0xf7, 0x5e, 0xbe, 0x7c, 0x89, 0x1e, 0xf1, 0xb4, 0xb4, 0x87, 0xc2, 0x4a, 0xb0, 0xd5, 0xed, + 0x77, 0x37, 0x29, 0xc1, 0x35, 0x6d, 0xc1, 0x40, 0x38, 0xc0, 0x2f, 0xb3, 0x43, 0x57, 0x3d, 0xd9, + 0x14, 0x08, 0x34, 0xb5, 0x28, 0x6b, 0xdd, 0x6d, 0xbe, 0xb5, 0x6e, 0xbf, 0x3f, 0x10, 0x76, 0x87, + 0x7d, 0x01, 0x7f, 0x08, 0xb0, 0x69, 0x2a, 0xfe, 0xda, 0xd5, 0xbe, 0x7b, 0x6d, 0x28, 0x1c, 0x6c, + 0xf7, 0x84, 0x49, 0x6a, 0x25, 0xfe, 0xe3, 0xa9, 0x6a, 0x52, 0xfc, 0x55, 0xa1, 0xbd, 0xee, 0xa6, + 0x26, 0x25, 0xb8, 0x36, 0xd0, 0x86, 0xf3, 0xe7, 0xa1, 0xf5, 0x58, 0x87, 0xbb, 0xc5, 0xe7, 0x75, + 0x87, 0x95, 0xb5, 0xe6, 0x0f, 0x92, 0xb0, 0x3a, 0xbb, 0x90, 0xbd, 0x41, 0x77, 0x5b, 0x9b, 0x12, + 0x24, 0x19, 0xcb, 0xfe, 0xaa, 0x0a, 0x2d, 0x71, 0x42, 0xad, 0xf9, 0x5f, 0xa2, 0x22, 0xd2, 0x00, + 0x57, 0x4d, 0x29, 0xe7, 0xe0, 0xca, 0x8b, 0xaa, 0xdf, 0x54, 0xa5, 0x37, 0x04, 0x0b, 0x2a, 0xae, + 0xab, 0x76, 0x36, 0x68, 0x07, 0x7b, 0x32, 0x07, 0xc6, 0x92, 0xd3, 0x33, 0xa9, 0x63, 0x63, 0x99, + 0x33, 0x07, 0x53, 0x5f, 0x5d, 0x72, 0xd5, 0xcc, 0x26, 0xa2, 0xfa, 0x85, 0x84, 0x96, 0x18, 0x4c, + 0xc6, 0xe2, 0xd5, 0xce, 0x86, 0xaa, 0xcd, 0xaf, 0x36, 0x54, 0xfd, 0xdc, 0xf8, 0x27, 0x5b, 0x99, + 0xf9, 0x37, 0x51, 0x31, 0xf9, 0xa8, 0x73, 0xb7, 0x2a, 0xa5, 0x05, 0xb8, 0x84, 0xd5, 0xaa, 0xf4, + 0x84, 0xc0, 0xc2, 0xc5, 0xa5, 0x40, 0x54, 0x1b, 0xea, 0x4f, 0x5d, 0xbd, 0x2e, 0xb3, 0x49, 0xfc, + 0x49, 0x0e, 0x3d, 0xbc, 0x5b, 0xf1, 0x2a, 0x41, 0xdc, 0x78, 0x27, 0xad, 0xec, 0x02, 0x4c, 0x4a, + 0x51, 0xa5, 0x5d, 0x42, 0xbe, 0x74, 0x71, 0xb3, 0x76, 0xa5, 0x4b, 0x3f, 0x37, 0x92, 0x9e, 0xbc, + 0x0c, 0xb4, 0x93, 0xb1, 0x78, 0xba, 0xf3, 0x58, 0xa6, 0xeb, 0x0a, 0x7c, 0xa6, 0x86, 0xbb, 0x93, + 0xb1, 0x48, 0xe6, 0xc0, 0x98, 0xd6, 0x7b, 0x70, 0x36, 0x11, 0x4d, 0x1d, 0x1b, 0x4b, 0x4f, 0x5e, + 0x76, 0xd5, 0xa4, 0x27, 0xae, 0x6b, 0xd3, 0xc7, 0x01, 0xf1, 0xad, 0x40, 0x28, 0x9c, 0x9c, 0x19, + 0xd5, 0x3b, 0x27, 0xe5, 0x7c, 0x25, 0xf0, 0x9b, 0x51, 0x61, 0x5b, 0x30, 0xd0, 0xe1, 0xf3, 0x2a, + 0xc1, 0xd2, 0x85, 0xb8, 0x36, 0x6b, 0x55, 0xa9, 0x52, 0xa0, 0x40, 0xd1, 0x41, 0x4a, 0x8e, 0x1f, + 0xcd, 0xf4, 0xf4, 0xa7, 0xa6, 0x27, 0x66, 0x13, 0xd1, 0x64, 0x2c, 0x9e, 0x8c, 0x1f, 0x4d, 0xdd, + 0x98, 0xd2, 0xce, 0x1d, 0x71, 0xd5, 0xc8, 0x14, 0x97, 0x7f, 0x05, 0x2d, 0x0e, 0x2a, 0x4d, 0xbe, + 0x80, 0xbf, 0x74, 0x11, 0x26, 0xf5, 0xb4, 0x2a, 0x3d, 0x29, 0x10, 0x90, 0xc8, 0x93, 0xee, 0x89, + 0xc6, 0xb5, 0xf3, 0xe7, 0x49, 0x95, 0x48, 0x1a, 0xbf, 0x05, 0x2d, 0xea, 0x68, 0xf3, 0xb8, 0x6a, + 0x4a, 0x17, 0xe3, 0x7c, 0x2f, 0xab, 0xd2, 0x8b, 0x02, 0x40, 0x44, 0x01, 0xb2, 0xe9, 0x7d, 0x11, + 0x6d, 0x64, 0xac, 0xa3, 0xcd, 0x33, 0x9b, 0x88, 0x42, 0x83, 0x53, 0x03, 0x93, 0xda, 0xc5, 0x03, + 0xc9, 0xd8, 0x91, 0xcc, 0xd9, 0x73, 0xda, 0x4c, 0x8f, 0x36, 0xfa, 0x99, 0x0c, 0x59, 0xf8, 0xb7, + 0x50, 0x51, 0x5b, 0x30, 0xf0, 0xa1, 0xe2, 0x09, 0xbb, 0x6a, 0x4a, 0x97, 0x60, 0x8a, 0x82, 0x2a, + 0x3d, 0x2f, 0x58, 0x50, 0x71, 0x95, 0x45, 0xb5, 0xe7, 0x8b, 0x74, 0xe7, 0xb1, 0xd4, 0x70, 0x77, + 0x66, 0xf4, 0x4e, 0xea, 0xcc, 0x84, 0xab, 0x46, 0xb6, 0xd0, 0xf8, 0xfd, 0x08, 0xed, 0x6a, 0x0f, + 0xf9, 0xfc, 0x4a, 0x28, 0xe4, 0xaa, 0x29, 0x2d, 0xc4, 0xa4, 0xde, 0x55, 0xa5, 0x1d, 0x02, 0x03, + 0x16, 0xdf, 0x82, 0x9c, 0xa9, 0xa9, 0xa3, 0xda, 0xc4, 0x30, 0x1e, 0x92, 0x61, 0xed, 0xf0, 0xa8, + 0xab, 0xa6, 0xd2, 0x91, 0x5b, 0x88, 0x99, 0x36, 0x9b, 0x88, 0xe2, 0xa1, 0xd2, 0xcf, 0x5e, 0xd6, + 0xe3, 0x43, 0xc9, 0xf8, 0x80, 0x73, 0x6b, 0x4d, 0xb5, 0xcc, 0x50, 0xe5, 0xf7, 0xa0, 0x62, 0xc5, + 0xdf, 0xe1, 0x0b, 0x06, 0xfc, 0xad, 0x8a, 0x3f, 0x5c, 0x5a, 0x84, 0xcb, 0xde, 0xa8, 0x4a, 0x4e, + 0x81, 0x85, 0x8b, 0x2f, 0x59, 0x65, 0x4c, 0xde, 0xd1, 0xe2, 0x46, 0x19, 0xa4, 0x63, 0x70, 0x0f, + 0xcf, 0x26, 0xa2, 0xa1, 0xb0, 0xbb, 0x69, 0x36, 0x11, 0xf5, 0x2a, 0xbb, 0xda, 0x8d, 0xbf, 0x6d, + 0xc1, 0x80, 0x57, 0x66, 0x49, 0xf0, 0x6f, 0x23, 0xa4, 0xf8, 0x9b, 0x7c, 0x7e, 0xa5, 0x71, 0x7f, + 0x9b, 0x52, 0x8a, 0x70, 0x41, 0xeb, 0x55, 0x69, 0x8d, 0xc0, 0x80, 0xcd, 0x69, 0x90, 0x4a, 0x9c, + 0xd0, 0x07, 0x54, 0x2d, 0x71, 0x5c, 0xff, 0x68, 0x60, 0x36, 0x11, 0x6d, 0x7e, 0x35, 0x74, 0x37, + 0xd2, 0xd9, 0xaa, 0x84, 0x02, 0x21, 0x99, 0xc1, 0xe6, 0x3f, 0x40, 0xc5, 0xbe, 0x50, 0xed, 0x3e, + 0x63, 0x09, 0xf8, 0x3a, 0x94, 0xd2, 0x62, 0x07, 0x57, 0x5e, 0x58, 0xfd, 0xba, 0x2a, 0xbd, 0x2a, + 0xb0, 0x70, 0xb1, 0x42, 0x3f, 0x35, 0xa9, 0x0d, 0x5d, 0x81, 0x4e, 0x49, 0x1d, 0xb9, 0xa6, 0xf5, + 0x5f, 0x80, 0x62, 0x8c, 0x41, 0x9e, 0x3a, 0x95, 0x9e, 0x30, 0x26, 0xfc, 0x6e, 0x77, 0x4b, 0x48, + 0x91, 0xd9, 0x7c, 0xfc, 0x0e, 0xba, 0x20, 0x71, 0x95, 0x97, 0xe2, 0x2a, 0xbf, 0xa4, 0x4a, 0xeb, + 0x05, 0x16, 0x2e, 0x96, 0x91, 0x3a, 0xe3, 0x89, 0x3a, 0x9b, 0x88, 0x5a, 0xf3, 0xff, 0x6e, 0xa4, + 0x33, 0xe4, 0xf3, 0x37, 0xb5, 0x28, 0x32, 0x9b, 0x81, 0xdf, 0x81, 0x16, 0xb7, 0xb8, 0x77, 0x29, + 0x2d, 0xa1, 0xd2, 0x12, 0xc7, 0x82, 0xf2, 0x62, 0xf1, 0xd9, 0x35, 0x59, 0xec, 0x92, 0xac, 0x9b, + 0x35, 0x5b, 0x30, 0x56, 0xad, 0x3f, 0x1c, 0xdc, 0x5f, 0xfd, 0xb8, 0x2a, 0x3d, 0x2a, 0x90, 0x7c, + 0x26, 0x0f, 0xd0, 0x2f, 0x1c, 0x4a, 0x8d, 0x7f, 0x25, 0x13, 0x28, 0xff, 0x06, 0x5a, 0xe2, 0x09, + 0x2a, 0xee, 0x70, 0x20, 0x58, 0xba, 0x0c, 0xd7, 0xf5, 0x59, 0x55, 0x72, 0x08, 0x26, 0x4c, 0x5c, + 0x49, 0x96, 0x18, 0x1e, 0x31, 0xad, 0xf7, 0x8c, 0x36, 0x15, 0x4f, 0x47, 0x7a, 0x64, 0x33, 0x9d, + 0x5f, 0x8d, 0x10, 0xfe, 0xa9, 0x34, 0xfa, 0x5a, 0x95, 0xd2, 0xe5, 0x06, 0x05, 0x99, 0x81, 0x18, + 0xe9, 0xed, 0x6d, 0x5e, 0x33, 0x7d, 0x05, 0xa4, 0x5b, 0x10, 0xbe, 0xb3, 0x00, 0x15, 0xed, 0xf2, + 0x84, 0x24, 0xaf, 0x37, 0xe0, 0x0f, 0x95, 0x3e, 0x84, 0x9b, 0xf6, 0xdc, 0x5c, 0x4d, 0xab, 0x36, + 0x11, 0xa1, 0x75, 0x71, 0x4e, 0x95, 0x6e, 0x71, 0x82, 0x95, 0x5f, 0x1c, 0xe3, 0xa0, 0x8a, 0xa4, + 0xa5, 0x27, 0x6f, 0xa5, 0x67, 0xce, 0xa4, 0x47, 0xa3, 0xc0, 0x60, 0x53, 0xd3, 0x13, 0xfa, 0xa0, + 0x9a, 0x9c, 0xba, 0xa5, 0x4d, 0xf4, 0xa5, 0x3f, 0xee, 0x81, 0x69, 0x0e, 0x0d, 0x4b, 0x26, 0x86, + 0x53, 0x37, 0x2f, 0x6a, 0x89, 0xe3, 0xc9, 0xf8, 0xd1, 0x64, 0xec, 0x30, 0x8c, 0x2f, 0xf0, 0x14, + 0x40, 0x00, 0x3a, 0xda, 0xe4, 0x1d, 0x7d, 0xf2, 0x58, 0x32, 0x36, 0x90, 0x1e, 0xbd, 0xac, 0xf5, + 0x18, 0x14, 0xa0, 0x5c, 0xc0, 0xd7, 0x46, 0x08, 0xeb, 0xd6, 0xc7, 0x3f, 0xd6, 0x62, 0x31, 0xad, + 0xf7, 0xac, 0x76, 0xf5, 0x88, 0x16, 0x3d, 0x91, 0xbc, 0x73, 0x44, 0x1b, 0x1a, 0x00, 0x0a, 0xe9, + 0xeb, 0x07, 0x52, 0xc7, 0xc6, 0xee, 0x46, 0xba, 0x64, 0xab, 0xd6, 0x7c, 0x4f, 0x01, 0x2a, 0x56, + 0xf6, 0x85, 0x83, 0x6e, 0xd2, 0x0b, 0x3c, 0xee, 0x85, 0xf2, 0xb9, 0x7a, 0xa1, 0xd6, 0x42, 0x85, + 0x7e, 0x88, 0x71, 0xaa, 0x74, 0x93, 0x13, 0x58, 0x1a, 0xe2, 0xa5, 0xec, 0x9e, 0xc8, 0x5c, 0x3c, + 0xab, 0x5d, 0x3a, 0xa1, 0xf7, 0x7d, 0xa2, 0xdd, 0x38, 0x9e, 0x4c, 0x5c, 0xc8, 0x44, 0x54, 0x63, + 0xc9, 0x9b, 0x0b, 0xd1, 0xe0, 0xe2, 0x98, 0x73, 0x25, 0x63, 0xf1, 0xcc, 0xc5, 0xee, 0xd4, 0xf1, + 0xd3, 0xc9, 0x78, 0x54, 0x3f, 0x71, 0x67, 0x6d, 0x32, 0xd6, 0x67, 0xfc, 0xd1, 0x47, 0xfa, 0xb5, + 0xc3, 0xa3, 0xda, 0xf1, 0x83, 0x84, 0x00, 0xde, 0xa8, 0xe6, 0x6a, 0x7f, 0xea, 0xf0, 0x2d, 0x3d, + 0xd2, 0x09, 0xbd, 0x90, 0xdb, 0xf8, 0x64, 0x6c, 0x00, 0x06, 0xc0, 0xe8, 0x05, 0xb6, 0xce, 0xfc, + 0x76, 0x54, 0x18, 0xda, 0x1f, 0x0a, 0x2b, 0xad, 0xae, 0x9a, 0xd2, 0x87, 0xf1, 0x5c, 0x7c, 0x4d, + 0x95, 0x5e, 0x16, 0x28, 0x50, 0x14, 0x9a, 0xdb, 0x77, 0x29, 0x41, 0xbf, 0x12, 0x56, 0x42, 0x84, + 0x61, 0x8f, 0x8c, 0x69, 0x43, 0xdd, 0xc9, 0xf8, 0x51, 0xed, 0xce, 0x17, 0xda, 0xe0, 0xf5, 0x64, + 0xec, 0x70, 0xfa, 0xcb, 0x6e, 0x3d, 0x3e, 0x64, 0x70, 0x7e, 0x33, 0x17, 0x7f, 0x93, 0x43, 0x08, + 0xfa, 0x10, 0xaf, 0xc8, 0x47, 0x30, 0xe5, 0x8f, 0x38, 0x55, 0x1a, 0xe4, 0x04, 0x26, 0x41, 0x8c, + 0x70, 0xa4, 0xfa, 0x13, 0xa3, 0xa9, 0xa1, 0x83, 0x74, 0x65, 0x6a, 0x3d, 0xd7, 0xf4, 0x91, 0xbe, + 0x64, 0xfc, 0xa8, 0x7e, 0xf2, 0x56, 0xea, 0xd8, 0x79, 0xfd, 0x78, 0xef, 0x6c, 0x22, 0xba, 0x55, + 0xaa, 0x93, 0x36, 0xd5, 0xd6, 0xec, 0x74, 0x6e, 0xd9, 0xde, 0xd0, 0x58, 0x2b, 0x97, 0xc3, 0xbc, + 0xd1, 0xfb, 0x4e, 0xa5, 0x26, 0x46, 0x81, 0x4a, 0xc5, 0x6c, 0x22, 0xea, 0xaa, 0xab, 0xa9, 0xad, + 0xaf, 0xad, 0xab, 0xa9, 0xad, 0x6b, 0xa4, 0x98, 0xa9, 0x23, 0xd7, 0x52, 0x9f, 0x1d, 0xa1, 0xac, + 0x24, 0x7d, 0xe8, 0xd3, 0xf4, 0x68, 0x34, 0x35, 0x75, 0x53, 0x3f, 0x7c, 0xa9, 0x42, 0x66, 0xaa, + 0xc3, 0xef, 0x44, 0x8b, 0x5b, 0xdd, 0xc6, 0x80, 0x97, 0xae, 0x9c, 0x7f, 0xc1, 0x6f, 0xc5, 0x58, + 0x30, 0x15, 0xca, 0x54, 0xe9, 0x69, 0x81, 0xe4, 0x33, 0xd7, 0x2e, 0x7c, 0x39, 0x5c, 0xf5, 0x5a, + 0xef, 0xc9, 0xf4, 0xe8, 0x98, 0x4c, 0x92, 0xf9, 0x21, 0x0e, 0x2d, 0xf7, 0x2b, 0xe1, 0xbd, 0x81, + 0x60, 0x73, 0x83, 0x12, 0x0e, 0xfb, 0xfc, 0x4d, 0xa1, 0xd2, 0x47, 0x1d, 0x5c, 0x79, 0xb1, 0xb8, + 0x3a, 0xbb, 0xa8, 0x3a, 0x1b, 0x1a, 0xb0, 0xfa, 0xec, 0xbc, 0xe2, 0x3a, 0xd2, 0x7d, 0xd3, 0x47, + 0x53, 0x53, 0x23, 0xda, 0xf9, 0x78, 0x6a, 0x34, 0x92, 0x9e, 0xf8, 0x0a, 0xb6, 0xe5, 0xcc, 0x48, + 0x24, 0x7d, 0xa5, 0x13, 0x26, 0x80, 0x7e, 0xe2, 0x0e, 0xc0, 0xe5, 0x6c, 0x12, 0xfc, 0x5f, 0x72, + 0x54, 0x0a, 0xac, 0x76, 0x87, 0x7c, 0x1e, 0x5a, 0xaf, 0xc7, 0x70, 0xbd, 0xe6, 0xea, 0x02, 0x16, + 0xb7, 0x3a, 0xa8, 0x4a, 0x01, 0x21, 0x2f, 0x15, 0xf1, 0x1d, 0x32, 0x6b, 0x70, 0xdd, 0xc8, 0xc2, + 0x36, 0x6b, 0x98, 0xfc, 0xea, 0x88, 0x76, 0xa5, 0x0b, 0x26, 0x76, 0xaa, 0xaf, 0x57, 0x1f, 0xb9, + 0x86, 0xc7, 0x9e, 0xec, 0x8d, 0x1d, 0x6d, 0x9e, 0xd4, 0x78, 0x9f, 0x31, 0x5e, 0x66, 0x13, 0x48, + 0x8b, 0xa0, 0x21, 0x79, 0x8b, 0xe3, 0xff, 0x13, 0x87, 0x1e, 0x25, 0x09, 0x92, 0xb7, 0xc3, 0xed, + 0xf7, 0x28, 0xb4, 0x3d, 0xa5, 0xb8, 0x3d, 0x3f, 0x9c, 0xa3, 0x3d, 0x76, 0xec, 0xea, 0xdf, 0xa9, + 0xd2, 0x9f, 0x0b, 0x8f, 0x19, 0xa8, 0x4a, 0x2e, 0x29, 0xd1, 0x0d, 0x8d, 0x4a, 0xcf, 0x9c, 0xc9, + 0x9c, 0xba, 0x95, 0xea, 0xbb, 0xa3, 0x47, 0xae, 0x66, 0x35, 0x4a, 0x1b, 0x9a, 0x4c, 0x1d, 0x1b, + 0xf3, 0xb5, 0x75, 0x84, 0x20, 0xd9, 0x68, 0xd8, 0xc4, 0x1d, 0xed, 0xf4, 0x58, 0x7a, 0x66, 0x28, + 0x3d, 0x1a, 0x35, 0xd8, 0x24, 0xce, 0x90, 0x1a, 0xef, 0xbb, 0x1b, 0xe9, 0x32, 0xc4, 0xba, 0x93, + 0x17, 0x52, 0x7d, 0x77, 0xb4, 0xde, 0xcf, 0x32, 0x23, 0x11, 0xfd, 0x46, 0x97, 0x3c, 0x47, 0x2b, + 0xf8, 0xff, 0x99, 0x43, 0x4b, 0xfd, 0x01, 0xaf, 0xd5, 0xac, 0xc7, 0x71, 0xb3, 0x9e, 0xc8, 0x99, + 0x3e, 0x16, 0x4e, 0xb5, 0xca, 0xa9, 0xd2, 0x00, 0x27, 0xd8, 0xf2, 0x89, 0xbf, 0x25, 0x6d, 0x38, + 0xdc, 0x95, 0xea, 0xba, 0x93, 0x55, 0x7b, 0x3d, 0xda, 0x95, 0x9e, 0x9e, 0x4e, 0x9d, 0x99, 0xd0, + 0xa6, 0x8f, 0x1b, 0xb2, 0x42, 0xc0, 0xd3, 0xac, 0x04, 0xf5, 0xe3, 0xd7, 0xf5, 0xfe, 0x09, 0x00, + 0xc2, 0xc0, 0xe4, 0x56, 0xdb, 0x00, 0x0e, 0x4e, 0x26, 0xa7, 0x2e, 0x27, 0x63, 0xfd, 0x94, 0x66, + 0xb5, 0xb3, 0x41, 0x1f, 0x1c, 0x4a, 0x7e, 0x75, 0x86, 0xf0, 0xac, 0xc1, 0x2e, 0xfd, 0xf8, 0x75, + 0xd9, 0x56, 0x1b, 0xfe, 0x73, 0x0e, 0x2d, 0x0e, 0x85, 0xdd, 0xe1, 0xf6, 0x50, 0xe9, 0x2a, 0xcc, + 0x2c, 0x4e, 0x73, 0xaa, 0xf4, 0x0b, 0x81, 0xc0, 0x44, 0x99, 0xe5, 0x72, 0x50, 0x48, 0xfa, 0xc0, + 0x34, 0x7c, 0x3a, 0xe5, 0x5a, 0xa9, 0xd1, 0x55, 0xb7, 0x69, 0x36, 0x11, 0x95, 0xb7, 0xd7, 0xd5, + 0xc1, 0xaf, 0x9a, 0xda, 0x2d, 0xb5, 0x04, 0xb8, 0x51, 0xda, 0xb2, 0x5d, 0xae, 0xc5, 0xac, 0xc1, + 0xd5, 0xe8, 0x92, 0xb6, 0xb8, 0xde, 0x93, 0x1a, 0x5d, 0xdb, 0xea, 0xbe, 0xae, 0x7e, 0x25, 0xf8, + 0x23, 0xb9, 0xd0, 0xcc, 0x2d, 0x2f, 0x21, 0x99, 0xe5, 0x42, 0x33, 0xaf, 0xbc, 0x18, 0xb2, 0xca, + 0xcb, 0xec, 0x39, 0x65, 0x52, 0x2b, 0x63, 0x1f, 0x87, 0x6d, 0x35, 0x58, 0xfa, 0x04, 0xb3, 0x8f, + 0x13, 0x98, 0x7d, 0x1f, 0xd7, 0xcf, 0xdc, 0xd4, 0x4f, 0x5c, 0xc7, 0xfb, 0x38, 0x49, 0xe7, 0xdb, + 0x51, 0x31, 0x59, 0x8c, 0x98, 0x49, 0x3e, 0x89, 0x49, 0x34, 0x18, 0xec, 0x97, 0x85, 0x8b, 0xcf, + 0xb3, 0x6b, 0x9c, 0xb2, 0xc8, 0xf2, 0x76, 0xbf, 0x57, 0x09, 0xb6, 0xb8, 0xf7, 0xaf, 0x0d, 0x74, + 0xe0, 0xbf, 0x15, 0x5f, 0x57, 0x3f, 0x16, 0x5c, 0x29, 0x17, 0x9a, 0x70, 0x79, 0x09, 0x49, 0x90, + 0xff, 0x4c, 0x66, 0xe9, 0xf1, 0x7f, 0xcd, 0xa1, 0xc7, 0xdc, 0xed, 0xe1, 0xc0, 0x26, 0xc5, 0x6f, + 0x88, 0x3f, 0x0a, 0xf0, 0x32, 0x63, 0xbe, 0x84, 0x4a, 0x9f, 0xc2, 0x92, 0x19, 0x61, 0xd4, 0x73, + 0x61, 0x89, 0x61, 0xdb, 0x3e, 0x07, 0x32, 0x1b, 0x5e, 0xc4, 0xda, 0xed, 0xcf, 0xb5, 0xf1, 0x53, + 0xda, 0xc8, 0x18, 0xcc, 0xaa, 0x4a, 0x07, 0x8c, 0x38, 0x16, 0xd9, 0x2a, 0x1d, 0x5a, 0xff, 0x17, + 0x14, 0x2d, 0x35, 0x35, 0x08, 0x98, 0xa9, 0xe1, 0x6e, 0x13, 0x39, 0x39, 0x35, 0xc0, 0x12, 0x86, + 0x79, 0x92, 0x8c, 0x8d, 0xa7, 0x07, 0x6e, 0x6b, 0x83, 0x27, 0xe4, 0xb9, 0xaa, 0x63, 0xcc, 0x9d, + 0xc2, 0xb0, 0xd2, 0xda, 0xd6, 0xe2, 0x0e, 0x2b, 0xa5, 0xab, 0xf3, 0x8b, 0x33, 0x2e, 0x7f, 0x28, + 0x6c, 0xac, 0xa3, 0x46, 0x82, 0xe7, 0x0c, 0xf8, 0x77, 0xfb, 0x9a, 0xaa, 0xfd, 0xaa, 0xd4, 0x2c, + 0xd0, 0xcc, 0xe2, 0xce, 0x39, 0x8a, 0x48, 0xc6, 0xe2, 0xe1, 0x60, 0xbb, 0xa2, 0x9f, 0xbc, 0x55, + 0xe9, 0x60, 0xab, 0x98, 0x3e, 0xf4, 0xa9, 0x76, 0x78, 0xcc, 0xd8, 0xa1, 0x7a, 0x87, 0x7c, 0xa4, + 0x84, 0x4a, 0x07, 0x08, 0x31, 0xe6, 0xb7, 0x3e, 0x36, 0xaa, 0x9f, 0x9d, 0x21, 0x0a, 0x0e, 0x2d, + 0x8a, 0xff, 0x77, 0x1c, 0x2a, 0xc2, 0x1b, 0xb1, 0xcb, 0xbf, 0x3b, 0x50, 0xfa, 0xf4, 0xfc, 0x42, + 0x58, 0xad, 0x89, 0x08, 0x3b, 0xce, 0x61, 0x4e, 0x95, 0x0e, 0x72, 0x82, 0x95, 0x5f, 0xdc, 0x6f, + 0x74, 0x66, 0x97, 0x29, 0x0b, 0x81, 0xbc, 0x80, 0x4b, 0xac, 0x74, 0xc0, 0x8a, 0x56, 0x42, 0xbb, + 0x76, 0xb6, 0x07, 0x5b, 0xd6, 0xee, 0x55, 0x76, 0xed, 0x09, 0x04, 0x9a, 0x77, 0xfa, 0x5a, 0xdd, + 0x4d, 0x86, 0x36, 0xed, 0xeb, 0xf0, 0xb5, 0x28, 0xde, 0x26, 0x05, 0x00, 0xa9, 0xf1, 0x3e, 0x36, + 0xb3, 0xde, 0x7b, 0x22, 0x1d, 0xe9, 0xd1, 0x4f, 0x4d, 0x66, 0xd4, 0x5e, 0x6d, 0xf2, 0x4e, 0x32, + 0xd6, 0xaf, 0x0d, 0x45, 0x0d, 0x55, 0x0f, 0xb3, 0x34, 0x2d, 0x61, 0xe8, 0x31, 0xb2, 0x55, 0x0b, + 0x7e, 0x27, 0x2a, 0x6c, 0x0d, 0x78, 0xdb, 0x5b, 0x14, 0x57, 0x4d, 0xa9, 0x03, 0xcf, 0x66, 0xa7, + 0x2a, 0xbd, 0x29, 0x50, 0x20, 0xd5, 0x4e, 0xc6, 0x46, 0xb5, 0xb3, 0x27, 0x5d, 0x35, 0xe5, 0x4e, + 0x49, 0xbf, 0x3d, 0xa5, 0x1d, 0xbe, 0x00, 0x33, 0x40, 0x3f, 0x79, 0x0b, 0x52, 0xd2, 0xd3, 0xd7, + 0x52, 0x57, 0xa7, 0x1c, 0x5a, 0xfc, 0xbc, 0x96, 0x38, 0x50, 0x21, 0xd3, 0xfc, 0xfc, 0x6f, 0xd1, + 0x32, 0x5c, 0x9a, 0xa5, 0x31, 0x3f, 0x83, 0x8b, 0xd9, 0xa1, 0x4a, 0x0d, 0x42, 0x56, 0x92, 0x28, + 0x69, 0x93, 0x09, 0xad, 0xe7, 0x32, 0x55, 0x8d, 0x41, 0x1a, 0x33, 0x35, 0x7d, 0xfd, 0xc2, 0xa1, + 0xf4, 0xe4, 0x41, 0xd2, 0x49, 0x30, 0x4d, 0x0d, 0x61, 0xe3, 0x93, 0xb8, 0x16, 0x49, 0x94, 0x9b, + 0x25, 0x67, 0x91, 0xe4, 0x7d, 0x68, 0xb9, 0x2f, 0xe4, 0x0c, 0xb4, 0xb6, 0x52, 0x95, 0xb9, 0xb4, + 0x0c, 0xaf, 0x98, 0x9f, 0xaa, 0xd2, 0x8f, 0x85, 0xec, 0x34, 0x4b, 0x9f, 0x89, 0x6b, 0x3d, 0xd7, + 0xb4, 0x9e, 0x1b, 0x50, 0x76, 0x25, 0xb3, 0x28, 0x68, 0x49, 0xd9, 0x79, 0xf9, 0x8d, 0xa8, 0xd8, + 0xab, 0x84, 0x3c, 0x41, 0x1f, 0xb6, 0x95, 0x94, 0x3e, 0x8b, 0xdb, 0xf9, 0x03, 0x55, 0x7a, 0x46, + 0x60, 0xe1, 0xa6, 0x16, 0x9d, 0x9a, 0x30, 0x76, 0x46, 0x7d, 0x70, 0x30, 0x3d, 0x73, 0x5d, 0x66, + 0x11, 0xf8, 0xcb, 0x1c, 0x5a, 0x4e, 0x66, 0x95, 0xd3, 0x1d, 0x56, 0x9a, 0x02, 0xc1, 0xfd, 0xa5, + 0x3f, 0xc0, 0xc4, 0x7e, 0xa3, 0x4a, 0xfb, 0x84, 0xec, 0x34, 0x51, 0xb1, 0x94, 0xa4, 0xde, 0xcf, + 0xb0, 0x72, 0x3f, 0x95, 0xbe, 0xd2, 0x69, 0xc8, 0x90, 0xf1, 0x01, 0x43, 0x57, 0xef, 0x3d, 0x48, + 0xad, 0x0f, 0xd0, 0x3a, 0xfd, 0xd4, 0xa4, 0xb1, 0x0c, 0xa6, 0xe2, 0x77, 0x23, 0x9d, 0xd0, 0xe3, + 0xe5, 0xbb, 0xda, 0x7d, 0x2d, 0x5e, 0x25, 0xb8, 0xd6, 0xd7, 0xda, 0x16, 0x08, 0x86, 0x95, 0x60, + 0x85, 0xc9, 0x08, 0x28, 0xae, 0x9c, 0x5d, 0x2e, 0x5f, 0x87, 0x8a, 0x7c, 0xa1, 0x9d, 0xa1, 0x3d, + 0xee, 0xa0, 0xe2, 0x2d, 0xfd, 0x21, 0xee, 0x54, 0xac, 0x74, 0x5a, 0x50, 0xf1, 0x19, 0xa6, 0x3b, + 0x6f, 0x24, 0xe3, 0x9f, 0xe5, 0x76, 0xa7, 0x5c, 0xe8, 0x0b, 0x35, 0x60, 0x64, 0x7e, 0x27, 0x42, + 0x86, 0xe4, 0x0a, 0xeb, 0xbc, 0xf4, 0x39, 0xdc, 0x62, 0x3c, 0x4a, 0x0c, 0x58, 0x5c, 0xc3, 0x4e, + 0x11, 0x63, 0x4f, 0x3e, 0x72, 0x59, 0x3f, 0x35, 0x69, 0x21, 0x40, 0xb2, 0xd6, 0x7b, 0x1a, 0x96, + 0x97, 0xcc, 0xe4, 0xe5, 0xaf, 0x70, 0x68, 0x19, 0x34, 0x90, 0xf6, 0xeb, 0xf3, 0xb8, 0x94, 0xdf, + 0xaa, 0xd2, 0x6f, 0x84, 0xac, 0x24, 0xd1, 0xa7, 0x4d, 0x7f, 0x94, 0xd5, 0x64, 0x93, 0xbf, 0xc5, + 0xcd, 0x6e, 0xc2, 0xec, 0x65, 0xfe, 0xfe, 0xb6, 0xca, 0x5f, 0xeb, 0x69, 0x09, 0xb4, 0x7b, 0xa1, + 0x82, 0x95, 0x54, 0x39, 0x4e, 0x7d, 0x12, 0x97, 0xb3, 0x8a, 0xe6, 0xff, 0x8e, 0x43, 0xcb, 0x30, + 0xb2, 0xe4, 0xf1, 0x04, 0xda, 0xfd, 0x61, 0x57, 0x4d, 0x69, 0x39, 0xae, 0xe8, 0xbf, 0xe0, 0x54, + 0x69, 0x9a, 0x13, 0xb2, 0x12, 0xc5, 0x4f, 0x89, 0x4c, 0x6e, 0x19, 0x29, 0xe2, 0x47, 0xd3, 0x37, + 0xaf, 0x68, 0x83, 0xb7, 0x5d, 0x35, 0xb6, 0x92, 0xee, 0x46, 0xba, 0xa0, 0xb6, 0xda, 0xe1, 0xf3, + 0xe9, 0x03, 0xd3, 0xc6, 0xe0, 0x62, 0x4e, 0x4d, 0xf1, 0xb5, 0x43, 0xe3, 0xe9, 0xc9, 0xce, 0xbb, + 0x91, 0xae, 0xd4, 0xd5, 0x4e, 0x90, 0xe7, 0xb5, 0x91, 0xb8, 0x7e, 0x7a, 0x32, 0x19, 0x3b, 0x92, + 0x9a, 0x3a, 0x9f, 0x8c, 0x45, 0x40, 0xec, 0xc7, 0xe5, 0x43, 0x0e, 0x43, 0xda, 0x8b, 0x58, 0xe2, + 0x3f, 0xa0, 0xa7, 0xe2, 0x5f, 0xa4, 0x26, 0x46, 0x29, 0xf7, 0x61, 0x69, 0xcb, 0x59, 0x95, 0xe7, + 0x65, 0xb4, 0xa4, 0x55, 0x09, 0x85, 0xdc, 0x4d, 0x4a, 0x69, 0x05, 0x6e, 0xe4, 0xab, 0xaa, 0xf4, + 0x23, 0xc1, 0x84, 0x99, 0xd6, 0x23, 0x10, 0x1c, 0xb4, 0x44, 0x97, 0x16, 0x8b, 0x19, 0xab, 0x7e, + 0xb8, 0x5b, 0xbb, 0x74, 0x23, 0x7d, 0xf3, 0xb2, 0x36, 0x70, 0x5e, 0x3b, 0x73, 0x41, 0xbb, 0x71, + 0x3c, 0x75, 0x29, 0x2e, 0x9b, 0x99, 0xf8, 0x2d, 0x68, 0x89, 0x2f, 0xb4, 0xd5, 0xb7, 0x4f, 0xf1, + 0x96, 0x0a, 0x78, 0x62, 0x8a, 0xaa, 0xb4, 0x56, 0x30, 0x61, 0xe2, 0x0f, 0x0c, 0x56, 0x32, 0x71, + 0x3d, 0x77, 0x59, 0xe8, 0xb7, 0x6f, 0x67, 0x0e, 0x10, 0x9e, 0x2c, 0x9b, 0xe8, 0xfc, 0x2e, 0x64, + 0x9a, 0x57, 0x5d, 0xee, 0x56, 0x39, 0xd0, 0xa2, 0x94, 0xbe, 0x80, 0x2b, 0xba, 0x41, 0x95, 0x5e, + 0x11, 0xb2, 0x92, 0xc4, 0x1f, 0xba, 0xf7, 0x86, 0x52, 0xc3, 0xdd, 0x3e, 0x77, 0xab, 0x23, 0x18, + 0x68, 0x51, 0x2a, 0x1d, 0x64, 0x62, 0xe0, 0x3d, 0x48, 0x69, 0x26, 0x2a, 0x99, 0x9c, 0x95, 0x6d, + 0xd5, 0x6b, 0xa8, 0x98, 0x31, 0x49, 0xf0, 0x2b, 0xd0, 0x82, 0x66, 0x65, 0x3f, 0x98, 0x42, 0x65, + 0xe3, 0x27, 0xff, 0x08, 0x5a, 0xd4, 0xe1, 0x6e, 0x69, 0x27, 0xc6, 0x4b, 0x19, 0x3e, 0x36, 0x14, + 0xbc, 0xca, 0xad, 0x7a, 0x17, 0x2d, 0xb3, 0xab, 0xfc, 0x79, 0x72, 0xaf, 0x67, 0x73, 0xe7, 0x91, + 0x3d, 0xab, 0x37, 0x6f, 0x6b, 0x0b, 0xd5, 0xb7, 0xb4, 0x37, 0xf9, 0xfc, 0x2c, 0xe9, 0xf7, 0xd1, + 0x8a, 0x6c, 0x3d, 0xfa, 0xbb, 0x23, 0xbe, 0x0d, 0x15, 0x33, 0x4a, 0x59, 0x1e, 0xba, 0x82, 0x9d, + 0xee, 0x23, 0xf9, 0x04, 0x66, 0x96, 0xe0, 0x8f, 0xd1, 0x32, 0xfb, 0xb6, 0xfb, 0x20, 0xdd, 0xb8, + 0xe1, 0x0d, 0x55, 0xda, 0x80, 0x5e, 0x15, 0x4c, 0x9b, 0xb4, 0x58, 0x05, 0x46, 0x58, 0x56, 0x22, + 0x04, 0x0b, 0x6d, 0x32, 0x3e, 0x00, 0x9a, 0x28, 0x3b, 0x33, 0xcb, 0xfe, 0xa7, 0xe5, 0x68, 0xa1, + 0x51, 0x21, 0xfe, 0x55, 0xb4, 0xd8, 0x90, 0x93, 0xa9, 0x21, 0xdb, 0xa1, 0x4a, 0x4f, 0x09, 0x04, + 0x24, 0x3e, 0x0c, 0xfb, 0x66, 0x32, 0x7e, 0xd4, 0x14, 0x36, 0x5c, 0x35, 0x32, 0x49, 0xe4, 0x5f, + 0x43, 0x4b, 0x7c, 0x7e, 0xbf, 0x12, 0x74, 0xd5, 0x13, 0x0b, 0x35, 0xb6, 0xbe, 0x9a, 0x30, 0xf1, + 0x21, 0xc8, 0x8b, 0x6d, 0x34, 0x47, 0x93, 0xb1, 0x29, 0x57, 0xbd, 0x6c, 0xa6, 0xf1, 0xef, 0xa3, + 0xa5, 0x26, 0x41, 0x2c, 0x99, 0x82, 0x59, 0xfa, 0x15, 0x55, 0x7a, 0x49, 0xb0, 0x25, 0x88, 0x3f, + 0xd0, 0x47, 0xe2, 0xda, 0xb9, 0x23, 0xc4, 0x52, 0x35, 0x7e, 0x32, 0x75, 0xed, 0x4a, 0x32, 0xf6, + 0x39, 0x95, 0xcf, 0x09, 0x43, 0xb2, 0xe5, 0xe1, 0x5f, 0x40, 0x0b, 0x9c, 0xf5, 0xdb, 0xb1, 0x71, + 0xb9, 0x04, 0x8c, 0x65, 0xc6, 0xb7, 0xb8, 0x1c, 0xea, 0xe3, 0xac, 0xdf, 0x4e, 0x44, 0x25, 0x03, + 0xca, 0xaf, 0x41, 0x0b, 0x5a, 0x95, 0x56, 0x6c, 0x3e, 0x2e, 0xa9, 0x7e, 0x52, 0x95, 0x1e, 0x17, + 0x8c, 0x6f, 0x91, 0xa7, 0x95, 0xd7, 0xc6, 0x4f, 0x99, 0xf8, 0xad, 0x4a, 0x2b, 0xff, 0x2a, 0x5a, + 0xb0, 0xa9, 0x7e, 0x3b, 0x36, 0x1b, 0x97, 0x54, 0x3f, 0xa7, 0x4a, 0xcf, 0x0a, 0xc6, 0xb7, 0xf8, + 0x24, 0xe0, 0x6f, 0x32, 0x89, 0xb3, 0x35, 0x5c, 0x27, 0x1b, 0x28, 0xfc, 0xa0, 0xa5, 0x80, 0x80, + 0x89, 0x78, 0xaf, 0x2a, 0x85, 0xa9, 0xfe, 0xf1, 0x21, 0x10, 0x80, 0xd1, 0x31, 0x69, 0xf4, 0xea, + 0x17, 0xee, 0xe8, 0xfd, 0x13, 0x5a, 0xc2, 0x90, 0x86, 0x92, 0x89, 0x58, 0x2a, 0xf1, 0x89, 0x36, + 0x31, 0x9c, 0xbc, 0xd3, 0x97, 0x1a, 0xee, 0x9e, 0x4d, 0xf4, 0x59, 0xfa, 0x48, 0xa5, 0x03, 0xab, + 0x14, 0xb5, 0xf8, 0xa7, 0xa9, 0x70, 0x54, 0x3a, 0x36, 0x4a, 0xae, 0x2d, 0xb5, 0x35, 0x95, 0x8e, + 0x39, 0xb4, 0x0b, 0x09, 0x2d, 0xfe, 0x75, 0xc0, 0xaf, 0x50, 0x43, 0x73, 0x85, 0x2a, 0x3d, 0x27, + 0x2c, 0x34, 0x40, 0xe2, 0x6a, 0xd2, 0xfe, 0x41, 0x43, 0xc9, 0xd4, 0xa2, 0xf1, 0xec, 0x1e, 0x27, + 0x19, 0xf9, 0x3f, 0x47, 0xc5, 0xc6, 0x6c, 0xd8, 0x14, 0x0c, 0xb4, 0xb7, 0xb9, 0x6a, 0x88, 0xd1, + 0xf8, 0x3d, 0x55, 0x7a, 0x47, 0x60, 0xe1, 0xe2, 0x5b, 0x44, 0xfe, 0xea, 0x8b, 0x68, 0x37, 0xce, + 0xa5, 0x86, 0xbb, 0xeb, 0xcc, 0x34, 0x87, 0xab, 0xa6, 0xd2, 0xc1, 0x52, 0x2e, 0x4f, 0x4e, 0xf5, + 0x38, 0x25, 0x52, 0xfa, 0xb4, 0xaa, 0xdd, 0x38, 0x97, 0x8c, 0x0f, 0x50, 0x52, 0x15, 0x32, 0x4b, + 0x96, 0xdf, 0xc8, 0x9e, 0xc3, 0x80, 0x1d, 0xb9, 0x5c, 0x95, 0x7e, 0xc8, 0x9e, 0xc3, 0x94, 0x66, + 0x95, 0x4c, 0x45, 0x2d, 0xf6, 0xbc, 0x65, 0x3d, 0x5a, 0xb0, 0xa3, 0xde, 0x89, 0xad, 0xc6, 0x64, + 0x16, 0x1b, 0xdf, 0xe2, 0xca, 0xac, 0xbc, 0x3b, 0xea, 0x9d, 0x0e, 0x57, 0x8d, 0x6c, 0xa4, 0xf1, + 0xef, 0xd3, 0x93, 0x87, 0xa5, 0x96, 0x1c, 0x6a, 0x9e, 0x3c, 0xbc, 0xcc, 0x66, 0x84, 0xf3, 0x07, + 0x4b, 0x6f, 0xbf, 0x33, 0xa3, 0xdd, 0x3e, 0x37, 0x9b, 0x88, 0xea, 0xb7, 0x6f, 0x68, 0x23, 0x5f, + 0x18, 0x1d, 0x7b, 0xf8, 0x82, 0x76, 0xfb, 0x5c, 0x6a, 0xbc, 0x8f, 0x9e, 0x4e, 0xd4, 0xa1, 0xc5, + 0x6d, 0xee, 0x50, 0x68, 0xaf, 0xb7, 0xb4, 0xc4, 0x3a, 0x9e, 0x20, 0x20, 0xb1, 0x42, 0x9b, 0x38, + 0x67, 0x90, 0x32, 0x2d, 0x91, 0xda, 0xe4, 0xc1, 0xd4, 0x85, 0xce, 0x4a, 0x07, 0xb1, 0x5d, 0x80, + 0x51, 0xee, 0xea, 0xc7, 0xda, 0xe4, 0x41, 0x99, 0x64, 0xe1, 0x3f, 0x40, 0x78, 0x54, 0xb1, 0x2d, + 0xb8, 0xa4, 0xda, 0xa5, 0x4a, 0x1b, 0x05, 0x32, 0x80, 0xe2, 0x8f, 0xb3, 0x06, 0x1a, 0x9f, 0x14, + 0xb0, 0x03, 0xf2, 0xba, 0xc3, 0x32, 0xa8, 0xe2, 0xbd, 0x18, 0x34, 0xac, 0x64, 0x7c, 0xc0, 0x29, + 0xc9, 0x98, 0x2c, 0x2f, 0xa1, 0x42, 0xaf, 0xd2, 0xe1, 0x33, 0x98, 0x03, 0x18, 0x8b, 0xab, 0x7f, + 0xa8, 0x4a, 0x65, 0x02, 0x05, 0x8a, 0x8f, 0x3a, 0x25, 0x87, 0xb9, 0x44, 0xd3, 0x13, 0x5f, 0x69, + 0x97, 0x0e, 0xb9, 0x6a, 0xb4, 0xc1, 0xdb, 0x32, 0xc5, 0xe0, 0x15, 0xb4, 0xcc, 0x18, 0x58, 0x53, + 0x79, 0x72, 0xd5, 0x80, 0x55, 0xb9, 0xda, 0xe0, 0x72, 0x42, 0x56, 0x92, 0x58, 0x4e, 0xea, 0x6c, + 0x8a, 0x0f, 0xa4, 0xb7, 0xb1, 0x1a, 0x44, 0xe6, 0x93, 0x29, 0xa9, 0xd8, 0x73, 0xf2, 0x1e, 0x54, + 0x88, 0x21, 0x06, 0xcf, 0x79, 0x08, 0x17, 0xb0, 0x49, 0x95, 0x6a, 0x04, 0x0a, 0x14, 0x5f, 0x25, + 0xcb, 0x10, 0x2b, 0xc1, 0xa6, 0xac, 0xa4, 0x45, 0x7b, 0xb4, 0xa1, 0xcf, 0x9c, 0x3b, 0xb6, 0xae, + 0x75, 0xd5, 0x38, 0x19, 0xf2, 0x54, 0xe4, 0x74, 0xee, 0xd8, 0x2a, 0x53, 0x1a, 0x7c, 0x23, 0x14, + 0x82, 0x8f, 0xee, 0x78, 0x4b, 0x44, 0xa0, 0x40, 0xb1, 0x82, 0xd4, 0x1f, 0x9f, 0xdb, 0x55, 0x3a, + 0x40, 0xf4, 0xd3, 0x86, 0xba, 0x93, 0xb1, 0x4f, 0x0d, 0xe9, 0x83, 0x49, 0x94, 0x69, 0x26, 0xfe, + 0x27, 0xa8, 0x88, 0x70, 0xcf, 0x8e, 0x97, 0x89, 0x21, 0x15, 0xb3, 0x6a, 0x0b, 0x2a, 0xae, 0x80, + 0xac, 0xbe, 0xb6, 0x8e, 0x97, 0xb5, 0x91, 0xeb, 0xda, 0xd9, 0x88, 0x6c, 0x25, 0xf2, 0x1b, 0x51, + 0xa1, 0x31, 0x58, 0xb8, 0x56, 0x8f, 0x58, 0x47, 0x54, 0x14, 0x28, 0x3e, 0x61, 0x4d, 0xda, 0x91, + 0x31, 0x3a, 0x1f, 0xcc, 0x7a, 0x98, 0x68, 0xbc, 0x82, 0x16, 0x87, 0xdd, 0xa1, 0x66, 0x57, 0x4d, + 0xe9, 0x4a, 0x4c, 0x65, 0xab, 0x2a, 0xfd, 0x4c, 0x20, 0x20, 0xf1, 0x4d, 0x52, 0x79, 0xf3, 0x64, + 0x28, 0x39, 0x35, 0x45, 0x4e, 0xa6, 0x92, 0x53, 0x3d, 0x86, 0x2e, 0x7e, 0xec, 0x8b, 0xf4, 0xe4, + 0x6d, 0x30, 0xe7, 0x62, 0x43, 0xfe, 0x74, 0x3a, 0xf6, 0x29, 0x29, 0x17, 0x1b, 0x7f, 0x64, 0x42, + 0x89, 0xdf, 0x8e, 0x96, 0xee, 0x76, 0x1b, 0x9a, 0xa3, 0xac, 0xb8, 0x43, 0x01, 0x3f, 0xb6, 0x61, + 0x92, 0x53, 0x22, 0x5b, 0x82, 0xb8, 0x3a, 0x19, 0x3b, 0x9c, 0x8c, 0x1d, 0xd1, 0xcf, 0xdd, 0x22, + 0x65, 0x63, 0x39, 0x4b, 0x3f, 0x79, 0x0b, 0x44, 0x2d, 0xd9, 0x86, 0xcd, 0xff, 0x16, 0x21, 0xcf, + 0x1e, 0x77, 0x90, 0x58, 0x8d, 0x1f, 0xc3, 0x44, 0x7f, 0xa9, 0x4a, 0xef, 0x0b, 0x0c, 0x58, 0xdc, + 0x0a, 0x9b, 0x4e, 0x7a, 0x62, 0x34, 0x7d, 0xd3, 0x98, 0x56, 0x60, 0x0f, 0xa9, 0xdf, 0xd6, 0xd0, + 0x58, 0x2f, 0xb9, 0x6a, 0x76, 0x56, 0xbf, 0xbb, 0xf3, 0xad, 0x6d, 0xdb, 0x65, 0x3d, 0xda, 0xa7, + 0x5d, 0x1f, 0x34, 0x0a, 0x1a, 0x1a, 0x48, 0x4e, 0x9d, 0x4a, 0xdf, 0xbc, 0x63, 0x20, 0xc9, 0xb5, + 0x06, 0x8e, 0x31, 0x63, 0xee, 0xdc, 0xd4, 0xa2, 0x3d, 0xfa, 0x48, 0xaf, 0xcc, 0x90, 0xde, 0xf0, + 0xae, 0x2a, 0xed, 0x40, 0x8d, 0x02, 0xde, 0x7a, 0xc5, 0x2d, 0xe4, 0xdc, 0x14, 0xf6, 0xd8, 0x7c, + 0x5b, 0x36, 0xbb, 0x29, 0x18, 0x92, 0xeb, 0xc5, 0xcf, 0x08, 0xd3, 0x4a, 0xc6, 0x30, 0x53, 0x6c, + 0x32, 0x18, 0x21, 0x2c, 0xc8, 0xb2, 0x7f, 0xbb, 0x0c, 0x2d, 0xb3, 0x9b, 0x74, 0xf9, 0x1d, 0x54, + 0x33, 0x73, 0xd5, 0x77, 0xbc, 0xe4, 0x74, 0xd5, 0xc8, 0x64, 0x93, 0xaf, 0x54, 0xa5, 0x0a, 0x21, + 0x3b, 0x4d, 0x7c, 0x94, 0x88, 0x97, 0x91, 0x29, 0x03, 0x04, 0x53, 0x48, 0xbf, 0x71, 0x41, 0xce, + 0x46, 0xe4, 0x3d, 0x68, 0x79, 0x48, 0x09, 0xe2, 0xa5, 0x6b, 0xd2, 0x2d, 0xb0, 0x4c, 0xfb, 0xd9, + 0x69, 0xe2, 0xb3, 0x40, 0x97, 0x80, 0x89, 0x35, 0x76, 0xb8, 0x3b, 0xab, 0x90, 0xac, 0x5c, 0xbc, + 0x8c, 0x4a, 0x5a, 0xdd, 0xfb, 0x8c, 0x8e, 0xaa, 0x0f, 0x78, 0xeb, 0xda, 0x5b, 0xb1, 0x90, 0x50, + 0x02, 0x55, 0xb7, 0xa7, 0x98, 0x4c, 0x3e, 0x19, 0x3b, 0xac, 0x8f, 0x44, 0xb4, 0x4b, 0x57, 0xeb, + 0x03, 0x5e, 0xfd, 0xf8, 0xf5, 0xcc, 0xa1, 0x41, 0xd9, 0x8e, 0xc8, 0xef, 0xc0, 0x34, 0x1b, 0xa0, + 0x24, 0x83, 0x26, 0x08, 0x09, 0xeb, 0x54, 0xa9, 0x4a, 0xb0, 0xa7, 0x88, 0x4f, 0x92, 0xce, 0xc0, + 0x04, 0x53, 0xc3, 0xdd, 0x24, 0x89, 0xa1, 0x6b, 0x21, 0xf3, 0xfd, 0x1c, 0x5a, 0xaa, 0xf8, 0xdd, + 0xbb, 0x5a, 0x94, 0x1d, 0xf5, 0x4e, 0xa7, 0xdf, 0x87, 0xe5, 0x89, 0xc2, 0x6a, 0x9f, 0x2a, 0xed, + 0x16, 0x6c, 0x09, 0xe2, 0x0e, 0xf6, 0x0b, 0x04, 0x79, 0x2d, 0x11, 0xd1, 0x86, 0x26, 0x77, 0xd4, + 0x3b, 0xab, 0x9c, 0x75, 0x2e, 0x30, 0xc2, 0x19, 0x93, 0x2e, 0x31, 0x58, 0x9e, 0x9c, 0x9e, 0x49, + 0x1f, 0x98, 0xee, 0x68, 0xf3, 0x54, 0x79, 0xfc, 0x3e, 0x80, 0x19, 0x2a, 0x9c, 0x7e, 0xe2, 0xba, + 0x76, 0xf1, 0x9c, 0xfe, 0x65, 0x67, 0x6a, 0xec, 0x08, 0x64, 0xae, 0x90, 0x6d, 0xa5, 0xf0, 0x8a, + 0x51, 0x1d, 0x5f, 0x43, 0xfb, 0x2e, 0xbf, 0x12, 0x76, 0xd5, 0x84, 0x4a, 0x17, 0x3b, 0x16, 0x94, + 0x17, 0x55, 0x4b, 0xaa, 0xf4, 0x13, 0xc1, 0x96, 0x20, 0xae, 0xc9, 0x53, 0x6c, 0x32, 0x76, 0xa4, + 0x12, 0x44, 0x8e, 0xd4, 0xf4, 0x51, 0xad, 0x7f, 0xd4, 0x50, 0x5e, 0xc6, 0x87, 0x52, 0xd3, 0x47, + 0x5d, 0x35, 0xb2, 0x2d, 0x37, 0x1f, 0xe1, 0xd0, 0xd2, 0x10, 0xfe, 0x6a, 0x08, 0xb4, 0x07, 0x3d, + 0x0a, 0x16, 0x6c, 0x8a, 0xc5, 0x27, 0xb3, 0x25, 0xdf, 0x06, 0x06, 0xa7, 0xfa, 0x27, 0xaa, 0xf4, + 0xba, 0x60, 0xcb, 0x26, 0xbe, 0x00, 0x7d, 0x4d, 0xea, 0x42, 0x6b, 0x61, 0x30, 0x10, 0x30, 0xe7, + 0xe1, 0xe2, 0xf5, 0x03, 0x3d, 0xda, 0xc1, 0x2f, 0x65, 0x5b, 0x56, 0xa3, 0x0a, 0xcb, 0x7c, 0xa1, + 0x86, 0xb0, 0x3b, 0xec, 0xf3, 0xb8, 0xda, 0xb6, 0x06, 0xbc, 0x0a, 0x16, 0x66, 0x0a, 0xab, 0x7f, + 0xae, 0x4a, 0xdb, 0x85, 0xac, 0x24, 0xd1, 0x99, 0xa7, 0x20, 0xaa, 0xf3, 0x67, 0xce, 0x9e, 0xd3, + 0xce, 0xc4, 0xb5, 0x89, 0x61, 0x57, 0x3d, 0x3d, 0x0e, 0xde, 0xe0, 0xd8, 0x28, 0x6d, 0x69, 0xa8, + 0x75, 0x30, 0x69, 0x72, 0x16, 0x51, 0xfe, 0x9f, 0xa3, 0x87, 0x3d, 0x2d, 0x6e, 0x5f, 0x6b, 0xed, + 0xbe, 0x36, 0x5f, 0x50, 0xf1, 0x36, 0x28, 0x9e, 0x80, 0xdf, 0x1b, 0xc2, 0xb2, 0x50, 0x49, 0xf5, + 0x66, 0x55, 0x7a, 0x4b, 0xc8, 0x97, 0x2e, 0xae, 0xbf, 0x8f, 0xae, 0x77, 0xd5, 0x6b, 0x67, 0xce, + 0xe9, 0xc7, 0x6e, 0xe9, 0x27, 0x6f, 0x65, 0x4e, 0xde, 0x94, 0xf3, 0xd1, 0xe1, 0x9b, 0xd1, 0x8a, + 0xd6, 0xf6, 0x96, 0xb0, 0x8f, 0x48, 0x36, 0x78, 0x35, 0x22, 0x3c, 0xde, 0xd8, 0x1a, 0x91, 0x93, + 0x28, 0x96, 0xb3, 0x46, 0x3c, 0x03, 0x52, 0x09, 0x9a, 0x2f, 0x56, 0x74, 0xc9, 0xf9, 0x28, 0x06, + 0xc8, 0x39, 0x79, 0xf9, 0x76, 0x54, 0xe8, 0xf1, 0x79, 0x83, 0x0d, 0x61, 0xa5, 0x0d, 0x8b, 0x4b, + 0x25, 0xe0, 0x9d, 0x40, 0x81, 0xe2, 0xcf, 0xc0, 0x62, 0xa9, 0xf5, 0x1e, 0xcc, 0xf4, 0xf4, 0x1b, + 0x50, 0x7d, 0xfc, 0x72, 0xe6, 0xf8, 0x0c, 0x98, 0xea, 0xcb, 0xe9, 0x8e, 0x99, 0x3a, 0x76, 0x3e, + 0x19, 0xbf, 0x0a, 0x8e, 0x03, 0x2f, 0xad, 0x7b, 0xed, 0xe5, 0xbb, 0x91, 0x4e, 0xad, 0xe7, 0x56, + 0x72, 0xea, 0x04, 0x80, 0xc4, 0x75, 0x2f, 0xbd, 0x5a, 0x21, 0x53, 0xaa, 0xfc, 0xef, 0x50, 0x89, + 0xc9, 0x83, 0xda, 0x98, 0x13, 0x78, 0x5c, 0xb6, 0x3d, 0x45, 0xac, 0x25, 0x1a, 0x90, 0xc9, 0x65, + 0x58, 0xab, 0x76, 0xb9, 0xaf, 0xad, 0xe3, 0xa5, 0xb5, 0xc6, 0xfe, 0xb8, 0xd6, 0xdb, 0xee, 0x6e, + 0xa9, 0xa8, 0x4c, 0x9d, 0x99, 0xd0, 0xfa, 0xfa, 0x69, 0xad, 0x8c, 0x64, 0xc0, 0x94, 0xed, 0x54, + 0xed, 0x9c, 0xf4, 0x65, 0xdc, 0xc7, 0x25, 0x79, 0x39, 0xe9, 0xcb, 0xb9, 0x9c, 0xf4, 0xe5, 0xbc, + 0x9c, 0xf4, 0xe5, 0x5c, 0x4e, 0x0a, 0x74, 0x97, 0xe5, 0xe5, 0xa4, 0x2f, 0xdf, 0x83, 0x93, 0xbe, + 0x9c, 0x97, 0x93, 0x42, 0x21, 0x01, 0xaa, 0x78, 0x80, 0x74, 0xf6, 0x8e, 0x2a, 0x35, 0x52, 0xc5, + 0xe3, 0x67, 0x36, 0xe3, 0x3f, 0xde, 0x69, 0x4c, 0xb9, 0xc7, 0x58, 0x19, 0x83, 0xa7, 0xf4, 0x33, + 0x37, 0x49, 0xe2, 0x54, 0x77, 0x72, 0xea, 0x56, 0x7a, 0xe6, 0x50, 0x6a, 0xec, 0x48, 0x32, 0x36, + 0x0e, 0x9b, 0x17, 0x9b, 0x8f, 0x2a, 0x16, 0xff, 0x8a, 0xa3, 0x07, 0x0f, 0x78, 0x45, 0x82, 0x2c, + 0x77, 0x91, 0x53, 0xa5, 0x73, 0x9c, 0xc0, 0xa6, 0x88, 0x03, 0xc4, 0x14, 0xb4, 0xa3, 0xcd, 0xe3, + 0xf4, 0xfb, 0x6c, 0xcc, 0x0f, 0xc6, 0x46, 0x3f, 0x36, 0xa9, 0x47, 0x3b, 0xc1, 0x1c, 0x07, 0x6b, + 0x02, 0x92, 0xc3, 0xcd, 0x4a, 0x55, 0x30, 0xd0, 0x1e, 0x56, 0xaa, 0x14, 0xbf, 0x4f, 0x53, 0xa3, + 0xe0, 0xcc, 0x91, 0x8d, 0xe1, 0xf5, 0x05, 0x15, 0x4f, 0xd8, 0x40, 0xa1, 0x06, 0x42, 0xcc, 0x44, + 0x0c, 0x81, 0xe1, 0xd4, 0x64, 0x2e, 0xd5, 0x0a, 0x99, 0xad, 0x5d, 0xd9, 0x7f, 0xe1, 0xd0, 0x52, + 0x96, 0x77, 0xf1, 0xef, 0xa2, 0x05, 0x7e, 0x65, 0x6f, 0x29, 0x87, 0x8d, 0xe9, 0x8f, 0xe7, 0x1e, + 0xa8, 0xee, 0x05, 0x6c, 0x98, 0x15, 0x06, 0xaa, 0x58, 0x96, 0x7f, 0x95, 0x83, 0x20, 0x04, 0x9c, + 0x4c, 0x36, 0x10, 0xf9, 0x76, 0xb4, 0x44, 0xd9, 0xe7, 0x0b, 0x85, 0x15, 0x2f, 0xb1, 0x1f, 0x38, + 0xb2, 0xc9, 0xd7, 0x42, 0x32, 0x65, 0xbf, 0x30, 0x47, 0xcc, 0x5c, 0xe2, 0x0b, 0xf9, 0x4a, 0xb2, + 0x1f, 0x9a, 0xa4, 0x86, 0xbb, 0x49, 0x91, 0x66, 0xae, 0xb2, 0x3a, 0xb4, 0x22, 0x9b, 0x2e, 0xbf, + 0x01, 0x2d, 0xf0, 0x79, 0x43, 0xb8, 0x95, 0x44, 0xa1, 0x32, 0xbe, 0xc5, 0xd5, 0xa9, 0x33, 0x37, + 0xf5, 0x81, 0xcb, 0x59, 0x34, 0xcd, 0xad, 0x21, 0x24, 0x1b, 0x48, 0x65, 0x5f, 0x73, 0xa8, 0x88, + 0xf6, 0x03, 0x5f, 0x8f, 0x16, 0xb6, 0xba, 0x43, 0xcd, 0x58, 0xea, 0x28, 0xa9, 0xfe, 0xb1, 0x2a, + 0xbd, 0x26, 0x60, 0x80, 0xb8, 0x1e, 0x3a, 0x80, 0x6c, 0x6d, 0x50, 0x65, 0xa8, 0x1a, 0x58, 0xcb, + 0x48, 0x23, 0x06, 0x3e, 0x49, 0x5d, 0xe8, 0xd4, 0x2e, 0x5d, 0xd5, 0xae, 0x0f, 0xca, 0x38, 0xa3, + 0x41, 0x11, 0xab, 0x32, 0x20, 0x6f, 0x00, 0x45, 0xac, 0xb1, 0xce, 0x4b, 0x11, 0xf4, 0x2a, 0xd8, + 0x52, 0xa8, 0x68, 0x4b, 0xb4, 0x17, 0x17, 0x5a, 0xe4, 0x6b, 0x73, 0xfa, 0xc3, 0x44, 0xbe, 0x78, + 0x51, 0x95, 0xd6, 0x09, 0x00, 0x11, 0x9f, 0xbf, 0x47, 0x2d, 0x5d, 0xf5, 0xc9, 0xd8, 0xa7, 0xfa, + 0xf1, 0xeb, 0x32, 0xe0, 0x97, 0xfd, 0x6f, 0x45, 0xe8, 0xe1, 0x3c, 0xa7, 0xd7, 0xbc, 0x07, 0x15, + 0x6c, 0x6b, 0x20, 0xa2, 0x57, 0x83, 0x2a, 0xd5, 0x0b, 0x05, 0xdb, 0x1a, 0xcc, 0x85, 0x07, 0xdd, + 0xb9, 0xad, 0x01, 0xe4, 0xbf, 0xf2, 0xcc, 0xf1, 0x11, 0xed, 0xc0, 0xa0, 0xab, 0x66, 0x2d, 0x31, + 0xe8, 0xe3, 0x4f, 0x63, 0x41, 0x1a, 0x0a, 0x87, 0x7e, 0xf2, 0x16, 0xf1, 0x26, 0x04, 0x5f, 0x16, + 0x82, 0x5b, 0x21, 0x17, 0x6c, 0x6b, 0xe0, 0x25, 0xb4, 0xa4, 0x43, 0x09, 0x86, 0x0c, 0x95, 0x14, + 0x3a, 0xe7, 0x79, 0x55, 0xfa, 0x81, 0x60, 0xc2, 0xc4, 0xc7, 0x2d, 0x37, 0x0b, 0x8b, 0x37, 0xe2, + 0x23, 0x71, 0xd9, 0xc4, 0xe1, 0x8f, 0x17, 0x58, 0x7e, 0x4e, 0xee, 0xa6, 0x50, 0xe9, 0x02, 0x3c, + 0xcf, 0x5f, 0xba, 0x8f, 0x03, 0x7a, 0x13, 0x66, 0x64, 0x83, 0x23, 0xa4, 0x04, 0xa7, 0x4a, 0x31, + 0x4e, 0x60, 0xe9, 0x89, 0x63, 0xa6, 0x33, 0xc6, 0x99, 0x98, 0xd6, 0xf3, 0x45, 0xd8, 0xdd, 0x94, + 0x25, 0xf4, 0xb2, 0xae, 0x1a, 0xe0, 0xd1, 0x44, 0x8e, 0x89, 0xbe, 0x18, 0xd3, 0x7a, 0x2e, 0xaf, + 0xc1, 0x86, 0x82, 0x43, 0x9f, 0x82, 0x09, 0x04, 0x76, 0x14, 0xac, 0x8d, 0x81, 0x95, 0x84, 0x9a, + 0x6f, 0xb5, 0x89, 0x73, 0xa9, 0x81, 0xeb, 0xe0, 0xe3, 0xa5, 0x4d, 0x0c, 0x6b, 0xbd, 0xb7, 0xc2, + 0xee, 0xa6, 0x50, 0x39, 0xa8, 0xdf, 0x1b, 0x28, 0xbe, 0xe5, 0xfa, 0x06, 0x8e, 0x74, 0x90, 0x01, + 0x0a, 0xac, 0x90, 0xd9, 0x7a, 0xf3, 0x0d, 0xa8, 0x98, 0x74, 0x11, 0x56, 0x9f, 0x16, 0x5a, 0xba, + 0x08, 0x0b, 0x17, 0x9f, 0x9e, 0xb3, 0x8b, 0x4d, 0x17, 0x4d, 0x06, 0x9b, 0x1f, 0xe2, 0x50, 0x61, + 0x88, 0xac, 0x39, 0xe2, 0xbe, 0x18, 0x56, 0xa5, 0x5f, 0x09, 0x14, 0x28, 0x2a, 0xda, 0xf4, 0x47, + 0x99, 0x48, 0x9f, 0x7e, 0xe4, 0x13, 0xa7, 0xaf, 0xc5, 0xd7, 0xde, 0xea, 0xd8, 0x06, 0xe7, 0xad, + 0x64, 0x71, 0x60, 0xb7, 0x27, 0xfd, 0xe4, 0xad, 0xd9, 0x44, 0xb4, 0x71, 0x73, 0x6d, 0x32, 0x31, + 0x9c, 0x9c, 0x1a, 0x48, 0x4f, 0x5e, 0x86, 0x05, 0x09, 0x86, 0x72, 0x31, 0x19, 0xfb, 0xd4, 0x55, + 0x9f, 0x3a, 0x36, 0xa6, 0x9f, 0xbd, 0x0c, 0x26, 0x5d, 0x30, 0xc7, 0xa5, 0x6f, 0x9e, 0x4f, 0x4f, + 0x4f, 0x6b, 0x67, 0x0f, 0xa5, 0x47, 0x47, 0x65, 0x5a, 0x20, 0xff, 0x4b, 0xb4, 0x94, 0x34, 0x7b, + 0x8b, 0xd2, 0xa1, 0xb4, 0x10, 0xe7, 0x48, 0x6c, 0x37, 0xb6, 0x25, 0xd0, 0x13, 0xe3, 0xf1, 0xbe, + 0x54, 0xfc, 0xaa, 0x21, 0x2c, 0xe1, 0xe3, 0x3b, 0xd6, 0x53, 0x06, 0x9c, 0x6a, 0x64, 0x5b, 0x36, + 0xfe, 0x2c, 0x87, 0x1e, 0xf7, 0x85, 0xa4, 0xf6, 0x70, 0x60, 0x7b, 0x5b, 0x53, 0xd0, 0xed, 0x55, + 0x9c, 0x6c, 0x69, 0x4b, 0xb0, 0xdc, 0xb6, 0x53, 0x95, 0x7e, 0x21, 0xcc, 0x8d, 0x25, 0xfe, 0x94, + 0x15, 0x9a, 0x89, 0xb0, 0x31, 0x78, 0x2a, 0xd3, 0xd3, 0x7f, 0xbf, 0x55, 0x9a, 0x9b, 0x36, 0x7f, + 0x80, 0x43, 0x0b, 0xdd, 0x41, 0xc5, 0x8d, 0x45, 0xc8, 0x3c, 0x0c, 0xde, 0x89, 0x8f, 0x02, 0x82, + 0x8a, 0xbb, 0xba, 0x51, 0x95, 0xde, 0x16, 0x30, 0xae, 0xe8, 0x22, 0xd4, 0xa7, 0x6e, 0x6a, 0xf1, + 0x2b, 0x70, 0x98, 0xc1, 0xba, 0x9c, 0x96, 0x1b, 0xbd, 0xdf, 0x7b, 0x3b, 0x19, 0xeb, 0xd7, 0xa3, + 0x87, 0xb4, 0x89, 0xe1, 0x4a, 0x87, 0xd6, 0x7b, 0x9a, 0x5d, 0xc5, 0x14, 0xbf, 0x42, 0xc6, 0x04, + 0xf9, 0x5f, 0xa0, 0xc5, 0x70, 0x1e, 0x89, 0x45, 0xc8, 0x62, 0xf1, 0xa9, 0x39, 0xd6, 0xdf, 0x56, + 0x8c, 0x04, 0xb6, 0x16, 0x92, 0x43, 0x2c, 0x25, 0xc7, 0xc6, 0xf8, 0x7c, 0x13, 0xce, 0x3a, 0x4d, + 0xcf, 0x57, 0xc0, 0x58, 0xf5, 0x13, 0xb4, 0x22, 0x7b, 0xad, 0x3e, 0x88, 0xdd, 0xb9, 0xec, 0x6f, + 0x10, 0x5a, 0x99, 0xd7, 0xa3, 0x85, 0xff, 0x19, 0x5a, 0xe8, 0xaa, 0xdf, 0x01, 0x7c, 0xae, 0x10, + 0x6c, 0x56, 0x18, 0x20, 0xbe, 0xb0, 0x39, 0xcb, 0xc3, 0xcb, 0x80, 0x52, 0xaf, 0x95, 0x2c, 0xbf, + 0x4b, 0x9c, 0x85, 0xff, 0x35, 0x5a, 0xe1, 0x09, 0xf8, 0xc3, 0x6e, 0x9f, 0x5f, 0x09, 0xca, 0xed, + 0xfe, 0xb0, 0x8f, 0xba, 0x41, 0xd7, 0xa9, 0xd2, 0x66, 0x21, 0x27, 0x51, 0x7c, 0x85, 0x1c, 0x29, + 0xd9, 0x5d, 0x60, 0x80, 0x15, 0x80, 0x45, 0x2b, 0x13, 0xe9, 0xab, 0xc1, 0x6e, 0x26, 0x77, 0x23, + 0x9d, 0x4e, 0x33, 0xbb, 0x57, 0xce, 0x21, 0xc5, 0xcb, 0x68, 0x59, 0x10, 0x7e, 0xee, 0x20, 0xfc, + 0x74, 0x81, 0x65, 0x2f, 0xc9, 0x4a, 0x12, 0x57, 0x66, 0x95, 0x48, 0x58, 0x6a, 0x16, 0x1a, 0xff, + 0xaf, 0x0b, 0xc8, 0x61, 0xbc, 0x14, 0x6c, 0x0a, 0x95, 0x2e, 0x9c, 0x97, 0xaf, 0xda, 0xbb, 0x95, + 0x78, 0x06, 0x06, 0x4d, 0xbe, 0xfa, 0x0f, 0x9c, 0x2a, 0xfd, 0x9f, 0xe6, 0xd1, 0xbc, 0x01, 0x16, + 0xff, 0x0b, 0x07, 0x42, 0xbb, 0x36, 0xd4, 0x4d, 0x4e, 0xb7, 0x4d, 0x1e, 0x09, 0x07, 0x80, 0x46, + 0x1f, 0x5f, 0xec, 0xa6, 0x86, 0xe3, 0x66, 0x65, 0x7f, 0x32, 0x16, 0x37, 0x86, 0x44, 0xaa, 0x77, + 0x19, 0x3a, 0xac, 0x12, 0x9c, 0x4d, 0x44, 0x37, 0xc3, 0xb9, 0x5f, 0x38, 0x18, 0x68, 0x69, 0xc1, + 0x80, 0xda, 0xb0, 0xc7, 0x4b, 0xe0, 0x0d, 0x9e, 0x3d, 0x8a, 0x31, 0x77, 0x82, 0x77, 0x23, 0x5d, + 0x78, 0x22, 0x24, 0x63, 0x71, 0xab, 0xb0, 0x99, 0x33, 0x86, 0x1a, 0x3a, 0x34, 0x89, 0x17, 0x22, + 0x29, 0x4f, 0xbb, 0x34, 0x9c, 0x8c, 0x7d, 0x4a, 0xce, 0x1f, 0xef, 0x1c, 0xc9, 0x9c, 0xbc, 0x09, + 0x33, 0xfe, 0xf5, 0xcc, 0xc9, 0x9b, 0x99, 0xe1, 0x63, 0xd4, 0x18, 0x6a, 0x14, 0xb2, 0xc1, 0xe1, + 0x0f, 0x78, 0x95, 0x2a, 0xaf, 0x3b, 0xec, 0x36, 0xe4, 0xb5, 0x37, 0xd6, 0x1a, 0xbf, 0xd6, 0xee, + 0xf2, 0x84, 0xd6, 0xb6, 0xf8, 0x76, 0xad, 0x55, 0xc2, 0x1e, 0xef, 0xeb, 0xb2, 0xd5, 0x5a, 0xfe, + 0x3f, 0x73, 0x76, 0xa7, 0x16, 0xe0, 0x9c, 0xe6, 0x6e, 0xc3, 0xba, 0xb5, 0xd0, 0xdd, 0xc6, 0xe6, + 0xd7, 0xd2, 0xab, 0x45, 0x7b, 0xf4, 0x23, 0xd7, 0x36, 0xc9, 0xe5, 0x5a, 0xcf, 0x98, 0x76, 0x23, + 0x92, 0xbe, 0x3d, 0x99, 0x3a, 0x76, 0xa3, 0x42, 0x53, 0xa3, 0x44, 0x7e, 0x4a, 0xc6, 0x2e, 0xa5, + 0xae, 0xf6, 0x83, 0xfc, 0xc4, 0x4e, 0xcf, 0x4d, 0xf2, 0x9a, 0xe4, 0x9d, 0xf3, 0x20, 0x8f, 0x02, + 0x3f, 0x26, 0xec, 0xd8, 0x44, 0xed, 0x2d, 0xdf, 0xdd, 0xe2, 0xf6, 0xfb, 0x95, 0x96, 0xbb, 0x91, + 0x4e, 0x8f, 0xbb, 0xc5, 0xe7, 0x09, 0xdc, 0x8d, 0x74, 0x82, 0x87, 0x03, 0x78, 0x12, 0xa6, 0x0f, + 0x7d, 0x9a, 0xba, 0x70, 0x8c, 0xe5, 0xde, 0xa9, 0xf1, 0xbe, 0x8a, 0xd9, 0x44, 0x9f, 0xdd, 0x7d, + 0xa6, 0x09, 0xf1, 0x5e, 0xa5, 0x45, 0x09, 0xfb, 0x02, 0xfe, 0xfa, 0x60, 0x20, 0xac, 0x78, 0xf0, + 0xf9, 0xfc, 0x62, 0xbc, 0xaa, 0xf0, 0x11, 0x49, 0x9e, 0x64, 0x71, 0x35, 0x61, 0x8b, 0xd8, 0x2b, + 0x8c, 0xac, 0x85, 0xde, 0x0b, 0x99, 0xd3, 0x97, 0x92, 0x33, 0x67, 0xf5, 0xc3, 0x97, 0xe4, 0x3c, + 0x79, 0xf8, 0x6d, 0x68, 0xa9, 0xbb, 0xdd, 0xeb, 0x0b, 0xd7, 0x62, 0xd3, 0x81, 0x97, 0x30, 0xe0, + 0x17, 0x54, 0xa9, 0x5c, 0xb0, 0x25, 0x88, 0xa5, 0x2c, 0xcf, 0xd5, 0x26, 0x46, 0xd3, 0x13, 0xa3, + 0xc4, 0x37, 0xc3, 0x86, 0xc7, 0x6f, 0x41, 0x85, 0x60, 0x86, 0x78, 0xcb, 0x4d, 0xb4, 0x70, 0x6c, + 0x59, 0xa1, 0x40, 0xf1, 0x19, 0x38, 0x9c, 0x67, 0x8f, 0x31, 0x81, 0x68, 0xe6, 0xb3, 0x53, 0x20, + 0x97, 0xc9, 0x14, 0x99, 0xff, 0x9c, 0x43, 0x2b, 0xcd, 0x13, 0xed, 0x80, 0xdf, 0xaf, 0x78, 0xc2, + 0x64, 0x49, 0x10, 0xbe, 0x38, 0x97, 0xa3, 0x9d, 0x1d, 0xb9, 0x7a, 0xbb, 0x2a, 0xc9, 0x42, 0x7e, + 0x42, 0xe2, 0x6b, 0xa4, 0xa7, 0xa0, 0x61, 0x07, 0x7b, 0xb4, 0x4b, 0x27, 0x8c, 0xdd, 0x71, 0xe2, + 0x2b, 0xd6, 0x45, 0x54, 0x9b, 0xe9, 0xc9, 0x8c, 0x4e, 0x81, 0xbc, 0xa1, 0x8f, 0x9b, 0xde, 0x65, + 0xf9, 0x29, 0xd2, 0x43, 0x3d, 0xba, 0x60, 0x1f, 0x88, 0xb9, 0xfe, 0x3f, 0x0b, 0x29, 0x73, 0xb5, + 0xd3, 0xe5, 0x3b, 0x39, 0x84, 0x7c, 0x21, 0x4c, 0xda, 0xaf, 0x84, 0x09, 0x8f, 0x75, 0xab, 0xd2, + 0x2f, 0x05, 0x06, 0x2c, 0xd6, 0x5b, 0xbf, 0x49, 0xcb, 0xac, 0x36, 0xcd, 0x64, 0x4e, 0x4e, 0x94, + 0x87, 0x83, 0xed, 0x0a, 0x0b, 0x70, 0x60, 0xa6, 0x4b, 0x84, 0x02, 0x0c, 0xb1, 0xb9, 0x54, 0x55, + 0xc8, 0x0c, 0x75, 0x7e, 0x17, 0x15, 0x58, 0xbc, 0x84, 0x19, 0x63, 0x9f, 0x51, 0x0a, 0x34, 0x99, + 0x70, 0xea, 0xb3, 0x49, 0x6d, 0xf0, 0x63, 0x30, 0x24, 0x33, 0xc6, 0xa3, 0x72, 0xda, 0xcd, 0xb4, + 0x30, 0xbd, 0x2f, 0x92, 0x19, 0x89, 0x54, 0x50, 0x11, 0xc4, 0xcb, 0x3b, 0xd1, 0x62, 0x6f, 0xa0, + 0xd5, 0xed, 0x33, 0x99, 0x2e, 0x9e, 0x8d, 0x04, 0x24, 0xae, 0x86, 0xbd, 0x14, 0x86, 0x02, 0x28, + 0xa4, 0x3e, 0x9b, 0x4c, 0x75, 0xdd, 0xd1, 0xce, 0x9f, 0xd7, 0x86, 0xfa, 0x65, 0x82, 0xc7, 0x0f, + 0x70, 0xa8, 0x24, 0xa4, 0x78, 0xda, 0x83, 0xbe, 0xf0, 0x7e, 0x7c, 0x56, 0x44, 0x44, 0xb6, 0x3d, + 0xaa, 0xa4, 0x08, 0xf6, 0x14, 0xb1, 0x91, 0x8a, 0x6a, 0xda, 0x44, 0x9f, 0xd6, 0x33, 0x96, 0x9a, + 0xea, 0xc6, 0xfb, 0xc5, 0xa7, 0xfa, 0x48, 0x1f, 0xdb, 0x53, 0x70, 0xbc, 0x02, 0x4e, 0xd6, 0x06, + 0x17, 0x81, 0xb6, 0x30, 0x08, 0xc6, 0x76, 0x33, 0xd3, 0x93, 0x4c, 0x5c, 0x30, 0x16, 0xb4, 0xbd, + 0x10, 0xfe, 0x3c, 0x87, 0x0a, 0x7d, 0xfe, 0x30, 0xde, 0x04, 0x31, 0xc7, 0x2a, 0x16, 0xcb, 0x72, + 0x1d, 0xc8, 0x20, 0x5d, 0xf2, 0x78, 0x94, 0x50, 0xc8, 0xb7, 0xab, 0x45, 0x01, 0x59, 0x88, 0x66, + 0x14, 0xeb, 0x41, 0x84, 0x6b, 0xd9, 0x65, 0xf1, 0xd9, 0x6f, 0x59, 0x4d, 0x4a, 0xbb, 0xec, 0x2f, + 0x8b, 0x51, 0x31, 0xe3, 0xd1, 0x69, 0x88, 0x6a, 0xcb, 0xc1, 0x2b, 0x73, 0x53, 0xd0, 0xdd, 0xb6, + 0xa7, 0xde, 0x1d, 0xde, 0x43, 0x14, 0x98, 0x90, 0x2a, 0xb5, 0x09, 0xd9, 0x69, 0xe2, 0x07, 0xc4, + 0xcd, 0xd3, 0xdc, 0x07, 0x93, 0xb1, 0x38, 0x71, 0xea, 0x34, 0x1d, 0x51, 0x89, 0x28, 0xcf, 0xf8, + 0x78, 0x82, 0xe7, 0x26, 0x4c, 0x37, 0xc0, 0xb1, 0x78, 0x3f, 0xb1, 0x61, 0xac, 0x05, 0x22, 0x72, + 0x76, 0x79, 0xfc, 0x07, 0xa8, 0xb8, 0x35, 0xd0, 0xee, 0x0f, 0x37, 0xba, 0x83, 0x4d, 0x4a, 0x98, + 0x4c, 0x47, 0xb8, 0xf0, 0xc1, 0xc0, 0xcd, 0xa3, 0x16, 0xe2, 0x53, 0x7a, 0xe6, 0x14, 0xf1, 0x3b, + 0xed, 0xba, 0xc3, 0x96, 0x8d, 0x4b, 0x95, 0xd9, 0x7c, 0xfc, 0x0c, 0x87, 0x4a, 0xda, 0xfd, 0x64, + 0xe3, 0x33, 0xf8, 0x11, 0xd1, 0x0e, 0x4f, 0x71, 0xaa, 0x74, 0x8c, 0x13, 0xec, 0x69, 0x62, 0x17, + 0x07, 0xd5, 0xd7, 0x0e, 0x5f, 0xd0, 0x7a, 0x2e, 0x5b, 0x27, 0x52, 0xc0, 0xe0, 0x06, 0xbb, 0x92, + 0xb1, 0x81, 0xf4, 0xf5, 0x03, 0x5a, 0xfc, 0x0a, 0xdd, 0x4f, 0xb4, 0x48, 0x62, 0x5d, 0x7a, 0x74, + 0x2c, 0x75, 0x29, 0x9e, 0x9d, 0x7c, 0xf6, 0x1c, 0x49, 0x30, 0xf4, 0x19, 0x26, 0xad, 0x1c, 0x88, + 0x53, 0x47, 0x36, 0x43, 0x17, 0xba, 0x72, 0x30, 0x75, 0xe6, 0x04, 0x4c, 0x86, 0x0a, 0xd9, 0x5e, + 0x27, 0xde, 0x47, 0xaf, 0x96, 0x80, 0xb4, 0xf1, 0xfc, 0x3c, 0xfe, 0xbb, 0xb6, 0xeb, 0x25, 0x58, + 0xe1, 0x37, 0xaf, 0x97, 0x90, 0x43, 0xa1, 0x4c, 0x64, 0x18, 0xd6, 0x08, 0x80, 0x89, 0x83, 0xb4, + 0x79, 0xdb, 0xa4, 0xd7, 0x26, 0xdc, 0x2c, 0xc2, 0xc5, 0x09, 0xf3, 0x15, 0x97, 0x25, 0xd2, 0x4c, + 0x73, 0xaa, 0x74, 0xc7, 0x26, 0xd2, 0x7c, 0xf6, 0x4d, 0x44, 0x1a, 0x43, 0xfb, 0x6a, 0x51, 0xc2, + 0xdf, 0xad, 0x84, 0xb2, 0x19, 0x88, 0x6e, 0x70, 0x04, 0x03, 0x81, 0x30, 0xc8, 0x27, 0x1d, 0xee, + 0x20, 0x16, 0x4d, 0x48, 0x79, 0x36, 0xe9, 0xe4, 0x3d, 0xb4, 0xd8, 0x10, 0x26, 0xc3, 0x60, 0x72, + 0x2f, 0x16, 0x57, 0x66, 0x77, 0x43, 0xa3, 0x91, 0x4a, 0xb8, 0x1a, 0x60, 0x8a, 0xab, 0xf5, 0x13, + 0xd7, 0xb3, 0xce, 0x74, 0x21, 0xc5, 0x94, 0xdc, 0xe1, 0x8b, 0x6f, 0x46, 0xc5, 0xe0, 0xe4, 0xbf, + 0x25, 0xd0, 0xe4, 0xf3, 0x13, 0x5b, 0xfb, 0x53, 0xf9, 0xfa, 0x19, 0x23, 0xb8, 0xfc, 0xbb, 0x03, + 0x20, 0xb3, 0xb2, 0xd9, 0xc4, 0x52, 0xf8, 0x20, 0xeb, 0xe2, 0xf4, 0x54, 0xe6, 0x34, 0xf1, 0x51, + 0x94, 0x59, 0x34, 0xa3, 0x30, 0x43, 0x20, 0x31, 0x0b, 0x2b, 0xbc, 0xff, 0xc2, 0x98, 0x6c, 0x62, + 0x29, 0x7c, 0xe4, 0x2b, 0x8c, 0x41, 0xe3, 0x3f, 0x44, 0x8f, 0x40, 0xd9, 0x0d, 0x2c, 0xd7, 0x0c, + 0x95, 0x16, 0x61, 0x0b, 0x14, 0xd6, 0x24, 0xf2, 0x22, 0x88, 0x4f, 0xb0, 0x8d, 0xa1, 0xfc, 0xdb, + 0xf4, 0xdf, 0xcf, 0x97, 0xc5, 0x28, 0x0b, 0x8a, 0xce, 0x2a, 0x0b, 0x31, 0x65, 0xe5, 0x43, 0x10, + 0x9f, 0x60, 0xdb, 0x92, 0x53, 0x56, 0xbe, 0x2c, 0xdf, 0xc6, 0x4b, 0xea, 0xdb, 0xc9, 0x11, 0x91, + 0x05, 0xa8, 0xc4, 0x36, 0x36, 0xbc, 0x07, 0x3d, 0xe4, 0xf3, 0xfb, 0xc2, 0x18, 0xb0, 0x3d, 0xa4, + 0x04, 0xfd, 0xee, 0x56, 0x85, 0x30, 0xf4, 0x1f, 0xa9, 0x92, 0x28, 0xe4, 0xa6, 0x8a, 0x4f, 0x65, + 0xcd, 0x4b, 0x68, 0x6a, 0x3b, 0x49, 0x96, 0x73, 0x73, 0xf0, 0x3d, 0x1c, 0x53, 0x4a, 0xbd, 0x3b, + 0x14, 0xda, 0x1b, 0x08, 0x9a, 0xa2, 0x02, 0x36, 0x3a, 0xe7, 0xa6, 0x8a, 0x3f, 0xcd, 0x5b, 0x4a, + 0x1b, 0x49, 0xae, 0x84, 0xfb, 0xa8, 0xd4, 0xd9, 0x3f, 0xf5, 0xc5, 0x54, 0x6a, 0xea, 0x3c, 0xeb, + 0x15, 0x2d, 0xe7, 0xd2, 0x34, 0x84, 0xa5, 0x25, 0xcd, 0xca, 0xfe, 0x7a, 0xb7, 0x2f, 0x88, 0xf9, + 0x76, 0xb1, 0xf8, 0x58, 0xf6, 0xcc, 0xdd, 0xac, 0xec, 0xc7, 0x73, 0x16, 0xab, 0x93, 0x26, 0xb2, + 0x79, 0x7e, 0x9d, 0xba, 0xda, 0x99, 0x51, 0x2f, 0x53, 0xff, 0xe6, 0xd8, 0x00, 0xf8, 0x58, 0x88, + 0x99, 0x48, 0x5f, 0x32, 0x16, 0x99, 0x4d, 0x44, 0xc5, 0x74, 0xa4, 0x47, 0x3b, 0x7b, 0x88, 0x6c, + 0x6c, 0x89, 0x53, 0x5a, 0x4f, 0xaf, 0x36, 0x79, 0x30, 0xa3, 0x5e, 0x96, 0x4d, 0x52, 0x65, 0x7f, + 0xbb, 0x00, 0x3d, 0x64, 0x8a, 0x72, 0x41, 0xc5, 0xab, 0xf8, 0xc3, 0x3e, 0x77, 0x0b, 0xff, 0x24, + 0x2a, 0x0a, 0x61, 0x95, 0x6b, 0x33, 0x1d, 0x4a, 0x0b, 0x60, 0xa4, 0x5a, 0xfe, 0x2c, 0x30, 0xa8, + 0x8c, 0x97, 0x4a, 0x19, 0x5a, 0xea, 0x69, 0xf1, 0x29, 0xfe, 0x30, 0x28, 0xfe, 0x20, 0x20, 0xc9, + 0x36, 0x18, 0xff, 0x03, 0x43, 0xf0, 0x31, 0xc8, 0x49, 0x5e, 0x6f, 0x50, 0x09, 0x85, 0x40, 0xf0, + 0x91, 0xed, 0x40, 0x7c, 0xbf, 0xcf, 0xed, 0x54, 0x82, 0xe1, 0x1a, 0x77, 0xd8, 0x0d, 0x1a, 0x94, + 0xcc, 0x40, 0x8c, 0x7a, 0x18, 0xc3, 0xdc, 0x18, 0x68, 0x56, 0x40, 0xf1, 0x28, 0x92, 0x2d, 0x80, + 0x51, 0x06, 0xa9, 0x54, 0x0d, 0x48, 0x6a, 0x4b, 0xa0, 0x0c, 0x1b, 0x90, 0x77, 0xa0, 0x62, 0x0f, + 0x88, 0xb0, 0xf4, 0x50, 0xae, 0x48, 0x66, 0x41, 0x59, 0xb7, 0x0c, 0x8b, 0xee, 0x71, 0xcb, 0x10, + 0xe5, 0xdc, 0x32, 0x34, 0xf2, 0xe3, 0xb6, 0x1b, 0xf5, 0x06, 0xe7, 0x1d, 0x99, 0x81, 0x40, 0x6f, + 0x1a, 0x5f, 0x46, 0x5f, 0x2f, 0x35, 0x7b, 0x93, 0x00, 0x4c, 0xff, 0xb9, 0xdc, 0x31, 0x12, 0x9f, + 0xdd, 0xe5, 0x09, 0x55, 0x19, 0xcc, 0xbd, 0xca, 0xdd, 0xa4, 0xf8, 0xc3, 0xc9, 0xd8, 0x61, 0xfd, + 0xb0, 0xb1, 0xa9, 0xb3, 0xae, 0x75, 0x65, 0xff, 0x66, 0x01, 0x2a, 0xaa, 0x73, 0xb7, 0x2a, 0xa1, + 0x36, 0xb7, 0x47, 0xe1, 0x79, 0xb4, 0xd0, 0x5a, 0x50, 0x32, 0xfe, 0xcd, 0xaf, 0xcb, 0x7f, 0x03, + 0x1b, 0x86, 0x35, 0xef, 0xd5, 0xe8, 0x27, 0xd9, 0x6b, 0xc4, 0x30, 0xba, 0xcc, 0xd5, 0xe0, 0xd5, + 0xb6, 0xab, 0xc1, 0x30, 0xae, 0xec, 0xfd, 0xdd, 0x37, 0xe8, 0x86, 0x0f, 0x3b, 0x70, 0x8e, 0x7a, + 0x44, 0xab, 0xcb, 0x6e, 0xf7, 0x74, 0x13, 0x5f, 0x85, 0x0a, 0x5b, 0xdd, 0xfb, 0xde, 0x6e, 0x0f, + 0x84, 0xdd, 0x64, 0xc8, 0xe9, 0x77, 0xd6, 0x48, 0x2d, 0xb9, 0xc7, 0x48, 0x15, 0xe6, 0x8c, 0xd4, + 0xeb, 0xa8, 0xe8, 0x57, 0x06, 0xa1, 0x2d, 0xbe, 0x50, 0x18, 0x33, 0xf5, 0x3c, 0x5b, 0x89, 0xac, + 0x84, 0xf0, 0x19, 0x0b, 0x2e, 0x51, 0xb6, 0xf0, 0xbf, 0x05, 0x13, 0xdd, 0xf0, 0x9c, 0x2a, 0x3d, + 0x8b, 0x9e, 0x11, 0xac, 0x81, 0x12, 0x1f, 0x61, 0xaf, 0xaa, 0xfb, 0xc9, 0x0e, 0x5b, 0xf6, 0x1f, + 0x0b, 0x50, 0x89, 0xad, 0x7c, 0x63, 0x28, 0xfc, 0x66, 0x26, 0x73, 0x9d, 0x52, 0xc0, 0x37, 0x1b, + 0x5a, 0x8f, 0xfd, 0x12, 0x3e, 0xbb, 0xb2, 0x7f, 0x80, 0x4a, 0x82, 0x6c, 0xf1, 0xe6, 0xaa, 0xb5, + 0x01, 0xf9, 0x47, 0xed, 0x97, 0xdd, 0xa9, 0xb7, 0x98, 0x7d, 0x74, 0x16, 0xdf, 0x63, 0x74, 0x96, + 0xe4, 0x8c, 0xce, 0xa3, 0xf4, 0x78, 0x10, 0x46, 0xce, 0x3c, 0xc5, 0x2b, 0xb5, 0x3c, 0x9d, 0x61, + 0x71, 0x9a, 0x9f, 0x1b, 0xd6, 0xa8, 0xd2, 0x0b, 0xa8, 0x42, 0xb0, 0xf7, 0x99, 0x58, 0xca, 0xf6, + 0x2d, 0xf8, 0xf8, 0x64, 0x7a, 0xfa, 0x33, 0x17, 0xcf, 0x96, 0xf5, 0x2f, 0x40, 0x88, 0x61, 0x82, + 0xb9, 0x43, 0x68, 0x54, 0x41, 0xf1, 0x04, 0x4d, 0x41, 0x5e, 0x26, 0x5f, 0xfc, 0x73, 0x68, 0x59, + 0xa8, 0x7d, 0x17, 0xbd, 0x6b, 0x40, 0xfb, 0x2e, 0x0b, 0x6a, 0x4c, 0xde, 0xb0, 0xe2, 0x77, 0x63, + 0xd7, 0x73, 0xe8, 0x3b, 0xfa, 0xcd, 0x57, 0xa2, 0x87, 0xcc, 0x7e, 0xc4, 0xdb, 0x32, 0x36, 0xe1, + 0x43, 0x0f, 0xe6, 0x26, 0x18, 0x94, 0x80, 0x47, 0x98, 0xb1, 0x01, 0x64, 0xfa, 0x6d, 0x31, 0xe0, + 0x06, 0xa8, 0xeb, 0x12, 0x96, 0x01, 0x03, 0x8c, 0x17, 0xd1, 0x23, 0x44, 0x75, 0x21, 0x2e, 0xe3, + 0x04, 0x17, 0xba, 0x36, 0x6f, 0x9a, 0x41, 0xb7, 0xa9, 0x59, 0xa9, 0xa7, 0x4b, 0x1f, 0x7a, 0xdb, + 0x06, 0xdb, 0xb0, 0x59, 0x95, 0xde, 0x42, 0x1b, 0x05, 0xa6, 0x1b, 0xc5, 0x57, 0xe1, 0xd0, 0x04, + 0x7a, 0x1d, 0xdc, 0xd6, 0xf5, 0xde, 0xdb, 0xe6, 0xae, 0x05, 0x4e, 0x6b, 0x5a, 0xcf, 0x58, 0xe6, + 0xd0, 0x20, 0xf5, 0x69, 0x07, 0xa9, 0xba, 0x6c, 0x68, 0x11, 0x2a, 0x66, 0xbc, 0x9c, 0xf9, 0x8d, + 0x68, 0x31, 0x5c, 0xac, 0x25, 0x12, 0x81, 0x31, 0xbe, 0x02, 0x01, 0x89, 0xcf, 0x10, 0x53, 0x15, + 0xde, 0x79, 0x67, 0x13, 0x51, 0x7d, 0xe4, 0x1a, 0x40, 0x92, 0xb1, 0xf8, 0xae, 0xe6, 0x50, 0xa0, + 0x2d, 0x24, 0x13, 0x54, 0xfe, 0x97, 0x68, 0x61, 0x8b, 0xcf, 0xdf, 0x4c, 0x76, 0xfc, 0x9f, 0xa9, + 0xd2, 0x26, 0x01, 0x03, 0xc4, 0x9f, 0x02, 0x22, 0xb8, 0xe8, 0x65, 0x3e, 0xfa, 0x4a, 0x1f, 0xb8, + 0x4c, 0x0f, 0x7d, 0xb4, 0xc1, 0xa3, 0xe9, 0x2f, 0x6f, 0xeb, 0x17, 0x0e, 0x69, 0x87, 0x0e, 0xa6, + 0x67, 0x86, 0x52, 0x53, 0x37, 0x93, 0xf1, 0x23, 0xda, 0xe1, 0xd1, 0xf4, 0xcc, 0x48, 0x6a, 0xec, + 0x08, 0x5c, 0xcd, 0x94, 0x31, 0x19, 0xfe, 0x32, 0x87, 0x16, 0xb7, 0xb9, 0x83, 0xee, 0x56, 0xf3, + 0x68, 0xea, 0xf9, 0x79, 0x7c, 0xb7, 0xd7, 0xd4, 0x63, 0x4c, 0x50, 0x31, 0xbc, 0xaa, 0xe4, 0x16, + 0x48, 0x5e, 0xf1, 0x1d, 0x5b, 0x6d, 0xe0, 0x28, 0x0d, 0x2b, 0x38, 0x96, 0x76, 0x30, 0x71, 0x2e, + 0x73, 0xba, 0x87, 0x5c, 0x0b, 0x3d, 0x79, 0x8b, 0xb8, 0xe1, 0x02, 0x70, 0x34, 0x6a, 0x28, 0x17, + 0xa6, 0xf6, 0xa5, 0xf7, 0x9e, 0x80, 0x33, 0x26, 0x2d, 0x7a, 0x42, 0x26, 0x05, 0x18, 0xca, 0xf3, + 0xc3, 0xee, 0x96, 0x96, 0xc0, 0xde, 0x86, 0x66, 0x5f, 0xdb, 0x3b, 0x7b, 0x14, 0xff, 0x46, 0xec, + 0x83, 0x86, 0xa7, 0x66, 0x61, 0x75, 0xb3, 0x2a, 0xed, 0x11, 0xf2, 0xa5, 0x8b, 0x6f, 0xe7, 0x01, + 0x92, 0x63, 0x9e, 0xbe, 0xab, 0xe9, 0xd1, 0x28, 0xf5, 0x6d, 0x23, 0x9a, 0x65, 0x4f, 0x67, 0x7a, + 0x22, 0x96, 0xbe, 0xfd, 0x45, 0x7a, 0xe6, 0x90, 0x69, 0xb6, 0x31, 0xb4, 0x46, 0x06, 0x2c, 0xe7, + 0x2b, 0xc7, 0x60, 0xa9, 0x4c, 0xe7, 0x3c, 0x10, 0x4b, 0xdd, 0xa1, 0x4a, 0x0d, 0xe8, 0x6d, 0x81, + 0x9d, 0x3e, 0x62, 0x35, 0x3b, 0x78, 0xec, 0x6d, 0x34, 0x98, 0x9a, 0x74, 0xa4, 0xc9, 0x69, 0x4d, + 0xf4, 0x84, 0x76, 0xfb, 0x72, 0x72, 0x7a, 0x04, 0x1c, 0x98, 0x00, 0xa7, 0xec, 0xf3, 0x45, 0x68, + 0xb1, 0x04, 0x66, 0xc9, 0x0e, 0x84, 0xda, 0x82, 0x0a, 0x7c, 0x98, 0xa7, 0xd0, 0xf8, 0xfe, 0x15, + 0x03, 0x16, 0x6b, 0xc9, 0x38, 0xf4, 0x19, 0x13, 0x9a, 0x12, 0x86, 0xc2, 0xe1, 0x4a, 0xf4, 0x6c, + 0x22, 0xea, 0xc6, 0xc8, 0xda, 0xc8, 0x98, 0xfe, 0x51, 0x7f, 0x72, 0x7a, 0x84, 0xcd, 0x02, 0x1d, + 0x2a, 0x33, 0x24, 0xf9, 0x7d, 0xa8, 0xb8, 0x2d, 0x10, 0x0a, 0x9b, 0x05, 0x17, 0xcc, 0x5f, 0xf0, + 0xd0, 0xc0, 0x03, 0x17, 0x8c, 0xb3, 0x90, 0x82, 0xd9, 0xa2, 0xf8, 0x66, 0xb4, 0xa4, 0x0d, 0x77, + 0xa5, 0x39, 0xaf, 0x73, 0xee, 0x44, 0x03, 0xe6, 0x1a, 0xe8, 0x70, 0x32, 0xa7, 0xb1, 0x93, 0x81, + 0x99, 0x51, 0x5c, 0xad, 0xf5, 0xdc, 0x4e, 0x4e, 0x7f, 0x04, 0x45, 0x11, 0xdf, 0xb0, 0xc3, 0x63, + 0xc9, 0xe9, 0x11, 0xd0, 0x92, 0x65, 0x13, 0x71, 0xd5, 0x3b, 0x68, 0x29, 0x4b, 0xe6, 0x3b, 0xbb, + 0x20, 0xb1, 0x61, 0x96, 0x53, 0xa5, 0xff, 0x83, 0x43, 0x69, 0x4e, 0x20, 0x23, 0x29, 0xfe, 0x47, + 0x0e, 0x46, 0x97, 0xaa, 0xe2, 0x70, 0x8f, 0x87, 0xf6, 0x1a, 0xa9, 0x2c, 0xee, 0xbb, 0x4a, 0x87, + 0x36, 0x79, 0x47, 0x1f, 0xb8, 0xfc, 0x61, 0x60, 0x17, 0xb0, 0x9a, 0x4a, 0x87, 0x36, 0x11, 0xd5, + 0x7b, 0x87, 0xa8, 0xea, 0x0f, 0x7d, 0xf9, 0xba, 0x23, 0xfb, 0xae, 0xe0, 0x70, 0x37, 0xfc, 0x86, + 0x74, 0x7d, 0x6c, 0x34, 0xd5, 0xd7, 0x0b, 0x2b, 0x39, 0x33, 0x12, 0xa1, 0xb9, 0x21, 0x97, 0x76, + 0xe9, 0x2a, 0x84, 0x44, 0x00, 0x64, 0x43, 0xcd, 0x9f, 0xea, 0x01, 0x9b, 0x19, 0xcc, 0x0b, 0xe8, + 0x33, 0x63, 0x55, 0xe3, 0xd1, 0x22, 0x5d, 0xd8, 0xff, 0x85, 0x36, 0x38, 0x69, 0x9e, 0x3f, 0xa7, + 0x8e, 0xdd, 0x00, 0xdf, 0xa9, 0xb2, 0xde, 0x62, 0x84, 0xcc, 0xc3, 0xb8, 0xa6, 0x20, 0xbf, 0x1b, + 0xad, 0x70, 0x77, 0xb8, 0x7d, 0xd8, 0xfe, 0x62, 0x1e, 0x1d, 0xc1, 0xf4, 0xc5, 0x47, 0xa8, 0x39, + 0x89, 0xe2, 0xb3, 0xda, 0xed, 0xcf, 0xe1, 0x40, 0x21, 0x35, 0xdc, 0x6d, 0x1d, 0x1e, 0x3b, 0xc8, + 0xa1, 0x31, 0xdc, 0xec, 0xcf, 0xc9, 0xc6, 0xff, 0x39, 0x2a, 0x81, 0xed, 0xdd, 0xbc, 0x22, 0x08, + 0xe3, 0xf4, 0x68, 0xfe, 0x49, 0x03, 0x0e, 0x77, 0xf6, 0x1c, 0xe6, 0x35, 0x25, 0x30, 0x28, 0xea, + 0x27, 0x6f, 0xc1, 0x89, 0xbc, 0x35, 0x9d, 0x61, 0xfe, 0xc0, 0xcc, 0xb1, 0x67, 0x35, 0x4a, 0xc7, + 0x67, 0x09, 0xb4, 0xf4, 0x05, 0xf7, 0x51, 0xba, 0x2d, 0x87, 0x55, 0xfa, 0x85, 0xcc, 0xe9, 0x4b, + 0xf7, 0x2a, 0xdd, 0x96, 0x95, 0x3f, 0xc2, 0xa1, 0x87, 0xdc, 0x5e, 0x2f, 0xbe, 0x34, 0xdb, 0x18, + 0x30, 0xab, 0xb0, 0x70, 0xde, 0x2a, 0xd4, 0xaa, 0x52, 0xb5, 0x90, 0x9b, 0x4b, 0xac, 0x62, 0xef, + 0x86, 0x6a, 0xbd, 0xd7, 0xcd, 0x90, 0x47, 0xe3, 0xf9, 0x6b, 0x92, 0x4b, 0x81, 0xbf, 0xc0, 0xa1, + 0x47, 0xa1, 0x7e, 0x38, 0x61, 0x63, 0x30, 0xd0, 0x6a, 0x56, 0x69, 0xd1, 0xbc, 0x55, 0xaa, 0x57, + 0xa5, 0xad, 0xc2, 0x1c, 0x59, 0xc5, 0x17, 0x93, 0x53, 0x03, 0x6c, 0x0f, 0x51, 0x9b, 0xdf, 0x7c, + 0xfd, 0x34, 0x07, 0x31, 0xfe, 0x77, 0xa8, 0x84, 0x5c, 0xd7, 0x23, 0x15, 0x5b, 0x3c, 0x6f, 0xc5, + 0xb0, 0x8f, 0xa8, 0x3d, 0x87, 0x58, 0x05, 0xf7, 0xe3, 0xe8, 0x25, 0x46, 0xa8, 0x46, 0x6a, 0xb8, + 0x7b, 0x8e, 0x11, 0xb3, 0xe5, 0xe6, 0x7f, 0x87, 0x1e, 0xf2, 0xe0, 0x8b, 0xa7, 0xf8, 0x76, 0x1a, + 0x14, 0x43, 0x8c, 0x57, 0x73, 0x55, 0x02, 0x3b, 0x36, 0xe5, 0xe6, 0x12, 0x9f, 0x21, 0x55, 0xc0, + 0xd7, 0xde, 0xe6, 0x18, 0xa4, 0x9c, 0x5c, 0xc6, 0x20, 0x3d, 0xe9, 0xd9, 0xa3, 0x78, 0x9a, 0x6b, + 0xf7, 0x85, 0x95, 0xa0, 0xdf, 0xdd, 0x62, 0xf4, 0x51, 0x6d, 0x6b, 0x5b, 0x78, 0x3f, 0xa9, 0x4c, + 0xe1, 0xbc, 0x95, 0xa9, 0x51, 0x25, 0x49, 0x98, 0x97, 0x80, 0x59, 0xaf, 0xd4, 0xb5, 0x6b, 0x10, + 0x59, 0x85, 0x58, 0x11, 0x3e, 0x89, 0x67, 0x4e, 0x7e, 0xae, 0x7f, 0x1c, 0xd1, 0xcf, 0x5f, 0x96, + 0xe7, 0x25, 0xc0, 0x77, 0x73, 0xa8, 0x04, 0x8a, 0xf5, 0x92, 0xfb, 0xa4, 0x73, 0x68, 0x49, 0x5b, + 0x59, 0x24, 0x70, 0xf0, 0xb4, 0x67, 0x14, 0x5f, 0x60, 0x5d, 0x1e, 0xd2, 0x57, 0xbb, 0xf5, 0x0b, + 0x09, 0x90, 0xfa, 0x4c, 0x67, 0xc7, 0x48, 0x17, 0xec, 0xc6, 0x8d, 0x9b, 0x6b, 0x65, 0x7b, 0xde, + 0x0d, 0x10, 0x73, 0x06, 0xdd, 0xe0, 0x04, 0x86, 0xad, 0x89, 0x17, 0x39, 0x56, 0xd0, 0x24, 0x13, + 0xf3, 0x46, 0x57, 0xe6, 0xec, 0x45, 0x70, 0x89, 0xbd, 0x1b, 0xe9, 0x64, 0x37, 0x7d, 0x43, 0x7c, + 0x8a, 0x4d, 0x68, 0x87, 0x3f, 0x61, 0x59, 0x4c, 0x32, 0x46, 0x3c, 0xda, 0xd7, 0x40, 0x2d, 0x92, + 0x53, 0x3d, 0xc0, 0xf8, 0x60, 0xa7, 0x2c, 0x67, 0xef, 0xbc, 0xaf, 0x85, 0x59, 0x4f, 0x3e, 0xcc, + 0x21, 0xb7, 0x56, 0xea, 0xda, 0xdc, 0xb5, 0x51, 0x51, 0xf6, 0x0a, 0x2a, 0xb1, 0xf5, 0x8d, 0xa1, + 0x92, 0x87, 0xda, 0x14, 0x8f, 0xa9, 0x92, 0x1b, 0xbf, 0x0d, 0x98, 0x57, 0x09, 0x79, 0x88, 0x54, + 0x83, 0x7f, 0x97, 0x1d, 0x2c, 0x41, 0x4b, 0xe9, 0x75, 0x24, 0x83, 0x8b, 0xf7, 0x70, 0x68, 0x39, + 0x70, 0x3c, 0x0a, 0xbe, 0x07, 0x83, 0xc5, 0x77, 0x7f, 0xb2, 0xf3, 0x88, 0x55, 0x64, 0x16, 0x4c, + 0x75, 0xdf, 0x17, 0x97, 0xcd, 0xce, 0x8f, 0xeb, 0x61, 0xad, 0x69, 0xa8, 0xc7, 0x82, 0xfb, 0xa8, + 0x47, 0x56, 0x1e, 0x5b, 0x3d, 0xee, 0x83, 0xdf, 0x66, 0xe7, 0xe7, 0xa7, 0x38, 0xb4, 0xa2, 0x35, + 0xd0, 0xa1, 0x10, 0xd6, 0x67, 0x9d, 0xa7, 0xcd, 0x5d, 0x11, 0x7c, 0xb3, 0xed, 0x11, 0x26, 0x93, + 0x55, 0x9b, 0x5f, 0xa4, 0xae, 0x4e, 0x69, 0x87, 0x49, 0xf8, 0x86, 0xf4, 0xa1, 0x2f, 0x68, 0xe5, + 0xe6, 0xaf, 0x56, 0xb9, 0xd5, 0x88, 0x4b, 0x27, 0x4c, 0x23, 0x1d, 0x26, 0xc4, 0x90, 0xa8, 0x90, + 0x73, 0x2a, 0xca, 0xff, 0x0b, 0x0e, 0x3d, 0x12, 0x54, 0x28, 0xd8, 0xe0, 0x8c, 0xd0, 0x82, 0xf9, + 0xf9, 0x73, 0xbb, 0x2a, 0x05, 0x85, 0xd2, 0xac, 0x8c, 0x56, 0x2b, 0x76, 0x24, 0xa7, 0x06, 0xb2, + 0xba, 0xf5, 0x7e, 0x98, 0x74, 0xfe, 0x56, 0x64, 0x4e, 0x5f, 0x4a, 0x8d, 0x9f, 0x48, 0x1d, 0xbf, + 0x5c, 0x21, 0xe7, 0xad, 0x2a, 0x7f, 0x94, 0x43, 0x0f, 0x79, 0x5a, 0x14, 0xb7, 0x1f, 0xc3, 0x5d, + 0x7e, 0x68, 0xc0, 0xfc, 0x7c, 0x1c, 0xfb, 0x9d, 0xe7, 0xe6, 0x12, 0x5f, 0xa4, 0x55, 0xc0, 0x97, + 0x09, 0xef, 0xdc, 0xd7, 0xde, 0x92, 0x4b, 0xc7, 0xa8, 0x13, 0x0f, 0x36, 0x84, 0x1a, 0x25, 0xe4, + 0x0b, 0x2a, 0xb0, 0x33, 0xde, 0x83, 0xaf, 0xe3, 0x9b, 0x67, 0x79, 0xb2, 0x89, 0xeb, 0xac, 0x69, + 0xd0, 0x67, 0xd5, 0x6a, 0xbe, 0x2a, 0xe5, 0xa1, 0xc2, 0xc7, 0x38, 0xf4, 0xb8, 0xdb, 0xeb, 0x65, + 0x99, 0x2c, 0x23, 0x23, 0xcc, 0xcf, 0xe5, 0x77, 0xa9, 0xd2, 0x4e, 0x61, 0xee, 0xdc, 0x62, 0x35, + 0xad, 0x61, 0x32, 0x76, 0x58, 0x3f, 0x77, 0x2b, 0x2f, 0xc7, 0xbf, 0x47, 0x37, 0xce, 0x4d, 0x9e, + 0xff, 0x97, 0x1c, 0x5a, 0x0d, 0x0b, 0xcf, 0x86, 0xc0, 0x0a, 0x14, 0x45, 0xf3, 0xd6, 0x1f, 0x2b, + 0xb8, 0xf7, 0x20, 0x21, 0xfe, 0x34, 0x6b, 0xce, 0xe6, 0xdf, 0xb6, 0xe6, 0x69, 0xc1, 0x3d, 0x0a, + 0xd8, 0x70, 0xa7, 0x40, 0x95, 0xbe, 0x2c, 0x40, 0x9f, 0x17, 0x08, 0x36, 0x9e, 0x2a, 0x8e, 0x16, + 0xe4, 0xd9, 0x42, 0xd8, 0x5b, 0xad, 0xf7, 0xb1, 0x9d, 0xd8, 0xf0, 0xed, 0x9b, 0x4a, 0xa5, 0x43, + 0x53, 0xa3, 0xa0, 0xff, 0xa4, 0x86, 0xbb, 0x21, 0x6e, 0x01, 0xbe, 0x1c, 0x48, 0xbc, 0xc7, 0x21, + 0xc2, 0x9d, 0xd9, 0xf6, 0xbb, 0x91, 0x4e, 0x76, 0xc9, 0x02, 0x64, 0x2e, 0xb6, 0x74, 0x37, 0xd2, + 0x39, 0xd7, 0x5a, 0xbf, 0x1b, 0xe9, 0xcc, 0x3b, 0x6d, 0x6d, 0xf0, 0x58, 0x4f, 0x6a, 0xe8, 0x20, + 0x1b, 0x08, 0x49, 0xbb, 0x73, 0x2b, 0x73, 0x2c, 0xa2, 0x4f, 0x76, 0xea, 0x23, 0x71, 0xed, 0xf4, + 0x58, 0x6a, 0x9c, 0xe8, 0x35, 0x65, 0xff, 0xb0, 0x08, 0x2d, 0xde, 0xd6, 0x80, 0x0f, 0x6b, 0xba, + 0xb8, 0x39, 0x35, 0x09, 0xac, 0x8f, 0xe6, 0x6a, 0x12, 0x3f, 0x05, 0xef, 0x19, 0xd0, 0x9c, 0x68, + 0x08, 0x1f, 0xe2, 0xf2, 0x8e, 0x43, 0x23, 0x25, 0x63, 0x91, 0x64, 0xfc, 0x0c, 0x44, 0xc9, 0xb2, + 0x21, 0x83, 0xc3, 0x5a, 0xae, 0x96, 0x71, 0x8e, 0xcb, 0xba, 0xa4, 0x0d, 0x0a, 0xf1, 0xaf, 0x55, + 0x69, 0x6f, 0xd6, 0x25, 0xed, 0x26, 0xa0, 0x47, 0x1a, 0x34, 0x4f, 0xe1, 0xe0, 0x79, 0x8d, 0xab, + 0x00, 0x68, 0x90, 0x65, 0x36, 0x11, 0xd5, 0x4f, 0xdc, 0x49, 0x7e, 0x35, 0x03, 0xee, 0x1d, 0xda, + 0xc8, 0x98, 0xa7, 0xc5, 0x77, 0x37, 0xd2, 0xd9, 0xe0, 0x76, 0x37, 0xc0, 0x7d, 0x56, 0xf0, 0x82, + 0xcd, 0xba, 0xe7, 0x3d, 0xc8, 0xa1, 0x95, 0x5e, 0x65, 0xb7, 0xbb, 0xbd, 0x25, 0x9c, 0x75, 0x96, + 0xb7, 0x00, 0xd7, 0x14, 0xdf, 0x0e, 0xc9, 0x8f, 0x21, 0xbe, 0x41, 0x7d, 0x2f, 0x93, 0xb1, 0xc3, + 0xac, 0xe3, 0xc7, 0xfd, 0x55, 0x24, 0x3f, 0x55, 0xfe, 0x14, 0x87, 0x96, 0x80, 0x51, 0xd6, 0x3c, + 0x75, 0xcf, 0x51, 0xe4, 0x61, 0x84, 0xd7, 0xc8, 0x80, 0x05, 0x8a, 0x3c, 0xae, 0xa8, 0x99, 0x51, + 0xdc, 0xcc, 0x86, 0x2b, 0x34, 0x54, 0x50, 0xec, 0x51, 0xc0, 0xba, 0x94, 0xce, 0x26, 0xa2, 0xcd, + 0xca, 0x7e, 0xfd, 0x94, 0xed, 0x42, 0x3c, 0xd6, 0xc3, 0x43, 0xfa, 0xa9, 0xc9, 0x64, 0x6c, 0x5c, + 0x3f, 0x71, 0x28, 0x3d, 0x79, 0x53, 0x3f, 0x35, 0x20, 0x9b, 0x54, 0x57, 0x6d, 0x40, 0x4b, 0xd9, + 0x32, 0x1f, 0xc8, 0xe6, 0x43, 0x2e, 0x2d, 0x92, 0xd9, 0x29, 0xfe, 0xcc, 0x66, 0x77, 0x84, 0x91, + 0xc5, 0x2b, 0x37, 0x35, 0xdc, 0x0d, 0x73, 0x2a, 0xcb, 0xad, 0x1b, 0xd6, 0xef, 0xb6, 0x06, 0x58, + 0xe5, 0xe4, 0x2e, 0x3f, 0x0e, 0x81, 0x51, 0xf6, 0xd7, 0x8b, 0xd1, 0x12, 0x62, 0x0c, 0xe5, 0xab, + 0x51, 0x21, 0x98, 0x7d, 0x69, 0x2c, 0x02, 0x7c, 0xbf, 0x9e, 0x02, 0xc5, 0xc7, 0xd2, 0x3d, 0x5f, + 0xa5, 0x27, 0x26, 0xa9, 0x35, 0xd3, 0x4c, 0x90, 0x29, 0x0a, 0xbf, 0x11, 0x15, 0xc1, 0xef, 0xcd, + 0xca, 0x7e, 0x62, 0x86, 0x84, 0x1b, 0xe1, 0x14, 0x2a, 0x96, 0xe6, 0xa5, 0xb2, 0x59, 0xd9, 0x2f, + 0x5b, 0x48, 0xfc, 0xe6, 0xfc, 0x86, 0x67, 0x88, 0xbf, 0x95, 0x95, 0x24, 0x2e, 0x93, 0x7e, 0xdd, + 0x1e, 0x54, 0x1c, 0xe9, 0x89, 0x8b, 0x99, 0x53, 0x3d, 0xae, 0x9a, 0x1c, 0xeb, 0xf4, 0x6b, 0xd9, + 0xd6, 0xe9, 0xea, 0xa7, 0x54, 0x69, 0x95, 0x40, 0x81, 0x26, 0x81, 0xd4, 0xd5, 0xf3, 0x7a, 0xef, + 0x6d, 0xa3, 0x3d, 0xd4, 0x78, 0xfd, 0xfe, 0x9c, 0xc6, 0xeb, 0xea, 0x2a, 0x55, 0x12, 0x84, 0xdc, + 0x54, 0x71, 0x25, 0xa9, 0x0d, 0x36, 0xc0, 0x1b, 0x2c, 0x0b, 0x7c, 0xcf, 0xf3, 0xd8, 0xba, 0x37, + 0x67, 0xdb, 0xba, 0x49, 0x28, 0x5e, 0x13, 0x28, 0x3a, 0x80, 0x14, 0xb9, 0xe8, 0xe8, 0xa8, 0x0f, + 0xfa, 0xfc, 0x1e, 0x5f, 0x9b, 0xbb, 0xc5, 0xe1, 0x24, 0x18, 0x8c, 0x71, 0xfc, 0xfd, 0x7c, 0xc6, + 0x71, 0x12, 0xd2, 0x81, 0x4d, 0x10, 0x7f, 0x30, 0x3f, 0x51, 0xc0, 0xca, 0xb2, 0xaa, 0x77, 0x72, + 0xf3, 0x99, 0xd5, 0xe1, 0x0e, 0x72, 0x5e, 0x04, 0x51, 0xdc, 0x84, 0xc3, 0x3a, 0x3b, 0xb0, 0xeb, + 0xb6, 0x83, 0xa0, 0x38, 0xdc, 0x80, 0x93, 0x1a, 0xee, 0xfe, 0x30, 0x14, 0xf0, 0xd3, 0x65, 0x94, + 0xba, 0x7a, 0x2a, 0xa3, 0x5e, 0x9e, 0xc3, 0x4a, 0xbf, 0x25, 0x9f, 0x95, 0x1e, 0x66, 0x97, 0x2d, + 0x41, 0x5c, 0x69, 0x2b, 0x92, 0x46, 0xf9, 0xb5, 0xdb, 0xf3, 0x89, 0x1d, 0xd5, 0x9c, 0xfc, 0xe2, + 0x46, 0xb2, 0x54, 0xf0, 0x5d, 0x70, 0xe6, 0x3e, 0x9e, 0xa1, 0x65, 0xe3, 0x69, 0x4a, 0xd7, 0x14, + 0x93, 0x08, 0x91, 0xa4, 0xb5, 0x9e, 0x84, 0x36, 0x71, 0x47, 0xbb, 0xd4, 0x9d, 0x1a, 0x3a, 0x58, + 0x76, 0x62, 0x09, 0x5a, 0xea, 0x64, 0x22, 0xd6, 0xf0, 0xdb, 0xd1, 0x12, 0x8c, 0x4b, 0x17, 0x15, + 0x76, 0x92, 0x32, 0x61, 0x62, 0x55, 0xb5, 0xb3, 0x01, 0xe2, 0x6c, 0x52, 0x43, 0x14, 0x0d, 0xb5, + 0x3c, 0x9b, 0x88, 0xa6, 0x8f, 0xdc, 0xd0, 0x4f, 0x1c, 0xa2, 0x1d, 0x24, 0x9b, 0xf9, 0xf8, 0x26, + 0xf6, 0xac, 0x12, 0x16, 0x1a, 0x96, 0xee, 0x98, 0x90, 0xc7, 0xaf, 0xb1, 0xf5, 0xa0, 0x41, 0x14, + 0xa0, 0x3f, 0xac, 0xd6, 0x7c, 0x35, 0x93, 0x8c, 0x0f, 0xe8, 0xe7, 0x2f, 0xa7, 0x27, 0x2f, 0x6a, + 0x6a, 0x34, 0x3d, 0x73, 0x48, 0x9f, 0xba, 0xc4, 0x1e, 0x7b, 0xba, 0x51, 0x91, 0x9b, 0x86, 0x15, + 0x5a, 0x60, 0xc5, 0x5a, 0xb0, 0xa0, 0xe2, 0x8b, 0xb4, 0x0d, 0xe0, 0x12, 0x40, 0xfb, 0xcc, 0x55, + 0x53, 0xe9, 0xa0, 0xd1, 0xb6, 0xcb, 0xab, 0x9d, 0x0d, 0x55, 0xb8, 0x4a, 0x55, 0xae, 0x9a, 0x0a, + 0xd9, 0xca, 0xcf, 0xd7, 0xa2, 0x62, 0xf2, 0xc1, 0x5c, 0xef, 0xc0, 0x2b, 0x9d, 0x85, 0x8b, 0x0f, + 0x31, 0x61, 0x84, 0xcc, 0x0b, 0x1d, 0x4c, 0x3a, 0xff, 0x32, 0xd1, 0x2e, 0x61, 0x79, 0xe2, 0xa0, + 0x9d, 0x18, 0x20, 0x3e, 0xc6, 0x64, 0x84, 0x08, 0x5a, 0xc4, 0x09, 0x06, 0x27, 0xf3, 0xdb, 0xd0, + 0x12, 0x42, 0x86, 0xc8, 0xf4, 0x8f, 0xe5, 0xca, 0x78, 0x38, 0x19, 0xe2, 0x93, 0x00, 0x4d, 0xb6, + 0x32, 0x84, 0x9a, 0x49, 0x85, 0xdf, 0x86, 0x16, 0x83, 0x13, 0x2d, 0xf1, 0xe8, 0xc5, 0x8b, 0x90, + 0x80, 0x44, 0x81, 0xad, 0x0c, 0xe3, 0x33, 0x5c, 0x49, 0x6f, 0x41, 0xc2, 0x77, 0x6a, 0xb8, 0x5b, + 0x26, 0x79, 0xf8, 0x57, 0xac, 0x70, 0xc2, 0x85, 0x16, 0xff, 0xa2, 0xe1, 0x84, 0x97, 0xcf, 0x19, + 0x48, 0xf8, 0x15, 0x2b, 0x7e, 0x61, 0x11, 0x93, 0xd1, 0x8c, 0x5f, 0xb8, 0x7c, 0xce, 0xc8, 0x85, + 0x1b, 0x50, 0x11, 0xa6, 0x61, 0x1d, 0xfd, 0x43, 0xe3, 0x2d, 0xa8, 0xb8, 0x94, 0xaa, 0xd5, 0x99, + 0x93, 0x37, 0x65, 0x2b, 0x81, 0x7f, 0xc3, 0x76, 0xde, 0x59, 0x6c, 0x95, 0xcb, 0x80, 0xc5, 0xa5, + 0x50, 0x28, 0xc9, 0xcd, 0xa4, 0x6c, 0xd8, 0xae, 0x4a, 0x32, 0xaa, 0x17, 0x6c, 0xab, 0x48, 0x7c, + 0x93, 0xdc, 0xca, 0xc7, 0x57, 0x93, 0xe6, 0x5e, 0x9e, 0xe5, 0xc9, 0xa9, 0x1e, 0x03, 0x73, 0x7a, + 0x04, 0x30, 0x35, 0x35, 0x0a, 0x6e, 0x65, 0x15, 0x65, 0xc9, 0x45, 0xe8, 0x71, 0x27, 0x31, 0xa4, + 0x5a, 0x84, 0x65, 0xe5, 0x57, 0xed, 0x4a, 0x28, 0xcc, 0xbf, 0x9d, 0xbd, 0x4a, 0x5f, 0x31, 0x5a, + 0x4b, 0x57, 0x29, 0x04, 0xa1, 0xa2, 0x0b, 0xf3, 0xeb, 0xea, 0xd2, 0xe0, 0xa3, 0x2b, 0x0a, 0x4a, + 0x23, 0x85, 0xe2, 0xf2, 0x5f, 0xbe, 0xbf, 0xae, 0xea, 0x35, 0x77, 0xd5, 0xaf, 0xa5, 0xaa, 0xf7, + 0xaa, 0x3e, 0x78, 0xe1, 0x07, 0xd6, 0x0a, 0xdd, 0x62, 0x9f, 0xd5, 0x05, 0xe6, 0x1d, 0x86, 0x7b, + 0xce, 0xea, 0xaf, 0xab, 0x17, 0x06, 0x0b, 0x56, 0x70, 0xf9, 0x27, 0xf7, 0x82, 0x07, 0x9c, 0xdc, + 0xbf, 0xb3, 0x26, 0xf7, 0xc2, 0xf9, 0x27, 0xf7, 0x16, 0x55, 0x72, 0x09, 0x26, 0xb2, 0xf8, 0x13, + 0xb3, 0xc5, 0x6c, 0xf7, 0xb2, 0x17, 0x95, 0x41, 0x1e, 0xd3, 0x47, 0xfa, 0xf4, 0xe3, 0xbd, 0x7a, + 0xe4, 0xaa, 0x36, 0x78, 0x98, 0xe5, 0x83, 0xd6, 0x62, 0xf8, 0x90, 0x2e, 0x06, 0xd0, 0xf8, 0x57, + 0xad, 0x81, 0x40, 0xff, 0x6b, 0xcc, 0x40, 0xff, 0x6b, 0xaa, 0x03, 0x81, 0x96, 0x1d, 0x86, 0xb0, + 0x43, 0xe2, 0xac, 0x90, 0x85, 0x52, 0x61, 0xaf, 0x01, 0xeb, 0xad, 0x6e, 0xb9, 0x71, 0xe2, 0x4f, + 0xba, 0x4e, 0x36, 0x5a, 0xeb, 0x64, 0xb1, 0x79, 0x3b, 0xf8, 0x69, 0x6b, 0x9d, 0x3c, 0xc2, 0x76, + 0xb5, 0xb9, 0x58, 0xbe, 0xae, 0x5e, 0x12, 0x5c, 0x84, 0xc7, 0xd2, 0x5a, 0x36, 0x3b, 0x72, 0xe3, + 0xc9, 0xbf, 0x8a, 0x43, 0xd5, 0x59, 0xcc, 0xf5, 0x99, 0x7b, 0x32, 0x57, 0x18, 0xc6, 0x02, 0x86, + 0x97, 0x6e, 0x70, 0xab, 0xd2, 0x2f, 0xd1, 0x2f, 0x84, 0xb9, 0xe7, 0xa1, 0xf8, 0x30, 0xc4, 0x7b, + 0xc3, 0x15, 0x35, 0x77, 0xc9, 0xdf, 0x73, 0xe6, 0x9c, 0xfa, 0x3d, 0xc7, 0xce, 0x89, 0xdf, 0x73, + 0x4b, 0x18, 0x0c, 0xa8, 0x7a, 0xd9, 0xc1, 0x02, 0xb4, 0x2a, 0x1f, 0xf9, 0x50, 0x5b, 0xc0, 0x1f, + 0x52, 0xf8, 0x35, 0x68, 0xa1, 0x27, 0xe0, 0x55, 0xc8, 0x85, 0xd0, 0x55, 0xaa, 0xf4, 0x98, 0x80, + 0x01, 0xe2, 0xf2, 0xf4, 0xcc, 0x31, 0xed, 0xcc, 0xb9, 0xcc, 0xb1, 0xd3, 0xe9, 0xc9, 0xc9, 0xd4, + 0x85, 0x4e, 0x19, 0x83, 0xf9, 0x0d, 0x96, 0x0f, 0x42, 0x81, 0x15, 0xf3, 0x84, 0x46, 0x5b, 0xe3, + 0xd9, 0x5c, 0x26, 0x1b, 0x34, 0xa3, 0xaa, 0xad, 0x47, 0x8b, 0x83, 0x4a, 0xa8, 0xbd, 0x05, 0x6e, + 0x76, 0x16, 0x92, 0xb8, 0xe9, 0x00, 0x12, 0x97, 0x42, 0xce, 0xd4, 0xd4, 0x47, 0xfa, 0xb9, 0x11, + 0x99, 0x40, 0x79, 0x17, 0x5a, 0xe8, 0x75, 0x13, 0xff, 0x8b, 0x3c, 0x71, 0x0c, 0xd8, 0x26, 0x55, + 0x3f, 0xa6, 0x4a, 0x8f, 0x08, 0x18, 0xdd, 0x24, 0x46, 0x42, 0x98, 0x60, 0x58, 0xd9, 0x5f, 0x2d, + 0x46, 0x8f, 0x6f, 0xc7, 0x5c, 0x25, 0xdf, 0x7a, 0xff, 0x65, 0xf6, 0x7a, 0xaf, 0x51, 0xa5, 0xe7, + 0xac, 0xf5, 0xfe, 0xc4, 0x3c, 0x7b, 0xf0, 0x7d, 0x2d, 0xfe, 0x77, 0xd9, 0x5d, 0x93, 0x3a, 0x47, + 0x3f, 0xc5, 0xee, 0x9a, 0x2b, 0xec, 0xf3, 0xdb, 0x55, 0x33, 0x1f, 0xe1, 0xb9, 0x77, 0xcb, 0x05, + 0xdf, 0x72, 0xb7, 0x5c, 0xf8, 0x80, 0x0c, 0xe5, 0x8f, 0xb9, 0x9e, 0xb7, 0xb1, 0xeb, 0x70, 0xb1, + 0x75, 0xeb, 0xf3, 0x81, 0xd6, 0x21, 0x2b, 0xcc, 0xbc, 0x6e, 0xed, 0x87, 0xb0, 0xac, 0x9f, 0x31, + 0x26, 0x11, 0xdd, 0x0f, 0x8b, 0xe8, 0x4e, 0xc8, 0x72, 0x05, 0x73, 0x4f, 0x7c, 0xdf, 0x62, 0xa5, + 0x85, 0xf3, 0xb3, 0x52, 0x2c, 0x94, 0x52, 0x56, 0xba, 0x0a, 0x64, 0x45, 0x4c, 0x3a, 0x8b, 0xa1, + 0x52, 0x36, 0xb9, 0xe1, 0x2c, 0xa7, 0x4a, 0xa7, 0x39, 0x74, 0x82, 0x13, 0xe6, 0x9e, 0xb5, 0xe2, + 0xbb, 0x40, 0x84, 0x19, 0xa0, 0xf4, 0xe4, 0x6d, 0x08, 0xca, 0x4c, 0xfd, 0x0e, 0x0c, 0x94, 0x63, + 0x77, 0xb2, 0x64, 0xd6, 0xcc, 0xa9, 0xcf, 0xf5, 0xf1, 0x8b, 0xda, 0xe4, 0x1d, 0x6d, 0xfc, 0x54, + 0xe6, 0xd0, 0xa0, 0xf9, 0xc2, 0xc7, 0xd5, 0xd4, 0xb1, 0xf3, 0xda, 0xf4, 0x0d, 0xed, 0xa3, 0x7e, + 0x96, 0xc7, 0x58, 0x73, 0xed, 0xf7, 0x9c, 0xd9, 0xf8, 0xb2, 0x29, 0x0e, 0xad, 0xca, 0x57, 0xb1, + 0xef, 0x05, 0x5f, 0x29, 0xfb, 0xb7, 0x0b, 0xd1, 0xaa, 0xad, 0xbe, 0xa6, 0xe0, 0x9f, 0x88, 0x1b, + 0xec, 0x46, 0x88, 0xf6, 0x69, 0x88, 0xbd, 0xba, 0xb3, 0xd6, 0x02, 0x67, 0x22, 0xc3, 0xe9, 0x99, + 0x43, 0x95, 0x99, 0xe1, 0x63, 0x5a, 0x22, 0x02, 0x37, 0x26, 0xc1, 0x30, 0x05, 0x9e, 0xf2, 0x30, + 0xa0, 0xb9, 0x4c, 0x43, 0x66, 0x28, 0xf3, 0xb7, 0x39, 0xb4, 0x44, 0xf1, 0x7b, 0x82, 0xfb, 0xdb, + 0xc2, 0xe4, 0xa8, 0x22, 0xe7, 0x00, 0x6b, 0x5b, 0xd0, 0xd7, 0xe4, 0xf3, 0xd7, 0x02, 0x12, 0x44, + 0x32, 0xfd, 0x39, 0xc9, 0xa2, 0x0d, 0x9c, 0xd7, 0xae, 0xe2, 0x1b, 0xfa, 0x87, 0x2f, 0x68, 0x93, + 0x07, 0xf5, 0x13, 0x77, 0xb4, 0xc4, 0x60, 0x7a, 0xfa, 0x9a, 0xde, 0x7f, 0x31, 0x19, 0x8b, 0xa7, + 0x27, 0x2f, 0x43, 0x6c, 0x90, 0x2c, 0x04, 0x78, 0x1e, 0x26, 0xf5, 0x49, 0x1c, 0x6e, 0x4d, 0xe8, + 0xa7, 0x06, 0x70, 0xf7, 0x18, 0x6a, 0x94, 0xf8, 0xb4, 0x8d, 0x72, 0x2e, 0x59, 0xd9, 0xac, 0x2d, + 0xbf, 0x01, 0x2d, 0x70, 0xb7, 0xb4, 0x10, 0x07, 0x1d, 0x08, 0x79, 0xe0, 0x6e, 0x69, 0x11, 0x57, + 0xbb, 0x5b, 0x5a, 0x88, 0x5b, 0x41, 0x5f, 0x44, 0x1f, 0xe9, 0xa3, 0xe2, 0x5e, 0x7a, 0xa6, 0x33, + 0x75, 0x75, 0x4a, 0x36, 0x90, 0x36, 0x84, 0x55, 0xe9, 0x57, 0x28, 0x20, 0xcc, 0x33, 0xc0, 0xe2, + 0x26, 0xc0, 0xcf, 0xbf, 0x70, 0xac, 0x70, 0xac, 0xd0, 0x40, 0x58, 0x23, 0x80, 0x46, 0x1b, 0x0b, + 0x04, 0xac, 0x65, 0x52, 0xf6, 0x36, 0x2a, 0xb1, 0xf5, 0x25, 0xef, 0x40, 0xc5, 0xa4, 0x35, 0xd8, + 0x5a, 0x07, 0x96, 0x1d, 0x16, 0xc4, 0x2f, 0x43, 0x05, 0xcd, 0x1d, 0xc4, 0xbc, 0x53, 0xd0, 0xdc, + 0x61, 0x7c, 0xfb, 0x3a, 0x88, 0x47, 0x5d, 0x81, 0xaf, 0xa3, 0x2c, 0xc1, 0xa1, 0x27, 0xf2, 0x36, + 0xe2, 0xfb, 0xb1, 0xc8, 0xfe, 0x65, 0x01, 0x7a, 0xbc, 0x86, 0x38, 0x0b, 0xfc, 0xf1, 0xd7, 0xd8, + 0x7b, 0xb9, 0x3b, 0xee, 0x8f, 0x55, 0x69, 0x35, 0xbb, 0xe3, 0xd2, 0x2d, 0x91, 0xba, 0xe9, 0xdd, + 0xdf, 0x96, 0xbb, 0xa1, 0x59, 0x95, 0xf6, 0xa0, 0xdd, 0xc2, 0xdc, 0xad, 0x13, 0x5f, 0x01, 0xc3, + 0x34, 0x53, 0x00, 0x4c, 0xb0, 0x4a, 0x47, 0xfa, 0xc8, 0x65, 0xb0, 0x85, 0x9b, 0xde, 0x0d, 0x84, + 0x4f, 0x43, 0x06, 0x96, 0xef, 0xc2, 0x63, 0x46, 0x98, 0xd3, 0xe6, 0x2b, 0xe8, 0xfb, 0x31, 0x09, + 0xfe, 0x72, 0x01, 0x7a, 0x62, 0x8b, 0x2f, 0x14, 0x66, 0xeb, 0x5e, 0xaf, 0x04, 0x5b, 0xcd, 0x69, + 0xd0, 0xc1, 0x6e, 0xe9, 0x30, 0x11, 0x70, 0xa4, 0x28, 0x66, 0x4b, 0x7f, 0xeb, 0x7e, 0xec, 0x16, + 0xb0, 0x60, 0xc1, 0x6e, 0x01, 0x38, 0xe4, 0x51, 0x26, 0x08, 0x00, 0x00, 0xb1, 0x83, 0x99, 0x9d, + 0xff, 0x0d, 0xfb, 0xf4, 0x58, 0x60, 0x06, 0x9a, 0x64, 0xa6, 0xc7, 0x72, 0x2b, 0xf4, 0x30, 0x78, + 0xfe, 0x30, 0x42, 0xd7, 0xdb, 0xf9, 0x84, 0x2e, 0x6c, 0xad, 0xb3, 0x09, 0x5d, 0x4f, 0x11, 0x43, + 0x0a, 0x3e, 0x0a, 0xb1, 0x71, 0x9b, 0x2b, 0xfa, 0x81, 0x1e, 0x9b, 0x00, 0xb6, 0x61, 0x94, 0x53, + 0xa5, 0xb3, 0x1c, 0x1a, 0xe6, 0x84, 0xf9, 0x3a, 0x4c, 0xfc, 0x0d, 0x90, 0xa4, 0x75, 0xa3, 0x8c, + 0x0b, 0x6e, 0x66, 0x68, 0xa3, 0x9f, 0x69, 0x07, 0x4f, 0x27, 0xe3, 0x07, 0x53, 0x67, 0x26, 0xf4, + 0x0b, 0xc6, 0x9a, 0xd1, 0x27, 0xbe, 0x34, 0x52, 0x7b, 0x4f, 0x63, 0xdb, 0x63, 0x2f, 0xc0, 0x89, + 0xa2, 0x8f, 0x49, 0x59, 0x79, 0x7b, 0xc6, 0x80, 0x75, 0x6b, 0xbd, 0xa7, 0x93, 0xb1, 0xb8, 0x59, + 0x77, 0xec, 0xb1, 0x0a, 0x8e, 0xd9, 0x7a, 0x01, 0x7a, 0x32, 0x7f, 0xe5, 0xbe, 0x1f, 0xfa, 0x44, + 0x1d, 0xd5, 0x27, 0x16, 0xdc, 0x53, 0x9f, 0x20, 0xc6, 0x1d, 0x43, 0x9f, 0xb0, 0xc9, 0xce, 0x30, + 0x17, 0x70, 0xc2, 0x86, 0x77, 0x54, 0xa9, 0x11, 0xc9, 0xc2, 0xbc, 0x7d, 0x22, 0x3e, 0x93, 0x35, + 0x62, 0xfa, 0xd9, 0x03, 0x99, 0xd3, 0x43, 0xa0, 0x9c, 0x40, 0x2d, 0x7f, 0xcf, 0xe1, 0xde, 0xf8, + 0x3d, 0x67, 0xb6, 0xad, 0x6c, 0x70, 0x21, 0x7a, 0x2c, 0x9b, 0xa8, 0xb9, 0x64, 0x36, 0x67, 0x73, + 0xce, 0xf5, 0x0f, 0xc0, 0x39, 0x17, 0x05, 0x17, 0x80, 0x6a, 0x4b, 0xd8, 0x64, 0x6d, 0x2e, 0x9b, + 0xc4, 0x71, 0x6a, 0x98, 0x75, 0xf0, 0xd8, 0x1c, 0x93, 0x98, 0x5d, 0x0f, 0x1d, 0x39, 0x57, 0x25, + 0xfe, 0x38, 0xcb, 0xf8, 0x2d, 0x54, 0x18, 0x68, 0x53, 0x82, 0x58, 0xc5, 0x5f, 0x68, 0x05, 0x00, + 0xa3, 0x40, 0xf1, 0x29, 0xf3, 0x57, 0x56, 0xf7, 0x93, 0x61, 0xa4, 0x88, 0x8c, 0xc0, 0x3d, 0x57, + 0xc7, 0xff, 0x69, 0x97, 0xde, 0x7f, 0x2b, 0x40, 0x8f, 0xef, 0x50, 0x82, 0xbe, 0xdd, 0xfb, 0xff, + 0x48, 0xf6, 0xaa, 0x97, 0x59, 0xe7, 0x9c, 0x6f, 0x66, 0x61, 0x5a, 0xf0, 0xa7, 0xb0, 0x30, 0x6d, + 0x90, 0x55, 0x69, 0x1b, 0xda, 0x2a, 0xcc, 0xdd, 0x5b, 0xe2, 0x93, 0xe0, 0x04, 0x66, 0xb3, 0xaa, + 0x90, 0x33, 0xd3, 0xc8, 0x55, 0x76, 0x0b, 0x36, 0x69, 0xe2, 0x4d, 0x38, 0x1f, 0xbd, 0xef, 0xc7, + 0x26, 0xbc, 0x1b, 0xad, 0x60, 0xab, 0x8d, 0xcf, 0xb4, 0x5f, 0xb6, 0x86, 0x89, 0xbb, 0xb7, 0x75, + 0xc5, 0xb2, 0xdf, 0xe1, 0x0b, 0x19, 0x18, 0x8f, 0xb8, 0x64, 0xcb, 0xf4, 0xbb, 0xec, 0x6f, 0x17, + 0xa0, 0xd2, 0xdc, 0xc5, 0xf3, 0xfd, 0xd8, 0x1a, 0x64, 0xdb, 0xd6, 0xe0, 0x98, 0xaf, 0x33, 0xf0, + 0x45, 0xc5, 0xfb, 0xd8, 0x1e, 0xf8, 0x03, 0x1c, 0x5a, 0xbe, 0x57, 0xd9, 0xb5, 0x93, 0x79, 0xf6, + 0x94, 0x58, 0x49, 0x72, 0x1e, 0xff, 0x7a, 0x47, 0xd9, 0x25, 0x59, 0x58, 0xe0, 0xa0, 0x9c, 0x9d, + 0x57, 0xfc, 0x01, 0x9c, 0x83, 0xe7, 0x32, 0x46, 0x96, 0xb3, 0xc9, 0xcb, 0xf6, 0xda, 0x68, 0x6d, + 0xd8, 0xa4, 0x4a, 0x35, 0xa8, 0x5a, 0x98, 0x73, 0x64, 0xc4, 0x95, 0xd9, 0x7c, 0x6d, 0x8e, 0x4d, + 0x69, 0xa6, 0x08, 0x15, 0x62, 0x02, 0x3b, 0xea, 0x9d, 0xd8, 0xb6, 0x6a, 0xe3, 0x38, 0xe0, 0xfe, + 0x6e, 0x72, 0x9c, 0xd5, 0xf3, 0xec, 0x42, 0xb3, 0x89, 0xa8, 0xc5, 0x66, 0x36, 0xd0, 0x5b, 0x54, + 0x0c, 0xa3, 0x31, 0x03, 0x77, 0xaf, 0xec, 0x68, 0xf3, 0xb0, 0x51, 0xbb, 0xb3, 0x5e, 0x0d, 0x75, + 0x22, 0x04, 0xbf, 0xb2, 0x2d, 0x5f, 0x0c, 0x58, 0xe4, 0xe1, 0x37, 0x10, 0x20, 0x96, 0x2f, 0x26, + 0x9d, 0xff, 0xc0, 0x1e, 0xbf, 0x66, 0x21, 0x13, 0xb9, 0x80, 0x8d, 0x5e, 0x53, 0xc1, 0x7c, 0xd8, + 0x62, 0x58, 0x92, 0x47, 0x97, 0xd6, 0x9a, 0xcf, 0x30, 0x55, 0xd8, 0xa3, 0xc7, 0x54, 0x99, 0x2f, + 0x9b, 0xc2, 0x31, 0x14, 0xb6, 0x52, 0x92, 0x97, 0x4d, 0x8b, 0xf1, 0x1f, 0xd2, 0x26, 0xf2, 0x74, + 0xe9, 0x7a, 0xb4, 0xa4, 0xa3, 0xcd, 0x83, 0xdb, 0xb3, 0xd8, 0xca, 0x60, 0xc2, 0xc4, 0xa2, 0x8e, + 0x36, 0x0f, 0x69, 0x83, 0x09, 0xe3, 0x3f, 0x40, 0x45, 0xd4, 0x59, 0x84, 0x98, 0xb1, 0xb0, 0x23, + 0xaa, 0x05, 0x15, 0xd7, 0xa6, 0x27, 0x2f, 0x1b, 0x5d, 0x49, 0x02, 0x20, 0x18, 0x9c, 0x0e, 0x42, + 0x8f, 0xe0, 0x9f, 0xb3, 0x89, 0x28, 0x8e, 0x2e, 0x82, 0x23, 0x1c, 0x18, 0x80, 0x0a, 0xd9, 0xca, + 0xcb, 0xbf, 0x82, 0x16, 0xe1, 0xfb, 0xf4, 0xe4, 0xa8, 0xe9, 0x19, 0x43, 0x89, 0x02, 0x08, 0x0c, + 0x0f, 0xde, 0x01, 0xe0, 0x45, 0x0c, 0xb3, 0x29, 0x38, 0x95, 0x3d, 0xa5, 0x2a, 0xfa, 0xa6, 0xa7, + 0x54, 0xe8, 0x9b, 0x9f, 0x52, 0x15, 0x7f, 0x9b, 0x53, 0xaa, 0xa5, 0x0f, 0x78, 0x4a, 0xc5, 0xbf, + 0x8f, 0xaf, 0x0c, 0x2a, 0xc1, 0x0e, 0xc5, 0xeb, 0xaa, 0xaf, 0x6b, 0x6f, 0xc5, 0xe1, 0x48, 0x4b, + 0xe0, 0x2e, 0xb7, 0x3d, 0x45, 0x7c, 0xa6, 0xa3, 0xcd, 0x03, 0xcf, 0x3f, 0xba, 0xea, 0x21, 0x7c, + 0x31, 0x7d, 0x64, 0xa5, 0x1f, 0xe0, 0xb2, 0x3d, 0x07, 0xff, 0xae, 0xed, 0xaa, 0x29, 0x13, 0x90, + 0x94, 0x7d, 0x85, 0xb6, 0xdc, 0x7a, 0x76, 0x36, 0x39, 0x3d, 0x92, 0x3a, 0x36, 0x06, 0xb4, 0xe0, + 0x25, 0x16, 0xfa, 0xf2, 0x6c, 0x47, 0x9b, 0xc7, 0x76, 0x4b, 0x55, 0x46, 0xe6, 0xab, 0x61, 0x38, + 0x18, 0x69, 0x9e, 0x67, 0x32, 0x9c, 0x3e, 0x6f, 0x10, 0x56, 0xa5, 0x89, 0x29, 0x3e, 0x42, 0x7e, + 0xb8, 0xea, 0x1d, 0x4e, 0x57, 0x8d, 0x0c, 0xfe, 0xcc, 0xf4, 0xf9, 0x31, 0x7e, 0x07, 0xa2, 0x6f, + 0x92, 0xe1, 0x50, 0xa3, 0x73, 0x11, 0xc5, 0x8f, 0x1b, 0x51, 0x54, 0x71, 0xa5, 0xf9, 0xcb, 0x4e, + 0x96, 0x22, 0x6c, 0x78, 0x53, 0x95, 0xde, 0x40, 0xaf, 0x0b, 0x94, 0x07, 0x89, 0x6b, 0x59, 0xcf, + 0x17, 0xf2, 0x3c, 0xce, 0x1d, 0x2d, 0x7e, 0x0c, 0x84, 0x06, 0x58, 0xf1, 0xf0, 0xae, 0x20, 0x11, + 0xa2, 0x0e, 0x70, 0x68, 0xa1, 0x51, 0x34, 0xbf, 0x16, 0x2d, 0xf2, 0xf8, 0xbc, 0xc1, 0xd0, 0x5c, + 0xa1, 0x43, 0x9d, 0x38, 0xd2, 0xad, 0x3b, 0xac, 0xc8, 0x80, 0x47, 0xae, 0x84, 0x32, 0xe3, 0x6b, + 0x70, 0xab, 0x92, 0xec, 0x81, 0x62, 0xb0, 0x9c, 0x98, 0x3c, 0xf6, 0x7c, 0x92, 0xed, 0xc0, 0xb2, + 0x1f, 0xa1, 0x22, 0x4a, 0x9f, 0xe7, 0xd1, 0x42, 0xa3, 0x04, 0xd3, 0x2f, 0xda, 0xf8, 0xcd, 0x3f, + 0x82, 0x16, 0xed, 0x6a, 0x09, 0x78, 0xe0, 0xe2, 0x5e, 0xa1, 0x0c, 0x1f, 0x65, 0xff, 0xa1, 0x08, + 0xad, 0x64, 0x8e, 0x72, 0x76, 0xd4, 0x3b, 0x4d, 0xe9, 0xef, 0x83, 0x6c, 0x5e, 0xec, 0x7c, 0x00, + 0x8d, 0xe0, 0xb1, 0xe0, 0xca, 0x15, 0x05, 0xa5, 0xde, 0x79, 0x24, 0xc1, 0xac, 0x67, 0xeb, 0x0a, + 0xcc, 0xb8, 0x99, 0xdf, 0x98, 0x43, 0x7e, 0x5d, 0xbd, 0x32, 0xf8, 0xb0, 0xf5, 0x5c, 0x9d, 0xf5, + 0x82, 0x9d, 0x8d, 0x73, 0x36, 0xd2, 0x9d, 0x61, 0x81, 0x69, 0xbe, 0xb9, 0xd7, 0xce, 0x30, 0x4f, + 0x6b, 0xf2, 0xef, 0x19, 0x0b, 0xbf, 0xd9, 0x9e, 0xb1, 0xd9, 0xe2, 0xd2, 0x8b, 0x4c, 0x15, 0x2c, + 0x2f, 0x97, 0x9e, 0xaf, 0x7b, 0x4d, 0xfe, 0xbd, 0xc9, 0xfe, 0xf6, 0xf5, 0xfa, 0x39, 0x76, 0x88, + 0x79, 0x48, 0x91, 0xbd, 0x23, 0x90, 0xbb, 0x11, 0xbc, 0xfd, 0x2d, 0x37, 0x82, 0xaf, 0xab, 0x97, + 0x07, 0x4b, 0xe4, 0x85, 0x06, 0x8a, 0xbc, 0x08, 0x02, 0x02, 0x7e, 0x17, 0x5b, 0xc3, 0x9b, 0xd9, + 0x5b, 0xc3, 0x73, 0xf3, 0x6e, 0x0d, 0x5f, 0x57, 0x2f, 0x0e, 0x2e, 0x34, 0x9a, 0x6e, 0xed, 0x11, + 0x39, 0xfc, 0x16, 0xfd, 0xc1, 0xf8, 0x6d, 0xf1, 0x1f, 0x88, 0xdf, 0x2e, 0xfd, 0x43, 0xf0, 0xdb, + 0x92, 0xef, 0x90, 0xdf, 0xee, 0x56, 0x25, 0x0f, 0x72, 0x0b, 0xf9, 0x99, 0x8e, 0xb8, 0x12, 0x86, + 0x07, 0x94, 0xa8, 0x8e, 0x36, 0x0f, 0x68, 0xc3, 0xb6, 0xc3, 0x69, 0x66, 0x35, 0xff, 0x9e, 0x23, + 0x0b, 0xf0, 0xf7, 0x9c, 0x39, 0xf1, 0xa9, 0x85, 0xf3, 0x36, 0x87, 0x1e, 0xcd, 0x2e, 0xe3, 0xfb, + 0xa1, 0x58, 0x69, 0x85, 0x68, 0x25, 0x73, 0x0a, 0xf6, 0xc7, 0x63, 0xc9, 0x1f, 0xe4, 0x63, 0xc9, + 0xdf, 0x9d, 0xd0, 0xba, 0x21, 0x8b, 0xf5, 0x7e, 0x73, 0xa1, 0xfc, 0x1b, 0x32, 0xd8, 0xf5, 0xd9, + 0x0c, 0xf6, 0xde, 0x62, 0xf0, 0x77, 0xc6, 0x46, 0x7f, 0x95, 0xcb, 0x46, 0x1b, 0xbe, 0x35, 0x1b, + 0x7d, 0x28, 0xb8, 0x5c, 0xfe, 0xb3, 0x39, 0x19, 0xe9, 0x06, 0x4b, 0xe2, 0x2d, 0x34, 0xa7, 0xed, + 0x1c, 0xe7, 0xd0, 0x94, 0x13, 0x9a, 0x42, 0x6f, 0x20, 0x9b, 0x13, 0x16, 0x11, 0x75, 0x3e, 0xfb, + 0x1c, 0x7e, 0xbb, 0xcb, 0x1f, 0x7e, 0x51, 0x84, 0x93, 0x78, 0x1c, 0xf0, 0x2a, 0x8b, 0x4f, 0x3e, + 0x06, 0xa5, 0xe4, 0x70, 0xcb, 0x6c, 0xee, 0xb8, 0x37, 0x87, 0x3b, 0xe6, 0x2b, 0xad, 0x21, 0x1c, + 0xf4, 0xf9, 0x9b, 0xa0, 0xb4, 0xff, 0x0e, 0x79, 0xe7, 0x16, 0x55, 0x72, 0xa1, 0x4d, 0x42, 0x7e, + 0xee, 0x20, 0xf2, 0xf4, 0xf4, 0x7f, 0x47, 0xbd, 0x33, 0x97, 0x71, 0xc2, 0x44, 0x64, 0x4e, 0xdb, + 0x0f, 0x17, 0xa0, 0x47, 0xb3, 0x29, 0x7d, 0x3f, 0xcc, 0x2a, 0x6f, 0xdb, 0x3c, 0x78, 0x4a, 0xf3, + 0x9a, 0x55, 0x76, 0xd4, 0x3b, 0x81, 0x43, 0x80, 0x39, 0xa5, 0x14, 0x3a, 0x47, 0x1b, 0x1a, 0x00, + 0xe3, 0xc6, 0x8e, 0x7a, 0x27, 0x35, 0x30, 0xba, 0xc3, 0xee, 0xb2, 0x03, 0x05, 0x68, 0x25, 0x73, + 0x20, 0xf6, 0xc7, 0x63, 0xba, 0x94, 0xc3, 0x14, 0x7c, 0x3b, 0x0e, 0xb3, 0xa1, 0x5a, 0x95, 0x7e, + 0x8a, 0xde, 0x10, 0xf2, 0xb7, 0x42, 0xe4, 0x49, 0xa0, 0xd8, 0x79, 0x27, 0x07, 0x9e, 0x12, 0xd9, + 0xf9, 0xff, 0xff, 0x3b, 0x25, 0xb4, 0xdb, 0x9f, 0x43, 0xaf, 0xe4, 0x9f, 0x12, 0x37, 0x16, 0xa2, + 0x87, 0xa9, 0x79, 0x8b, 0x99, 0x10, 0x3f, 0xcb, 0x9e, 0x10, 0xeb, 0x1e, 0x60, 0x42, 0x2c, 0x0c, + 0x16, 0x94, 0x3e, 0xf2, 0xdd, 0x18, 0xaa, 0xa8, 0x11, 0x68, 0xc1, 0x7d, 0x19, 0x81, 0xda, 0xf3, + 0x99, 0xa4, 0xfe, 0xf0, 0x0a, 0x57, 0x83, 0x8d, 0xb1, 0xc3, 0xbe, 0x8b, 0x9f, 0x5f, 0x60, 0x59, + 0x77, 0x99, 0xc5, 0xba, 0xc1, 0x39, 0x1c, 0xbe, 0x29, 0xeb, 0xce, 0x62, 0xda, 0x1b, 0x4e, 0x70, + 0xaa, 0xa4, 0x72, 0x68, 0x90, 0x13, 0xf2, 0x8d, 0x90, 0xb8, 0x8f, 0xda, 0x1e, 0xe9, 0x64, 0xff, + 0x23, 0x1d, 0xa8, 0xfc, 0x45, 0x01, 0x7a, 0xc4, 0x5e, 0xa3, 0xef, 0xc7, 0xf2, 0xd9, 0x76, 0x1f, + 0x67, 0x98, 0xa4, 0x39, 0x60, 0xc0, 0x82, 0x25, 0xc4, 0xc3, 0x0b, 0x04, 0x5a, 0xef, 0x75, 0x63, + 0x09, 0x31, 0x8b, 0xc7, 0x34, 0xab, 0xe4, 0xed, 0x0c, 0x91, 0xb7, 0x8d, 0xcf, 0x1c, 0x86, 0xe1, + 0xce, 0x42, 0x72, 0xc9, 0x81, 0xe4, 0xfc, 0x27, 0xe3, 0xf0, 0x3f, 0x19, 0x87, 0xef, 0x61, 0x01, + 0x78, 0x3f, 0x9f, 0xd4, 0xfa, 0x5d, 0xe9, 0xef, 0xef, 0xa0, 0x65, 0xb4, 0x8a, 0xac, 0x75, 0x00, + 0x3b, 0x68, 0x64, 0x25, 0x89, 0xab, 0xb4, 0xe9, 0x8f, 0xb4, 0xbe, 0x7e, 0xa3, 0xef, 0x06, 0x27, + 0xcd, 0xf7, 0x9b, 0x88, 0xe4, 0x9b, 0x85, 0xcb, 0xff, 0xc2, 0x92, 0x40, 0x8b, 0xf3, 0x9f, 0xe3, + 0x18, 0xc2, 0x62, 0x8d, 0x12, 0x76, 0xfb, 0x5a, 0xf0, 0x29, 0xd1, 0x03, 0xc9, 0xa2, 0xff, 0x8c, + 0x91, 0x45, 0x97, 0xde, 0x17, 0xf9, 0x07, 0x94, 0x4a, 0xb3, 0x0c, 0x1b, 0x25, 0xdf, 0xa1, 0x61, + 0xa3, 0x6c, 0x90, 0x43, 0xcb, 0xec, 0xb5, 0xfb, 0x43, 0x19, 0x59, 0x9f, 0xcb, 0x19, 0x5d, 0x1c, + 0x0b, 0x3a, 0x7b, 0xb0, 0xca, 0x46, 0x39, 0xc6, 0x87, 0x82, 0x5c, 0xb6, 0xfc, 0x03, 0x08, 0x06, + 0x1b, 0x36, 0xa8, 0xd2, 0x2b, 0xe8, 0x47, 0xc2, 0x5c, 0x65, 0x89, 0xab, 0x80, 0x85, 0x9a, 0xf7, + 0x53, 0xb4, 0x91, 0xeb, 0x94, 0x59, 0x95, 0xfd, 0x4d, 0x01, 0x73, 0x62, 0x4a, 0xf3, 0x7d, 0x1f, + 0x9d, 0x69, 0x9e, 0xc8, 0xbb, 0x11, 0x41, 0x93, 0xee, 0x6f, 0x1f, 0xda, 0xa6, 0x4a, 0x5b, 0xd0, + 0xcf, 0x84, 0x39, 0xfb, 0xc3, 0xf4, 0xa6, 0x02, 0x43, 0x3f, 0xd3, 0x8b, 0x73, 0x6d, 0x4b, 0x3b, + 0x51, 0x31, 0x43, 0x87, 0x2f, 0xcd, 0x1a, 0x73, 0x6b, 0x9b, 0x59, 0x6d, 0xdb, 0x2a, 0xc0, 0x21, + 0x93, 0xdd, 0x05, 0x1e, 0xb5, 0x9b, 0x43, 0xcc, 0x2d, 0xa6, 0x2c, 0xca, 0xa1, 0x87, 0x36, 0x29, + 0xe1, 0x1d, 0xf5, 0x4e, 0x63, 0x2a, 0x9b, 0x73, 0xab, 0xd6, 0x64, 0xea, 0x9c, 0xe5, 0x15, 0x46, + 0x98, 0xfa, 0xb3, 0xb0, 0x5f, 0x41, 0x76, 0x10, 0x96, 0x1c, 0xc6, 0xd4, 0x87, 0x53, 0x63, 0xe8, + 0x19, 0x53, 0x49, 0x58, 0xa7, 0x4a, 0x55, 0xe8, 0x05, 0x21, 0xb7, 0x00, 0xf1, 0x51, 0xe8, 0x87, + 0x8e, 0x36, 0x4f, 0x6a, 0xb8, 0xdb, 0xc8, 0x4e, 0x26, 0xd3, 0xbf, 0x2e, 0x40, 0x3c, 0x8b, 0xfd, + 0xfd, 0x98, 0x46, 0x3f, 0xb3, 0x4d, 0xa3, 0x1c, 0x67, 0x11, 0xd2, 0x9a, 0xfb, 0x9b, 0x42, 0x1b, + 0x55, 0xc9, 0x89, 0x24, 0x21, 0x4f, 0x2f, 0x98, 0xab, 0x70, 0x47, 0xbd, 0xd3, 0x61, 0x75, 0xd9, + 0x5c, 0x33, 0xc7, 0x83, 0x96, 0x90, 0xfc, 0xfc, 0x0a, 0xb4, 0xa0, 0xa3, 0xcd, 0x0c, 0x5b, 0x63, + 0xfc, 0xa4, 0x27, 0x36, 0x05, 0xcc, 0x89, 0xcd, 0x2a, 0x54, 0x88, 0x99, 0xce, 0x2e, 0x12, 0x7f, + 0xab, 0x44, 0xa6, 0xdf, 0x4c, 0x3c, 0xcf, 0x85, 0x6c, 0x3c, 0xcf, 0xb2, 0xff, 0xb0, 0x12, 0x2d, + 0xc2, 0xf3, 0x93, 0xaf, 0xcd, 0xe6, 0x46, 0xd8, 0x3c, 0x53, 0x84, 0x61, 0x58, 0xbe, 0x78, 0xe2, + 0xbe, 0xee, 0x80, 0xbe, 0x44, 0xa2, 0xde, 0x32, 0xa3, 0x86, 0x01, 0xe2, 0x4a, 0x9a, 0x1d, 0x2e, + 0xa3, 0x13, 0x21, 0x01, 0xe2, 0xe2, 0x1e, 0xe0, 0x50, 0xa1, 0xe2, 0xf5, 0x85, 0x69, 0x54, 0xfd, + 0xc2, 0xea, 0x26, 0x55, 0xf2, 0x0a, 0x14, 0x28, 0xfe, 0x5c, 0x9b, 0xbc, 0x93, 0x8c, 0x0f, 0x34, + 0xb8, 0xdd, 0xe4, 0xca, 0x38, 0x7d, 0x81, 0xda, 0x92, 0x19, 0x12, 0x27, 0xd2, 0x5f, 0x1d, 0x65, + 0x83, 0xf8, 0x43, 0xa0, 0x81, 0xd4, 0x70, 0x37, 0x0d, 0x0c, 0x6f, 0x3e, 0x5a, 0xdd, 0x4f, 0xf0, + 0x27, 0x8f, 0xca, 0xb4, 0x0c, 0xfe, 0x08, 0x87, 0x50, 0xc0, 0x8c, 0x62, 0x67, 0xde, 0xd6, 0xff, + 0x61, 0x5e, 0x9e, 0xb2, 0x86, 0x46, 0xbb, 0x23, 0xf7, 0xf5, 0x71, 0x44, 0x28, 0x26, 0xb7, 0xf8, + 0x22, 0x38, 0xcf, 0xb3, 0x61, 0x10, 0xe1, 0xe5, 0xa1, 0xd4, 0x70, 0x37, 0x84, 0x8a, 0x83, 0x28, + 0x1a, 0xf0, 0x18, 0x0c, 0x44, 0x74, 0x94, 0x19, 0x02, 0xfc, 0x18, 0x87, 0x96, 0x62, 0x39, 0xc5, + 0xac, 0xcf, 0xa2, 0xfc, 0xe1, 0x2d, 0xa1, 0x3e, 0xb5, 0x0c, 0x26, 0xd4, 0xe8, 0x7d, 0x55, 0xfa, + 0xb9, 0x60, 0xa3, 0x20, 0xbe, 0x95, 0xb9, 0x78, 0x56, 0xbb, 0x74, 0x82, 0x2d, 0xde, 0x16, 0x88, + 0x11, 0x42, 0xea, 0xe1, 0x54, 0x63, 0x8c, 0x27, 0x2f, 0x43, 0x5c, 0x3c, 0x70, 0x0e, 0x06, 0xbf, + 0x0f, 0xe8, 0x64, 0xd9, 0x46, 0x97, 0xff, 0xdf, 0x39, 0xb4, 0x1c, 0x4f, 0x00, 0x2b, 0x12, 0x29, + 0xb9, 0xb6, 0xba, 0x2a, 0xa7, 0xb6, 0x14, 0xa3, 0xfa, 0x0c, 0xa7, 0x4a, 0x27, 0x39, 0x21, 0x3b, + 0xa7, 0x78, 0x80, 0x33, 0xc6, 0x36, 0x7e, 0x34, 0x19, 0x3b, 0x92, 0x9a, 0x3a, 0x9f, 0x8c, 0x45, + 0x68, 0x4c, 0x7f, 0xd6, 0x4d, 0x1a, 0xae, 0x23, 0x24, 0xa7, 0x2e, 0x83, 0x8a, 0x45, 0x95, 0x2e, + 0x7d, 0xa4, 0x0f, 0x44, 0x0e, 0x50, 0xd2, 0xb4, 0xe9, 0x8f, 0x48, 0x20, 0x92, 0xbb, 0x91, 0x4e, + 0x72, 0xd5, 0x3a, 0x19, 0x3b, 0xa2, 0x7f, 0x3e, 0xaa, 0x8f, 0x90, 0xf7, 0xe2, 0xf4, 0x93, 0xb7, + 0x92, 0x89, 0x61, 0xb8, 0x93, 0x69, 0xb4, 0x19, 0x04, 0x96, 0xec, 0x6a, 0xf1, 0xbf, 0x41, 0x4b, + 0x03, 0x21, 0x88, 0x27, 0xd5, 0xaa, 0xf8, 0xc3, 0x73, 0x85, 0xb5, 0x81, 0x80, 0x08, 0x20, 0xe0, + 0xda, 0x32, 0x88, 0x95, 0xb4, 0x59, 0x66, 0xd8, 0x03, 0xda, 0x30, 0x68, 0x27, 0xb9, 0x49, 0x0a, + 0xcc, 0xc4, 0x96, 0x97, 0x57, 0x71, 0xb8, 0x1f, 0x08, 0xbf, 0x65, 0x55, 0xa1, 0x70, 0x8e, 0x3e, + 0xa6, 0x71, 0xba, 0xaa, 0xdf, 0x52, 0xa5, 0x5a, 0x21, 0x37, 0xa7, 0xb8, 0x8e, 0xd6, 0x85, 0x7d, + 0x5f, 0x0f, 0x6a, 0x65, 0x4c, 0x50, 0x3c, 0x37, 0x6c, 0xf5, 0xc9, 0x25, 0x62, 0xac, 0x97, 0x87, + 0xe9, 0xd3, 0xfb, 0x4c, 0xb5, 0x50, 0x7e, 0x5f, 0x2e, 0x36, 0xfa, 0x0b, 0xe8, 0x2f, 0xf9, 0x72, + 0x8b, 0xcf, 0xd0, 0xaa, 0xb1, 0xd1, 0x5d, 0x6c, 0x75, 0xc9, 0x97, 0x8f, 0x75, 0xf5, 0x28, 0xfe, + 0xa6, 0xae, 0x1e, 0x4b, 0xbf, 0xb9, 0xab, 0x47, 0xc9, 0xb7, 0x71, 0xf5, 0x58, 0xf6, 0xa0, 0xae, + 0x1e, 0x13, 0x1c, 0x2a, 0xc1, 0x13, 0xb4, 0x3e, 0x18, 0xe8, 0xf0, 0x79, 0x95, 0x20, 0x79, 0xc6, + 0xf5, 0x10, 0xa7, 0x4a, 0x07, 0x38, 0xc1, 0x9e, 0x26, 0x06, 0x21, 0xc6, 0x26, 0x78, 0xcf, 0x5a, + 0xef, 0x9f, 0x61, 0x9d, 0x03, 0x3e, 0xc9, 0xb3, 0xc7, 0x23, 0x7d, 0xbf, 0xc2, 0x39, 0xd7, 0xee, + 0x6a, 0x69, 0x57, 0x9a, 0x7d, 0xfe, 0xa6, 0xb5, 0x10, 0x16, 0x77, 0xad, 0x7b, 0x6f, 0x08, 0x42, + 0xe0, 0xa6, 0x06, 0xae, 0x6b, 0x83, 0x5d, 0xe9, 0xc8, 0x01, 0x32, 0xb8, 0x55, 0x64, 0x74, 0x93, + 0xb1, 0x23, 0x38, 0x67, 0x1b, 0x29, 0x53, 0xb6, 0x57, 0x81, 0x8f, 0x70, 0x68, 0xb1, 0x07, 0xc2, + 0xd8, 0xad, 0xb0, 0xde, 0xdd, 0x21, 0x20, 0xf1, 0x7d, 0x60, 0x3a, 0x60, 0x5d, 0xa9, 0x74, 0x24, + 0x67, 0xce, 0x6a, 0xe3, 0xa7, 0x32, 0x91, 0xae, 0x4c, 0x4f, 0xbf, 0x36, 0xd4, 0x9d, 0xba, 0xda, + 0x6f, 0x0a, 0xae, 0xe4, 0x29, 0x62, 0x12, 0xcf, 0x18, 0x58, 0x2c, 0x78, 0x5a, 0x98, 0x41, 0x7e, + 0x1c, 0x1f, 0x86, 0x02, 0xfe, 0xf4, 0xd5, 0x8f, 0xf5, 0x73, 0x43, 0x64, 0x25, 0x93, 0x42, 0xf8, + 0xb7, 0x51, 0xb1, 0x57, 0xa1, 0x31, 0x38, 0xc8, 0x5b, 0xff, 0xe0, 0x2f, 0xcf, 0xc0, 0xc5, 0xa7, + 0x40, 0x61, 0x04, 0x7f, 0xba, 0xc9, 0x2b, 0xa9, 0xa9, 0x83, 0xc9, 0xa9, 0x23, 0xa9, 0xa9, 0x7e, + 0xf3, 0x91, 0x0a, 0x06, 0x97, 0xdf, 0x82, 0x90, 0xe2, 0x6f, 0xf2, 0xf9, 0x21, 0x18, 0x0e, 0x6f, + 0x99, 0x19, 0x18, 0xb0, 0xf8, 0x84, 0x16, 0x3f, 0xae, 0xdd, 0xe8, 0xb2, 0xde, 0x14, 0x4a, 0x1c, + 0xd7, 0x3f, 0x1a, 0x20, 0x6f, 0x0a, 0x33, 0x88, 0xfc, 0x07, 0xf4, 0x1a, 0x23, 0xbc, 0xe5, 0x8f, + 0x63, 0x54, 0x9a, 0x57, 0x15, 0x5f, 0x4d, 0xc6, 0x8f, 0x42, 0x1c, 0x53, 0xd8, 0xf0, 0x4c, 0x39, + 0xe6, 0x34, 0x89, 0x4b, 0x33, 0x38, 0x99, 0xbe, 0xda, 0x59, 0xae, 0x45, 0x12, 0xc9, 0x58, 0xdc, + 0xd0, 0x9c, 0xf5, 0xde, 0x13, 0xe4, 0xb9, 0x26, 0xf3, 0xe6, 0xe2, 0x3f, 0xa7, 0x76, 0x04, 0x83, + 0x43, 0xe1, 0x07, 0xff, 0xe7, 0x72, 0x32, 0xac, 0xb3, 0xf0, 0x40, 0x37, 0x63, 0x73, 0x8a, 0xcf, + 0xe7, 0xe7, 0xcf, 0xd8, 0xe6, 0xc0, 0x0e, 0x90, 0xcc, 0xe6, 0xe2, 0x3f, 0x44, 0x85, 0xc6, 0x40, + 0xe0, 0xb2, 0x57, 0xe2, 0xb2, 0x9f, 0xce, 0x5b, 0x36, 0xc4, 0xea, 0xc3, 0x45, 0xe3, 0x70, 0x26, + 0x34, 0x97, 0xb8, 0x3a, 0xab, 0xdc, 0x64, 0xfc, 0xa8, 0xad, 0x38, 0x8a, 0xc9, 0xff, 0x16, 0x2d, + 0x6d, 0x6b, 0x71, 0x87, 0x77, 0x07, 0x82, 0xad, 0xb8, 0xbc, 0x47, 0xe7, 0xdb, 0x3a, 0xeb, 0x19, + 0x4c, 0xd8, 0x3a, 0xf1, 0x85, 0x4e, 0x1b, 0x05, 0x71, 0x35, 0x04, 0x93, 0x60, 0x23, 0xcc, 0xda, + 0xca, 0xb6, 0x61, 0xaf, 0x7a, 0x0f, 0x2d, 0xcf, 0x12, 0x10, 0xbe, 0xb3, 0x90, 0xba, 0xab, 0x7e, + 0x81, 0x1e, 0xca, 0xd9, 0xec, 0xbf, 0x3b, 0xea, 0x3f, 0x45, 0x0f, 0xe5, 0xf4, 0xc7, 0x03, 0x05, + 0x06, 0xea, 0xe6, 0x54, 0x29, 0xc2, 0xa1, 0xdf, 0x0a, 0x20, 0x57, 0x8a, 0xed, 0xc6, 0x88, 0xd1, + 0x1d, 0xfb, 0xd2, 0xb0, 0xd1, 0x77, 0x24, 0x62, 0xc2, 0x11, 0x12, 0xdf, 0x04, 0x1e, 0xf1, 0xc1, + 0x0f, 0x2f, 0x53, 0x4c, 0x2a, 0xc3, 0x69, 0x23, 0xd7, 0x41, 0x8c, 0x4b, 0x7f, 0x74, 0x36, 0xf3, + 0x79, 0xcc, 0x18, 0x73, 0x53, 0x98, 0x33, 0x64, 0x14, 0x33, 0x6e, 0x4f, 0x96, 0x84, 0x57, 0x36, + 0xb8, 0x04, 0x2d, 0xcf, 0x9a, 0x4e, 0xbc, 0x0f, 0x3d, 0x0c, 0x62, 0xaa, 0x1f, 0x42, 0x95, 0xc1, + 0x13, 0x75, 0xe4, 0xdd, 0x34, 0x1c, 0x10, 0x23, 0x5f, 0xba, 0xf8, 0x14, 0xdc, 0x95, 0x65, 0x9f, + 0xbb, 0x3b, 0xd8, 0x93, 0x39, 0x30, 0x46, 0xd8, 0x4b, 0xbe, 0x3c, 0x06, 0xaf, 0xc1, 0x60, 0xf2, + 0x1a, 0x46, 0x01, 0xc3, 0x6b, 0x18, 0x38, 0x21, 0x0d, 0x1f, 0x40, 0x14, 0x4c, 0x80, 0x84, 0x34, + 0x8b, 0xcb, 0xbf, 0x8b, 0x4a, 0x5a, 0xdd, 0x9e, 0x3d, 0x3e, 0xbf, 0x52, 0xc3, 0x3e, 0x86, 0x86, + 0x8d, 0xe3, 0xf6, 0x14, 0xf1, 0x69, 0xdb, 0x67, 0x1e, 0xc2, 0x76, 0x7c, 0x3e, 0x88, 0x1e, 0xf1, + 0xfa, 0x42, 0x46, 0xc5, 0x9d, 0xb6, 0x18, 0xc2, 0x70, 0xf5, 0x11, 0x47, 0xeb, 0xcd, 0x8b, 0x20, + 0x3e, 0xcb, 0x76, 0x4d, 0xcf, 0x17, 0x99, 0x93, 0xe3, 0x6c, 0xd0, 0x4e, 0x78, 0xce, 0x53, 0xce, + 0x9b, 0x95, 0x29, 0xd3, 0x65, 0x0b, 0x45, 0xbb, 0x28, 0xb7, 0x4c, 0x1b, 0x42, 0xbe, 0x32, 0x71, + 0x7c, 0x82, 0xbc, 0x65, 0xda, 0xb2, 0xf2, 0x1e, 0xb4, 0x82, 0xc0, 0xad, 0xf0, 0x99, 0xcc, 0x1b, + 0x8a, 0x39, 0x89, 0xa2, 0x23, 0xa7, 0x2c, 0x12, 0xd4, 0xef, 0xc6, 0x05, 0x52, 0x50, 0x4e, 0x1e, + 0xde, 0x85, 0x8a, 0x3a, 0xda, 0x3c, 0xec, 0x33, 0x28, 0x44, 0x95, 0xa2, 0x50, 0xf1, 0x09, 0xfa, + 0x33, 0xcf, 0xd8, 0x58, 0x78, 0xfc, 0x20, 0x87, 0x1e, 0x37, 0x3b, 0x6f, 0x8f, 0xe2, 0x69, 0xc6, + 0x05, 0x98, 0x0f, 0x2c, 0x90, 0xd7, 0x14, 0xdf, 0x56, 0xa5, 0x3a, 0x61, 0x6e, 0x2c, 0x71, 0xfd, + 0xdc, 0x4d, 0x80, 0x70, 0x50, 0xf8, 0x55, 0x0d, 0xfd, 0xc2, 0x68, 0xe6, 0xd3, 0x28, 0x79, 0xc0, + 0x71, 0x6e, 0x6a, 0x1b, 0x8c, 0xcd, 0x00, 0xbd, 0x24, 0x64, 0x2f, 0x2d, 0xf1, 0x99, 0xac, 0x77, + 0x07, 0xc8, 0x4b, 0xd5, 0x0c, 0x87, 0x2c, 0x1b, 0x5b, 0x42, 0x6e, 0x00, 0x30, 0x9b, 0x0b, 0xbf, + 0x09, 0xd1, 0x07, 0xfd, 0xb1, 0x85, 0xae, 0x04, 0xfa, 0x8a, 0x02, 0xc5, 0x27, 0x8d, 0x5f, 0x10, + 0x78, 0x10, 0xe2, 0xe9, 0xe9, 0xe3, 0x97, 0x33, 0xc7, 0x67, 0xc8, 0x13, 0x4b, 0x14, 0x8f, 0x3f, + 0xc4, 0xa1, 0x22, 0xf3, 0x03, 0x2e, 0x05, 0xe4, 0xe1, 0x79, 0xb5, 0xfe, 0x0e, 0x27, 0xc1, 0x81, + 0x8b, 0x1f, 0x56, 0x16, 0xf1, 0xc7, 0xf3, 0x15, 0x54, 0x9e, 0x19, 0x1e, 0x24, 0x17, 0x71, 0x07, + 0xf1, 0x65, 0x75, 0xdc, 0xb0, 0x74, 0x24, 0xaa, 0x0d, 0x9e, 0xd2, 0xa2, 0x27, 0x2a, 0x64, 0x8b, + 0x10, 0xbf, 0x03, 0x2d, 0x25, 0xb1, 0xa2, 0xa0, 0x2e, 0x0b, 0x70, 0xb3, 0x44, 0x55, 0x5a, 0x2b, + 0xd8, 0x12, 0xc4, 0xa7, 0xc9, 0x17, 0xd8, 0x79, 0xf3, 0xb4, 0xce, 0x86, 0xce, 0xcb, 0xa8, 0xa4, + 0x4d, 0x09, 0x1a, 0xf3, 0xac, 0x3e, 0xe0, 0xad, 0x6b, 0x6f, 0xc5, 0xfa, 0x69, 0x09, 0x88, 0x1b, + 0xf6, 0x14, 0xb1, 0x54, 0xeb, 0x3f, 0x0e, 0xa3, 0xdc, 0x16, 0xf0, 0x02, 0x79, 0x73, 0xe1, 0xdb, + 0x10, 0xf9, 0x20, 0x2a, 0x31, 0xed, 0xb2, 0x50, 0xd9, 0x45, 0x98, 0x26, 0xee, 0x1b, 0x7b, 0x8a, + 0xf8, 0xaa, 0xf9, 0x99, 0xf3, 0x6a, 0x3d, 0x5c, 0x07, 0x38, 0xa2, 0x1d, 0x36, 0x74, 0x45, 0x43, + 0x62, 0xc3, 0x6f, 0x3b, 0x1a, 0x5a, 0x04, 0x6e, 0x8c, 0x6c, 0x27, 0xc4, 0xef, 0x43, 0x0f, 0x99, + 0x00, 0xa9, 0x3d, 0x1c, 0x80, 0x72, 0x17, 0xe3, 0x72, 0xf1, 0xeb, 0x10, 0xb9, 0xa9, 0xa2, 0x38, + 0x47, 0xd9, 0x24, 0x20, 0x65, 0xde, 0x52, 0x73, 0xc9, 0xf0, 0x6d, 0x56, 0x6b, 0x65, 0x77, 0xd8, + 0x17, 0xc0, 0xab, 0xf3, 0xbb, 0x2d, 0xd5, 0x5e, 0x00, 0xdf, 0x81, 0x8a, 0x3b, 0xda, 0x3c, 0x4e, + 0xbf, 0x6f, 0x2b, 0x8e, 0x84, 0x5a, 0x98, 0x7f, 0x5a, 0x92, 0x05, 0x61, 0xe0, 0x00, 0x23, 0x62, + 0x33, 0x89, 0x3f, 0x24, 0x4f, 0xcd, 0x9b, 0x0f, 0x6c, 0x1c, 0xa1, 0x41, 0xb9, 0xd8, 0x7a, 0xc9, + 0x6c, 0x1e, 0xf3, 0x21, 0xa3, 0x9c, 0xf5, 0x86, 0x6f, 0x6f, 0xd0, 0x75, 0x0a, 0x8b, 0x34, 0x57, + 0x6e, 0x2b, 0x7b, 0x11, 0x15, 0x33, 0x4b, 0xc5, 0xd8, 0xfe, 0x15, 0x7f, 0x87, 0xb9, 0xfd, 0x2b, + 0xfe, 0x0e, 0x1c, 0x48, 0xd9, 0x58, 0xb2, 0x60, 0x1b, 0xc7, 0xbf, 0xcb, 0xb6, 0xa1, 0x62, 0xa6, + 0x21, 0x06, 0x4a, 0xab, 0x69, 0xf1, 0x2b, 0x92, 0xf1, 0x6f, 0xbe, 0x14, 0x2d, 0x21, 0x41, 0x12, + 0x89, 0x57, 0xb1, 0xf9, 0x49, 0x1f, 0x4b, 0x5a, 0x60, 0x3d, 0x96, 0x54, 0x76, 0xf1, 0x51, 0x54, + 0x64, 0xb1, 0xd5, 0x9f, 0xa2, 0x62, 0xaa, 0xf5, 0x51, 0x1b, 0x15, 0xd6, 0x98, 0x58, 0xb8, 0x58, + 0x4c, 0xc3, 0x6c, 0xba, 0x6a, 0x64, 0x36, 0x85, 0x5f, 0x63, 0xb3, 0x4c, 0x81, 0x09, 0x12, 0x5b, + 0xa6, 0x96, 0x5b, 0x91, 0x3c, 0x59, 0x9b, 0xd4, 0xce, 0x9c, 0xe7, 0x79, 0x20, 0x10, 0xba, 0x05, + 0x15, 0xd7, 0x33, 0xb1, 0x3e, 0x23, 0x70, 0xa3, 0x9a, 0xbe, 0x09, 0x05, 0x06, 0x14, 0x57, 0x4d, + 0x32, 0x16, 0x37, 0x64, 0x19, 0x78, 0xe3, 0xba, 0x86, 0x7d, 0xe1, 0xc7, 0x49, 0x2d, 0xba, 0x0b, + 0x99, 0x67, 0x4d, 0xc9, 0xc1, 0xe2, 0xea, 0x5c, 0xd2, 0x79, 0x4f, 0x18, 0x77, 0xa3, 0xe5, 0x20, + 0xde, 0x1b, 0xf3, 0x36, 0xe4, 0x71, 0x93, 0x18, 0x28, 0x85, 0xd5, 0x3f, 0x56, 0xa5, 0xd7, 0x84, + 0xec, 0x34, 0xf1, 0x39, 0x9b, 0x18, 0xc3, 0xe8, 0xd7, 0x34, 0xdc, 0x09, 0xf8, 0x85, 0x65, 0x67, + 0xe4, 0xfd, 0xa8, 0xd8, 0x6d, 0xac, 0x0c, 0x8f, 0xbb, 0xc5, 0xe7, 0x6f, 0x22, 0xd6, 0x9d, 0x1c, + 0xe5, 0x41, 0xb2, 0x50, 0x70, 0xb7, 0x93, 0xe7, 0xff, 0x98, 0x9c, 0x62, 0xa9, 0x2d, 0x66, 0x2b, + 0xd6, 0x48, 0x4d, 0x69, 0x87, 0x41, 0xe3, 0xa3, 0x1c, 0x5a, 0xd6, 0xe2, 0x6e, 0xf7, 0x7b, 0xf6, + 0x34, 0x2a, 0xad, 0x86, 0x6c, 0xad, 0x10, 0x83, 0x4b, 0x4e, 0xf4, 0xcc, 0x2d, 0x18, 0x0b, 0xf6, + 0xa2, 0x76, 0x78, 0x63, 0x09, 0xac, 0x2f, 0x59, 0xf9, 0x45, 0x01, 0xca, 0xd4, 0x4f, 0xde, 0x22, + 0xcf, 0xde, 0x9b, 0xea, 0x70, 0xf2, 0xab, 0x23, 0x54, 0x9c, 0x87, 0x30, 0xb3, 0x72, 0x56, 0x5e, + 0xe6, 0xe5, 0xcc, 0xc2, 0x39, 0x1e, 0xd2, 0x32, 0x67, 0x9a, 0xed, 0xdd, 0x4c, 0xdc, 0x7c, 0xf3, + 0xdd, 0xcc, 0xa7, 0x72, 0xdf, 0x74, 0xc4, 0x29, 0xe6, 0x88, 0x92, 0x47, 0xb7, 0x5a, 0xe9, 0x73, + 0x91, 0x45, 0xf7, 0x2a, 0x0a, 0x3f, 0x1c, 0x49, 0x8a, 0x82, 0xf7, 0x79, 0xc8, 0xf3, 0x91, 0xcf, + 0xe4, 0x16, 0x65, 0xf0, 0xa8, 0x1b, 0xa3, 0xa9, 0xae, 0x3b, 0x59, 0x2f, 0x48, 0xee, 0x46, 0x8b, + 0x8d, 0x55, 0xb2, 0xad, 0x81, 0xdc, 0x73, 0xc1, 0x8f, 0xdf, 0x11, 0x90, 0x28, 0x51, 0x3a, 0x99, + 0x48, 0x1f, 0x68, 0xaf, 0x10, 0xcd, 0x73, 0x5b, 0x03, 0xb6, 0xbf, 0x75, 0xa5, 0x7a, 0xae, 0x52, + 0xf9, 0x3e, 0x19, 0x1b, 0x87, 0x3e, 0x34, 0x3a, 0xd3, 0x7c, 0xd1, 0x54, 0x26, 0xa4, 0xf0, 0xc9, + 0x07, 0x6b, 0x9e, 0xb1, 0xec, 0x2f, 0xa5, 0x59, 0xf6, 0x17, 0xcb, 0xc0, 0x62, 0x7f, 0xc5, 0xaa, + 0xe4, 0x1e, 0xaf, 0x58, 0x2d, 0xcb, 0x79, 0xc5, 0xaa, 0x8f, 0x63, 0xaf, 0x04, 0x83, 0x85, 0x04, + 0xbf, 0xb4, 0xc3, 0x5c, 0x09, 0x7e, 0x9f, 0x76, 0xe7, 0x03, 0x85, 0x23, 0x34, 0xd6, 0x0b, 0x3c, + 0xab, 0x1b, 0x1b, 0x20, 0xe3, 0x03, 0xf9, 0x93, 0x33, 0x67, 0xf5, 0x68, 0x67, 0x32, 0x16, 0x49, + 0x1f, 0xba, 0xc9, 0xde, 0x12, 0xfe, 0xf7, 0x1c, 0x2a, 0x34, 0x8d, 0x23, 0xc4, 0x04, 0x72, 0x8b, + 0x53, 0xa5, 0xcf, 0x39, 0x81, 0x82, 0xc5, 0xcb, 0x1c, 0xad, 0x4c, 0x96, 0xad, 0x86, 0xb0, 0x6d, + 0x78, 0x5e, 0x08, 0x97, 0x43, 0x0a, 0x4d, 0xc6, 0xc6, 0xa9, 0x15, 0xd1, 0xa4, 0x43, 0xce, 0x15, + 0xae, 0x1f, 0xd0, 0x8f, 0x5b, 0x36, 0xe7, 0xd4, 0xd4, 0xc1, 0xf4, 0xe1, 0xae, 0xbb, 0x91, 0x2e, + 0x68, 0x8e, 0x36, 0x32, 0x66, 0x68, 0xd0, 0xb1, 0x4f, 0x0d, 0x7d, 0x0c, 0x4b, 0x36, 0xc9, 0xd8, + 0x38, 0x58, 0x61, 0xa8, 0x25, 0xd8, 0x98, 0x32, 0x78, 0x39, 0x18, 0x9d, 0x80, 0xad, 0x17, 0xa0, + 0xfe, 0xca, 0xb4, 0xc6, 0xfc, 0x5f, 0x70, 0xf4, 0x60, 0x01, 0xec, 0x29, 0x93, 0x9c, 0x2a, 0xf9, + 0x04, 0x02, 0x13, 0x77, 0x5a, 0x91, 0xc5, 0x0f, 0xdf, 0xd2, 0x23, 0x9d, 0x60, 0xb4, 0x4d, 0x1f, + 0x98, 0x86, 0x4f, 0xa7, 0x5c, 0x2b, 0x35, 0xba, 0xea, 0x36, 0xcd, 0x26, 0xa2, 0xf2, 0xf6, 0xba, + 0x3a, 0xf8, 0x55, 0x53, 0xbb, 0xa5, 0x96, 0x00, 0x37, 0x4a, 0x5b, 0xb6, 0xcb, 0xb5, 0xb3, 0x89, + 0xa8, 0xab, 0xce, 0xd5, 0xe8, 0x92, 0xb6, 0xb8, 0xde, 0x93, 0x1a, 0x5d, 0xdb, 0xea, 0x4c, 0xa4, + 0xda, 0x9a, 0xaf, 0xab, 0xdf, 0x0c, 0xfe, 0x44, 0x2e, 0x34, 0xe9, 0xc8, 0x4b, 0x08, 0x19, 0xb9, + 0xd0, 0xa4, 0x22, 0x2f, 0x06, 0x22, 0xf2, 0x32, 0x3b, 0x0d, 0x79, 0x09, 0x21, 0x41, 0x9f, 0x36, + 0xdb, 0x83, 0x90, 0x27, 0xe0, 0x0f, 0xb5, 0xb7, 0x62, 0x86, 0x0f, 0xb6, 0x1c, 0x6c, 0x3e, 0x65, + 0xc0, 0xe2, 0x2b, 0xd6, 0x6f, 0x78, 0x9a, 0xc6, 0x8c, 0xa0, 0x0a, 0x86, 0xc8, 0x20, 0x3c, 0x69, + 0x93, 0x3a, 0xf6, 0x45, 0x7a, 0xf2, 0x36, 0x88, 0xd7, 0xd0, 0x71, 0x32, 0x43, 0x84, 0x0f, 0xa2, + 0xa5, 0xc6, 0xa2, 0xa0, 0x8c, 0xed, 0xe1, 0xb9, 0xed, 0xa5, 0x26, 0x4e, 0xf5, 0x3a, 0x1c, 0x53, + 0x94, 0xcd, 0x26, 0xae, 0xb4, 0xf6, 0x2d, 0xbc, 0x44, 0x41, 0x6a, 0xfc, 0xba, 0x7a, 0xd1, 0x61, + 0xae, 0x60, 0x05, 0x27, 0xdb, 0x90, 0xf9, 0x5d, 0x08, 0xc2, 0xf4, 0xd4, 0x31, 0x7b, 0xe8, 0x23, + 0xb8, 0x8d, 0x38, 0x20, 0x56, 0x4e, 0xa2, 0xf8, 0x34, 0xfd, 0x70, 0x68, 0x23, 0x63, 0xda, 0x50, + 0x37, 0xcc, 0x95, 0x64, 0xec, 0x70, 0x6a, 0xb8, 0xdb, 0xe1, 0xaa, 0x91, 0x73, 0xb2, 0xf0, 0xcd, + 0x68, 0x61, 0xd8, 0xdd, 0x14, 0x2a, 0x5d, 0x99, 0x3f, 0xcc, 0x31, 0xcb, 0xb7, 0xcc, 0x67, 0x7e, + 0xb1, 0x58, 0x8c, 0x73, 0x89, 0xcf, 0xe7, 0xe5, 0x59, 0xd0, 0x89, 0xfa, 0x85, 0x43, 0xa9, 0xf1, + 0xaf, 0xcc, 0x63, 0x36, 0x03, 0x9d, 0xff, 0x92, 0x43, 0x25, 0x74, 0x7b, 0xc7, 0xe6, 0xb7, 0x47, + 0x71, 0x73, 0x06, 0x38, 0x55, 0x3a, 0xcc, 0x09, 0xf6, 0x34, 0x71, 0xbf, 0xa5, 0xb7, 0x81, 0x53, + 0x8c, 0x3f, 0x10, 0x6c, 0x75, 0xb7, 0xac, 0x55, 0x48, 0xd4, 0xf2, 0x8a, 0xbb, 0x91, 0x2e, 0xfd, + 0xf4, 0x44, 0x26, 0x32, 0xcc, 0x6e, 0x4f, 0x34, 0x93, 0xa6, 0x46, 0x69, 0x44, 0xf4, 0xbc, 0x08, + 0x95, 0x0e, 0xad, 0xff, 0x0b, 0xe7, 0x8e, 0xad, 0x04, 0xd0, 0x7b, 0xc2, 0x55, 0xe3, 0x84, 0xdf, + 0xb2, 0xbd, 0x26, 0x7c, 0x84, 0x43, 0x0b, 0xdd, 0x41, 0xc5, 0x5d, 0xfa, 0x18, 0x1e, 0xf5, 0xc7, + 0xf3, 0x5f, 0xf2, 0x0d, 0x2a, 0x6e, 0xd0, 0xec, 0x30, 0xae, 0xb8, 0x91, 0xd0, 0xc5, 0xcf, 0xa7, + 0x1b, 0xea, 0x15, 0x23, 0x0a, 0x94, 0x83, 0x04, 0x9e, 0x8c, 0xf5, 0xeb, 0xd1, 0x43, 0xda, 0xc4, + 0x70, 0xa5, 0x43, 0xeb, 0x3d, 0x0d, 0xb3, 0x8e, 0x06, 0xb4, 0x06, 0xfc, 0x0a, 0x19, 0x53, 0xc3, + 0x6c, 0x11, 0x9f, 0xdf, 0x60, 0xdb, 0x58, 0x29, 0x1e, 0xad, 0xf2, 0xb9, 0x47, 0xab, 0xd6, 0x44, + 0x85, 0x21, 0x03, 0x21, 0x88, 0xe6, 0x37, 0x85, 0x20, 0xfd, 0xc6, 0x05, 0x60, 0x1f, 0xc9, 0x99, + 0xd1, 0x4a, 0x88, 0xb5, 0x44, 0xc6, 0xce, 0xec, 0xf3, 0xd4, 0x78, 0x9f, 0x19, 0xfd, 0x8c, 0xe6, + 0xfe, 0x36, 0xcf, 0xe1, 0xbe, 0x86, 0x8a, 0x99, 0x0d, 0xf0, 0x81, 0xb2, 0xbe, 0x82, 0x8a, 0xe8, + 0x1c, 0xfc, 0x46, 0x4f, 0xf0, 0x7e, 0x33, 0xdb, 0x98, 0x31, 0xa2, 0x68, 0x8b, 0x60, 0x49, 0xb5, + 0x4c, 0xf4, 0x7d, 0x83, 0x35, 0x4e, 0xde, 0x01, 0x23, 0xd7, 0xdd, 0x48, 0x27, 0x35, 0x6c, 0xdd, + 0x8d, 0x74, 0x4a, 0xef, 0x34, 0xd8, 0x26, 0xdd, 0x81, 0x69, 0xed, 0xf0, 0x19, 0xed, 0x7a, 0x67, + 0xfa, 0xe3, 0x9e, 0xb2, 0x28, 0x87, 0x8a, 0xe8, 0x94, 0xe1, 0x37, 0xa0, 0xa2, 0x5d, 0xcd, 0x4e, + 0xe6, 0x18, 0xb7, 0x84, 0x9c, 0x48, 0x50, 0xa8, 0xb8, 0x94, 0x4e, 0x07, 0x63, 0x11, 0x5b, 0x09, + 0xbc, 0x13, 0x15, 0x93, 0x0f, 0x26, 0x36, 0x28, 0x76, 0xa6, 0x62, 0xe1, 0x38, 0x22, 0x8d, 0xcd, + 0x55, 0x8d, 0x4d, 0x2d, 0xeb, 0xe4, 0xd1, 0x8a, 0x6c, 0x21, 0xd0, 0xd0, 0xcd, 0x4b, 0x18, 0xd9, + 0x8e, 0x4a, 0xef, 0x6e, 0x55, 0xfa, 0xa5, 0x60, 0x4f, 0x11, 0xb7, 0xda, 0x0e, 0x7d, 0x0c, 0x29, + 0xde, 0xd8, 0x7c, 0x98, 0xa3, 0x1b, 0xfc, 0x56, 0xfd, 0x74, 0xea, 0xf8, 0x65, 0x46, 0xc0, 0x36, + 0x76, 0xac, 0xa9, 0xb8, 0xab, 0x06, 0xce, 0x52, 0x93, 0xf1, 0xa3, 0xe9, 0x89, 0xaf, 0xf4, 0x13, + 0xd3, 0xae, 0x1a, 0xd9, 0x4e, 0x9d, 0xdf, 0x8e, 0x96, 0x33, 0x00, 0xa6, 0x9d, 0x58, 0xf6, 0xce, + 0x4e, 0x13, 0x57, 0x66, 0x55, 0x86, 0xb4, 0x38, 0x1b, 0x8f, 0xff, 0x19, 0x5a, 0xd2, 0xea, 0xf3, + 0x37, 0xf8, 0x7e, 0x6d, 0x3e, 0x09, 0xbf, 0x4e, 0x95, 0x9e, 0x15, 0x4c, 0x98, 0x58, 0x4a, 0x09, + 0xe8, 0x23, 0x11, 0xed, 0xfa, 0x20, 0x70, 0x39, 0xfd, 0xf8, 0xf5, 0xaf, 0xab, 0x97, 0x08, 0x8b, + 0x4a, 0xd3, 0x4b, 0xca, 0xff, 0x4c, 0x36, 0x91, 0xf9, 0x7a, 0xb4, 0xa4, 0xd5, 0xbd, 0x0f, 0xd3, + 0x5a, 0x88, 0x69, 0xbd, 0x8c, 0xdd, 0x16, 0x09, 0x4c, 0x5c, 0x9d, 0x55, 0x25, 0x83, 0xe2, 0xa5, + 0xab, 0xf9, 0x29, 0x42, 0x16, 0x7e, 0x1b, 0x3e, 0xf7, 0xf0, 0x05, 0x15, 0x2f, 0xa6, 0xba, 0x08, + 0x53, 0xc5, 0xa6, 0x75, 0x16, 0x2e, 0x3e, 0xc1, 0x52, 0xd6, 0x47, 0xce, 0xeb, 0x23, 0x67, 0x28, + 0x59, 0x99, 0xc5, 0xe4, 0xdf, 0xb0, 0xdf, 0x72, 0xc1, 0xb1, 0x5a, 0x88, 0x73, 0xc9, 0x13, 0xd9, + 0xd5, 0xc3, 0xb2, 0xca, 0x8e, 0x7a, 0xa7, 0x31, 0xd9, 0x88, 0x07, 0xe1, 0x7e, 0xb4, 0x9c, 0xa8, + 0x7d, 0xce, 0x40, 0xa0, 0xc5, 0x1b, 0xd8, 0xeb, 0x27, 0x8a, 0xf8, 0x36, 0x55, 0xda, 0x22, 0x64, + 0xa7, 0x89, 0xaf, 0x65, 0x91, 0x24, 0x47, 0xfb, 0x7d, 0x9f, 0xc0, 0x63, 0x25, 0xda, 0xc1, 0xdb, + 0x5a, 0xff, 0x4d, 0xed, 0xe8, 0x98, 0x3e, 0x72, 0x9e, 0x2a, 0x31, 0x2f, 0xae, 0x5b, 0x97, 0xba, + 0xaa, 0xca, 0xd9, 0xb4, 0xf8, 0x2b, 0x1c, 0x2a, 0x0a, 0xb5, 0xef, 0xf2, 0x2b, 0x38, 0xe8, 0x5d, + 0x21, 0x0e, 0xb9, 0x44, 0x8e, 0xcc, 0x2c, 0xb8, 0xd8, 0x91, 0xd3, 0x08, 0x5c, 0x10, 0xc8, 0xc1, + 0x57, 0x4e, 0x18, 0xa2, 0xf0, 0x70, 0x77, 0x6a, 0xb8, 0x1b, 0x94, 0x7f, 0x3c, 0x43, 0xc9, 0xd3, + 0xf1, 0x04, 0xa0, 0x47, 0xfb, 0x52, 0x3d, 0x57, 0xb5, 0x9e, 0x5e, 0x6d, 0x68, 0x20, 0x33, 0x1a, + 0xd7, 0xe2, 0x83, 0xa9, 0xd1, 0x09, 0x83, 0x13, 0xe3, 0x57, 0xa1, 0x53, 0xf1, 0xab, 0xf8, 0x51, + 0xff, 0x0b, 0x5a, 0x5f, 0x3f, 0x85, 0x64, 0x3e, 0x3b, 0x25, 0x5b, 0x55, 0xe0, 0xcf, 0x70, 0x68, + 0xd1, 0xaf, 0x03, 0x7e, 0xc5, 0x7c, 0xef, 0x1c, 0xac, 0xea, 0x02, 0xc0, 0xc4, 0xbd, 0xf7, 0x53, + 0x41, 0xf2, 0xb2, 0x42, 0x34, 0xce, 0x56, 0xd0, 0x84, 0x7d, 0xc3, 0x1a, 0x42, 0xf9, 0xfc, 0xad, + 0x02, 0x54, 0x1c, 0x54, 0xc2, 0xc1, 0xfd, 0xf5, 0x81, 0x16, 0x9f, 0x67, 0x3f, 0xd1, 0x1c, 0x3e, + 0x2a, 0x50, 0xa5, 0xc1, 0x02, 0x81, 0x4d, 0x11, 0xff, 0x5f, 0x8e, 0xe8, 0x5a, 0xb0, 0xb1, 0x9b, + 0x6f, 0x55, 0x1a, 0x42, 0xf6, 0xa1, 0xfe, 0xf4, 0xe4, 0x71, 0x78, 0xe4, 0x66, 0x36, 0x31, 0xec, + 0xda, 0xba, 0xb5, 0xb6, 0xc6, 0x25, 0x35, 0xd6, 0xee, 0x94, 0x6b, 0x1b, 0xe5, 0x77, 0xcb, 0x61, + 0x5e, 0xff, 0x48, 0xbf, 0x36, 0x5a, 0x81, 0xe5, 0x3f, 0xa7, 0x5c, 0xbb, 0xb5, 0xb6, 0xae, 0x51, + 0xda, 0xb2, 0xd3, 0x55, 0xd7, 0x58, 0x2b, 0xef, 0x90, 0xb6, 0x18, 0x1a, 0x48, 0xdd, 0x36, 0x40, + 0xbf, 0x1b, 0xe9, 0xa2, 0x1a, 0x47, 0x32, 0x16, 0xcf, 0x22, 0x66, 0xec, 0xed, 0x60, 0x5d, 0x3b, + 0x79, 0x8b, 0x6c, 0x89, 0x89, 0x61, 0xf0, 0xde, 0x86, 0x1e, 0xd7, 0xd4, 0xa8, 0xd1, 0x30, 0x60, + 0x33, 0x99, 0xc8, 0x50, 0x32, 0x16, 0xd1, 0xae, 0x9f, 0x4d, 0x4f, 0x1e, 0x37, 0xe5, 0x11, 0xa3, + 0x09, 0xa9, 0x33, 0x37, 0xb5, 0xde, 0xeb, 0x64, 0xbd, 0x41, 0x43, 0xae, 0x8d, 0xea, 0xc7, 0xaf, + 0x13, 0x07, 0x0e, 0x88, 0x05, 0x88, 0x89, 0x6a, 0x3d, 0x63, 0x80, 0x70, 0x37, 0xd2, 0x25, 0xb3, + 0xdd, 0xc1, 0xff, 0x1d, 0x87, 0x56, 0xb6, 0xb6, 0xb7, 0x84, 0x7d, 0xef, 0x05, 0xfc, 0x4a, 0x03, + 0x2e, 0x9b, 0x74, 0x21, 0x1c, 0x59, 0x7f, 0xc1, 0xa9, 0xd2, 0x24, 0x27, 0xe4, 0xc7, 0x11, 0x8f, + 0x73, 0xda, 0xe0, 0x64, 0x26, 0xd2, 0xa7, 0x45, 0x12, 0xb3, 0x89, 0xe1, 0x7a, 0xd9, 0xb5, 0x4d, + 0x76, 0x35, 0xbe, 0x3b, 0x9b, 0x88, 0xd6, 0xbe, 0xbd, 0x5d, 0xda, 0xe2, 0x6a, 0x34, 0x1a, 0x6a, + 0x41, 0x87, 0xcd, 0xf3, 0x93, 0xb1, 0xcc, 0x67, 0xa7, 0xe8, 0x28, 0xd2, 0x69, 0x9b, 0x8c, 0x0d, + 0xd0, 0xd9, 0xc0, 0x8e, 0xd1, 0xdd, 0x48, 0x97, 0x49, 0x6e, 0x36, 0x31, 0x0c, 0xcd, 0xa2, 0x88, + 0x77, 0x23, 0x9d, 0x90, 0x5b, 0x1f, 0x89, 0x27, 0x13, 0xc3, 0xda, 0xd9, 0x43, 0xe9, 0xd1, 0x51, + 0x39, 0x7f, 0x75, 0xf9, 0xab, 0x1c, 0x5a, 0x11, 0x54, 0xda, 0x5a, 0xdc, 0x1e, 0x65, 0xbb, 0x7f, + 0x8f, 0xe2, 0x6e, 0x09, 0xef, 0x01, 0x9f, 0xd2, 0xc2, 0xea, 0xdf, 0xa8, 0xd2, 0x3e, 0x21, 0x27, + 0x51, 0xf4, 0x82, 0x5d, 0x22, 0x75, 0xe6, 0xa8, 0x3e, 0x70, 0xd5, 0xd0, 0x35, 0x3a, 0x2f, 0x6b, + 0xf1, 0xdb, 0x44, 0xbe, 0x38, 0x33, 0xa3, 0xf7, 0x5f, 0xd4, 0x47, 0xfa, 0xb5, 0xc3, 0xa3, 0x76, + 0x63, 0xc5, 0xdd, 0x48, 0x57, 0x7a, 0xe6, 0x5c, 0x6a, 0x6a, 0x7c, 0xbd, 0xd6, 0x7b, 0x30, 0xa3, + 0x9e, 0x6f, 0xf3, 0xf9, 0x9b, 0x92, 0xb1, 0x7e, 0x43, 0x96, 0xeb, 0x3d, 0x9d, 0xbe, 0x7a, 0x30, + 0x19, 0x8b, 0x53, 0x5a, 0xb3, 0x89, 0x4e, 0x39, 0xa7, 0x5c, 0xfe, 0xef, 0x39, 0x54, 0x1c, 0x02, + 0x7e, 0x8e, 0x1f, 0x26, 0x87, 0xb3, 0xfc, 0xff, 0x91, 0x53, 0xa5, 0x7f, 0xc5, 0x09, 0x6c, 0x8a, + 0xf8, 0x25, 0x47, 0x66, 0x12, 0x36, 0xba, 0xcd, 0x26, 0xa2, 0xce, 0x2d, 0x52, 0x43, 0x83, 0xcb, + 0xb9, 0xb3, 0xc1, 0x29, 0x6d, 0x71, 0xd5, 0x6d, 0x2a, 0x87, 0x7a, 0x55, 0xe0, 0xae, 0x23, 0x53, + 0x8e, 0xec, 0x5b, 0xa6, 0x74, 0x6b, 0x68, 0x73, 0x09, 0x73, 0x36, 0xe2, 0x57, 0x5f, 0x4c, 0xf8, + 0x99, 0x77, 0xa4, 0xcd, 0xb5, 0x3b, 0xb7, 0xd7, 0xef, 0x6c, 0x68, 0xdc, 0x56, 0x5f, 0x5f, 0x5b, + 0x63, 0x12, 0x9d, 0x4d, 0x0c, 0xd3, 0x1c, 0x5a, 0xcf, 0x17, 0x46, 0xdf, 0xc7, 0xfa, 0x21, 0xeb, + 0x6c, 0x22, 0x4a, 0xcb, 0x21, 0x6f, 0xce, 0x1f, 0xbb, 0x94, 0x39, 0xa8, 0x02, 0x1a, 0x1d, 0x51, + 0x99, 0x6d, 0x04, 0xdf, 0x81, 0x50, 0xd8, 0xd7, 0xaa, 0xc8, 0x6e, 0x7f, 0x93, 0x12, 0x2a, 0x5d, + 0x96, 0xdf, 0x31, 0xb6, 0xd1, 0xc4, 0x00, 0x57, 0x0d, 0x26, 0x87, 0x28, 0x68, 0x13, 0xc3, 0xfa, + 0xc9, 0x5b, 0xac, 0xb1, 0x9c, 0x7d, 0xcd, 0xc6, 0x76, 0x2e, 0xca, 0xe4, 0xe3, 0x3b, 0x39, 0x30, + 0x22, 0x6d, 0x6f, 0x6b, 0x0a, 0xba, 0xbd, 0x0a, 0x56, 0xc8, 0x0b, 0xab, 0x77, 0xaa, 0xd2, 0x2f, + 0x04, 0x16, 0x6e, 0xc8, 0x00, 0xc6, 0x34, 0x20, 0x76, 0xd6, 0xfe, 0x43, 0xa9, 0xf8, 0xd5, 0x4d, + 0x9b, 0x6b, 0xc9, 0x03, 0x98, 0xd8, 0x93, 0xa1, 0x12, 0x7c, 0x7d, 0xcc, 0xf0, 0x85, 0x71, 0x6d, + 0xf0, 0xa8, 0x16, 0x3b, 0x00, 0x18, 0x95, 0x5a, 0xef, 0x69, 0x2d, 0x11, 0xd7, 0x7a, 0x6f, 0x91, + 0xc8, 0xbd, 0x2c, 0x6d, 0xde, 0x8d, 0x8a, 0x89, 0x55, 0x5d, 0x0e, 0xb4, 0x28, 0x44, 0x11, 0xc7, + 0xe6, 0x22, 0x16, 0x2e, 0x56, 0xc1, 0xa0, 0x29, 0xcd, 0x21, 0x4b, 0xba, 0x3d, 0x79, 0x0b, 0x04, + 0xec, 0xd4, 0x70, 0xb7, 0xcf, 0xdd, 0x9a, 0xbe, 0xaa, 0xa6, 0xfb, 0x3e, 0x37, 0x65, 0x20, 0x26, + 0x6f, 0x59, 0xba, 0x00, 0x15, 0xd1, 0xde, 0xe3, 0x7f, 0xc2, 0x3e, 0x03, 0x5f, 0x2d, 0x30, 0x0e, + 0x71, 0xd0, 0x8b, 0xb0, 0x91, 0x7d, 0x18, 0xd8, 0x65, 0x5e, 0xd6, 0xa7, 0x41, 0x7e, 0xc1, 0x0c, + 0x59, 0x8b, 0x0a, 0x43, 0x9e, 0x3d, 0x0a, 0x7e, 0xdd, 0x1f, 0x64, 0x95, 0x0a, 0x55, 0x7a, 0x52, + 0xa0, 0x40, 0x71, 0x05, 0xd0, 0xf1, 0x04, 0x03, 0x7e, 0x70, 0x14, 0x61, 0x48, 0x50, 0x2c, 0xde, + 0x83, 0x16, 0x1a, 0x2c, 0x8e, 0x18, 0x32, 0xf1, 0x4e, 0x8b, 0x01, 0x62, 0x8d, 0x2d, 0xbb, 0x16, + 0x8d, 0x93, 0xbe, 0x35, 0xf4, 0x09, 0xfc, 0x2c, 0x2d, 0x40, 0xb5, 0xde, 0xd3, 0xf4, 0x31, 0x00, + 0x58, 0x84, 0xa0, 0x8c, 0x40, 0xaa, 0x8c, 0x69, 0xf1, 0x6f, 0x22, 0x44, 0xe4, 0x04, 0x38, 0x9f, + 0x30, 0x36, 0x75, 0xec, 0x02, 0xc8, 0x80, 0xc5, 0xe5, 0x20, 0x5b, 0x90, 0x7e, 0x3d, 0x7e, 0x5d, + 0x66, 0x12, 0x37, 0x18, 0x62, 0x09, 0x2a, 0x17, 0xac, 0xfe, 0x13, 0x9f, 0x30, 0x85, 0x2d, 0x85, + 0xed, 0x2f, 0xf2, 0x68, 0xf5, 0xe1, 0x02, 0x54, 0x58, 0xe3, 0x0e, 0xbb, 0x6b, 0x7c, 0xa1, 0x66, + 0xfe, 0x38, 0x87, 0x0a, 0xbd, 0xbe, 0x50, 0xb3, 0x15, 0xea, 0xb4, 0x7a, 0xbf, 0x2a, 0x75, 0x08, + 0x14, 0x28, 0x7e, 0x08, 0x01, 0xef, 0x52, 0x67, 0x4e, 0x51, 0x47, 0xc6, 0x2d, 0xdb, 0x9c, 0xd2, + 0x96, 0x9d, 0xd5, 0x52, 0x83, 0xcb, 0x39, 0x9b, 0xe8, 0x85, 0x26, 0xce, 0x26, 0xfa, 0x2a, 0x01, + 0xde, 0xd0, 0x50, 0x53, 0xe9, 0xdc, 0xb2, 0x6d, 0x7b, 0x8d, 0x81, 0x51, 0x4b, 0x7e, 0x5a, 0xc0, + 0x7a, 0xb9, 0x76, 0xab, 0x6b, 0xfb, 0xd6, 0xf2, 0xcc, 0x67, 0xa7, 0xf4, 0xc8, 0xd5, 0xf4, 0x81, + 0xe9, 0x64, 0xfc, 0x68, 0x6a, 0xf4, 0x5a, 0xea, 0xcc, 0xa9, 0x0a, 0x99, 0x96, 0xca, 0xef, 0x86, + 0x6a, 0x61, 0xe1, 0x8b, 0x79, 0x05, 0x9b, 0x02, 0xc5, 0xd7, 0x69, 0xb5, 0x8c, 0xad, 0xe5, 0xba, + 0xc1, 0x56, 0xd6, 0xaf, 0xdb, 0x94, 0xfe, 0xf2, 0x76, 0xfa, 0xf6, 0x17, 0x94, 0xd5, 0x25, 0x63, + 0xf1, 0x75, 0x10, 0xd7, 0x76, 0x9d, 0xb1, 0xd6, 0x63, 0xfd, 0xe9, 0x9b, 0xe3, 0xc9, 0x3b, 0xd7, + 0x65, 0x4a, 0xa6, 0x2c, 0xba, 0x08, 0x95, 0x60, 0x49, 0xfc, 0x9f, 0x7a, 0x04, 0xc8, 0xf0, 0x5b, + 0x10, 0xda, 0xed, 0x6b, 0x51, 0x1a, 0xe0, 0x1d, 0xf3, 0x05, 0x8c, 0x7b, 0x8e, 0x05, 0x16, 0x9f, + 0xd0, 0x4f, 0x1c, 0xa2, 0x6f, 0x99, 0x97, 0x2b, 0xfb, 0xc2, 0x2f, 0xae, 0x55, 0xf6, 0x85, 0x5f, + 0x5a, 0xbb, 0x6f, 0x77, 0xa8, 0x42, 0x66, 0x10, 0xf9, 0x0f, 0x11, 0x6f, 0xcc, 0xc5, 0x8d, 0x81, + 0x60, 0xab, 0x3b, 0x2c, 0xf9, 0xbd, 0x5b, 0xe9, 0x0b, 0x06, 0x85, 0x10, 0x2b, 0x2b, 0x4f, 0xb2, + 0xf8, 0x0c, 0xf1, 0xd6, 0xa1, 0x4f, 0xa7, 0xe1, 0xa7, 0x47, 0x8c, 0x86, 0xdd, 0xb9, 0xa5, 0x47, + 0xbb, 0xd2, 0xd3, 0xd3, 0x72, 0x9e, 0x6c, 0xfc, 0x9b, 0xa8, 0xb8, 0xd5, 0xf8, 0xd1, 0xe8, 0x0e, + 0x36, 0x29, 0x61, 0x72, 0x35, 0x67, 0xb5, 0x2a, 0x3d, 0x21, 0xb0, 0x70, 0x71, 0x29, 0x90, 0x48, + 0x9d, 0x99, 0xd0, 0xa6, 0x8f, 0xcb, 0x6c, 0x12, 0xff, 0x3b, 0x54, 0x62, 0xf4, 0x43, 0xbd, 0x3b, + 0x18, 0xf6, 0x61, 0x7f, 0x27, 0x10, 0xd6, 0xf1, 0xbb, 0x52, 0xf6, 0x14, 0xb1, 0x16, 0xa8, 0xa4, + 0x27, 0xbe, 0xd2, 0x2e, 0x1d, 0xd2, 0x86, 0xfa, 0xf5, 0xde, 0x13, 0x5a, 0xef, 0x41, 0x63, 0xd1, + 0x0f, 0xf5, 0x83, 0x9f, 0x58, 0x32, 0x76, 0x2c, 0x39, 0xd5, 0xa3, 0x4d, 0x7f, 0x04, 0x6f, 0x6e, + 0x6a, 0xb7, 0x3f, 0xd7, 0x47, 0xfa, 0xe8, 0xfb, 0x76, 0x60, 0x08, 0x95, 0xed, 0x54, 0xcb, 0xfe, + 0xcd, 0x22, 0xc4, 0x83, 0x57, 0x84, 0x12, 0x96, 0x3c, 0x1e, 0x25, 0x14, 0xf2, 0xed, 0x6a, 0x51, + 0xf8, 0xd1, 0x02, 0xc4, 0xfb, 0x08, 0xd8, 0xb9, 0xc7, 0xa8, 0x2b, 0x33, 0x3b, 0xff, 0x2b, 0xa7, + 0x4a, 0x7f, 0xcf, 0x09, 0x79, 0x10, 0xc4, 0xff, 0x85, 0x83, 0x83, 0xaa, 0xf4, 0xc4, 0x68, 0xfa, + 0xe6, 0x1d, 0x98, 0xad, 0x77, 0x23, 0x5d, 0xd5, 0x52, 0x5d, 0xcd, 0x3b, 0xae, 0x9a, 0xc6, 0xb7, + 0x8c, 0xa9, 0x57, 0x2f, 0x19, 0xb2, 0xee, 0x70, 0xe6, 0x62, 0x77, 0x72, 0xea, 0x54, 0xfa, 0xe6, + 0x1d, 0x3d, 0xda, 0xa7, 0xc5, 0xae, 0x68, 0x13, 0xd3, 0xa9, 0xa9, 0x8f, 0x52, 0x13, 0x27, 0x67, + 0x13, 0xd1, 0x46, 0x59, 0xda, 0xb8, 0xd1, 0xe5, 0xdc, 0x59, 0xbf, 0xad, 0xa1, 0xd1, 0xc0, 0xde, + 0x59, 0xfd, 0xee, 0xce, 0xb7, 0xb6, 0x6d, 0x97, 0x8d, 0xfd, 0xfa, 0xcb, 0xce, 0xcc, 0xa1, 0x41, + 0x23, 0xcb, 0xf5, 0x41, 0x83, 0xab, 0x0d, 0x0d, 0x00, 0x91, 0xd9, 0x44, 0x94, 0x29, 0x24, 0x37, + 0x1f, 0x94, 0x70, 0xaf, 0x7c, 0x92, 0x73, 0xb3, 0xb4, 0xa9, 0x96, 0xa2, 0x6b, 0xd1, 0x1e, 0x30, + 0xdb, 0xc8, 0x79, 0xda, 0xca, 0x1f, 0xe1, 0xd0, 0x23, 0x26, 0x78, 0xab, 0x7b, 0x5f, 0xb5, 0xdb, + 0xef, 0xdd, 0xeb, 0xf3, 0x86, 0xf7, 0x90, 0xc5, 0xf2, 0x8e, 0x2a, 0x35, 0x0a, 0x79, 0x11, 0xc4, + 0x1f, 0x6b, 0x3d, 0xd7, 0x52, 0xd3, 0x47, 0xb5, 0x43, 0x71, 0x28, 0x27, 0x19, 0x3b, 0x9c, 0x39, + 0x3d, 0x64, 0x0c, 0x62, 0xff, 0xf1, 0xe4, 0x74, 0xff, 0x6c, 0x62, 0x78, 0xeb, 0xae, 0xb6, 0x10, + 0x2b, 0x2e, 0xcf, 0x26, 0x86, 0xd7, 0x11, 0x98, 0x9c, 0x97, 0x26, 0xdf, 0x8c, 0x56, 0xb4, 0xb5, + 0xef, 0x6a, 0xf1, 0x79, 0x5c, 0xf5, 0x52, 0x28, 0xe4, 0x6b, 0xf2, 0x2b, 0x5e, 0xe2, 0xa3, 0x8d, + 0xf7, 0xcd, 0x9c, 0x44, 0xb1, 0x9c, 0x1c, 0x32, 0xc1, 0x09, 0x29, 0xae, 0x90, 0xab, 0x9e, 0x96, + 0x99, 0x8c, 0xc5, 0x4d, 0xb1, 0x4d, 0xce, 0xc9, 0xcb, 0xbf, 0x87, 0xf8, 0x5d, 0x66, 0xc9, 0xf5, + 0x6e, 0x4f, 0xb3, 0xbb, 0x49, 0x71, 0x79, 0xc9, 0x01, 0x19, 0x3e, 0x4d, 0xc9, 0x93, 0x2c, 0x3e, + 0x04, 0xce, 0x43, 0xb4, 0x6b, 0x5d, 0x35, 0x72, 0x1e, 0x34, 0xfe, 0x35, 0x54, 0x68, 0x96, 0x47, + 0x56, 0x14, 0xbc, 0xb9, 0x65, 0x02, 0xc5, 0x65, 0x50, 0x59, 0x5f, 0x9b, 0x36, 0x72, 0x5d, 0x3b, + 0x1b, 0x91, 0x69, 0x4a, 0x59, 0xfc, 0x71, 0xf4, 0xa8, 0xcb, 0x7c, 0x68, 0x8e, 0xd8, 0x54, 0xc9, + 0xa3, 0xb2, 0xaf, 0xd1, 0x63, 0x3c, 0xce, 0x32, 0x99, 0x98, 0xc7, 0x78, 0x8f, 0x98, 0xaf, 0xd3, + 0xb1, 0x77, 0x45, 0xe8, 0xe1, 0xdd, 0x0b, 0x64, 0x53, 0x2e, 0xb0, 0x2e, 0xd2, 0xc1, 0xa6, 0xbc, + 0xd4, 0x12, 0xcd, 0xcf, 0x9f, 0x27, 0x9b, 0xeb, 0x3a, 0xfb, 0xfd, 0x5d, 0x7c, 0x80, 0x49, 0xb4, + 0xee, 0x65, 0xe4, 0x5e, 0x14, 0x5e, 0x20, 0x96, 0xa2, 0x5d, 0x8f, 0x0a, 0x4d, 0x8d, 0x92, 0xf4, + 0xe0, 0x4b, 0xaa, 0xb4, 0x5e, 0xa0, 0x40, 0xf1, 0x87, 0xa6, 0xc2, 0x0a, 0x8f, 0x25, 0x32, 0x65, + 0xe2, 0xb3, 0x81, 0x08, 0x44, 0xb2, 0x92, 0x69, 0x06, 0xfe, 0x0d, 0x54, 0xe8, 0x6e, 0x6b, 0x6b, + 0xd9, 0x6f, 0x6c, 0xef, 0x60, 0x47, 0xc0, 0xad, 0xa5, 0x40, 0x91, 0x07, 0xd3, 0x37, 0x35, 0x1c, + 0x64, 0x0e, 0x0d, 0xca, 0x34, 0x95, 0x6f, 0x42, 0x0b, 0x9c, 0xf5, 0xdb, 0x31, 0x27, 0x2a, 0xa9, + 0xde, 0xae, 0x4a, 0xb2, 0x60, 0x7c, 0x8b, 0x9b, 0x0d, 0x51, 0xf5, 0xdc, 0x11, 0x67, 0xfd, 0x76, + 0xe6, 0x41, 0xab, 0x01, 0x00, 0xb2, 0xaf, 0xfb, 0x25, 0xe3, 0xaa, 0x7e, 0xe2, 0xb2, 0x21, 0xf2, + 0x4e, 0x1e, 0xb3, 0xc1, 0x59, 0x15, 0xd5, 0xa0, 0x68, 0x14, 0xb4, 0x55, 0x69, 0x25, 0x66, 0x05, + 0x28, 0x68, 0xab, 0xd2, 0x6a, 0x16, 0xb4, 0x55, 0x69, 0xfd, 0x2e, 0x0a, 0xda, 0xaa, 0xb4, 0xf2, + 0x7b, 0xd1, 0x82, 0x4d, 0xf5, 0xdb, 0xb1, 0x2b, 0x4e, 0x49, 0xb5, 0xa2, 0x4a, 0xbb, 0x04, 0xe3, + 0x5b, 0x7c, 0x1f, 0x68, 0x6e, 0xfa, 0x2e, 0x5a, 0x64, 0x39, 0xba, 0x27, 0x86, 0x8d, 0xbd, 0x4e, + 0x36, 0x4a, 0xe0, 0x3f, 0xce, 0x7e, 0x89, 0x11, 0x62, 0x18, 0xfd, 0x4e, 0x95, 0xfe, 0x3c, 0xeb, + 0x25, 0xc6, 0x16, 0x28, 0x96, 0xd8, 0xd0, 0x98, 0x2b, 0xae, 0xe9, 0x23, 0xc4, 0xd7, 0xdd, 0x59, + 0xbf, 0xdd, 0x18, 0xfe, 0x83, 0x3d, 0xda, 0xf8, 0x29, 0xb0, 0xaa, 0x61, 0x35, 0xba, 0x1f, 0xa4, + 0x68, 0xba, 0xdf, 0xa6, 0x0f, 0x7d, 0x9a, 0x1e, 0x8d, 0x6a, 0x43, 0xf8, 0x79, 0xc4, 0xeb, 0x37, + 0xd2, 0x33, 0x47, 0xb5, 0xa8, 0x21, 0xec, 0xb3, 0xf4, 0xb3, 0x9e, 0x63, 0xfc, 0x1b, 0xcc, 0xec, + 0x01, 0xc0, 0x30, 0x7b, 0xb0, 0x17, 0x7c, 0x52, 0xa0, 0x4a, 0xff, 0x0d, 0x33, 0xfb, 0x6c, 0x04, + 0x31, 0xc9, 0x01, 0x51, 0x60, 0xf6, 0x86, 0xb2, 0x85, 0x45, 0x93, 0xb0, 0xe2, 0xf7, 0x28, 0x7e, + 0xb8, 0x98, 0xa5, 0x45, 0x7b, 0xb4, 0xa1, 0xcf, 0xb2, 0xf9, 0x71, 0x5e, 0x36, 0xdc, 0x50, 0xbf, + 0x0d, 0x23, 0xa5, 0x3e, 0x3b, 0x97, 0x9c, 0xba, 0x4d, 0xc1, 0x64, 0xc3, 0x30, 0x08, 0xdd, 0xb9, + 0xa9, 0x45, 0x7b, 0xf4, 0x91, 0xde, 0xbb, 0x91, 0x2e, 0xf7, 0xde, 0x10, 0x90, 0xde, 0x56, 0xb7, + 0xb3, 0xa6, 0x76, 0xab, 0x54, 0x57, 0xa3, 0x47, 0xfb, 0x32, 0x23, 0x11, 0xc8, 0x56, 0x69, 0xd0, + 0x62, 0xe9, 0xdc, 0x8d, 0x74, 0x69, 0x57, 0xba, 0x0c, 0xe1, 0x03, 0x9f, 0xbe, 0x80, 0xe7, 0xa2, + 0x3e, 0xdc, 0x45, 0x4d, 0x0d, 0xe0, 0xbc, 0xc8, 0x16, 0x92, 0x1a, 0xee, 0x36, 0x43, 0xe0, 0x3e, + 0x1f, 0xfc, 0xa1, 0xbc, 0x84, 0xd4, 0x43, 0x5e, 0x91, 0xdd, 0x18, 0xb9, 0xd0, 0xac, 0xb9, 0x9c, + 0xa7, 0x93, 0xf8, 0x7e, 0x0e, 0xa1, 0x10, 0x16, 0x4d, 0x0c, 0x61, 0x8f, 0x5c, 0x06, 0xcd, 0x09, + 0x65, 0x60, 0x0a, 0x83, 0xd5, 0x0d, 0xaa, 0x54, 0x2f, 0x30, 0x19, 0xc4, 0x6a, 0xf2, 0xd8, 0xe7, + 0x99, 0x53, 0xb9, 0x5e, 0x97, 0xd0, 0x9a, 0x64, 0x2c, 0x6e, 0x13, 0xe4, 0xce, 0xe0, 0xc9, 0x88, + 0x25, 0xb2, 0x64, 0x2c, 0xfe, 0xa3, 0x75, 0x9b, 0x64, 0x86, 0x1e, 0x7f, 0x8d, 0x43, 0x45, 0x5e, + 0x52, 0x5a, 0xa8, 0x74, 0x29, 0x56, 0x2b, 0xe7, 0xae, 0x4e, 0x58, 0x95, 0x7e, 0x25, 0x58, 0xf8, + 0xa2, 0x97, 0x8a, 0x7c, 0xb4, 0x36, 0xfa, 0xc9, 0x0b, 0x6c, 0x6d, 0xf0, 0x2d, 0x7a, 0x22, 0xe4, + 0x95, 0x6b, 0xb7, 0x3f, 0xd7, 0xe2, 0xe7, 0xb5, 0xc4, 0x01, 0x7d, 0xa0, 0xcf, 0xd0, 0xa8, 0xb1, + 0x43, 0x30, 0xf8, 0x83, 0x3b, 0x6c, 0x42, 0x30, 0xf8, 0x94, 0x43, 0x94, 0xde, 0x0a, 0xd9, 0x2a, + 0x90, 0x6f, 0x43, 0x45, 0xbe, 0x56, 0x63, 0x63, 0xf0, 0xef, 0x0e, 0x90, 0xb0, 0x2b, 0x39, 0x4a, + 0xb0, 0xcb, 0x44, 0x00, 0xbf, 0x1c, 0x2b, 0x03, 0x7b, 0x5a, 0x35, 0x34, 0x69, 0xa8, 0xc1, 0x60, + 0xd4, 0xc2, 0xeb, 0x29, 0x73, 0x7c, 0x44, 0x3b, 0x30, 0x68, 0x9e, 0x75, 0xd0, 0x3c, 0x7c, 0x0f, + 0x87, 0x1e, 0xf2, 0xf9, 0x7d, 0xe1, 0x2d, 0x81, 0x26, 0x9f, 0xbf, 0xde, 0x1d, 0x0a, 0xed, 0x0d, + 0x04, 0xbd, 0xc4, 0xf7, 0x1f, 0xef, 0xe9, 0xb9, 0xa9, 0xe2, 0x4f, 0xb3, 0x4e, 0xc5, 0xa0, 0x2b, + 0xda, 0x48, 0xb2, 0xa5, 0xab, 0x01, 0x1c, 0x46, 0x14, 0x84, 0x4d, 0x78, 0xf7, 0x4e, 0xce, 0xa5, + 0xc9, 0x9f, 0xe7, 0xd0, 0x8a, 0x10, 0xfb, 0x4a, 0xa9, 0xab, 0x26, 0x54, 0xba, 0x1c, 0xdb, 0x19, + 0x43, 0xaa, 0xd4, 0x26, 0xe4, 0x24, 0x8a, 0xbf, 0xb0, 0x6a, 0x61, 0xbe, 0x8b, 0x4a, 0xdd, 0x5d, + 0x5c, 0x35, 0x70, 0x73, 0x90, 0xde, 0xc0, 0x31, 0x38, 0x07, 0x8e, 0x9a, 0x40, 0x8f, 0x8d, 0xa1, + 0x5a, 0xe4, 0xf5, 0xd2, 0xe1, 0x6e, 0x4a, 0x83, 0x74, 0x51, 0x4e, 0x79, 0x86, 0x00, 0xf4, 0x90, + 0x2f, 0x64, 0xbe, 0xa4, 0x4a, 0x9e, 0x85, 0xc4, 0xca, 0x7a, 0x61, 0xf5, 0x07, 0xaa, 0xf4, 0x9e, + 0x90, 0x9b, 0x2a, 0xd6, 0xe6, 0x1d, 0x11, 0xd6, 0xdf, 0x25, 0x19, 0x3f, 0x0a, 0x45, 0x57, 0x3a, + 0x32, 0x91, 0x3e, 0x6d, 0xf4, 0x33, 0x07, 0xdc, 0x76, 0xb0, 0xbd, 0xf3, 0x93, 0x4b, 0x19, 0x3f, + 0xbd, 0xeb, 0x0b, 0x6d, 0x0d, 0xf8, 0x7d, 0xe1, 0x40, 0xd0, 0xac, 0xcc, 0x43, 0xb8, 0x32, 0xf0, + 0xf4, 0x6e, 0x76, 0x22, 0x3b, 0x6a, 0x73, 0xd7, 0x05, 0xcc, 0x5c, 0xb4, 0x2e, 0xb6, 0x5a, 0xe4, + 0x90, 0xe4, 0xff, 0x2f, 0x0e, 0x41, 0x04, 0xed, 0x1a, 0xba, 0xc4, 0x78, 0xbc, 0xc4, 0x9e, 0xca, + 0x7b, 0x82, 0x48, 0xd7, 0xd9, 0x35, 0x4e, 0x95, 0xc6, 0x38, 0x21, 0x2b, 0xaf, 0x78, 0x9c, 0xa3, + 0x0a, 0x38, 0xbb, 0xea, 0xca, 0x81, 0xf7, 0xa5, 0x3e, 0xee, 0x4c, 0x9d, 0x39, 0x05, 0x6a, 0x01, + 0x71, 0xee, 0x98, 0xba, 0xac, 0x0d, 0x1e, 0x26, 0x8f, 0x4b, 0x46, 0x4f, 0xb0, 0xc1, 0xd2, 0xf5, + 0xde, 0xdb, 0xe9, 0x23, 0x97, 0x93, 0xb1, 0x7e, 0xd0, 0x03, 0xb4, 0xc1, 0x49, 0xb2, 0x53, 0xe0, + 0x98, 0xd8, 0x34, 0x0b, 0x50, 0xab, 0x98, 0x7f, 0x5d, 0xcb, 0x59, 0xf5, 0xe4, 0x3d, 0xcc, 0x92, + 0xd9, 0x1e, 0x52, 0x82, 0xd8, 0x96, 0x02, 0xd7, 0x23, 0xf0, 0x3d, 0xfd, 0xdc, 0xd4, 0x1c, 0x3f, + 0x1b, 0x28, 0xa5, 0x9d, 0x24, 0xcb, 0xb9, 0x39, 0xf8, 0x4e, 0x0e, 0x2d, 0x69, 0x56, 0xf6, 0xd7, + 0xbb, 0x7d, 0x41, 0x72, 0x2d, 0x22, 0xe7, 0x0a, 0xe8, 0x66, 0x65, 0x3f, 0xe6, 0x03, 0xd8, 0x3d, + 0xc6, 0x44, 0x16, 0xdf, 0x34, 0x1f, 0x6c, 0xef, 0xcc, 0xa8, 0x97, 0xcd, 0x5b, 0x29, 0xc9, 0xd8, + 0x80, 0x36, 0x79, 0x30, 0x75, 0xa1, 0x53, 0xcc, 0x44, 0xfa, 0x92, 0xb1, 0xc8, 0x6c, 0x22, 0x2a, + 0xa6, 0x23, 0x3d, 0xda, 0xd9, 0x43, 0x84, 0xab, 0x82, 0x9d, 0x6e, 0xf2, 0x60, 0x46, 0xbd, 0x2c, + 0x9b, 0xa4, 0xe0, 0x69, 0xff, 0x80, 0xa7, 0x59, 0x09, 0x6e, 0x0a, 0xba, 0xdb, 0xf6, 0xd4, 0xbb, + 0xc3, 0x7b, 0xf0, 0x35, 0x89, 0x22, 0xb8, 0xc8, 0x97, 0x9d, 0x26, 0xd6, 0x92, 0x77, 0xa9, 0x67, + 0x86, 0x88, 0x8d, 0x66, 0xe2, 0x8e, 0x76, 0x7a, 0x0c, 0x34, 0xc1, 0x5c, 0x4e, 0xbe, 0xd6, 0xe0, + 0x7b, 0x6b, 0x77, 0x79, 0x42, 0x6b, 0x89, 0xa5, 0x6a, 0x2d, 0xd0, 0x93, 0xb3, 0xe9, 0xf2, 0x17, + 0x39, 0x54, 0xe8, 0x0f, 0x78, 0xc1, 0x3c, 0x06, 0x47, 0xea, 0x3d, 0x9c, 0x2a, 0x75, 0x72, 0x02, + 0x05, 0x8b, 0xed, 0xa4, 0x6c, 0x6c, 0x02, 0xab, 0x74, 0x68, 0x83, 0x27, 0xb4, 0x48, 0x62, 0xc3, + 0x56, 0xa9, 0xa1, 0xb1, 0x56, 0xde, 0x59, 0xdb, 0xe8, 0xac, 0xa9, 0x74, 0xbc, 0xb3, 0x4d, 0xde, + 0x5c, 0x2b, 0xdf, 0x8d, 0x74, 0x31, 0x50, 0x6d, 0xf0, 0x53, 0x7d, 0xa4, 0x4f, 0x1b, 0x19, 0x03, + 0xe3, 0x9a, 0xc3, 0x55, 0x57, 0x53, 0x5b, 0x5f, 0x5b, 0x57, 0x53, 0x5b, 0xd7, 0xb8, 0xd3, 0xb9, + 0x65, 0xbb, 0x81, 0xe7, 0x48, 0x1d, 0xb9, 0x96, 0xfa, 0x8c, 0x5c, 0x4a, 0xa3, 0xaa, 0x25, 0xd8, + 0xdd, 0x64, 0x5a, 0x01, 0xfe, 0x02, 0x87, 0x16, 0x7b, 0xf0, 0x4e, 0x48, 0x8e, 0xd1, 0x73, 0x9c, + 0xa4, 0x5c, 0xb6, 0xfd, 0xb2, 0x3e, 0xa8, 0xb4, 0xb9, 0x7d, 0x5e, 0x38, 0x71, 0x24, 0x39, 0xc5, + 0x46, 0xea, 0xfa, 0x65, 0x89, 0x19, 0x89, 0x41, 0x63, 0x43, 0x9f, 0xfe, 0x28, 0x77, 0xbb, 0x4d, + 0xc6, 0xe2, 0xec, 0x26, 0xae, 0x9f, 0x34, 0x04, 0x23, 0xc2, 0x75, 0xa7, 0xc6, 0x0d, 0x95, 0x14, + 0x1f, 0x65, 0xc8, 0x84, 0x3a, 0xdf, 0xcb, 0xa1, 0x65, 0x3e, 0x9b, 0xfa, 0x5b, 0x5a, 0x8a, 0xab, + 0x5a, 0x96, 0x5b, 0xd5, 0x6c, 0x25, 0x19, 0x9c, 0xf7, 0xb2, 0xb2, 0x8b, 0xcf, 0x83, 0x76, 0x42, + 0xbc, 0x7b, 0x4c, 0x71, 0x83, 0x5e, 0xff, 0xc9, 0x44, 0xc8, 0x7d, 0x46, 0x39, 0x2b, 0x63, 0xd9, + 0xbf, 0x5f, 0x88, 0x56, 0xe6, 0xed, 0x0f, 0xfe, 0x23, 0x0e, 0x2d, 0x6e, 0x53, 0x82, 0xbe, 0x80, + 0x97, 0x9c, 0x16, 0x63, 0xc3, 0x3c, 0x01, 0x89, 0x7e, 0x58, 0x93, 0xb4, 0x9b, 0x8c, 0xf1, 0x38, + 0x3e, 0xc3, 0x2a, 0x93, 0x20, 0x32, 0xc1, 0xf8, 0xa7, 0xa3, 0x07, 0xb4, 0x33, 0x37, 0x67, 0x13, + 0xc3, 0xeb, 0x2b, 0x1d, 0x62, 0xa5, 0xe3, 0xc5, 0x4a, 0xc7, 0x4b, 0x95, 0x8e, 0x1f, 0x55, 0x3a, + 0x5e, 0xae, 0x74, 0xbc, 0x52, 0xe9, 0x78, 0xb5, 0xd2, 0xf1, 0x5a, 0xa5, 0x63, 0xfd, 0xba, 0x4a, + 0xc7, 0xfa, 0xf5, 0x95, 0x8e, 0xf5, 0x62, 0xa5, 0x43, 0x7c, 0xa9, 0xd2, 0xf1, 0xe2, 0xcb, 0x95, + 0x8e, 0x97, 0x5e, 0xad, 0x74, 0xbc, 0xbc, 0xce, 0xd0, 0x06, 0x49, 0xb9, 0xfc, 0xc7, 0x0b, 0x50, + 0x51, 0x50, 0xf1, 0x2b, 0x7b, 0x37, 0xb6, 0xb8, 0x9b, 0x88, 0x72, 0xd4, 0xbd, 0x40, 0x95, 0x22, + 0x0b, 0x04, 0x0b, 0x2e, 0xfe, 0x43, 0x01, 0xd9, 0xe7, 0x70, 0xef, 0xeb, 0x17, 0x0e, 0xa5, 0x27, + 0x0f, 0xe6, 0x56, 0xa6, 0x6e, 0x5b, 0xa3, 0x6b, 0xe3, 0xbb, 0x3b, 0xa5, 0xba, 0x9a, 0x9d, 0xd2, + 0xf6, 0xc6, 0x6d, 0x3b, 0xe5, 0xda, 0xba, 0xda, 0x77, 0x66, 0x13, 0xc3, 0x99, 0xc8, 0x70, 0xea, + 0xfc, 0xe5, 0xf4, 0xcc, 0x21, 0x7d, 0xe4, 0x7c, 0x32, 0x76, 0x8c, 0x25, 0xf5, 0xba, 0x83, 0xc9, + 0xb4, 0x55, 0xaa, 0xdb, 0x2e, 0x6d, 0x99, 0x23, 0x5b, 0xbf, 0x2d, 0x5b, 0x8d, 0xab, 0x41, 0xaa, + 0xde, 0x52, 0xbb, 0x73, 0xee, 0xdc, 0x70, 0x2a, 0x31, 0x17, 0x81, 0x35, 0xe6, 0x16, 0x80, 0x5b, + 0x60, 0xaf, 0x3b, 0x4b, 0xe8, 0x6e, 0xa4, 0x2b, 0x7d, 0xe4, 0xb2, 0x21, 0xa5, 0x0f, 0x76, 0x19, + 0xec, 0x1b, 0x2f, 0x8e, 0x64, 0x2c, 0x3e, 0x47, 0x53, 0xa3, 0xda, 0xc8, 0x18, 0xb9, 0x38, 0x3b, + 0x7d, 0x3a, 0x73, 0xf1, 0xac, 0xd6, 0xd3, 0x93, 0xbe, 0xf5, 0x85, 0x31, 0x9c, 0x07, 0x7a, 0xb4, + 0x83, 0x5f, 0x26, 0x63, 0x47, 0xe0, 0x66, 0x1f, 0xe6, 0x97, 0xd7, 0xf5, 0x91, 0xf3, 0xda, 0xd0, + 0x80, 0x76, 0xfd, 0xa0, 0x1e, 0xed, 0xd3, 0x47, 0x7a, 0xd9, 0xfa, 0x19, 0x43, 0x64, 0xf5, 0x7f, + 0xd9, 0x3f, 0x3c, 0x8a, 0x1e, 0xce, 0xe3, 0x7b, 0xc9, 0xff, 0x0e, 0xad, 0x6c, 0xc9, 0x05, 0xd3, + 0x43, 0x7f, 0xfc, 0x22, 0x70, 0x7e, 0x0c, 0xb1, 0x8a, 0x3d, 0x40, 0x00, 0xd7, 0x33, 0x7c, 0x78, + 0x99, 0x73, 0xbe, 0x9f, 0x8c, 0x1d, 0x76, 0xd5, 0xc8, 0xf9, 0xa9, 0xf0, 0xbf, 0x44, 0x0f, 0xdb, + 0x13, 0x14, 0xe6, 0xa0, 0x1f, 0x9b, 0xff, 0xf2, 0xa5, 0x8b, 0x3c, 0x5b, 0x2c, 0xb1, 0xeb, 0xe7, + 0x43, 0x34, 0x84, 0x93, 0x9c, 0x87, 0x46, 0x5a, 0x55, 0xe9, 0x43, 0xd6, 0xab, 0xf0, 0x03, 0xe2, + 0xb0, 0x37, 0x3a, 0xa6, 0x9f, 0x1a, 0xa0, 0x97, 0x8a, 0xb5, 0x1b, 0xe7, 0x92, 0xf1, 0x01, 0xed, + 0xa3, 0x4f, 0x93, 0xb1, 0x4f, 0xc1, 0xc9, 0x90, 0xba, 0x17, 0xc2, 0xa7, 0x76, 0xa9, 0x1f, 0xc2, + 0xdd, 0x18, 0x59, 0xc0, 0x0b, 0x31, 0xd6, 0xaf, 0x9f, 0x9a, 0x34, 0xb8, 0xf9, 0x1c, 0xcf, 0x07, + 0x12, 0x9d, 0x7a, 0xe1, 0x1f, 0x4b, 0xa7, 0x5e, 0xf4, 0xc7, 0xd2, 0xa9, 0x17, 0xff, 0xe9, 0x75, + 0xea, 0x25, 0xff, 0x18, 0x75, 0xea, 0xbf, 0xe7, 0xf2, 0xea, 0xd4, 0x10, 0xfc, 0x68, 0x8a, 0x53, + 0xa5, 0xdb, 0xf9, 0x75, 0xea, 0x0b, 0xf9, 0x75, 0xea, 0xef, 0x5e, 0x83, 0xfe, 0xc6, 0xfa, 0xf0, + 0xfd, 0x68, 0xb9, 0x45, 0x7f, 0x6a, 0x2d, 0xb7, 0x9d, 0x55, 0x72, 0xd1, 0x3d, 0x94, 0xdc, 0x37, + 0x54, 0x69, 0x03, 0xab, 0xe4, 0x56, 0x3d, 0x90, 0x92, 0xcb, 0x6a, 0xab, 0x5d, 0xb9, 0xe2, 0x44, + 0xf1, 0x7d, 0x8b, 0x13, 0xd8, 0xc5, 0x33, 0x5b, 0x9c, 0x78, 0x26, 0xaf, 0x38, 0xa1, 0x4d, 0xc5, + 0xd3, 0x13, 0x13, 0xf9, 0x05, 0x09, 0x9b, 0x30, 0x4e, 0xf5, 0xd7, 0xa5, 0xf9, 0x84, 0x71, 0xaa, + 0xbf, 0x3e, 0x35, 0xaf, 0xfe, 0x9a, 0x4f, 0x3b, 0x9d, 0xcc, 0xa7, 0x9d, 0x96, 0x60, 0xed, 0xb4, + 0x8b, 0x53, 0xa5, 0xdf, 0xe5, 0x51, 0x4f, 0x9b, 0xbf, 0xa9, 0x7a, 0x4a, 0x67, 0x02, 0xe8, 0xa9, + 0xda, 0x50, 0x37, 0xf5, 0x66, 0x27, 0xa7, 0xd8, 0xb1, 0x71, 0x12, 0x79, 0x6a, 0x78, 0x6e, 0x6d, + 0xd5, 0x66, 0x49, 0x58, 0xf6, 0xc7, 0xb0, 0x24, 0x1c, 0xce, 0xab, 0x1f, 0xc3, 0x79, 0xfa, 0x2f, + 0x54, 0xe9, 0xdd, 0x7c, 0xfa, 0x71, 0xcd, 0x37, 0xd0, 0x8f, 0xf7, 0xb7, 0xfb, 0xc3, 0x3e, 0x22, + 0x95, 0xe0, 0xbb, 0x83, 0xf7, 0xad, 0x1e, 0xaf, 0xf8, 0x23, 0xab, 0xc7, 0x21, 0x54, 0x68, 0x68, + 0x78, 0xc6, 0xca, 0x23, 0x9e, 0xe8, 0xd8, 0xa2, 0x42, 0x81, 0xe2, 0x5b, 0xa9, 0xa9, 0xc1, 0xf4, + 0xcc, 0x21, 0x47, 0xb5, 0x3b, 0xa4, 0xbc, 0xfc, 0x92, 0x23, 0x95, 0x38, 0x91, 0xba, 0xd0, 0x09, + 0xf1, 0x5d, 0xad, 0xd0, 0x27, 0x78, 0x75, 0x1a, 0x8b, 0x12, 0x7b, 0xf9, 0x64, 0x8e, 0xcf, 0x68, + 0xf1, 0x2b, 0xc6, 0x72, 0xbc, 0xd5, 0x93, 0x9e, 0x39, 0xb4, 0xfe, 0xe5, 0xcd, 0xd5, 0x86, 0x0c, + 0x44, 0x69, 0xe6, 0x57, 0x4e, 0xf9, 0xef, 0x58, 0x39, 0xbd, 0xc2, 0xa1, 0xc2, 0x90, 0xd2, 0xa2, + 0x78, 0xc2, 0x81, 0x60, 0xe9, 0xc3, 0x98, 0xe1, 0xac, 0xbf, 0x8f, 0x3b, 0x30, 0x6b, 0x1a, 0x48, + 0x1e, 0xf0, 0xda, 0x85, 0xde, 0x30, 0xe9, 0x88, 0x6f, 0x11, 0x49, 0x0b, 0x1b, 0xcc, 0x4c, 0x68, + 0x6a, 0xb8, 0x1b, 0x76, 0x1f, 0x50, 0x65, 0x2a, 0x0d, 0x81, 0xa4, 0xaf, 0xdf, 0x7a, 0xbe, 0xde, + 0xf4, 0x80, 0x86, 0xbc, 0x80, 0x2a, 0x53, 0x9a, 0xff, 0x28, 0xb4, 0x68, 0x46, 0x31, 0x5c, 0xf9, + 0x8f, 0x53, 0x31, 0x5c, 0xf5, 0x3a, 0x2a, 0xb1, 0x0d, 0xcd, 0x83, 0x78, 0x10, 0x97, 0xfd, 0x27, + 0x0e, 0x2d, 0x21, 0x9d, 0xc8, 0xbf, 0x86, 0x16, 0x35, 0x2b, 0xfb, 0xa9, 0x60, 0x8d, 0xe3, 0x4a, + 0x02, 0x44, 0x7c, 0x0c, 0xfa, 0x05, 0x3c, 0xff, 0x66, 0x7a, 0x0c, 0x7e, 0x87, 0xcd, 0xa0, 0x32, + 0xa4, 0xf3, 0x9b, 0x51, 0x51, 0xb3, 0xb2, 0xbf, 0x41, 0xf1, 0x04, 0x95, 0x30, 0x11, 0x8c, 0xb1, + 0x43, 0xa8, 0x05, 0x15, 0x9f, 0x6a, 0x56, 0xf6, 0xb3, 0x23, 0x52, 0xbe, 0x0b, 0x2f, 0x1c, 0xf0, + 0xec, 0xae, 0x90, 0x2d, 0x4c, 0x42, 0xac, 0x1e, 0x1f, 0x95, 0x11, 0x71, 0x98, 0x12, 0x03, 0x28, + 0x26, 0xa6, 0xf5, 0x5c, 0x9b, 0x8f, 0x18, 0x60, 0x96, 0xfd, 0x1d, 0x87, 0x8a, 0x28, 0xaf, 0xe4, + 0x7f, 0x8a, 0x96, 0x00, 0xd3, 0x33, 0x1b, 0xf9, 0x43, 0x55, 0x2a, 0x13, 0x4c, 0x98, 0xf8, 0x18, + 0xf0, 0xc7, 0xdc, 0x66, 0x9a, 0x18, 0xfc, 0x2b, 0x84, 0x35, 0x33, 0x1a, 0x00, 0x0e, 0x07, 0x66, + 0x41, 0xc5, 0x22, 0x20, 0xa2, 0x0d, 0xf5, 0xcb, 0x16, 0x94, 0xf7, 0x90, 0x8c, 0x58, 0xb6, 0x5a, + 0x60, 0x85, 0xe3, 0xb0, 0xa0, 0xe2, 0x8f, 0x20, 0x23, 0xb9, 0x50, 0x50, 0xbf, 0xbd, 0x7a, 0x8b, + 0xcb, 0xb9, 0xd3, 0xb5, 0x55, 0xda, 0x54, 0xbb, 0xb6, 0x5e, 0x76, 0xed, 0x90, 0x1a, 0x6b, 0xc9, + 0xd7, 0x56, 0x49, 0xde, 0x5c, 0xdb, 0x08, 0x1f, 0x15, 0xb2, 0x45, 0xa1, 0xec, 0x3f, 0x57, 0xa1, + 0x52, 0x72, 0x37, 0x9d, 0x71, 0x9a, 0xde, 0x06, 0xb1, 0x45, 0x7e, 0x85, 0x59, 0xbc, 0xc7, 0xdd, + 0xa2, 0xd4, 0x04, 0xf6, 0xfa, 0x6d, 0xb1, 0x0a, 0x9c, 0xaa, 0xf4, 0xa6, 0x90, 0x9b, 0x2a, 0xbe, + 0x80, 0xef, 0xea, 0x55, 0x79, 0x03, 0x7b, 0xfd, 0x55, 0x70, 0x81, 0xcf, 0x5b, 0x69, 0xde, 0xfc, + 0xc6, 0x21, 0x9c, 0xb0, 0x17, 0x19, 0xb9, 0x97, 0x90, 0x9b, 0x9f, 0xdf, 0x8b, 0x0a, 0x95, 0x7d, + 0x6d, 0x6e, 0xbf, 0x57, 0x21, 0x91, 0xc5, 0xc0, 0xf6, 0x44, 0x81, 0xe2, 0x16, 0xf3, 0x57, 0x25, + 0xb8, 0x7d, 0xa5, 0x26, 0x4e, 0xea, 0x5f, 0x1c, 0x9f, 0x4d, 0x44, 0x59, 0x4f, 0x91, 0xa0, 0xdb, + 0xef, 0x0d, 0xb4, 0x56, 0x3a, 0x5a, 0x14, 0x77, 0x28, 0x5c, 0xb5, 0xd7, 0x1d, 0x0a, 0x2b, 0x95, + 0x8e, 0xd6, 0x40, 0x28, 0x5c, 0xd5, 0x16, 0xf0, 0x86, 0x2a, 0x1d, 0x6d, 0x41, 0x5f, 0xc0, 0xd8, + 0x3f, 0x64, 0x4a, 0x97, 0xff, 0x35, 0xe2, 0x5b, 0xdd, 0xfb, 0x6a, 0x5b, 0xdb, 0xc2, 0xfb, 0xab, + 0xdb, 0x5b, 0x9a, 0x21, 0xa6, 0x34, 0xf1, 0xa5, 0xc6, 0xae, 0x21, 0x79, 0x92, 0xc5, 0xf5, 0xad, + 0xee, 0x7d, 0x55, 0x8a, 0x01, 0xac, 0xda, 0xd5, 0xde, 0xd2, 0x5c, 0xe5, 0xc5, 0xe0, 0x4a, 0xad, + 0xff, 0xb8, 0x7e, 0x6d, 0x94, 0x38, 0xcc, 0x61, 0x3e, 0x6e, 0xb9, 0x1a, 0xe5, 0x21, 0xc3, 0xff, + 0x06, 0x2d, 0x0b, 0x99, 0xfd, 0x50, 0xa3, 0xb4, 0xb8, 0xf7, 0x13, 0x5d, 0x0a, 0x4b, 0x92, 0x59, + 0x49, 0xe2, 0x4f, 0x88, 0x65, 0x0a, 0x1c, 0x6e, 0x87, 0x06, 0xb4, 0x4b, 0xc3, 0x99, 0xe3, 0x33, + 0xe0, 0x77, 0x65, 0xec, 0x4d, 0x57, 0x8f, 0x68, 0xbd, 0x97, 0xb4, 0x09, 0xe2, 0xaf, 0x47, 0xc5, + 0xfc, 0xf5, 0xeb, 0xc0, 0x35, 0x51, 0xce, 0xa2, 0xc7, 0xff, 0x0f, 0x1c, 0x5a, 0x49, 0x41, 0xdb, + 0xfd, 0x7e, 0x45, 0xf1, 0x2a, 0x5e, 0x7c, 0x9b, 0x0d, 0xf4, 0xac, 0x28, 0xa7, 0x4a, 0xbd, 0x9c, + 0x90, 0x1f, 0x47, 0x0c, 0x30, 0xe3, 0xdd, 0x4e, 0x12, 0xaa, 0xc2, 0xbe, 0x56, 0xa5, 0x12, 0x5c, + 0xb7, 0xa0, 0x16, 0xa9, 0xf1, 0x3e, 0xed, 0xab, 0x1e, 0xa8, 0xa3, 0xc1, 0x9a, 0x88, 0xdd, 0xf0, + 0x5c, 0x6a, 0x6a, 0x3c, 0xf5, 0x49, 0x3c, 0x73, 0xf2, 0x73, 0xed, 0xd2, 0xb0, 0x76, 0xfd, 0x28, + 0xd4, 0x50, 0x1b, 0x1a, 0x48, 0x5f, 0xfc, 0x6c, 0xae, 0xea, 0xe7, 0xaf, 0x07, 0xff, 0x5f, 0x39, + 0xf4, 0x94, 0x95, 0x12, 0xf6, 0xb5, 0xf8, 0x7e, 0x8d, 0xf7, 0xa0, 0xc6, 0x3d, 0x41, 0xc5, 0xbd, + 0x27, 0xd0, 0xe2, 0x25, 0xca, 0xdc, 0x27, 0x9c, 0x2a, 0x5d, 0xe6, 0x84, 0xf9, 0x71, 0xc5, 0x03, + 0x1c, 0xdb, 0x2c, 0x0b, 0xa3, 0x2a, 0xbc, 0x27, 0xa8, 0x84, 0x0c, 0x94, 0xca, 0xf4, 0xd5, 0x2b, + 0xda, 0xe0, 0x51, 0x32, 0x9d, 0xf1, 0x2d, 0x93, 0xcc, 0xa9, 0x5e, 0x6c, 0x34, 0x31, 0x9b, 0xc7, + 0xdc, 0xbd, 0xca, 0x1c, 0x1a, 0x4c, 0x4e, 0x0f, 0x18, 0x8a, 0x37, 0x6e, 0x67, 0xea, 0xf4, 0x57, + 0x5a, 0xef, 0x41, 0x7d, 0xf2, 0x18, 0x8c, 0x14, 0x84, 0x0f, 0xcb, 0x9c, 0xfc, 0x9c, 0xf5, 0x2b, + 0xfa, 0xd1, 0x3a, 0x79, 0xfe, 0x4a, 0x1a, 0x6a, 0xc9, 0xe3, 0xa1, 0x66, 0x5f, 0x5b, 0x5d, 0xc0, + 0xab, 0x84, 0xde, 0xf1, 0x85, 0xf7, 0x6c, 0x09, 0x78, 0xdc, 0x2d, 0x0d, 0xe1, 0x40, 0xd0, 0xdd, + 0x04, 0x8a, 0x63, 0x21, 0x78, 0xd9, 0xcd, 0x8d, 0x25, 0xae, 0x85, 0x8b, 0x0c, 0xfa, 0x48, 0x9f, + 0x3e, 0x72, 0x4d, 0x1b, 0xb9, 0x0e, 0xec, 0xd0, 0xd8, 0x76, 0x70, 0x1b, 0xd8, 0x0a, 0xc1, 0xad, + 0xdc, 0xb9, 0x69, 0xf1, 0xe7, 0x38, 0xf4, 0x98, 0x2d, 0x15, 0x9c, 0x96, 0xea, 0x03, 0xde, 0x10, + 0x09, 0x14, 0xe1, 0x55, 0x25, 0xb7, 0x30, 0x17, 0x8e, 0xb8, 0x11, 0xea, 0xd2, 0xdc, 0xbe, 0x4b, + 0xa9, 0x02, 0x6d, 0xc7, 0x51, 0xd7, 0x90, 0x8c, 0x1d, 0xc9, 0x9c, 0x3d, 0x57, 0xe3, 0x56, 0x5a, + 0x03, 0xfe, 0x06, 0x25, 0x0c, 0x71, 0x5b, 0x52, 0xc3, 0xdd, 0xf5, 0x01, 0x6f, 0x6e, 0x2d, 0xa1, + 0x8a, 0x73, 0x15, 0x60, 0x48, 0x89, 0x4f, 0xf8, 0x9a, 0xfc, 0x81, 0xa0, 0x42, 0xe9, 0x85, 0x98, + 0x9e, 0xc5, 0x8a, 0x5d, 0x61, 0xf5, 0x9b, 0xaa, 0xf4, 0x86, 0x30, 0x1f, 0x9e, 0xb8, 0x1a, 0x2a, + 0x6a, 0x55, 0xca, 0xbc, 0x23, 0x96, 0x9e, 0x18, 0x4d, 0x4d, 0x9c, 0x94, 0xe7, 0xcb, 0x6c, 0x88, + 0x28, 0x0f, 0x07, 0x9a, 0x1b, 0x03, 0x61, 0x77, 0xcb, 0x76, 0x7f, 0x50, 0x71, 0x7b, 0xf7, 0x3b, + 0xb1, 0x13, 0x17, 0xb2, 0xee, 0x1f, 0xe4, 0x4b, 0x17, 0x7f, 0x14, 0x68, 0xae, 0x0a, 0x1b, 0xd0, + 0xaa, 0x76, 0x00, 0x57, 0xe1, 0xd7, 0x0b, 0x2b, 0x81, 0xad, 0x3a, 0x08, 0xd0, 0x41, 0xe4, 0x98, + 0xe1, 0x6e, 0xe2, 0xf9, 0x90, 0x8f, 0x16, 0xff, 0x7b, 0x0e, 0x3d, 0xde, 0xea, 0xde, 0xc7, 0x26, + 0xd4, 0x2b, 0x41, 0x8f, 0xe2, 0x0f, 0x1b, 0x33, 0xa7, 0x18, 0xd7, 0xe4, 0x23, 0x4e, 0x95, 0x06, + 0x39, 0x61, 0x6e, 0x3c, 0x31, 0x68, 0x30, 0x3f, 0x7b, 0x95, 0xda, 0x68, 0x6a, 0x25, 0x01, 0x91, + 0xb5, 0x80, 0xa5, 0x57, 0xc2, 0xb8, 0x22, 0x53, 0xb4, 0x92, 0x74, 0x21, 0x18, 0xab, 0x06, 0xe3, + 0xe8, 0xe3, 0x97, 0x60, 0x1d, 0x69, 0xbd, 0xa7, 0xb5, 0xce, 0x11, 0x7d, 0xfc, 0x22, 0xeb, 0xe3, + 0x2b, 0xcf, 0x5d, 0x1d, 0x5e, 0xe5, 0xd0, 0x23, 0x0c, 0x6f, 0xc0, 0xc9, 0xf4, 0x11, 0xbb, 0x92, + 0xea, 0x5f, 0xaa, 0xd2, 0xfb, 0x42, 0x5e, 0x04, 0xd1, 0x69, 0xe3, 0x61, 0xd0, 0x12, 0xcc, 0xc2, + 0x6c, 0x6d, 0xc8, 0xcb, 0xc9, 0xc0, 0x0c, 0x9d, 0xba, 0xaa, 0xca, 0x79, 0x49, 0xf3, 0xff, 0x2b, + 0x87, 0x9e, 0x30, 0xa8, 0x34, 0xf9, 0x8c, 0x1d, 0x56, 0xc1, 0x77, 0x15, 0x65, 0xa5, 0x35, 0xd0, + 0xe1, 0x6e, 0xa1, 0x17, 0x8a, 0x4b, 0xaa, 0x8f, 0x73, 0xaa, 0x74, 0x94, 0x13, 0xe6, 0xc3, 0x14, + 0x83, 0x66, 0xb4, 0x33, 0xb7, 0x79, 0x21, 0x3e, 0x08, 0x75, 0xb1, 0xf1, 0xff, 0xeb, 0x07, 0xe1, + 0x7d, 0x00, 0x7d, 0xe4, 0x53, 0x6d, 0x64, 0xcc, 0x58, 0x4a, 0x86, 0xee, 0xac, 0x84, 0x92, 0xb1, + 0x71, 0xfd, 0x8b, 0x31, 0xed, 0x60, 0x34, 0x77, 0xd1, 0xbc, 0x48, 0x38, 0xab, 0xa1, 0x73, 0x60, + 0x23, 0x89, 0xfe, 0xf9, 0x28, 0xb9, 0x31, 0x3a, 0x5f, 0x85, 0xf8, 0x3a, 0xd6, 0x04, 0xb9, 0xcc, + 0x8c, 0x1e, 0x5c, 0xc5, 0x9a, 0x20, 0x1d, 0x60, 0x31, 0x04, 0xe1, 0x88, 0xc6, 0x26, 0x98, 0xc3, + 0x8a, 0xb8, 0x95, 0x0d, 0x76, 0xb0, 0xdc, 0x8a, 0x56, 0xc4, 0x04, 0x3b, 0x78, 0x9a, 0x09, 0x63, + 0x60, 0x23, 0x99, 0x27, 0xb4, 0x01, 0x13, 0x8b, 0x6f, 0xc5, 0x03, 0xc5, 0xe2, 0x73, 0xda, 0x6e, + 0x7c, 0x3f, 0xc4, 0x04, 0x4c, 0xb7, 0xc0, 0x22, 0x9f, 0x75, 0x1f, 0x0c, 0x07, 0xc7, 0x63, 0xae, + 0x85, 0x33, 0x01, 0xfd, 0xf8, 0x07, 0x0a, 0xe8, 0xe7, 0xb4, 0xdd, 0x27, 0x7f, 0x98, 0x29, 0x9d, + 0x09, 0xca, 0xc7, 0xb3, 0xd9, 0xf3, 0x84, 0xe6, 0xfb, 0x5b, 0xf6, 0xa2, 0x37, 0x5c, 0xb1, 0x9d, + 0xe1, 0x54, 0x69, 0x8a, 0xbd, 0xe8, 0x3d, 0xc1, 0xe5, 0x8a, 0x7d, 0xdf, 0x93, 0x1b, 0xdf, 0x63, + 0x5c, 0x6e, 0xc4, 0x89, 0x95, 0x98, 0x77, 0xff, 0x56, 0x95, 0x7e, 0x93, 0x1b, 0x71, 0x62, 0x0f, + 0xab, 0xd6, 0x53, 0x76, 0x42, 0x05, 0x0c, 0x12, 0x89, 0x62, 0x68, 0x20, 0x99, 0x18, 0xd6, 0x46, + 0x70, 0xfc, 0x4d, 0x3c, 0x9f, 0x32, 0x07, 0xc6, 0x52, 0xd3, 0x9f, 0x3b, 0x72, 0xbb, 0xc9, 0x91, + 0x9a, 0xea, 0x4e, 0x4e, 0xdd, 0x62, 0x37, 0x47, 0xc7, 0x1c, 0x31, 0x2b, 0xfe, 0x82, 0x43, 0x0f, + 0xef, 0x6a, 0xdf, 0xbd, 0x5b, 0x09, 0x9a, 0xf1, 0x8b, 0x20, 0xec, 0xcb, 0xa3, 0xec, 0xba, 0xcf, + 0x87, 0x21, 0xfe, 0x1a, 0x80, 0x55, 0xe6, 0xed, 0xee, 0x2a, 0xac, 0x53, 0x13, 0xb1, 0x03, 0xb8, + 0x21, 0x2b, 0x76, 0xb0, 0x9c, 0x94, 0xdc, 0x84, 0x60, 0xe4, 0x8f, 0xd4, 0xc0, 0x21, 0x60, 0xaf, + 0x60, 0x04, 0x86, 0xb8, 0xa4, 0x2c, 0x29, 0xda, 0x16, 0xc7, 0xfa, 0x75, 0xeb, 0xe4, 0x7c, 0x15, + 0xe2, 0x2f, 0xc1, 0xa6, 0xb1, 0x29, 0xe8, 0xf6, 0x28, 0xbb, 0xdb, 0x5b, 0x1a, 0x95, 0x60, 0xab, + 0xcf, 0x8f, 0xf7, 0xb4, 0x06, 0xc5, 0x83, 0xcf, 0x40, 0x4b, 0xaa, 0x77, 0xab, 0x92, 0x47, 0x98, + 0x1b, 0x4b, 0xdc, 0x68, 0x6c, 0x19, 0x4d, 0x24, 0xad, 0x2a, 0x6c, 0x25, 0x56, 0x85, 0x14, 0x4f, + 0x25, 0xbd, 0x61, 0x62, 0xcc, 0x3d, 0xcc, 0xdb, 0x1c, 0xf5, 0x01, 0xaf, 0x23, 0x13, 0x89, 0x68, + 0x87, 0xe2, 0xfa, 0x48, 0x84, 0xb2, 0x39, 0x79, 0xee, 0x22, 0xf8, 0x6e, 0x0e, 0x2d, 0x0d, 0x79, + 0xdc, 0x7e, 0x6c, 0x83, 0xec, 0x70, 0xb7, 0xe0, 0x23, 0xcf, 0x92, 0xea, 0x7f, 0xa6, 0x4a, 0x1f, + 0x08, 0xb6, 0x04, 0x71, 0xab, 0xf1, 0x55, 0xe5, 0x23, 0x9f, 0x95, 0x59, 0x13, 0x43, 0xff, 0x38, + 0xa2, 0x7f, 0x79, 0x04, 0xca, 0x33, 0xfe, 0x0f, 0x1f, 0xa3, 0xec, 0xde, 0x90, 0xd7, 0xae, 0xaa, + 0xb6, 0xe1, 0x5f, 0xbf, 0x4e, 0xb6, 0x11, 0x37, 0x84, 0xa1, 0x47, 0x5a, 0xdd, 0xfb, 0x70, 0xa0, + 0x23, 0x63, 0xde, 0x86, 0x0c, 0xd1, 0xcd, 0x58, 0xd2, 0x8f, 0xe3, 0xea, 0x7c, 0xa8, 0x4a, 0x4d, + 0x42, 0x5e, 0x04, 0x71, 0x9b, 0xd1, 0x47, 0xfe, 0x80, 0x57, 0xa9, 0x6a, 0x33, 0xe1, 0xb0, 0x1b, + 0x41, 0x97, 0x10, 0x4d, 0x02, 0x9b, 0xb0, 0xd9, 0x3e, 0x61, 0x37, 0x23, 0x6b, 0x34, 0x5f, 0x5b, + 0xb7, 0x4e, 0xce, 0x5b, 0x8c, 0x21, 0x87, 0x2c, 0xc7, 0x73, 0x74, 0x7b, 0xdb, 0xc6, 0x60, 0xa0, + 0xf5, 0x3d, 0x25, 0x18, 0x28, 0x5d, 0x85, 0x17, 0x11, 0xb6, 0xd3, 0x64, 0xa7, 0x89, 0x12, 0x6c, + 0x92, 0xed, 0x6d, 0x55, 0xbb, 0x83, 0x81, 0xd6, 0xaa, 0x5f, 0x2b, 0xc1, 0x00, 0x91, 0x3d, 0xd8, + 0x0d, 0x7a, 0x36, 0xd1, 0x0b, 0x71, 0x6d, 0x1d, 0xac, 0x38, 0x82, 0x87, 0xb4, 0x4f, 0xce, 0xa6, + 0xc9, 0x9f, 0xe5, 0xd0, 0xa3, 0x76, 0x6d, 0x44, 0xda, 0x6d, 0x2c, 0x35, 0xaf, 0xb7, 0xf4, 0x09, + 0xeb, 0xe8, 0x65, 0x0e, 0x14, 0xf1, 0x2d, 0x66, 0xdb, 0xf6, 0x1a, 0x29, 0x55, 0xee, 0xdd, 0x78, + 0x83, 0xf4, 0x7a, 0x2b, 0x2d, 0xed, 0xa8, 0xf7, 0x92, 0x7e, 0x62, 0xdc, 0xba, 0xed, 0x94, 0x33, + 0x98, 0xc6, 0xde, 0x3d, 0x47, 0x09, 0xfc, 0x15, 0x43, 0xc2, 0xce, 0x4d, 0x22, 0xba, 0xe1, 0x93, + 0xb8, 0x8a, 0x38, 0x88, 0xe8, 0xdc, 0x58, 0x73, 0xd6, 0x92, 0xa8, 0x8a, 0xa0, 0x04, 0x25, 0x63, + 0x97, 0x2c, 0x85, 0x71, 0xae, 0x5a, 0xce, 0x5d, 0x08, 0x3f, 0xce, 0xa1, 0x55, 0x79, 0x52, 0x37, + 0xba, 0x7d, 0x2d, 0xed, 0x41, 0xa5, 0xf4, 0x29, 0x5c, 0x53, 0x7c, 0x40, 0x38, 0x0f, 0x9a, 0xb8, + 0x65, 0x8e, 0xaa, 0xee, 0x86, 0x74, 0xb2, 0x3e, 0xe1, 0x5e, 0xa1, 0x36, 0x34, 0x00, 0xd7, 0x27, + 0xe7, 0xac, 0xee, 0x3c, 0x25, 0xf1, 0x5d, 0x05, 0xc8, 0x41, 0x93, 0x37, 0xb5, 0xb5, 0x67, 0xe9, + 0x37, 0x58, 0xc3, 0x2a, 0x5d, 0x8d, 0x6b, 0xfd, 0x25, 0xa7, 0x4a, 0x37, 0x38, 0xe1, 0x9e, 0xe8, + 0x62, 0x94, 0xd5, 0xd9, 0x9a, 0xda, 0xda, 0x1f, 0x50, 0x6f, 0x2b, 0xdf, 0x54, 0xbf, 0xbd, 0xe2, + 0x3b, 0x54, 0xde, 0xee, 0x59, 0x61, 0x1c, 0x8f, 0x96, 0x04, 0x2e, 0x79, 0x9a, 0x89, 0x47, 0x4b, + 0xe2, 0x96, 0xbc, 0x0f, 0xf1, 0x49, 0x2a, 0x1d, 0x75, 0xdb, 0xe4, 0xad, 0xd2, 0x96, 0x0d, 0xfa, + 0xf8, 0xc7, 0x5a, 0x2c, 0x36, 0x9b, 0x88, 0x6e, 0xaf, 0xaf, 0xc1, 0x91, 0x46, 0x36, 0x90, 0xc7, + 0xd3, 0x62, 0xe3, 0x26, 0xb0, 0xb6, 0x6a, 0xa3, 0xe4, 0xda, 0x52, 0x5b, 0x43, 0x52, 0x60, 0xa0, + 0x66, 0x13, 0x51, 0x72, 0x97, 0x6f, 0x83, 0x76, 0xfb, 0x73, 0x10, 0xa9, 0x69, 0xc0, 0x11, 0x27, + 0x5a, 0xaa, 0x04, 0x83, 0x81, 0xe0, 0x56, 0x12, 0xe8, 0xde, 0x81, 0xeb, 0xf1, 0xb4, 0x2a, 0x3d, + 0x29, 0xd8, 0x12, 0xc4, 0xa5, 0xb6, 0x38, 0xf7, 0xb6, 0x34, 0xfe, 0xdf, 0x71, 0xe8, 0x51, 0xfb, + 0x86, 0xe1, 0x6c, 0x6b, 0x87, 0x6d, 0xee, 0x19, 0x3c, 0x84, 0xa7, 0x38, 0x55, 0x3a, 0xc6, 0x09, + 0x73, 0x20, 0xfd, 0x49, 0x77, 0xba, 0x39, 0xea, 0x94, 0xa7, 0x4d, 0x5b, 0x95, 0x56, 0x68, 0x53, + 0xd9, 0x3c, 0x6d, 0x32, 0x91, 0xfe, 0x31, 0xb5, 0xc9, 0xac, 0x13, 0x1f, 0x40, 0x8b, 0x5b, 0x03, + 0xf8, 0x12, 0xdf, 0xb3, 0xf9, 0x83, 0x76, 0x6f, 0xc5, 0xa9, 0xd8, 0x3a, 0x8e, 0x2f, 0x5c, 0x12, + 0x74, 0x71, 0x0d, 0xfc, 0x85, 0xc0, 0x32, 0xa6, 0x71, 0xdc, 0x29, 0x91, 0x95, 0x32, 0x7d, 0x2d, + 0x75, 0x75, 0x8a, 0x4d, 0x93, 0x49, 0x3e, 0xfe, 0x77, 0x68, 0xc9, 0x5e, 0x65, 0xd7, 0x9e, 0x40, + 0xa0, 0xb9, 0xf4, 0x07, 0xf9, 0x23, 0xc0, 0xbe, 0x03, 0xc9, 0x38, 0xec, 0x1c, 0x0e, 0x74, 0x63, + 0x66, 0x10, 0x37, 0x38, 0x25, 0x07, 0xf9, 0x0d, 0xb6, 0xef, 0xac, 0xb0, 0xcb, 0xcc, 0x91, 0x59, + 0xe6, 0xec, 0x39, 0x1b, 0xa6, 0x6c, 0x12, 0xe1, 0xff, 0x8a, 0x43, 0x4f, 0x2a, 0xfb, 0xda, 0x14, + 0xbf, 0xd7, 0x90, 0xca, 0xea, 0x03, 0xde, 0x50, 0x3d, 0x31, 0xfc, 0x39, 0xdb, 0xc3, 0x81, 0xdd, + 0xbb, 0x4b, 0x7f, 0xe8, 0xe0, 0xca, 0x17, 0x99, 0xd7, 0xef, 0xe7, 0x45, 0x15, 0x3d, 0xf4, 0xf0, + 0x1e, 0x98, 0x81, 0x3e, 0x7e, 0xc9, 0x18, 0xb8, 0xe1, 0x6e, 0x47, 0x5b, 0xc0, 0x3b, 0x9b, 0x88, + 0x1a, 0x59, 0x0d, 0xd9, 0x30, 0x19, 0xeb, 0x4f, 0x26, 0x86, 0xb3, 0x46, 0x87, 0x72, 0xf6, 0x64, + 0x62, 0x38, 0x75, 0xe6, 0xa6, 0x3e, 0x70, 0xd9, 0xd1, 0xec, 0x6b, 0x69, 0x31, 0x7a, 0x91, 0xde, + 0x82, 0xa9, 0x5a, 0xbf, 0x4e, 0x9e, 0xb7, 0x0a, 0x86, 0x86, 0xcb, 0xfb, 0x95, 0xbd, 0xf5, 0x01, + 0x6f, 0x03, 0x6c, 0xa4, 0x60, 0x2b, 0x7c, 0x0e, 0x4f, 0xc8, 0x5d, 0xaa, 0xf4, 0x73, 0x21, 0x4f, + 0xb2, 0x58, 0x9d, 0x0b, 0x33, 0x54, 0xbd, 0x13, 0xd7, 0xdb, 0x02, 0x5e, 0x6d, 0x2a, 0x9e, 0xfa, + 0xec, 0x88, 0x76, 0x69, 0x38, 0x79, 0xa7, 0x27, 0x79, 0xe7, 0x88, 0x36, 0x34, 0xa0, 0xf7, 0xf5, + 0x43, 0xdd, 0x9d, 0x92, 0xd9, 0xcb, 0x8e, 0x75, 0x5f, 0x57, 0x2f, 0x14, 0x0a, 0xca, 0xff, 0x4c, + 0xce, 0x43, 0xde, 0x10, 0x74, 0x78, 0xaf, 0xd2, 0xe1, 0xf3, 0x28, 0xf5, 0x81, 0x40, 0x0b, 0x8d, + 0x05, 0xfe, 0x3c, 0xe6, 0x24, 0x7e, 0x55, 0x6a, 0x16, 0xf2, 0x24, 0x8b, 0xdb, 0x73, 0x61, 0x34, + 0x54, 0x0b, 0x89, 0xb5, 0x1b, 0xe9, 0xa9, 0x74, 0x24, 0x63, 0x53, 0xe9, 0x2b, 0x9d, 0x5a, 0xfc, + 0x18, 0x7d, 0x20, 0x20, 0x75, 0xe1, 0x58, 0x32, 0x7e, 0x34, 0x19, 0xbf, 0xaa, 0x7d, 0xd4, 0xa9, + 0x45, 0x4f, 0xd0, 0x3a, 0xe2, 0x63, 0x42, 0x39, 0x4f, 0x51, 0x65, 0x77, 0x39, 0x54, 0xcc, 0xcc, + 0x33, 0x5e, 0x66, 0xa3, 0x02, 0x42, 0x94, 0x57, 0x0c, 0x10, 0x5f, 0xcc, 0x9e, 0x72, 0xe5, 0xe4, + 0xf4, 0xc9, 0x2c, 0x2c, 0x39, 0xd5, 0x03, 0x81, 0x0f, 0xdf, 0x51, 0x76, 0x01, 0x46, 0x05, 0x89, + 0x2a, 0xb8, 0x09, 0x2d, 0xc6, 0x4f, 0xf3, 0x04, 0xd9, 0x30, 0xbb, 0x04, 0x24, 0x96, 0x65, 0xd3, + 0x05, 0xb8, 0xed, 0x8e, 0x32, 0xc1, 0xe5, 0x5f, 0x41, 0x8b, 0xc2, 0x81, 0x66, 0xc5, 0x8c, 0xac, + 0x0b, 0x0f, 0x49, 0x61, 0x88, 0xb8, 0x32, 0x9b, 0x0c, 0x06, 0xcb, 0x90, 0x5a, 0xf6, 0x15, 0x87, + 0x16, 0xe1, 0x50, 0x34, 0xfc, 0x73, 0xcc, 0x59, 0x4e, 0xf5, 0x23, 0xaa, 0xf4, 0x90, 0x60, 0x7c, + 0x8b, 0x08, 0x42, 0xaf, 0x39, 0x36, 0x2b, 0xfb, 0xe1, 0x84, 0x67, 0x8d, 0xed, 0x84, 0xa7, 0xba, + 0x54, 0x95, 0x56, 0x0a, 0x00, 0x11, 0x97, 0x12, 0x5c, 0xfc, 0x6c, 0x29, 0x39, 0xfb, 0xc1, 0xa1, + 0xc1, 0x77, 0xef, 0x56, 0x3c, 0x61, 0xf6, 0x2c, 0x82, 0x80, 0xc4, 0x57, 0x21, 0x87, 0x7e, 0xbc, + 0x57, 0x3f, 0x37, 0x32, 0x9b, 0x88, 0x96, 0xd7, 0x05, 0x1a, 0xc8, 0xbd, 0xdf, 0x4a, 0x47, 0x7d, + 0x50, 0xd9, 0xad, 0x04, 0x59, 0x48, 0x5d, 0xa0, 0x76, 0x9f, 0xe2, 0x69, 0x0f, 0xe3, 0xd0, 0xe0, + 0x98, 0x42, 0x59, 0xa4, 0x1c, 0x2d, 0x65, 0xc3, 0x4d, 0xf1, 0x9b, 0xd1, 0x32, 0x36, 0x7c, 0x94, + 0xfd, 0x90, 0x29, 0x2b, 0x49, 0x5c, 0x46, 0x04, 0x4d, 0x1c, 0x9d, 0xdc, 0x55, 0x23, 0x67, 0xa5, + 0xf3, 0xeb, 0x6d, 0x91, 0x17, 0xe1, 0x11, 0x15, 0x7c, 0x18, 0xca, 0xb3, 0x19, 0x6d, 0xc1, 0x17, + 0x3f, 0xcc, 0x75, 0xb1, 0x82, 0x80, 0xad, 0x96, 0x7d, 0xe3, 0xc7, 0x6c, 0x66, 0x5b, 0xfc, 0x45, + 0xd3, 0xb3, 0x8a, 0x71, 0xa2, 0x8a, 0x43, 0x60, 0x1d, 0x9a, 0xca, 0xda, 0x3e, 0x5a, 0x68, 0x6c, + 0xbf, 0x85, 0x73, 0x87, 0x42, 0x32, 0x9b, 0xf3, 0xad, 0xc3, 0xfb, 0xbd, 0x47, 0xc3, 0xfb, 0xc1, + 0x7b, 0x1e, 0x2b, 0x73, 0x2e, 0xde, 0x1b, 0xa9, 0x24, 0x18, 0x24, 0x09, 0xe7, 0xb7, 0x3a, 0x97, + 0x34, 0xa4, 0x64, 0xc5, 0xf2, 0x3b, 0x9b, 0xc7, 0x87, 0x18, 0xae, 0x7d, 0x62, 0xbf, 0xfe, 0x1c, + 0x1f, 0xe2, 0x0f, 0xb2, 0x7c, 0x88, 0x93, 0xb1, 0x38, 0xa0, 0xe8, 0x27, 0x6f, 0x91, 0x53, 0x56, + 0xb0, 0x75, 0x10, 0xaf, 0x95, 0x6f, 0xeb, 0x5b, 0xfc, 0x7f, 0x17, 0xd8, 0xaf, 0xb5, 0x82, 0x7f, + 0xd5, 0xef, 0x0b, 0x54, 0xe9, 0xaf, 0x0b, 0xec, 0x17, 0x5b, 0xbf, 0x2a, 0xc8, 0x72, 0x4f, 0x27, + 0x17, 0x5d, 0xbb, 0xee, 0xd0, 0xed, 0x27, 0xd6, 0x0f, 0x30, 0x8a, 0x72, 0x37, 0xd2, 0xa5, 0xdd, + 0xfe, 0x9c, 0xfa, 0x9b, 0x1b, 0xbb, 0x83, 0xb2, 0x2f, 0xfc, 0xe2, 0x6c, 0x22, 0xaa, 0xec, 0x0b, + 0xbf, 0x34, 0x9b, 0x88, 0xee, 0xdb, 0x1d, 0x72, 0xb0, 0x97, 0x7d, 0xc1, 0x50, 0x4b, 0xee, 0x19, + 0x5f, 0x3f, 0x08, 0x7b, 0x03, 0x10, 0xd5, 0x7a, 0x6e, 0x25, 0xa7, 0x4e, 0xb0, 0xc8, 0x7a, 0xef, + 0x09, 0x7d, 0xe4, 0x53, 0x96, 0x3a, 0x9b, 0x97, 0xa8, 0x61, 0xd4, 0x3d, 0x3e, 0x16, 0x37, 0xca, + 0x74, 0x94, 0x87, 0x5b, 0x7c, 0xfe, 0xf6, 0x7d, 0x84, 0x02, 0xf5, 0x84, 0xef, 0x1d, 0xda, 0xb7, + 0x3b, 0x54, 0x41, 0x6f, 0x00, 0xdf, 0x8d, 0x74, 0xe9, 0x27, 0x2f, 0x58, 0x4d, 0x35, 0x4a, 0xea, + 0x33, 0xe4, 0xdd, 0xb3, 0x27, 0xad, 0xeb, 0xd9, 0xf8, 0xcd, 0xd1, 0x64, 0x6c, 0x4a, 0x1f, 0x89, + 0xeb, 0xe3, 0xd4, 0x73, 0xa9, 0x3f, 0x75, 0xec, 0xbc, 0x7e, 0xbc, 0xf7, 0x6e, 0xa4, 0x8b, 0x0e, + 0x0a, 0x1e, 0x0e, 0xfb, 0x5d, 0xe0, 0x2b, 0x0b, 0x10, 0x6a, 0x0f, 0x29, 0xc1, 0x06, 0xfc, 0x70, + 0x01, 0x71, 0x15, 0xeb, 0x59, 0xa0, 0x4a, 0x9d, 0x0b, 0x04, 0x26, 0x41, 0xfc, 0x87, 0x02, 0x22, + 0x1d, 0xc1, 0x01, 0xff, 0xd0, 0x40, 0x6a, 0x7a, 0x22, 0xdd, 0x3d, 0xac, 0x8f, 0x5c, 0xab, 0x74, + 0xc0, 0x89, 0x2d, 0xb8, 0x4d, 0xa4, 0x86, 0xbb, 0x89, 0xdf, 0x3f, 0x4e, 0x5c, 0xe3, 0x68, 0x7e, + 0x35, 0x04, 0x66, 0x19, 0x98, 0x4a, 0x78, 0x2b, 0xbb, 0x9a, 0x1e, 0x8d, 0x5a, 0x51, 0x12, 0x67, + 0xce, 0xa6, 0x27, 0x3b, 0x01, 0x1d, 0x62, 0xd3, 0x64, 0x0e, 0xf5, 0x6b, 0x3d, 0x97, 0x35, 0x35, + 0x0a, 0x9a, 0x4c, 0x26, 0x32, 0x95, 0xfe, 0xea, 0x28, 0x78, 0x8f, 0xe9, 0xe7, 0x46, 0xd2, 0x57, + 0x3a, 0xf5, 0x1b, 0x5d, 0xc4, 0x49, 0x01, 0xae, 0x15, 0x8c, 0x8c, 0xa5, 0x67, 0xce, 0x18, 0xc4, + 0xcd, 0x25, 0xa0, 0x4d, 0x44, 0xf5, 0xde, 0x21, 0xd8, 0x36, 0xb5, 0xc1, 0x49, 0xed, 0xf0, 0x05, + 0xad, 0xe7, 0x72, 0xfa, 0xfa, 0x01, 0x2d, 0x7e, 0xc5, 0xa0, 0xff, 0xff, 0xb1, 0xf7, 0xa6, 0xd1, + 0x51, 0x1c, 0xeb, 0x82, 0xe0, 0x4b, 0x6d, 0x88, 0x60, 0x4f, 0x36, 0x19, 0x6c, 0x5c, 0xc8, 0xd8, + 0x46, 0x79, 0xc5, 0xe2, 0xf4, 0x86, 0xe5, 0x35, 0xb5, 0x80, 0x65, 0x83, 0x90, 0x53, 0xc0, 0xf5, + 0xf5, 0x72, 0x7d, 0x0b, 0x29, 0x8d, 0xcb, 0x48, 0x55, 0xba, 0x55, 0x25, 0xbc, 0xdc, 0xe5, 0x15, + 0x8b, 0x40, 0x02, 0x09, 0x89, 0x34, 0xab, 0x2c, 0x36, 0x9b, 0xcd, 0x8b, 0x90, 0xb9, 0xf8, 0x82, + 0x28, 0x49, 0x66, 0xba, 0x4f, 0xf7, 0xeb, 0x65, 0x5e, 0x2f, 0x8f, 0xe9, 0x37, 0xdd, 0x3d, 0xbd, + 0xcc, 0xbc, 0x47, 0x65, 0x55, 0x69, 0x4e, 0xf7, 0x30, 0x73, 0x7a, 0xe6, 0x9c, 0x3e, 0x3e, 0x73, + 0xce, 0xcc, 0xc9, 0xf8, 0x22, 0x22, 0x23, 0x97, 0x2a, 0x09, 0x8c, 0x59, 0x6c, 0xf8, 0x83, 0x2a, + 0xf6, 0x8c, 0xf8, 0xe2, 0x8b, 0x6f, 0xff, 0x5a, 0x3b, 0x8d, 0xee, 0x36, 0x5f, 0x4b, 0x90, 0x84, + 0x40, 0x30, 0x9f, 0x75, 0x1f, 0x58, 0xcc, 0x02, 0xe5, 0x52, 0xea, 0x33, 0x7a, 0xcf, 0xf8, 0xac, + 0xaf, 0xf7, 0x25, 0x7b, 0x63, 0x98, 0x67, 0x75, 0x0e, 0x5f, 0xea, 0x03, 0xaf, 0x67, 0xdf, 0xc6, + 0x96, 0xf5, 0x5a, 0x7d, 0xb4, 0xd1, 0xd7, 0x12, 0xac, 0x0f, 0x85, 0x1b, 0x42, 0x41, 0x9f, 0x89, + 0xe7, 0x4c, 0x74, 0xe5, 0x5b, 0xb4, 0x08, 0xd7, 0x61, 0xfb, 0x8b, 0xe7, 0x97, 0x84, 0x43, 0xa1, + 0xe8, 0x92, 0xc5, 0x66, 0xc9, 0x12, 0x28, 0xf2, 0x19, 0x7b, 0x86, 0x13, 0x83, 0x26, 0xc5, 0x44, + 0x76, 0x96, 0x5b, 0xaa, 0xca, 0x1d, 0x80, 0x78, 0x59, 0x40, 0x93, 0x5a, 0x82, 0x75, 0xd6, 0x8a, + 0x49, 0x4a, 0x42, 0x42, 0xf0, 0xda, 0xeb, 0xe4, 0x2d, 0x02, 0xb1, 0x19, 0xc3, 0xc3, 0x31, 0xe1, + 0x32, 0x4d, 0x88, 0xb4, 0x25, 0x31, 0xb0, 0x1b, 0xe6, 0x60, 0x24, 0xaa, 0x11, 0x1b, 0x5a, 0x9a, + 0x3e, 0x7e, 0x26, 0x75, 0x22, 0xee, 0xac, 0x3e, 0x7c, 0x84, 0x54, 0xe0, 0xdc, 0x48, 0x56, 0xdd, + 0x42, 0xb2, 0x56, 0x2a, 0x4a, 0x30, 0xba, 0xfa, 0x41, 0x26, 0x09, 0x5b, 0x59, 0xa2, 0xda, 0xd7, + 0x24, 0x9e, 0xcf, 0x71, 0xdb, 0xc7, 0x8d, 0xe2, 0xa1, 0xf2, 0xff, 0x08, 0xba, 0xf2, 0x7f, 0x09, + 0xbc, 0x99, 0xdc, 0x55, 0xe1, 0xba, 0xec, 0xe4, 0x16, 0xfb, 0x8c, 0x13, 0x3d, 0xe6, 0xc5, 0xb1, + 0x23, 0x0b, 0xda, 0xb5, 0xc7, 0xc4, 0x9e, 0x83, 0x71, 0xf6, 0x09, 0xe9, 0xfe, 0x8b, 0xa9, 0xe3, + 0x67, 0x4d, 0x88, 0xc4, 0xbd, 0x2b, 0xd6, 0xad, 0xc2, 0x10, 0x89, 0x21, 0x63, 0xe8, 0xd8, 0x48, + 0x4c, 0x4f, 0xc4, 0xb7, 0x13, 0xcb, 0x77, 0x1c, 0x34, 0xc9, 0x76, 0x07, 0x41, 0xd0, 0x4a, 0x6d, + 0xaf, 0x81, 0x44, 0x4a, 0x1e, 0xec, 0x1f, 0xd1, 0xdb, 0x8c, 0xfe, 0x4b, 0xcc, 0xf1, 0x2a, 0x11, + 0x3f, 0x9d, 0xec, 0x8d, 0x1b, 0x87, 0xce, 0x24, 0x06, 0xf6, 0x92, 0xf5, 0x9e, 0xe8, 0xb1, 0xf0, + 0x45, 0x6f, 0x3c, 0x79, 0xa8, 0x9f, 0xb7, 0xee, 0x6b, 0xcf, 0x21, 0x11, 0xf9, 0x94, 0xf0, 0x86, + 0x48, 0xd1, 0x04, 0xbc, 0x6b, 0xbf, 0xc8, 0xfa, 0x0c, 0x55, 0xd1, 0xd6, 0xf0, 0x12, 0x0d, 0x0b, + 0xba, 0x72, 0x49, 0x90, 0xac, 0x41, 0xe4, 0xaf, 0x04, 0x62, 0x73, 0xdc, 0xbd, 0x0d, 0xf8, 0x03, + 0x26, 0xe4, 0x85, 0xa5, 0x9b, 0x87, 0x4e, 0x73, 0x26, 0xa4, 0x7a, 0xb6, 0x6d, 0xd4, 0x3e, 0x4a, + 0x0c, 0xc4, 0x4d, 0x98, 0x6d, 0xd4, 0xa2, 0x98, 0xe6, 0x48, 0x0c, 0xc4, 0xad, 0xbe, 0x97, 0x3f, + 0x4d, 0x9d, 0x21, 0xc6, 0x5a, 0xac, 0x3b, 0x0d, 0x29, 0x85, 0x37, 0xe2, 0xd2, 0xae, 0x91, 0x03, + 0xdf, 0xc2, 0xc5, 0x7a, 0x96, 0xc9, 0x23, 0xcc, 0x07, 0xeb, 0xd4, 0x96, 0x57, 0x61, 0xd0, 0x32, + 0x9f, 0x79, 0x2f, 0x16, 0x35, 0x04, 0xc2, 0xcf, 0x2f, 0xd9, 0xe4, 0x0f, 0x2f, 0x69, 0x0c, 0xac, + 0x5f, 0x42, 0xe6, 0x7b, 0x56, 0xb5, 0x16, 0x2e, 0xfe, 0x2b, 0x01, 0x89, 0xcd, 0x61, 0xad, 0x2e, + 0xea, 0x0f, 0x47, 0xd7, 0x5a, 0x48, 0x0b, 0xcc, 0x0c, 0x8f, 0x08, 0xba, 0xd2, 0x23, 0x48, 0x1e, + 0x0d, 0xe4, 0xad, 0x82, 0x0d, 0x79, 0xb5, 0x77, 0xba, 0x90, 0x97, 0x2f, 0x03, 0xf6, 0xc2, 0x1e, + 0x29, 0xe4, 0xd6, 0x43, 0x6f, 0x93, 0x1c, 0x6f, 0xef, 0x64, 0x38, 0x2c, 0x79, 0xfe, 0x4c, 0x72, + 0x5b, 0x17, 0x10, 0xa4, 0x46, 0xd7, 0x97, 0x46, 0xff, 0x25, 0x77, 0x1c, 0x04, 0x40, 0xc4, 0xaa, + 0xc7, 0xca, 0xcc, 0xd3, 0x9d, 0xb6, 0xbe, 0x1e, 0xac, 0x2d, 0x56, 0xb7, 0x44, 0x95, 0x86, 0x86, + 0x50, 0x30, 0x42, 0x5c, 0x0e, 0x5d, 0xf9, 0xa3, 0x94, 0x7a, 0x1c, 0xc1, 0xf8, 0x1f, 0x0a, 0xba, + 0xf2, 0x9d, 0x20, 0xb9, 0xfb, 0xc9, 0x67, 0x84, 0xc4, 0xc0, 0xce, 0xe4, 0x91, 0x0b, 0x16, 0x3c, + 0x63, 0xb4, 0x58, 0x5e, 0x51, 0x67, 0x6c, 0x6f, 0x4d, 0x0d, 0x9f, 0x85, 0x38, 0xe1, 0xc6, 0xd9, + 0xf6, 0xf4, 0xe7, 0xad, 0x40, 0x04, 0x11, 0x0f, 0xae, 0xa1, 0x9e, 0xd4, 0xb7, 0x9f, 0x19, 0x43, + 0xfb, 0xc0, 0x7e, 0x1e, 0x2e, 0x13, 0x4f, 0x07, 0x13, 0xf4, 0xda, 0x7f, 0x29, 0xd9, 0xbf, 0xd7, + 0xbc, 0xff, 0xc7, 0x4f, 0x1a, 0xad, 0xe6, 0x08, 0x30, 0xaf, 0x15, 0x4d, 0x0a, 0x14, 0x89, 0x58, + 0x22, 0xc2, 0xb6, 0x0d, 0xf8, 0x17, 0x18, 0x21, 0xfd, 0xcd, 0xd6, 0xd4, 0xde, 0x33, 0x57, 0x63, + 0x5b, 0x54, 0xf7, 0xea, 0xc5, 0xed, 0x39, 0x68, 0x2a, 0x2d, 0xad, 0x0e, 0x92, 0xad, 0x98, 0x9c, + 0x75, 0x2b, 0xfe, 0x81, 0xa0, 0x2b, 0xc3, 0x82, 0xe4, 0xea, 0x86, 0x77, 0x62, 0xd7, 0xdd, 0xb1, + 0x13, 0xae, 0xc5, 0x8b, 0x7b, 0x72, 0xd0, 0xf4, 0x08, 0xd9, 0x1b, 0xb8, 0xcc, 0xb0, 0x17, 0x53, + 0xb2, 0xee, 0xc5, 0x5f, 0x09, 0xba, 0xf2, 0x0f, 0x05, 0xc9, 0xab, 0xa7, 0xfc, 0xa5, 0x13, 0x30, + 0x00, 0xca, 0xf9, 0x9c, 0x6f, 0x80, 0xdf, 0x18, 0x1e, 0xe3, 0x93, 0xbc, 0x25, 0x06, 0xe2, 0x60, + 0xe9, 0x9a, 0x88, 0x77, 0x24, 0xf7, 0x5f, 0x5a, 0x02, 0xa6, 0x7e, 0x4b, 0x20, 0xd6, 0x8f, 0xb1, + 0x6f, 0x3b, 0x19, 0x00, 0xdf, 0xf0, 0x4c, 0x5b, 0x01, 0x52, 0x33, 0xd8, 0x10, 0xf7, 0x3e, 0x24, + 0x06, 0x76, 0xc3, 0x59, 0x98, 0x1b, 0xe2, 0xf5, 0x05, 0x62, 0x5b, 0x0e, 0x12, 0x23, 0xb0, 0x4b, + 0xfc, 0x96, 0x4c, 0xcd, 0xba, 0x25, 0x44, 0xb9, 0xe6, 0xd1, 0x51, 0x3e, 0xe1, 0x04, 0x90, 0x3b, + 0x73, 0x2f, 0x3c, 0x96, 0x2e, 0x3e, 0xce, 0xc2, 0x72, 0x83, 0x12, 0x74, 0xae, 0xae, 0x14, 0xb1, + 0xb0, 0xdc, 0x36, 0x86, 0x6b, 0x75, 0x9d, 0x57, 0x8c, 0xed, 0xe9, 0x19, 0x63, 0x6c, 0xcf, 0xc8, + 0x16, 0x63, 0x7b, 0xe6, 0x28, 0x31, 0xb6, 0x67, 0xb9, 0x62, 0x6c, 0x3f, 0x8d, 0xf2, 0x1a, 0xb4, + 0x08, 0xe8, 0xa0, 0xc6, 0xd3, 0x7c, 0xf9, 0x5a, 0xa4, 0x5e, 0x2e, 0x62, 0x8b, 0x4c, 0x1e, 0xbe, + 0x0c, 0x39, 0xb5, 0x58, 0x9e, 0x4c, 0x2d, 0x52, 0x2f, 0xb6, 0xa0, 0x71, 0xe1, 0x96, 0x60, 0xd4, + 0x1c, 0xb5, 0xc8, 0x5b, 0x40, 0xa5, 0xb6, 0x60, 0x6d, 0x09, 0x96, 0x89, 0x61, 0x51, 0x01, 0xed, + 0x20, 0x2f, 0xb5, 0x72, 0x98, 0x38, 0xbc, 0x20, 0xbb, 0xfa, 0xd9, 0xdf, 0x10, 0x0e, 0x8c, 0x66, + 0x07, 0x25, 0x5d, 0xc5, 0xad, 0x02, 0x93, 0xc4, 0xdd, 0x37, 0xaa, 0x24, 0x0e, 0x5b, 0x84, 0x50, + 0x49, 0x5c, 0xb9, 0x63, 0xd2, 0xc4, 0xc0, 0x4e, 0x00, 0x2f, 0x73, 0x5e, 0x9c, 0x4b, 0x8d, 0xc6, + 0x23, 0xeb, 0x31, 0x76, 0x1e, 0x4f, 0x0c, 0xec, 0xca, 0x22, 0x9d, 0xfb, 0x08, 0x4d, 0x25, 0x87, + 0x5e, 0x1b, 0xd6, 0xc8, 0x0b, 0x37, 0x07, 0xef, 0xe0, 0x2a, 0x5d, 0x79, 0x45, 0x72, 0x55, 0xca, + 0x4f, 0xf1, 0xb6, 0x7b, 0x5e, 0x8f, 0x9b, 0xf7, 0xdb, 0xa6, 0xba, 0x46, 0x12, 0x7f, 0x8f, 0xa6, + 0xd1, 0xb2, 0x50, 0x24, 0x4a, 0xe6, 0x9e, 0x6b, 0xc5, 0x7e, 0x77, 0xd7, 0x3a, 0x26, 0x1f, 0x33, + 0x5b, 0xa0, 0xba, 0x87, 0x12, 0x3f, 0x42, 0x13, 0xfc, 0xc1, 0x60, 0x28, 0x8a, 0xc5, 0xf1, 0x91, + 0xa2, 0xfb, 0x31, 0xa9, 0xb3, 0x28, 0x2b, 0xa9, 0xa3, 0x58, 0xed, 0x81, 0xd8, 0x59, 0xa8, 0x2b, + 0x0f, 0x4b, 0xfc, 0x30, 0xf2, 0x2c, 0x58, 0x9a, 0x55, 0x44, 0x1c, 0x18, 0xf8, 0x46, 0xe2, 0x9b, + 0x68, 0x72, 0x93, 0xff, 0x43, 0x2c, 0xda, 0x83, 0x24, 0x28, 0x44, 0x35, 0x83, 0x33, 0x28, 0x39, + 0xaa, 0xe4, 0x79, 0xc9, 0xfe, 0xae, 0xc4, 0xc0, 0x97, 0x96, 0x45, 0x0f, 0xb6, 0x24, 0xac, 0xa5, + 0xe9, 0x54, 0x54, 0x47, 0x7b, 0xb1, 0x11, 0x4d, 0x8e, 0x6c, 0x0c, 0x34, 0x83, 0xc1, 0x53, 0x75, + 0x30, 0x10, 0xc5, 0x1a, 0x94, 0x42, 0xc8, 0x0b, 0xea, 0xa8, 0x92, 0x97, 0x90, 0xa0, 0x50, 0x17, + 0xcf, 0xa7, 0x2f, 0xef, 0x20, 0xa6, 0x7a, 0x98, 0x45, 0x64, 0xaf, 0x08, 0xe5, 0x72, 0xa1, 0x52, + 0x75, 0x0c, 0x20, 0x7e, 0x26, 0xa0, 0xb9, 0xfe, 0xc6, 0xc6, 0xd0, 0x07, 0x75, 0x66, 0x39, 0xc1, + 0xa4, 0xbf, 0x7c, 0x4f, 0x0b, 0x2e, 0xf7, 0x07, 0x1a, 0xb5, 0x06, 0xac, 0xd2, 0x28, 0x04, 0xb5, + 0x6b, 0xb6, 0x76, 0xf2, 0x0b, 0x44, 0x55, 0x47, 0xe3, 0x72, 0xf2, 0xc6, 0xa2, 0x64, 0x75, 0x38, + 0x13, 0x24, 0xc7, 0x74, 0xf3, 0x95, 0x6a, 0xb6, 0xc1, 0xc5, 0x4f, 0x04, 0x34, 0xc7, 0x5e, 0x5f, + 0x1d, 0xe4, 0xd6, 0xe8, 0xc3, 0x6b, 0x24, 0x56, 0x96, 0xf6, 0xfd, 0x79, 0x81, 0x57, 0x76, 0xdd, + 0xc0, 0xb2, 0xb2, 0x4c, 0xfb, 0x43, 0x02, 0x4e, 0xd3, 0xe0, 0xcf, 0x8c, 0xec, 0xbe, 0xae, 0xde, + 0x2f, 0xa0, 0xa9, 0x4e, 0x48, 0xbe, 0xae, 0xe0, 0xd1, 0x6f, 0xeb, 0xca, 0x1b, 0xe8, 0x75, 0xc9, + 0x26, 0xa7, 0xa3, 0x76, 0xfc, 0xf0, 0x12, 0x50, 0x91, 0x2d, 0x49, 0xab, 0xd6, 0x7f, 0xc9, 0x32, + 0x41, 0xe2, 0xe3, 0x33, 0xa6, 0x7a, 0xb6, 0x8d, 0xc4, 0x7a, 0x52, 0x7b, 0xcf, 0x40, 0x0a, 0x2b, + 0xb8, 0x2a, 0xc5, 0x5f, 0xe5, 0xa2, 0x49, 0x34, 0x71, 0x28, 0xe0, 0xa8, 0xdf, 0x98, 0xf7, 0xc5, + 0xfa, 0xcd, 0x64, 0x80, 0xcb, 0x74, 0xe5, 0x49, 0xc9, 0x51, 0x25, 0x3f, 0x54, 0x51, 0x01, 0x88, + 0xae, 0xba, 0xb2, 0x14, 0xaa, 0xdc, 0x1a, 0x0a, 0xd5, 0xd1, 0x49, 0x7c, 0x1f, 0x4d, 0xe5, 0x4b, + 0x38, 0x23, 0x6d, 0x8c, 0xee, 0x5d, 0x95, 0xf2, 0xa3, 0x74, 0x16, 0x10, 0x16, 0x66, 0x9e, 0xc9, + 0xd5, 0xd5, 0xfc, 0x9a, 0x0f, 0x42, 0xe1, 0x8d, 0xdc, 0xd7, 0xe4, 0x72, 0x5f, 0x63, 0xaf, 0xb2, + 0x7d, 0x0d, 0x54, 0x79, 0x7d, 0x8d, 0xbd, 0x93, 0xf9, 0x35, 0x7c, 0x09, 0xfe, 0x9a, 0x3c, 0xee, + 0x6b, 0x9c, 0x95, 0xae, 0xaf, 0xc9, 0x38, 0x93, 0xab, 0x6b, 0xf1, 0xf1, 0x7c, 0x84, 0xac, 0x77, + 0x4a, 0x7c, 0x8f, 0x3c, 0x27, 0xab, 0x5b, 0xa2, 0x8e, 0xc3, 0xc2, 0x9e, 0xe4, 0xae, 0x4a, 0xf9, + 0x61, 0xee, 0x03, 0x2b, 0x14, 0x9e, 0x71, 0xb2, 0x4f, 0xec, 0xec, 0x28, 0x6a, 0xc4, 0x70, 0xa1, + 0x3a, 0xc8, 0x26, 0x82, 0x13, 0xc3, 0x4a, 0x2b, 0x67, 0x9d, 0x63, 0x1e, 0xfe, 0x19, 0xb1, 0xcd, + 0xe3, 0xec, 0x27, 0x86, 0xd0, 0x24, 0x3a, 0x75, 0x79, 0xe0, 0x63, 0x76, 0x58, 0xd8, 0x79, 0xd8, + 0x5e, 0x23, 0x3f, 0xc9, 0xaf, 0xbe, 0xa2, 0x02, 0x5e, 0xdf, 0xea, 0x4a, 0x86, 0x41, 0x0f, 0xf6, + 0x53, 0x9b, 0x6d, 0x9c, 0x9e, 0x83, 0x54, 0xab, 0xf6, 0x51, 0xc4, 0x46, 0x6c, 0xb8, 0x62, 0xae, + 0x01, 0xe6, 0xcb, 0xb3, 0xf2, 0x3f, 0xd8, 0x2a, 0xe4, 0x27, 0xf9, 0x8f, 0x18, 0xfb, 0x74, 0xb6, + 0x41, 0xc4, 0x30, 0xa1, 0x73, 0xd9, 0xce, 0x62, 0x60, 0x81, 0x98, 0x64, 0xe5, 0xba, 0xf2, 0xa2, + 0xe4, 0x51, 0x2d, 0x97, 0x38, 0xc0, 0x25, 0xcb, 0xb9, 0x79, 0x74, 0x17, 0x43, 0xec, 0xdd, 0xe7, + 0xa6, 0x2c, 0xb0, 0xf2, 0x1a, 0xb9, 0x6b, 0x3d, 0x66, 0xcc, 0x78, 0x82, 0xee, 0xde, 0xc5, 0xfd, + 0x02, 0x9a, 0xc0, 0x91, 0x70, 0xa2, 0x8a, 0xa6, 0xd6, 0x87, 0x82, 0x51, 0x7f, 0x20, 0xa8, 0x85, + 0x55, 0x42, 0xf9, 0x01, 0x90, 0x3e, 0xa2, 0x2b, 0x0f, 0x49, 0xae, 0x4a, 0x79, 0x0a, 0xc4, 0xb4, + 0x60, 0x04, 0x9d, 0xea, 0x6a, 0x22, 0xae, 0x44, 0x93, 0x09, 0x61, 0xb7, 0x4e, 0x0b, 0x47, 0x02, + 0x21, 0x9a, 0x6a, 0x71, 0x81, 0xae, 0xcc, 0x97, 0x1c, 0x55, 0xf2, 0x14, 0x07, 0x69, 0xa8, 0x3a, + 0x1a, 0x14, 0x5f, 0x9a, 0x87, 0xee, 0x83, 0x2c, 0x85, 0x3c, 0x92, 0xa5, 0x39, 0xf5, 0xdf, 0xe5, + 0x75, 0x12, 0x02, 0x85, 0x0f, 0x89, 0xd7, 0x49, 0x3c, 0x60, 0xa3, 0x79, 0xed, 0xf9, 0x64, 0xaa, + 0x2b, 0xbf, 0x2f, 0x2f, 0x0a, 0xcf, 0x9a, 0x2a, 0x14, 0xc5, 0xa6, 0xca, 0x53, 0x7e, 0xfd, 0xe6, + 0xd2, 0x45, 0xcf, 0xf8, 0x17, 0x7d, 0xac, 0x2c, 0x7a, 0x63, 0xd1, 0xdb, 0xbf, 0x58, 0xc0, 0xeb, + 0x23, 0x96, 0xd9, 0xd4, 0x25, 0x0b, 0xbc, 0xd4, 0x25, 0xcc, 0x43, 0xfd, 0xfb, 0xf2, 0xbc, 0x70, + 0xce, 0x54, 0x81, 0x68, 0x4d, 0x28, 0x2d, 0x9e, 0x7b, 0xbd, 0xb4, 0xf8, 0x47, 0x0e, 0x15, 0xc8, + 0x93, 0x1e, 0x69, 0xbb, 0xbd, 0x77, 0xe5, 0x9e, 0x3e, 0xe4, 0x9e, 0x3e, 0xe4, 0xae, 0xd3, 0x87, + 0xfc, 0xbf, 0x82, 0x87, 0x3e, 0xe4, 0x3f, 0x08, 0xba, 0xf2, 0x6f, 0x05, 0x9b, 0x3e, 0xe4, 0x9f, + 0xda, 0x24, 0x2a, 0x63, 0x66, 0x7c, 0xae, 0x0d, 0x75, 0xdc, 0x69, 0x0a, 0x91, 0x7b, 0x5a, 0x86, + 0x7b, 0x5a, 0x06, 0x71, 0xbf, 0x87, 0x96, 0x61, 0xd9, 0xd8, 0x31, 0xfd, 0x4f, 0x57, 0xe5, 0xf0, + 0x37, 0xd9, 0x54, 0x0e, 0xc7, 0x04, 0x5d, 0xe9, 0xf5, 0x56, 0x39, 0xb4, 0xda, 0xf1, 0x03, 0x27, + 0x95, 0xb9, 0x36, 0xd4, 0x91, 0x4d, 0xe7, 0x00, 0x51, 0x79, 0x7e, 0x54, 0xa5, 0x43, 0x26, 0xf9, + 0xf2, 0xa4, 0x7b, 0xf2, 0x65, 0xa7, 0x7c, 0x79, 0xf2, 0xcf, 0x5a, 0xbe, 0x3c, 0x65, 0xec, 0xf2, + 0xe5, 0xe5, 0x96, 0x7c, 0x79, 0x1a, 0x8d, 0xa6, 0xf4, 0xa0, 0xe5, 0xd6, 0x33, 0x03, 0xc7, 0xee, + 0x4b, 0x7f, 0x7b, 0xca, 0xe8, 0xba, 0xc8, 0x7c, 0x7b, 0xb8, 0x6c, 0x04, 0x4c, 0x1a, 0xfd, 0xa5, + 0x60, 0xc9, 0x7e, 0xc5, 0xd1, 0x65, 0xbf, 0x98, 0x58, 0x63, 0xb2, 0x5f, 0xed, 0x7a, 0x65, 0xbf, + 0xa5, 0x3e, 0x08, 0x4f, 0x08, 0x81, 0xb2, 0xcc, 0x07, 0x16, 0x84, 0x21, 0xac, 0x9f, 0xde, 0x41, + 0x9b, 0x73, 0xa9, 0x1b, 0x99, 0xc0, 0xf8, 0xbc, 0x25, 0x30, 0x9e, 0x3e, 0xaa, 0xc0, 0x18, 0xc7, + 0x0a, 0xa2, 0x02, 0xe3, 0x30, 0xc7, 0xfc, 0xfa, 0x7e, 0xb8, 0xf0, 0x18, 0xc2, 0x0b, 0x81, 0xc9, + 0x33, 0x4b, 0xc7, 0x60, 0x3e, 0x4f, 0x3c, 0x1f, 0x46, 0x05, 0xcc, 0x07, 0x04, 0x34, 0xb5, 0xce, + 0x29, 0x61, 0x9e, 0x41, 0x12, 0x0d, 0x6e, 0x08, 0x85, 0x36, 0x34, 0x6a, 0x8b, 0x9b, 0xc3, 0xa1, + 0x68, 0x68, 0x7d, 0xcb, 0xbb, 0x8b, 0xeb, 0xa2, 0xe1, 0x40, 0x70, 0x03, 0x36, 0x38, 0x1b, 0x9b, + 0xfc, 0x79, 0xec, 0x22, 0x60, 0xd7, 0x22, 0xc4, 0x1e, 0x01, 0x4d, 0xab, 0x73, 0x09, 0xa0, 0x67, + 0x8e, 0x61, 0x69, 0x37, 0x5d, 0x3c, 0xed, 0x5a, 0x86, 0xd8, 0x68, 0x17, 0x4f, 0xcf, 0xf2, 0x0e, + 0xe6, 0xb2, 0xca, 0xdf, 0x5c, 0x17, 0x0d, 0xb7, 0xd4, 0x47, 0x49, 0x4a, 0x7f, 0x5e, 0x14, 0xfd, + 0x00, 0x99, 0x03, 0xbf, 0xc7, 0x4e, 0xb1, 0x74, 0xc4, 0x26, 0x91, 0xbe, 0x6d, 0xb2, 0x48, 0x9a, + 0x88, 0x2e, 0x33, 0xb3, 0x2b, 0x8b, 0xe4, 0x02, 0x73, 0x7c, 0xe3, 0x15, 0xc1, 0x62, 0x52, 0xaf, + 0x08, 0x98, 0xe3, 0xbc, 0x22, 0xd0, 0x3b, 0x5d, 0x7c, 0x21, 0x07, 0xcd, 0xf1, 0x1a, 0x2e, 0xd2, + 0x1c, 0x0a, 0x46, 0x34, 0x71, 0x31, 0xca, 0xab, 0xa7, 0x86, 0x9f, 0x93, 0x48, 0xf6, 0x65, 0xb3, + 0xc0, 0x64, 0xca, 0xf7, 0x1a, 0x9f, 0x1e, 0x01, 0x13, 0xf7, 0xd4, 0xb1, 0xcd, 0x2a, 0x2e, 0x16, + 0xcb, 0xd0, 0xb8, 0x26, 0x62, 0x17, 0x0f, 0x7c, 0x30, 0xce, 0x23, 0x42, 0xcb, 0x64, 0x91, 0xef, + 0x45, 0x55, 0x3c, 0xa4, 0x52, 0x7c, 0x0c, 0x15, 0x84, 0xb5, 0x48, 0x4b, 0x63, 0x94, 0x84, 0xa9, + 0xc7, 0x11, 0x1f, 0x48, 0x91, 0x3c, 0x11, 0x7a, 0xa6, 0x06, 0x3f, 0x49, 0x1e, 0xe9, 0x55, 0x49, + 0xa9, 0xf8, 0x11, 0x9a, 0xf2, 0x81, 0xb6, 0xfe, 0x1d, 0xfe, 0xec, 0xf3, 0xbc, 0x53, 0x1c, 0xff, + 0x52, 0x5b, 0xcf, 0x89, 0x71, 0xd7, 0xc9, 0x90, 0x78, 0xd7, 0xd9, 0x5b, 0x2e, 0xa2, 0x79, 0xd1, + 0x63, 0xc6, 0xb9, 0x23, 0x20, 0x00, 0x48, 0x1e, 0xde, 0x3a, 0x72, 0xa8, 0x5b, 0x9d, 0xfc, 0x81, + 0x6d, 0x84, 0xe2, 0x7f, 0xe8, 0x43, 0xf7, 0xad, 0xc5, 0xfa, 0x34, 0x2f, 0xa1, 0xc3, 0x53, 0x6e, + 0xa1, 0x03, 0x36, 0x16, 0xe5, 0x84, 0x0e, 0x85, 0x54, 0xbe, 0xc0, 0x0b, 0x11, 0xd6, 0xbb, 0x0c, + 0x38, 0x61, 0x1b, 0x71, 0xa2, 0x0a, 0xa7, 0x01, 0xe7, 0xc3, 0xf6, 0xdf, 0xe0, 0xc1, 0x60, 0x51, + 0xfa, 0xa3, 0xd9, 0x75, 0xe6, 0x66, 0xb6, 0xeb, 0xb4, 0x42, 0xe9, 0xd9, 0x25, 0x14, 0x79, 0x37, + 0x2e, 0xa1, 0xc8, 0xf7, 0x96, 0x50, 0x64, 0xdc, 0xc2, 0x9b, 0x28, 0xa1, 0x28, 0xb8, 0x25, 0x12, + 0x8a, 0x71, 0x77, 0xb0, 0x84, 0xa2, 0xf0, 0x9e, 0x84, 0xe2, 0x96, 0x48, 0x28, 0x3a, 0xed, 0x16, + 0x9b, 0x10, 0xdc, 0xff, 0xbf, 0xe4, 0xe8, 0x4a, 0x3a, 0xc7, 0x26, 0xa1, 0xf8, 0xf7, 0x39, 0x77, + 0x97, 0x1c, 0xe2, 0x6e, 0x35, 0xcc, 0xfc, 0x4f, 0x2e, 0x91, 0x09, 0xca, 0x40, 0xb0, 0xac, 0xad, + 0x0e, 0x46, 0x1f, 0x97, 0x81, 0x60, 0xb9, 0x5b, 0x05, 0x2a, 0x13, 0xee, 0x09, 0x54, 0x6e, 0x40, + 0xa0, 0x32, 0xd1, 0x5b, 0xa0, 0x92, 0xf9, 0x61, 0xfa, 0xe9, 0x0a, 0x54, 0xfe, 0xec, 0x2d, 0x50, + 0x81, 0xbc, 0x8a, 0x24, 0x97, 0xa9, 0x97, 0x40, 0xe5, 0xfd, 0x3b, 0x54, 0x68, 0x32, 0xf9, 0x9e, + 0xd0, 0xc4, 0x29, 0x34, 0x99, 0xf2, 0xb3, 0x16, 0x9a, 0x4c, 0x1d, 0xbb, 0xd0, 0xe4, 0x59, 0x67, + 0x34, 0x92, 0xf9, 0xba, 0x32, 0xc3, 0x8a, 0x46, 0x32, 0x9e, 0xc5, 0x21, 0xe1, 0x25, 0x25, 0xd4, + 0x3a, 0x8f, 0x97, 0x94, 0x4c, 0xbf, 0x8b, 0x24, 0x25, 0x33, 0xee, 0x72, 0x49, 0xc9, 0xcc, 0x3b, + 0x57, 0x52, 0x32, 0xeb, 0x8e, 0x94, 0x94, 0xcc, 0xfe, 0x89, 0x4a, 0x4a, 0x4e, 0x08, 0xba, 0x72, + 0x4c, 0x40, 0x87, 0x05, 0x89, 0x30, 0xe9, 0x90, 0x6c, 0xbf, 0x1e, 0xc7, 0xff, 0xa2, 0xc2, 0x92, + 0x5f, 0xc1, 0x1d, 0xe6, 0xc4, 0x9f, 0xe9, 0xfe, 0x8b, 0xc9, 0x73, 0x5b, 0x70, 0x88, 0x72, 0x62, + 0x9a, 0x66, 0x36, 0xd9, 0x7b, 0x09, 0x6a, 0x19, 0x94, 0x8e, 0x1c, 0xfc, 0x53, 0xb2, 0xef, 0x33, + 0xa3, 0xff, 0x92, 0xd1, 0x77, 0x70, 0x64, 0x47, 0x17, 0x01, 0xec, 0xf8, 0xe9, 0xd4, 0xde, 0xa3, + 0xc6, 0xf0, 0x39, 0xe3, 0x93, 0x4e, 0xbb, 0xcc, 0xc5, 0xc1, 0x80, 0x5f, 0x11, 0x28, 0x9e, 0xc0, + 0xd2, 0x17, 0x2f, 0x42, 0xe3, 0x9e, 0xf4, 0x65, 0x14, 0xe9, 0xcb, 0xe7, 0x39, 0xe8, 0x3e, 0x88, + 0xe3, 0xe1, 0x25, 0x7d, 0x59, 0xed, 0x96, 0xbe, 0x3c, 0xa6, 0x2b, 0x8b, 0x79, 0xe9, 0xcb, 0x7c, + 0x1e, 0x20, 0x1c, 0x26, 0x1f, 0xee, 0x38, 0x5b, 0xb7, 0x40, 0x2c, 0xc3, 0x84, 0x7b, 0x19, 0x3f, + 0x4b, 0x16, 0x21, 0x4e, 0x19, 0x3f, 0x4e, 0x56, 0x40, 0xc3, 0xe0, 0xe5, 0x35, 0xdc, 0x3d, 0xf0, + 0x1a, 0x05, 0xbc, 0xfe, 0x9b, 0x80, 0x66, 0xad, 0xd0, 0xa2, 0x37, 0x53, 0xb2, 0xf7, 0x6a, 0x06, + 0x10, 0xba, 0x11, 0xd7, 0xec, 0xb2, 0x35, 0xba, 0xf2, 0x1a, 0x5a, 0x2d, 0x65, 0x58, 0xa3, 0x5c, + 0x94, 0x3c, 0x7a, 0x32, 0xdd, 0xff, 0x19, 0x2f, 0x9b, 0x4b, 0xf7, 0x9f, 0x4a, 0x6e, 0x6d, 0xcd, + 0x0e, 0x2e, 0x7f, 0x9b, 0x8b, 0x66, 0xbb, 0x46, 0xbc, 0x3b, 0x60, 0x65, 0x35, 0xca, 0x33, 0xf9, + 0x3b, 0x02, 0x20, 0xf7, 0x67, 0x33, 0x4c, 0x27, 0x12, 0x4f, 0xb3, 0xb9, 0x5d, 0xe2, 0x09, 0x5b, + 0xa4, 0xe2, 0x1a, 0x2f, 0xe0, 0xcb, 0xbf, 0x35, 0xc0, 0x57, 0xb6, 0x5a, 0x57, 0x56, 0xa2, 0x57, + 0xa4, 0x4c, 0x47, 0x21, 0xcf, 0xcb, 0x74, 0xba, 0xb0, 0x33, 0x57, 0x04, 0x7c, 0x02, 0x57, 0x04, + 0xba, 0x9f, 0xc5, 0xff, 0x22, 0x07, 0xcd, 0x5e, 0x19, 0x88, 0xdc, 0xb9, 0xe0, 0x0c, 0xc9, 0xce, + 0xd0, 0x49, 0x41, 0xca, 0xb4, 0x4e, 0xf9, 0x8f, 0x5e, 0x1f, 0x4d, 0x1e, 0x6b, 0x10, 0x71, 0x41, + 0x76, 0x80, 0x44, 0x7c, 0xbb, 0xb9, 0xb3, 0xc7, 0x76, 0x40, 0x48, 0x69, 0x88, 0xfb, 0x92, 0x1a, + 0xdc, 0x66, 0x74, 0xb7, 0x41, 0x39, 0x11, 0xb4, 0xe2, 0xd1, 0xac, 0xbe, 0xad, 0x67, 0x18, 0xd9, + 0x99, 0x18, 0x88, 0x43, 0xad, 0xd1, 0x8a, 0xc3, 0x18, 0xe1, 0xf6, 0xfc, 0xc5, 0x29, 0xfe, 0x9f, + 0x73, 0x50, 0x91, 0x7b, 0x9d, 0x77, 0xdb, 0x45, 0xc9, 0xbd, 0xe1, 0x8b, 0x02, 0x99, 0x19, 0xe0, + 0xa2, 0x94, 0xbd, 0xa2, 0x2b, 0x2b, 0x50, 0x95, 0x94, 0x71, 0x43, 0x3c, 0x91, 0x51, 0x06, 0x40, + 0xfd, 0x37, 0x53, 0xd1, 0xb8, 0x5a, 0xd8, 0x66, 0xf1, 0x4d, 0x37, 0x60, 0x42, 0x5a, 0x0e, 0x0b, + 0x30, 0x17, 0x51, 0xc0, 0x2c, 0xa5, 0x21, 0xff, 0xe3, 0x8f, 0xcb, 0x89, 0xe1, 0x4e, 0x96, 0xd9, + 0xa5, 0xd4, 0x96, 0x52, 0x91, 0x83, 0xde, 0x1a, 0x9b, 0xad, 0x26, 0x7e, 0xc5, 0x41, 0x05, 0xb2, + 0x84, 0x46, 0x9e, 0xe8, 0x4b, 0xee, 0xdf, 0x01, 0x2a, 0x10, 0x93, 0xde, 0x63, 0x19, 0x05, 0xb6, + 0x0e, 0x43, 0x54, 0xa1, 0xa7, 0x9e, 0x80, 0x49, 0x88, 0x7e, 0x24, 0x8c, 0x26, 0x68, 0xc1, 0x0d, + 0x8d, 0x81, 0xc8, 0x7b, 0x35, 0x96, 0x66, 0xa5, 0x56, 0x57, 0x56, 0x49, 0x7c, 0xb9, 0xfc, 0x02, + 0x8c, 0x9e, 0xde, 0x75, 0x2e, 0xb9, 0x7f, 0x87, 0x49, 0xd3, 0x6f, 0x3f, 0xc4, 0xe6, 0x30, 0xf6, + 0xf6, 0x43, 0xb8, 0x7c, 0xf7, 0x64, 0x8f, 0xcb, 0x64, 0x32, 0x7e, 0x30, 0x3e, 0x58, 0x67, 0x9e, + 0x57, 0xb0, 0x4e, 0x92, 0x9a, 0xc8, 0x1d, 0xac, 0xf3, 0x79, 0x8b, 0xb3, 0xcd, 0xb7, 0xee, 0x2c, + 0xe3, 0x6c, 0x67, 0xf2, 0x44, 0x90, 0x47, 0xb4, 0xcd, 0x5f, 0xa1, 0x09, 0x64, 0x23, 0x71, 0x90, + 0x75, 0x08, 0x11, 0x8d, 0xb3, 0x63, 0xe4, 0x45, 0x3f, 0x6a, 0xd6, 0xe4, 0x52, 0xe8, 0xcf, 0x12, + 0xd3, 0x43, 0x8e, 0xb3, 0xc7, 0xca, 0x4c, 0xa8, 0x78, 0x37, 0x14, 0x6e, 0xba, 0x36, 0xd4, 0x21, + 0x97, 0xad, 0x6f, 0x89, 0x04, 0x82, 0x5a, 0x24, 0xa2, 0xf2, 0x63, 0x89, 0x1f, 0xe2, 0x6c, 0x10, + 0xe5, 0xaf, 0xaa, 0x5a, 0x84, 0xc4, 0x62, 0xc6, 0x59, 0x31, 0x58, 0xa1, 0xbc, 0x0a, 0xa4, 0xad, + 0x20, 0x2d, 0x80, 0xd8, 0x20, 0x10, 0xf9, 0x86, 0x85, 0x13, 0x4e, 0x9e, 0x3b, 0x86, 0xc9, 0x77, + 0xcb, 0xa1, 0x82, 0x85, 0x19, 0x86, 0xe4, 0x37, 0x7c, 0xd4, 0x63, 0x36, 0xb0, 0xb8, 0x1c, 0x4d, + 0x68, 0xd0, 0x22, 0x98, 0x45, 0x0a, 0x84, 0x82, 0x44, 0x5f, 0x82, 0xad, 0x91, 0xf9, 0x72, 0x59, + 0x24, 0xdf, 0x76, 0x16, 0xa7, 0xb7, 0xc3, 0xea, 0x2e, 0x95, 0x6f, 0x20, 0xae, 0x41, 0xe3, 0x03, + 0x91, 0xd5, 0xef, 0xbe, 0xdb, 0x18, 0x08, 0x6a, 0x24, 0x36, 0x32, 0xce, 0xe2, 0x62, 0x95, 0xca, + 0x8f, 0x10, 0xe4, 0x0f, 0x72, 0xe3, 0x8b, 0x7f, 0x4a, 0x0d, 0x76, 0xa5, 0x4e, 0x0d, 0xa6, 0xe2, + 0x97, 0x1d, 0x8b, 0xb3, 0xba, 0x88, 0x0d, 0x28, 0x6f, 0x63, 0x20, 0xd8, 0x40, 0x12, 0xf0, 0x62, + 0xb8, 0xc2, 0x05, 0x72, 0x15, 0x03, 0x57, 0x22, 0x28, 0xb1, 0x6f, 0xfa, 0xc6, 0x65, 0x91, 0x25, + 0x4d, 0x5a, 0x24, 0x14, 0xc1, 0xb9, 0x31, 0xbe, 0x4c, 0x1e, 0xc6, 0xe9, 0xc7, 0x20, 0xb3, 0x6a, + 0x57, 0x7f, 0x7a, 0xeb, 0x30, 0xe4, 0x62, 0x55, 0xf1, 0x60, 0xe2, 0x4a, 0x84, 0xe8, 0xb1, 0x54, + 0x57, 0xe2, 0x88, 0xc6, 0x34, 0xed, 0xbe, 0x55, 0x2c, 0xcf, 0x85, 0x5d, 0xaf, 0x58, 0x55, 0x59, + 0x9e, 0x18, 0xe8, 0xa3, 0x76, 0xf2, 0x04, 0x31, 0x71, 0x0d, 0xc5, 0x98, 0x80, 0x50, 0x83, 0xd6, + 0xdc, 0x18, 0xfa, 0x08, 0x83, 0xc9, 0x44, 0x2b, 0xa2, 0x24, 0x57, 0x2c, 0xaf, 0x86, 0x11, 0x20, + 0x6c, 0xa8, 0xb5, 0xfa, 0xce, 0x7d, 0xa9, 0x5d, 0x5f, 0x43, 0xf8, 0x97, 0xd4, 0xa7, 0xdf, 0x25, + 0x2e, 0x1f, 0x4e, 0xed, 0x3b, 0x74, 0x6d, 0xa8, 0xe3, 0xb1, 0xb2, 0x54, 0xfb, 0x17, 0xa9, 0xee, + 0xed, 0xc9, 0xde, 0x38, 0xf4, 0xc0, 0xb0, 0x04, 0xe6, 0xe6, 0x50, 0xa0, 0x72, 0x83, 0x8b, 0x2f, + 0xa1, 0xbc, 0xf5, 0x1b, 0xaa, 0x2b, 0x89, 0xfc, 0x12, 0x7f, 0x0a, 0x2e, 0x90, 0xe7, 0x27, 0xe2, + 0xbb, 0x12, 0x03, 0x3d, 0x34, 0x26, 0x6e, 0xf2, 0xf0, 0xc9, 0x64, 0xbc, 0xdb, 0x04, 0x15, 0xf6, + 0x6d, 0x2a, 0x6e, 0x28, 0xbe, 0x82, 0x0a, 0xd6, 0x6f, 0xc0, 0x57, 0x1a, 0x82, 0xf5, 0xca, 0xba, + 0xb2, 0x44, 0x22, 0x45, 0xf2, 0xc3, 0x6c, 0x14, 0x76, 0x89, 0xbd, 0x46, 0x22, 0xcd, 0xc5, 0x0a, + 0x54, 0xd0, 0xa0, 0x35, 0x47, 0x59, 0xa0, 0x5e, 0x50, 0x3c, 0x42, 0x91, 0x3c, 0x6f, 0x64, 0xeb, + 0x99, 0x91, 0x03, 0x67, 0x32, 0x2e, 0x87, 0xb4, 0x13, 0x57, 0xa1, 0x42, 0xf3, 0x2f, 0xbc, 0xa4, + 0xa9, 0x16, 0x63, 0xc3, 0x0a, 0xe5, 0x62, 0x18, 0x28, 0xeb, 0x8a, 0x58, 0x6b, 0xb1, 0x1a, 0x15, + 0xd6, 0x6b, 0x41, 0x08, 0x1f, 0x3c, 0xcd, 0x4a, 0x01, 0xc1, 0x0a, 0xe5, 0x79, 0x89, 0x81, 0x3e, + 0xe3, 0xf2, 0xd6, 0x8c, 0xeb, 0x62, 0x2d, 0xc5, 0x3a, 0x84, 0xe0, 0xef, 0x1a, 0x2b, 0x9b, 0x0a, + 0x76, 0xd1, 0xe3, 0x8a, 0xe5, 0x62, 0x18, 0x2e, 0xeb, 0xea, 0xb8, 0xf6, 0xe2, 0x6b, 0xa8, 0x10, + 0x27, 0xae, 0x09, 0x6b, 0x51, 0x2c, 0x47, 0x2b, 0x84, 0x04, 0x2d, 0xac, 0x50, 0x7e, 0x84, 0x20, + 0x84, 0x81, 0x78, 0xe2, 0xf2, 0x61, 0xa3, 0x7f, 0x3b, 0x0b, 0x22, 0xe4, 0x08, 0xc1, 0xce, 0x7a, + 0x88, 0x5f, 0x0a, 0x68, 0x42, 0x7d, 0x58, 0x6b, 0xd0, 0x82, 0xd1, 0x80, 0xbf, 0x31, 0x52, 0x34, + 0xc3, 0x3b, 0x78, 0x10, 0x79, 0x86, 0x16, 0x57, 0x58, 0x4d, 0x41, 0xdc, 0x8f, 0x63, 0x62, 0xf3, + 0x23, 0xc8, 0x2b, 0xe9, 0x25, 0xdc, 0x95, 0xda, 0x77, 0xc8, 0xe8, 0x3b, 0x98, 0xea, 0xd9, 0x06, + 0x19, 0x89, 0x68, 0xb8, 0xde, 0x5d, 0x24, 0x24, 0x5d, 0xcf, 0x36, 0xab, 0x1b, 0x93, 0x25, 0x80, + 0xf4, 0xdf, 0x6c, 0x0d, 0xc9, 0xb4, 0xf8, 0xa1, 0xc5, 0x32, 0x34, 0x1e, 0x63, 0x6d, 0xcb, 0xc9, + 0xb7, 0xfc, 0x7e, 0x5d, 0xb9, 0x4f, 0xb2, 0x4a, 0xe5, 0x89, 0xb6, 0x78, 0xca, 0x56, 0x85, 0xf8, + 0xbc, 0xdb, 0x03, 0x18, 0x9e, 0x08, 0x3e, 0x2a, 0xf2, 0xc4, 0x4c, 0xf1, 0x90, 0xe7, 0xbc, 0x81, + 0xa6, 0x3a, 0xbf, 0xdd, 0x43, 0x02, 0xb3, 0x94, 0x97, 0xc0, 0x78, 0x48, 0x0e, 0xad, 0x21, 0x78, + 0xe9, 0x4c, 0x93, 0xae, 0xbc, 0x8f, 0xde, 0x93, 0xe8, 0x5b, 0x2f, 0xbf, 0xcd, 0x3f, 0x39, 0x26, + 0x58, 0xec, 0xfb, 0x36, 0x31, 0xfc, 0x89, 0xd1, 0x7f, 0x69, 0x64, 0xb8, 0xbb, 0x41, 0xdb, 0x14, + 0x6a, 0x26, 0xfa, 0xf7, 0xab, 0xb1, 0x2d, 0xe0, 0xdf, 0x09, 0x58, 0x03, 0x72, 0xc1, 0x81, 0x0a, + 0x97, 0xa5, 0xe6, 0x03, 0xc9, 0x30, 0x90, 0xd6, 0x23, 0x3d, 0x7b, 0x53, 0xa7, 0x06, 0x8b, 0x8d, + 0x29, 0x28, 0x6f, 0x8d, 0x3f, 0xb2, 0x51, 0x7c, 0x0d, 0x15, 0x44, 0xfd, 0x91, 0x8d, 0x8c, 0xa0, + 0x78, 0x46, 0x57, 0x9e, 0x92, 0x48, 0x91, 0x5c, 0x9a, 0x18, 0x1c, 0xc4, 0xc8, 0xcc, 0x8a, 0xe2, + 0x7c, 0x79, 0x38, 0x19, 0xef, 0x4f, 0x0c, 0xec, 0x4e, 0x1d, 0x3f, 0x6b, 0x02, 0x13, 0xae, 0x07, + 0x59, 0xb4, 0x4a, 0x7a, 0x89, 0x7f, 0x40, 0x85, 0xe6, 0x5f, 0x18, 0xc7, 0x01, 0x35, 0x81, 0x73, + 0xd2, 0xb0, 0x42, 0x59, 0x25, 0xdd, 0x28, 0x6e, 0x03, 0xc5, 0x0c, 0x98, 0xdc, 0x10, 0xc7, 0x3d, + 0x10, 0x7b, 0xe3, 0xe8, 0xfb, 0x6b, 0x42, 0x56, 0x99, 0xc5, 0xb9, 0x47, 0x96, 0x87, 0x43, 0x4d, + 0xa4, 0x22, 0xd5, 0xd7, 0xae, 0xb2, 0xd1, 0xc5, 0x0f, 0x59, 0x38, 0x4c, 0xa0, 0x39, 0x7e, 0x83, + 0x29, 0x40, 0x12, 0x0e, 0x73, 0x22, 0xbf, 0xe2, 0xef, 0xcb, 0x2b, 0xc3, 0xe5, 0xea, 0xc4, 0xea, + 0x9a, 0xea, 0x35, 0xd5, 0xca, 0xca, 0xea, 0x37, 0xaa, 0x6b, 0x56, 0xa8, 0xe3, 0xd4, 0xb5, 0x35, + 0x35, 0xf8, 0x8f, 0xba, 0xb5, 0x15, 0x15, 0x55, 0x75, 0x75, 0xea, 0xb8, 0xe5, 0x4a, 0xf5, 0xca, + 0xb5, 0x6a, 0x95, 0x3a, 0x6e, 0x4d, 0xf5, 0xaa, 0xaa, 0xd5, 0x6b, 0xd7, 0xa8, 0x93, 0x97, 0xaf, + 0x56, 0x2b, 0xaa, 0xd6, 0x54, 0xa9, 0xab, 0xaa, 0x6b, 0x94, 0x35, 0x55, 0x2c, 0x0c, 0xe6, 0xaf, + 0x2d, 0xba, 0x15, 0xc8, 0x0f, 0xec, 0x32, 0xcb, 0xe8, 0xd6, 0xa7, 0x60, 0x6e, 0xd0, 0xf0, 0x58, + 0x07, 0xbb, 0xf3, 0xe4, 0xc8, 0xde, 0x43, 0x60, 0x00, 0x01, 0x24, 0x6d, 0xb2, 0xab, 0x3b, 0x75, + 0x22, 0xce, 0x8e, 0xd7, 0xa2, 0x6d, 0x9f, 0x40, 0xf9, 0x91, 0xa8, 0x3f, 0x1c, 0x25, 0x34, 0xca, + 0x3c, 0x5d, 0x99, 0x2b, 0x41, 0x89, 0x2c, 0xc2, 0xd8, 0x2c, 0x09, 0x95, 0x09, 0xba, 0x50, 0x25, + 0x2e, 0x46, 0xb9, 0x5a, 0xb0, 0x81, 0x78, 0x8b, 0xe0, 0xab, 0x62, 0xfe, 0xa6, 0x3d, 0x4c, 0x5a, + 0xf8, 0xf0, 0x51, 0xd2, 0xc3, 0xac, 0x10, 0x57, 0xa2, 0x49, 0x1a, 0x8e, 0xaa, 0x46, 0x43, 0x0d, + 0x8f, 0xc3, 0xef, 0x14, 0xf6, 0x6c, 0xb2, 0xd7, 0xd0, 0x31, 0xe0, 0x8b, 0xc8, 0x18, 0xf6, 0x26, + 0xe2, 0x5a, 0x34, 0xa1, 0xbe, 0x25, 0x1c, 0xd6, 0x82, 0xd1, 0xba, 0xa8, 0xd6, 0x4c, 0xa8, 0x08, + 0x8c, 0x04, 0xf9, 0x72, 0x79, 0x3e, 0x19, 0xa9, 0xef, 0x73, 0xa3, 0xf7, 0x0c, 0xf1, 0x23, 0xee, + 0xd9, 0x96, 0xec, 0x3b, 0x39, 0xf2, 0x25, 0x79, 0x4a, 0x54, 0xbe, 0xbd, 0x58, 0x8d, 0x26, 0x46, + 0xa2, 0x5a, 0x73, 0x9d, 0xc9, 0x0a, 0x05, 0xeb, 0x4d, 0xba, 0x22, 0x97, 0xe6, 0xd4, 0xb1, 0x55, + 0x38, 0x96, 0x88, 0xc7, 0x53, 0x6d, 0x2d, 0xc4, 0x2d, 0x82, 0xb9, 0xad, 0x5a, 0x33, 0xb5, 0xbe, + 0x7f, 0xd0, 0x6d, 0x14, 0x13, 0xd9, 0xb8, 0xd8, 0x9c, 0x95, 0xa0, 0xbb, 0x57, 0x75, 0xe5, 0x65, + 0x09, 0xba, 0xc8, 0x2f, 0xc2, 0xf0, 0xe9, 0xfe, 0x53, 0xa9, 0xc1, 0xed, 0x30, 0x3c, 0x97, 0xd3, + 0xd1, 0xa2, 0xb8, 0xa0, 0x10, 0x2e, 0x0d, 0x8e, 0x15, 0xbe, 0xc5, 0x18, 0x18, 0x48, 0x1e, 0xb8, + 0xa0, 0xc2, 0x38, 0xe2, 0x4b, 0x7c, 0xd4, 0x7a, 0xa0, 0x33, 0x8a, 0x75, 0xe5, 0x41, 0x3e, 0x6a, + 0x3d, 0xfb, 0x12, 0xcc, 0x2d, 0x63, 0xda, 0x86, 0x0f, 0x54, 0xff, 0x12, 0xcf, 0x1c, 0x4c, 0xe4, + 0x46, 0xb0, 0x98, 0x03, 0xfb, 0x08, 0xae, 0xe8, 0x71, 0x1c, 0xf5, 0x3c, 0xc9, 0x33, 0xd4, 0x3d, + 0x80, 0x18, 0xc6, 0xad, 0x89, 0x78, 0xdc, 0x16, 0xea, 0xbe, 0xd1, 0x1f, 0x89, 0x82, 0xd4, 0x96, + 0x90, 0x05, 0x10, 0x6c, 0xde, 0x2a, 0x96, 0xc5, 0xc4, 0xc0, 0xce, 0xe4, 0xd7, 0xc7, 0xed, 0xc8, + 0xd5, 0xaa, 0xe7, 0x43, 0xdd, 0x4f, 0xf1, 0x0c, 0x75, 0x0f, 0x6b, 0x87, 0x60, 0xb5, 0xe6, 0xec, + 0x94, 0xf8, 0x6e, 0x42, 0x93, 0xdf, 0x0d, 0x85, 0xeb, 0x35, 0x1a, 0xc0, 0x9b, 0x66, 0x6c, 0xc3, + 0x81, 0x05, 0x1d, 0x55, 0xf2, 0x52, 0x72, 0x5e, 0x34, 0x5d, 0x22, 0x24, 0xb1, 0x4c, 0x0d, 0xb6, + 0x25, 0xfb, 0x3e, 0x63, 0x48, 0x0e, 0x5c, 0xb2, 0x93, 0xbb, 0x4f, 0x1b, 0x6d, 0x17, 0x54, 0xc7, + 0x08, 0x62, 0xa7, 0x80, 0x26, 0xd6, 0x87, 0x9a, 0x9a, 0x42, 0xc1, 0x5a, 0x7f, 0xd8, 0xdf, 0x14, + 0x29, 0x9a, 0x86, 0xa1, 0xe6, 0x11, 0x4f, 0xa8, 0xa9, 0xe0, 0x1a, 0x02, 0xf0, 0x60, 0x07, 0x45, + 0xdb, 0x00, 0xf2, 0x62, 0xa3, 0xf5, 0x6b, 0xa3, 0xf5, 0x1c, 0xd3, 0x64, 0x43, 0x90, 0xfb, 0xf4, + 0xc5, 0x33, 0x26, 0xcc, 0x81, 0x89, 0x08, 0x8d, 0xf6, 0x72, 0x6c, 0x24, 0xa6, 0xab, 0xb6, 0xde, + 0x62, 0x05, 0x60, 0x5b, 0x8e, 0xc4, 0x78, 0x54, 0x57, 0x16, 0x48, 0xac, 0x50, 0x2e, 0xe2, 0xb1, + 0x2d, 0xcf, 0xc5, 0xa9, 0xac, 0x8d, 0x58, 0x83, 0x50, 0x30, 0xd4, 0xa0, 0x55, 0xd7, 0x9a, 0x2c, + 0x2b, 0x4e, 0xcd, 0x36, 0x1e, 0x64, 0x36, 0x5c, 0xb1, 0xfc, 0x00, 0xe8, 0xac, 0xc8, 0x41, 0x7c, + 0xd2, 0x99, 0x18, 0xee, 0x4d, 0xf5, 0x6c, 0xab, 0xae, 0x25, 0xbc, 0x2f, 0xd7, 0x54, 0x5c, 0x8f, + 0x26, 0x98, 0xbf, 0x48, 0x5e, 0x41, 0x92, 0x3b, 0x00, 0x67, 0x44, 0xe1, 0xcb, 0xe5, 0xc5, 0xe9, + 0xb3, 0xdf, 0x18, 0xc3, 0xfb, 0xb0, 0xfb, 0xa7, 0x15, 0xdb, 0x14, 0xc0, 0xac, 0xff, 0x92, 0x11, + 0xdf, 0x9b, 0xea, 0xd9, 0xc6, 0xb5, 0x57, 0xf9, 0xce, 0x73, 0x6a, 0x10, 0xb2, 0x2e, 0xa5, 0xc7, + 0x3b, 0x2c, 0xd9, 0xdf, 0xe1, 0x19, 0xce, 0x03, 0x32, 0x3b, 0xf3, 0xda, 0x95, 0x17, 0xd1, 0x34, + 0xd7, 0x71, 0x5d, 0x97, 0x82, 0x65, 0x8f, 0xa0, 0x2b, 0x9d, 0x02, 0xda, 0x29, 0x48, 0xf8, 0x69, + 0x95, 0x37, 0x0b, 0x84, 0x03, 0xc1, 0xc9, 0x66, 0x58, 0x4c, 0x68, 0xf8, 0x99, 0xde, 0x0a, 0x26, + 0x4c, 0xb1, 0xe4, 0xc1, 0x63, 0xc6, 0x37, 0xdb, 0xe0, 0xa3, 0x1d, 0xa8, 0xc3, 0x24, 0xe4, 0x68, + 0x28, 0x48, 0x60, 0xdb, 0x8d, 0x8e, 0xfd, 0x80, 0x64, 0xae, 0x0d, 0xb5, 0x25, 0xf7, 0x7d, 0x6b, + 0x74, 0xb7, 0x25, 0xe2, 0x7b, 0xfc, 0xcd, 0x81, 0xc4, 0x00, 0x21, 0x17, 0x93, 0xc7, 0x76, 0x18, + 0x3b, 0xb6, 0xa7, 0x2f, 0x77, 0xa7, 0x06, 0xbf, 0xbd, 0x36, 0xd4, 0x5e, 0xfc, 0xe9, 0x24, 0x94, + 0x87, 0x11, 0xe6, 0x2f, 0x08, 0x7b, 0x0f, 0xaf, 0xfc, 0x6c, 0x5d, 0x99, 0x41, 0xd8, 0xfb, 0x89, + 0x36, 0x24, 0x0b, 0xbc, 0xfb, 0x2b, 0xa8, 0x00, 0x32, 0xe7, 0x90, 0xf7, 0x1b, 0x68, 0x7c, 0x28, + 0x92, 0x1f, 0xe6, 0x23, 0x54, 0x82, 0x75, 0x19, 0x7b, 0xc3, 0xd7, 0x6f, 0x8c, 0x84, 0x9a, 0x23, + 0x4b, 0xfc, 0xcd, 0x01, 0x95, 0x34, 0x17, 0x9f, 0x46, 0x79, 0x8d, 0x81, 0xe0, 0x46, 0x9b, 0x27, + 0xa7, 0x59, 0x20, 0x17, 0x41, 0x30, 0x22, 0x68, 0x46, 0x58, 0xeb, 0xf6, 0x58, 0x6a, 0xef, 0x19, + 0x15, 0xd7, 0x8b, 0x4d, 0xa8, 0xa0, 0x19, 0x6e, 0x18, 0x08, 0x66, 0x7c, 0x5e, 0x07, 0xb8, 0x98, + 0xbf, 0x5b, 0xf8, 0x59, 0x21, 0x9d, 0xe4, 0x47, 0xc8, 0x77, 0x51, 0x93, 0x12, 0x76, 0xbd, 0x36, + 0x6a, 0x1f, 0x5d, 0x8d, 0x6d, 0xc6, 0xc7, 0x66, 0xf4, 0x5f, 0x52, 0x49, 0x7b, 0xf1, 0x69, 0x94, + 0x1f, 0xd6, 0xa2, 0xe1, 0x8f, 0x48, 0xba, 0x2a, 0x08, 0x99, 0x8a, 0x4b, 0xe4, 0x99, 0xe9, 0xfe, + 0x93, 0x30, 0x1a, 0x89, 0x55, 0xfe, 0xf5, 0xf1, 0xe4, 0xbe, 0x6f, 0x54, 0xa8, 0x15, 0x17, 0xd3, + 0x57, 0xb9, 0x80, 0x0b, 0x80, 0x0a, 0xaf, 0xf2, 0x44, 0xaf, 0xf7, 0x78, 0x21, 0xbc, 0xc7, 0x60, + 0x1b, 0x39, 0x4b, 0x57, 0xa6, 0xc3, 0x7b, 0x3c, 0xd1, 0xfd, 0x12, 0x2f, 0x77, 0xbe, 0xc4, 0x85, + 0x78, 0x69, 0x58, 0x1a, 0xe6, 0x78, 0x89, 0x27, 0x66, 0x7b, 0x83, 0x75, 0x2b, 0x42, 0x38, 0x98, + 0xdf, 0x7d, 0x6c, 0x72, 0x0c, 0x94, 0x24, 0x5a, 0x08, 0x9f, 0x06, 0x24, 0x11, 0x16, 0x0e, 0x1e, + 0x36, 0x4e, 0xef, 0x62, 0xcc, 0x42, 0xcd, 0xea, 0x35, 0x75, 0x6b, 0x14, 0x75, 0x4d, 0x55, 0xe5, + 0xf7, 0xe5, 0xe5, 0xe1, 0x97, 0x54, 0x64, 0x15, 0xfc, 0x20, 0x62, 0xe9, 0x4d, 0x8b, 0x58, 0x42, + 0x96, 0xeb, 0x36, 0x23, 0x96, 0x1e, 0x87, 0x55, 0x39, 0x88, 0x25, 0xfe, 0x49, 0x05, 0x32, 0x89, + 0xe8, 0xd1, 0x31, 0xe1, 0x64, 0x51, 0x4a, 0xd5, 0xb6, 0x17, 0x09, 0xde, 0xd3, 0x12, 0x5d, 0x79, + 0xc4, 0xf6, 0x22, 0x11, 0xc4, 0x38, 0xca, 0xbb, 0xf4, 0x0a, 0x42, 0x26, 0x9a, 0x5c, 0xa5, 0x45, + 0xdf, 0x0b, 0xd1, 0x14, 0xb1, 0xd8, 0xf6, 0x96, 0x2b, 0x96, 0xef, 0x33, 0xff, 0x66, 0x28, 0x2b, + 0x31, 0xf8, 0x79, 0xea, 0xd8, 0x66, 0x63, 0xc7, 0xb0, 0x09, 0x25, 0x5c, 0x33, 0xb1, 0x92, 0xc3, + 0xd5, 0xf0, 0xc4, 0xe2, 0x00, 0x30, 0x16, 0xae, 0x76, 0x8c, 0xe3, 0x8d, 0xac, 0x2f, 0x0b, 0x68, + 0x62, 0x64, 0x63, 0xa0, 0x79, 0x35, 0x8d, 0x3f, 0x32, 0x19, 0xbf, 0x77, 0x3d, 0x82, 0xae, 0xec, + 0x17, 0x24, 0x5b, 0x95, 0xdc, 0x2a, 0xb0, 0xd0, 0x23, 0x80, 0x41, 0x48, 0xd0, 0x91, 0xa3, 0xdd, + 0xb0, 0xbf, 0xa5, 0xa9, 0xbd, 0xe7, 0x78, 0xe5, 0x35, 0xa4, 0x86, 0xa4, 0x16, 0x63, 0x66, 0x4f, + 0xd2, 0x01, 0xb2, 0x69, 0xe0, 0xdb, 0xce, 0x0f, 0x04, 0xdb, 0x4f, 0xe6, 0x20, 0x98, 0xa9, 0x03, + 0x0e, 0xcd, 0xe8, 0xde, 0x9d, 0x1a, 0xec, 0x83, 0xb7, 0x54, 0xb5, 0xad, 0x4a, 0x0c, 0xa1, 0xf1, + 0xd1, 0xb0, 0x3f, 0x18, 0x69, 0x34, 0x4f, 0x07, 0x5e, 0xfb, 0xd7, 0x74, 0xa5, 0x46, 0xb2, 0x4a, + 0x65, 0x25, 0x7d, 0xfa, 0x73, 0x63, 0xfb, 0x79, 0x63, 0xf8, 0x13, 0x9a, 0xd0, 0xb6, 0x23, 0x31, + 0x10, 0xb3, 0xf6, 0x32, 0x79, 0xe0, 0x02, 0x49, 0x08, 0x98, 0x1e, 0xfe, 0x3a, 0xd9, 0xf9, 0x59, + 0xea, 0xf2, 0x60, 0xba, 0x7f, 0x8f, 0x71, 0x6e, 0x5f, 0xea, 0x44, 0x3c, 0xb9, 0x7f, 0x47, 0xb2, + 0xf7, 0x6b, 0xd5, 0x1a, 0x4d, 0xfc, 0x6b, 0x01, 0x8d, 0x67, 0x91, 0x54, 0x08, 0x7d, 0xd0, 0x27, + 0xe8, 0xca, 0x17, 0x82, 0x64, 0x95, 0xcb, 0x9f, 0x0a, 0x90, 0x7b, 0x9f, 0x5d, 0x77, 0xb6, 0x77, + 0x46, 0xec, 0x90, 0x2d, 0xfb, 0x20, 0xd1, 0x5b, 0xec, 0x62, 0xfb, 0x00, 0xfb, 0x96, 0x18, 0x88, + 0x47, 0xc3, 0x2d, 0x1a, 0xdf, 0x2d, 0x53, 0x87, 0x52, 0x1f, 0x65, 0xc4, 0x59, 0x6b, 0x68, 0x94, + 0x18, 0x6c, 0x4d, 0x6f, 0x1d, 0x86, 0x74, 0xa6, 0x80, 0x6e, 0x60, 0x27, 0x54, 0x6b, 0xa1, 0x73, + 0x9e, 0x41, 0x13, 0x6e, 0xf4, 0x91, 0xda, 0x29, 0xe8, 0xca, 0x76, 0x01, 0x6d, 0x15, 0x24, 0xfc, + 0x2e, 0xc8, 0xbf, 0xe3, 0xe9, 0x63, 0x13, 0x4d, 0xee, 0x3c, 0x93, 0x18, 0xee, 0x65, 0x47, 0x49, + 0x02, 0xb0, 0x60, 0x24, 0xca, 0x72, 0x84, 0x80, 0x15, 0x8d, 0xd9, 0x78, 0x68, 0x4b, 0xb2, 0xef, + 0x24, 0x74, 0x61, 0x6f, 0x00, 0xd8, 0x1d, 0x8e, 0xec, 0xe8, 0x4c, 0xee, 0xff, 0x86, 0x99, 0xb8, + 0x99, 0x50, 0xc1, 0xc5, 0xb0, 0x4b, 0xf5, 0xb5, 0x5f, 0x8d, 0x6d, 0x29, 0x3e, 0x9e, 0x8b, 0xc6, + 0xad, 0xd9, 0xa8, 0x55, 0x04, 0x1a, 0xc2, 0xe2, 0x13, 0x28, 0x77, 0x5d, 0x6d, 0x05, 0x79, 0x9f, + 0x30, 0xe5, 0x6a, 0xfe, 0x96, 0x8b, 0x52, 0xc3, 0x7b, 0x92, 0x67, 0xff, 0xcc, 0xd4, 0xd1, 0xeb, + 0x6a, 0x2b, 0x88, 0x64, 0xcd, 0xac, 0x36, 0x9f, 0xb5, 0x8a, 0xea, 0x4a, 0x95, 0xbc, 0x53, 0xf0, + 0xac, 0x99, 0x05, 0xf2, 0x44, 0x48, 0x42, 0x04, 0xbd, 0x55, 0x5c, 0x26, 0x56, 0xa1, 0xc2, 0xea, + 0xda, 0x9a, 0x96, 0xa6, 0xf5, 0x5a, 0x98, 0x64, 0x64, 0xc4, 0x38, 0x81, 0x15, 0xca, 0x73, 0xa0, + 0xb9, 0xd1, 0xd1, 0x6a, 0x74, 0x7f, 0x65, 0x74, 0xf5, 0xa7, 0xf6, 0x9e, 0xa9, 0xae, 0x35, 0x7a, + 0xbf, 0x31, 0x0e, 0xc7, 0x54, 0xd6, 0x4a, 0x7c, 0x9a, 0x61, 0xd3, 0x3c, 0x2b, 0xcf, 0x01, 0xc5, + 0xa6, 0x22, 0x19, 0x02, 0xdf, 0x0b, 0xca, 0x18, 0x13, 0x94, 0x57, 0x86, 0xc6, 0x91, 0x27, 0x8c, + 0x70, 0x70, 0xa0, 0xd7, 0x20, 0x65, 0x56, 0x57, 0xdd, 0x22, 0xf0, 0x69, 0xa5, 0x23, 0xb8, 0x59, + 0xc1, 0x28, 0xc1, 0xcd, 0xc6, 0x39, 0x83, 0x9b, 0x95, 0x3d, 0xad, 0x2b, 0x4f, 0x20, 0x59, 0xa2, + 0xdb, 0x2d, 0x3f, 0x0a, 0x27, 0x0b, 0xc4, 0xc8, 0x9a, 0x57, 0xab, 0x08, 0xa9, 0x02, 0x2b, 0x68, + 0xd3, 0x8d, 0xb6, 0xed, 0xb0, 0xcd, 0xc5, 0xfb, 0x04, 0x34, 0x91, 0x74, 0x82, 0xac, 0x6f, 0x33, + 0x50, 0x3e, 0xb6, 0x10, 0x00, 0x75, 0x8e, 0x0a, 0x3f, 0x4c, 0x18, 0x34, 0x8f, 0x0f, 0xe0, 0x0d, + 0x1f, 0xcd, 0x1c, 0xe7, 0x6e, 0x73, 0x5b, 0x38, 0xcb, 0xbe, 0x85, 0x74, 0x87, 0xca, 0xcc, 0xf3, + 0x40, 0x0b, 0x24, 0xdb, 0x84, 0xf2, 0x8c, 0x35, 0xaf, 0x56, 0xf9, 0xcc, 0x03, 0x84, 0xc5, 0x92, + 0x75, 0xfd, 0xe3, 0xa5, 0x58, 0x1a, 0x63, 0x89, 0x0c, 0x54, 0xed, 0xb7, 0xe2, 0x1e, 0x81, 0xe7, + 0xa3, 0x04, 0xcb, 0xfd, 0x80, 0xe3, 0xa3, 0xea, 0xb9, 0xd4, 0x5f, 0x00, 0xb1, 0xe5, 0x15, 0x75, + 0x8b, 0x5e, 0x5d, 0x56, 0xb7, 0x68, 0x29, 0xfe, 0xb7, 0xd0, 0xd8, 0x7e, 0xc8, 0x68, 0x25, 0x01, + 0x16, 0xcd, 0x6b, 0x49, 0x4c, 0xf3, 0x77, 0x18, 0x67, 0x7b, 0xd8, 0x28, 0x10, 0xfa, 0xde, 0x92, + 0x33, 0xf5, 0xc6, 0x8c, 0x4b, 0xe7, 0x8d, 0xae, 0x6f, 0x40, 0xaf, 0x52, 0xc2, 0x33, 0x66, 0xaf, + 0xa0, 0x09, 0xe4, 0x07, 0x17, 0x15, 0x68, 0xa1, 0xc9, 0xbb, 0xf3, 0xe5, 0xf2, 0x44, 0x58, 0x16, + 0x0d, 0x86, 0x31, 0x2e, 0x9c, 0x3f, 0x55, 0x28, 0x8a, 0x15, 0xaa, 0x7c, 0x23, 0x31, 0xc2, 0x25, + 0xe4, 0xca, 0xa5, 0xb9, 0xa1, 0x57, 0x71, 0xe9, 0xb8, 0x14, 0x12, 0xb2, 0x85, 0xc6, 0xbe, 0x37, + 0xbf, 0x31, 0xbe, 0x07, 0x54, 0x4c, 0x90, 0xec, 0x0c, 0x1b, 0xe3, 0xc0, 0xe5, 0x48, 0xc4, 0xf7, + 0xa4, 0xcf, 0x7e, 0x97, 0xdc, 0x3f, 0x0c, 0x1b, 0x0b, 0xa8, 0x1a, 0xc7, 0xe1, 0x28, 0xf2, 0x71, + 0x79, 0xb2, 0x5e, 0x43, 0x05, 0x61, 0x6d, 0x43, 0x20, 0x14, 0x24, 0xf0, 0xfe, 0x0c, 0x86, 0x77, + 0x28, 0x92, 0x45, 0x2b, 0x46, 0x4c, 0xef, 0x19, 0xf3, 0xaa, 0x1c, 0x3d, 0xfa, 0x7d, 0xf9, 0xec, + 0xf0, 0xcc, 0xa9, 0x42, 0x51, 0x83, 0x3b, 0x36, 0x08, 0xe9, 0x25, 0xaa, 0x28, 0x7f, 0x53, 0x73, + 0x7d, 0x75, 0x25, 0xb9, 0x07, 0xcf, 0x99, 0xf4, 0x08, 0x94, 0xc8, 0x25, 0x04, 0x12, 0x4f, 0x6f, + 0x4e, 0xf6, 0xb6, 0xa7, 0x86, 0xf7, 0xa4, 0x06, 0x7b, 0x03, 0x0d, 0xf0, 0x19, 0x89, 0x81, 0x9d, + 0x64, 0x93, 0xb0, 0x5e, 0x13, 0x56, 0xba, 0x50, 0x85, 0x8e, 0xf6, 0x44, 0x72, 0x05, 0x34, 0x91, + 0x9c, 0xb7, 0xda, 0xf6, 0xfb, 0xf2, 0x99, 0xe1, 0xe9, 0x5e, 0x0b, 0xe4, 0xd8, 0xe1, 0xb5, 0x36, + 0xd9, 0xff, 0x38, 0x9a, 0x0b, 0x7b, 0x8e, 0x4d, 0xf6, 0x3f, 0x11, 0xa4, 0xfe, 0x20, 0xf2, 0xcf, + 0x38, 0x2a, 0xaf, 0x04, 0x88, 0xa0, 0x09, 0x5a, 0x70, 0x53, 0x20, 0x1c, 0x0a, 0x36, 0x69, 0x41, + 0xea, 0x86, 0xf2, 0x9a, 0xae, 0x3c, 0x25, 0xf1, 0xe5, 0xf2, 0xa3, 0x64, 0x1b, 0xb0, 0xbc, 0xb4, + 0xd4, 0x07, 0x80, 0xfa, 0x66, 0x73, 0x38, 0xd4, 0x50, 0xea, 0x6b, 0xd0, 0xd6, 0xb7, 0x6c, 0x28, + 0xf5, 0x45, 0xa2, 0xfe, 0x0d, 0x6f, 0xe3, 0x39, 0xd5, 0x3c, 0xf3, 0x6f, 0x35, 0x1f, 0x57, 0xa8, + 0x79, 0x66, 0x2b, 0x95, 0x1f, 0x4d, 0x7c, 0x03, 0x21, 0x2d, 0xb8, 0x21, 0x10, 0x84, 0x24, 0xc0, + 0xe3, 0xa9, 0x8a, 0xef, 0x11, 0x89, 0x2b, 0x96, 0x8b, 0x8c, 0xa1, 0x7d, 0xc9, 0x4f, 0x76, 0x33, + 0xb1, 0x1c, 0x90, 0x80, 0x1b, 0x97, 0x45, 0xbe, 0x2f, 0x9f, 0x1c, 0x9e, 0xa8, 0xe6, 0x6e, 0x5c, + 0x16, 0x51, 0xf3, 0xb1, 0xee, 0x44, 0xe5, 0xba, 0x89, 0xab, 0xd1, 0x84, 0x40, 0xa4, 0xea, 0x43, + 0x13, 0x4c, 0x03, 0x9b, 0x80, 0x98, 0x2b, 0x04, 0x99, 0x39, 0x5f, 0x2e, 0xcf, 0xb5, 0xc4, 0xd2, + 0x78, 0xbb, 0x52, 0xbb, 0xbe, 0x36, 0x3a, 0x8f, 0x11, 0x34, 0xc7, 0xb7, 0x14, 0xbf, 0x16, 0xd8, + 0x8d, 0xc1, 0xcb, 0x05, 0xf2, 0xad, 0x5d, 0xd0, 0x95, 0x56, 0x41, 0xe2, 0x6b, 0xe4, 0x4d, 0xbc, + 0x8a, 0x87, 0x6d, 0xd2, 0xbb, 0x5a, 0x83, 0x06, 0x99, 0xc3, 0x4b, 0x7d, 0x91, 0x40, 0x70, 0x43, + 0xa3, 0xf6, 0x76, 0xa9, 0xcf, 0x2a, 0xa4, 0x5e, 0x06, 0xf1, 0xf4, 0xe6, 0xbd, 0x23, 0x5b, 0x4e, + 0xc1, 0x10, 0xd7, 0x86, 0x3a, 0xa0, 0x29, 0xd4, 0xa6, 0x76, 0x7d, 0x9d, 0xfa, 0x6a, 0x17, 0xab, + 0x62, 0xc4, 0x30, 0xb4, 0x51, 0xf9, 0x45, 0x88, 0x07, 0x04, 0x34, 0xdd, 0x1a, 0xbd, 0x82, 0x61, + 0x1f, 0x20, 0x15, 0x71, 0xea, 0x29, 0xaf, 0x7a, 0xf9, 0x55, 0xe2, 0x86, 0x42, 0xf3, 0xc4, 0x39, + 0x56, 0x84, 0xe9, 0xbf, 0x18, 0x18, 0x0c, 0xc3, 0x43, 0x9c, 0xee, 0x3f, 0x59, 0x5d, 0x09, 0x1c, + 0x33, 0x34, 0x7c, 0x39, 0x14, 0x89, 0x92, 0xc7, 0xd0, 0x6b, 0x06, 0xf1, 0x33, 0x81, 0xb9, 0x9a, + 0x4d, 0xc2, 0x2c, 0x54, 0xa9, 0x77, 0x88, 0x04, 0x0b, 0x81, 0xda, 0x3c, 0xcc, 0xde, 0xd2, 0x95, + 0xd7, 0x98, 0x87, 0xd9, 0x0a, 0xb6, 0x2a, 0x28, 0xb0, 0x84, 0x25, 0xdd, 0x71, 0x63, 0xe0, 0x14, + 0x58, 0x3e, 0xf3, 0xd6, 0xce, 0x10, 0x66, 0x30, 0x31, 0xd0, 0x69, 0x7c, 0x77, 0x00, 0x74, 0xb6, + 0xf2, 0xd2, 0xc4, 0xc0, 0x97, 0xdf, 0x97, 0xe7, 0xf7, 0x08, 0x39, 0x53, 0x67, 0x30, 0x9f, 0xb4, + 0x32, 0x4b, 0xea, 0x34, 0x99, 0x3e, 0x8a, 0x33, 0x2c, 0xa9, 0xd3, 0x78, 0x26, 0x6f, 0xfa, 0xbe, + 0xbc, 0x20, 0x9c, 0x37, 0x35, 0xa7, 0x68, 0x86, 0x25, 0x78, 0xda, 0x2c, 0xa0, 0xc9, 0xa1, 0x60, + 0xe3, 0x47, 0xf0, 0x19, 0xd5, 0xc1, 0x77, 0x43, 0x98, 0x9a, 0x2c, 0x2c, 0xff, 0x95, 0xae, 0xac, + 0x93, 0x1c, 0x55, 0x72, 0x65, 0x62, 0xb0, 0x15, 0x46, 0x23, 0x1b, 0x6e, 0x71, 0x15, 0x9d, 0x20, + 0x22, 0x4f, 0xf5, 0x1e, 0x35, 0xce, 0x92, 0xa7, 0x17, 0x5a, 0xba, 0xd5, 0x26, 0x8e, 0x51, 0xc5, + 0x6b, 0x02, 0x1a, 0xbf, 0xbe, 0x3e, 0x42, 0x6c, 0xc9, 0x41, 0x18, 0xb4, 0x64, 0xd4, 0x7d, 0x2e, + 0xa7, 0x3d, 0x60, 0xab, 0x8f, 0x0a, 0xba, 0xf2, 0xa9, 0x20, 0x59, 0x03, 0xc9, 0x9d, 0x02, 0xbf, + 0xd4, 0x5b, 0x10, 0x11, 0x98, 0xb7, 0x18, 0x21, 0x06, 0x19, 0xf0, 0xf0, 0x61, 0xf9, 0xb4, 0x6a, + 0x2d, 0x4d, 0x4c, 0x0a, 0x68, 0x82, 0xc6, 0xd9, 0xcf, 0x8b, 0xde, 0x99, 0xfc, 0x5d, 0xdf, 0xcc, + 0xd9, 0x9f, 0xc3, 0x57, 0x77, 0x0b, 0xba, 0xd2, 0x21, 0x48, 0xfc, 0x60, 0xf2, 0x1f, 0x1c, 0x9f, + 0xfd, 0xe3, 0x98, 0xd4, 0xb3, 0x8f, 0x1d, 0xd9, 0x7b, 0xc8, 0xf6, 0x99, 0xfc, 0x5a, 0xc4, 0x0a, + 0x93, 0x5e, 0x0b, 0xb5, 0x34, 0x54, 0x57, 0x92, 0x0c, 0x9a, 0x98, 0x5c, 0xa4, 0x65, 0xf2, 0x5c, + 0x67, 0x50, 0xc2, 0xc4, 0xc0, 0x4e, 0xd0, 0xac, 0x57, 0x57, 0xaa, 0xb4, 0x95, 0xf8, 0x9d, 0x80, + 0x10, 0x6c, 0x09, 0x46, 0x66, 0x20, 0x0a, 0x3b, 0x2c, 0xe8, 0xca, 0x21, 0x41, 0xe2, 0x2a, 0xe4, + 0x9d, 0x36, 0x69, 0x91, 0xa5, 0xf7, 0x6d, 0xfd, 0x3a, 0xd9, 0xdb, 0x6e, 0xbe, 0xe1, 0x26, 0x83, + 0x70, 0x34, 0xb9, 0xaf, 0xed, 0xda, 0x50, 0xc7, 0x2a, 0xa5, 0x46, 0x59, 0x51, 0x55, 0xf9, 0x4e, + 0xc5, 0xca, 0xb5, 0x75, 0x6b, 0xaa, 0xd4, 0x85, 0x70, 0xd6, 0xc9, 0xf6, 0x83, 0xa9, 0xb3, 0xc7, + 0x61, 0x94, 0x12, 0x06, 0xb8, 0xc9, 0x83, 0xfd, 0xbe, 0xea, 0x9a, 0xca, 0xaa, 0xda, 0xaa, 0x9a, + 0xca, 0xaa, 0x9a, 0x35, 0xac, 0x8f, 0x03, 0xc5, 0xa5, 0x77, 0x7c, 0x69, 0x5e, 0x80, 0xc1, 0x6f, + 0x93, 0x3b, 0x4f, 0x94, 0xa8, 0xdc, 0xc2, 0xc4, 0x32, 0x54, 0x00, 0x21, 0x08, 0x8b, 0x66, 0x62, + 0xb9, 0x20, 0xa6, 0xcd, 0x49, 0x91, 0x3c, 0x13, 0x06, 0x80, 0x5f, 0x3e, 0x26, 0x0b, 0x24, 0xd5, + 0xe2, 0x93, 0x28, 0x3f, 0x18, 0x6a, 0xd0, 0x22, 0x45, 0xb3, 0x70, 0x57, 0x4c, 0x29, 0x43, 0x89, + 0x3c, 0x1d, 0x7a, 0x9a, 0x3f, 0xac, 0x7e, 0x50, 0x27, 0x1e, 0x14, 0xd0, 0x94, 0xa0, 0x16, 0xfd, + 0x20, 0x14, 0xde, 0x58, 0xa7, 0x45, 0xa3, 0x81, 0xe0, 0x06, 0x6a, 0x96, 0x3d, 0xcf, 0x65, 0x9d, + 0x63, 0x6b, 0x56, 0x5e, 0xa3, 0x2b, 0x15, 0x92, 0xb3, 0xaf, 0xbc, 0x94, 0x51, 0xb7, 0xa9, 0xc1, + 0x5e, 0xe3, 0x68, 0x3c, 0x75, 0x3c, 0x06, 0x2c, 0x2e, 0x73, 0x1e, 0x04, 0xb7, 0x89, 0xe4, 0xfe, + 0x4b, 0x50, 0xfe, 0x7d, 0x79, 0xfe, 0x67, 0x42, 0x4e, 0xa1, 0xa0, 0x3a, 0x87, 0x12, 0xff, 0x27, + 0x01, 0xcd, 0x20, 0x4b, 0x28, 0xf7, 0x47, 0x02, 0xf5, 0x6c, 0x7d, 0x10, 0xf9, 0xf7, 0x21, 0xb7, + 0xa7, 0x99, 0xab, 0x6d, 0xf9, 0xc7, 0xba, 0x12, 0x92, 0x3c, 0x47, 0x91, 0x7f, 0x49, 0x90, 0x0f, + 0x5e, 0x23, 0xb9, 0xb0, 0x74, 0xa5, 0xf0, 0xbc, 0x11, 0xc5, 0x29, 0x76, 0x5e, 0xe0, 0x93, 0xd7, + 0x6e, 0x6a, 0xae, 0x4f, 0xf5, 0xb5, 0x9b, 0x27, 0x49, 0x3f, 0x85, 0x7c, 0x99, 0xfd, 0x83, 0x3c, + 0xa7, 0x15, 0xff, 0x5e, 0x40, 0xb3, 0x48, 0x85, 0xd2, 0xb0, 0xc9, 0x1f, 0xac, 0xd7, 0xd8, 0x77, + 0x41, 0x68, 0xe1, 0x87, 0x33, 0x7c, 0x97, 0xbd, 0x75, 0xf9, 0x16, 0x41, 0x57, 0xfe, 0x52, 0x9a, + 0x6d, 0xb6, 0xd5, 0xdc, 0x63, 0xc9, 0x0d, 0xd4, 0x0b, 0xe3, 0xd3, 0x91, 0x83, 0x17, 0xf8, 0x98, + 0x9d, 0xec, 0xeb, 0x8c, 0x6e, 0x93, 0xe9, 0x0a, 0x34, 0x6f, 0x8a, 0x40, 0xb5, 0xf9, 0x85, 0xf6, + 0xd0, 0x79, 0xd0, 0x01, 0x18, 0x48, 0xcf, 0xb3, 0x53, 0x33, 0x7c, 0x89, 0xf8, 0x6f, 0x04, 0x34, + 0xd1, 0x84, 0x2f, 0xf6, 0x69, 0x73, 0xbc, 0xdd, 0x50, 0x6a, 0xac, 0x36, 0xe5, 0xba, 0xa0, 0x2b, + 0xbb, 0x05, 0xc9, 0xd6, 0x4f, 0xfe, 0x23, 0x1f, 0x83, 0xd4, 0xf1, 0x01, 0xc4, 0x57, 0x98, 0xba, + 0x2b, 0x13, 0x97, 0x66, 0xce, 0x87, 0x19, 0x0e, 0xc9, 0x6c, 0x79, 0xe0, 0x58, 0xaa, 0xfd, 0x92, + 0xd1, 0xf6, 0xd5, 0x48, 0x6f, 0x8c, 0x18, 0xed, 0x61, 0xe5, 0xad, 0xf9, 0x1a, 0xd1, 0x31, 0xcb, + 0x2b, 0xea, 0x80, 0x94, 0x27, 0xde, 0x3f, 0x58, 0x86, 0xa9, 0xda, 0x56, 0x23, 0x6e, 0x11, 0xd0, + 0x14, 0x10, 0xa2, 0xaa, 0x5a, 0x20, 0x18, 0x89, 0xfa, 0x1b, 0x1b, 0x71, 0x10, 0xe4, 0xc2, 0xf2, + 0xd7, 0x75, 0x65, 0xad, 0xe4, 0xac, 0x93, 0xcb, 0x81, 0x10, 0x1b, 0xd9, 0xd1, 0x99, 0xfe, 0xbc, + 0x95, 0x0f, 0x3b, 0xca, 0x8b, 0x73, 0x81, 0x89, 0x4f, 0x7f, 0xf6, 0x15, 0x20, 0x95, 0xe4, 0xd6, + 0x56, 0x63, 0xfb, 0x9f, 0x13, 0x03, 0xbb, 0x92, 0xbd, 0xed, 0xc9, 0x7d, 0x6d, 0xaa, 0x73, 0x50, + 0xf1, 0x90, 0x80, 0xa6, 0x05, 0x82, 0x81, 0xe8, 0xca, 0xd0, 0x86, 0x40, 0xb0, 0xd6, 0x1f, 0x89, + 0x7c, 0x10, 0x0a, 0x37, 0xe0, 0xd4, 0x96, 0xe3, 0xcb, 0x37, 0xea, 0xca, 0x7b, 0x92, 0xbb, 0x56, + 0xae, 0xcb, 0xb2, 0x04, 0x90, 0x37, 0x31, 0xf1, 0x41, 0x33, 0xe9, 0x33, 0xfa, 0xca, 0xdc, 0xf3, + 0x88, 0xaf, 0xa3, 0x09, 0xe4, 0x16, 0x63, 0x0c, 0xfc, 0x00, 0x5e, 0x14, 0x36, 0x41, 0xe2, 0xcb, + 0xe5, 0x05, 0x3c, 0x92, 0x00, 0xfc, 0xbb, 0xb0, 0x25, 0xd8, 0xa0, 0x85, 0x1b, 0xfd, 0x1f, 0x2d, + 0x09, 0x6d, 0xc2, 0xff, 0x97, 0xa8, 0x7c, 0x17, 0xf1, 0xaf, 0x04, 0x34, 0xdb, 0xdf, 0x12, 0x0d, + 0xad, 0xd0, 0x82, 0x26, 0xf1, 0xa5, 0xad, 0xc2, 0x9f, 0x82, 0xd5, 0xd3, 0x24, 0x68, 0xf2, 0x2e, + 0x41, 0x57, 0x76, 0x08, 0x52, 0xa6, 0x56, 0x72, 0x23, 0xff, 0xdc, 0xad, 0xe2, 0x76, 0x02, 0xcc, + 0x40, 0xa8, 0xc3, 0x39, 0x26, 0x3d, 0x08, 0xe1, 0x0a, 0xe2, 0x30, 0xce, 0x0b, 0xf0, 0x59, 0x1f, + 0x91, 0x3b, 0x25, 0x0f, 0x5c, 0x28, 0xf5, 0xc1, 0x9d, 0x00, 0x3e, 0x94, 0xa0, 0x65, 0x7c, 0x48, + 0xc1, 0x7a, 0x4d, 0xcd, 0xb4, 0x0c, 0xf1, 0xff, 0x14, 0xd0, 0x78, 0xda, 0x2a, 0x52, 0xf4, 0xa0, + 0xb7, 0x46, 0xab, 0x9a, 0x34, 0xa0, 0xe6, 0x8c, 0x15, 0xd8, 0xf1, 0xb8, 0xfc, 0x0b, 0x41, 0x57, + 0x4e, 0x0a, 0x92, 0xd5, 0x5f, 0x3e, 0xe0, 0xa4, 0x5d, 0x7c, 0x19, 0xe6, 0xa5, 0x0b, 0x2f, 0xf5, + 0xf1, 0x92, 0x45, 0x7e, 0xed, 0xf0, 0x85, 0xf4, 0xab, 0x80, 0x09, 0x67, 0x13, 0x41, 0xc3, 0x54, + 0xcf, 0x36, 0x5b, 0x52, 0x3f, 0xc8, 0xad, 0x06, 0xd9, 0x9e, 0x41, 0x86, 0x63, 0x74, 0xc4, 0x21, + 0x82, 0x81, 0x6a, 0x2d, 0x52, 0xfc, 0x56, 0x20, 0x1e, 0xaf, 0x98, 0x6c, 0xf4, 0x8d, 0x91, 0x6e, + 0xab, 0xa2, 0x3d, 0x80, 0x82, 0xc1, 0xd4, 0xbd, 0x35, 0x8c, 0xbc, 0xd6, 0xe8, 0x3b, 0x68, 0x6c, + 0xa1, 0xe9, 0x14, 0x80, 0xe6, 0x20, 0xfe, 0x68, 0x80, 0x1e, 0xb4, 0xc8, 0xfa, 0x77, 0x5a, 0xc2, + 0x8d, 0x4b, 0x48, 0x06, 0xb6, 0x77, 0x02, 0x4d, 0xfe, 0x0d, 0xda, 0x92, 0xe6, 0x70, 0x60, 0x53, + 0xa0, 0x51, 0x6b, 0xd8, 0xa0, 0x41, 0x41, 0xaa, 0xaf, 0x9d, 0xef, 0xac, 0x5a, 0x33, 0x88, 0xbf, + 0x41, 0x85, 0x4d, 0x34, 0x5c, 0xed, 0x7c, 0xcb, 0xc8, 0x80, 0x15, 0xca, 0x4f, 0x92, 0xc9, 0x89, + 0x13, 0xda, 0xc2, 0x0a, 0x05, 0xfc, 0x46, 0x99, 0x93, 0x22, 0xf1, 0xa1, 0xc5, 0x0e, 0x64, 0x25, + 0x0b, 0xc1, 0xdc, 0xad, 0x44, 0x65, 0x03, 0x88, 0x7f, 0x44, 0x93, 0xf1, 0x74, 0x16, 0x27, 0x53, + 0x8c, 0xe7, 0x59, 0xa7, 0x2b, 0x75, 0x92, 0xa3, 0x4a, 0x56, 0x8c, 0xfe, 0x21, 0xa3, 0xf5, 0x24, + 0x63, 0x0e, 0x80, 0x5c, 0xa3, 0x12, 0x16, 0x10, 0xa7, 0x92, 0x1d, 0x20, 0xe4, 0xc8, 0x81, 0x0b, + 0xa9, 0x2f, 0xe2, 0x46, 0x6c, 0x88, 0xcd, 0xec, 0x18, 0x52, 0x0c, 0xa0, 0x29, 0x81, 0x08, 0x68, + 0xe2, 0x48, 0x21, 0x4e, 0x34, 0x59, 0x58, 0xfe, 0xa2, 0xae, 0x3c, 0x27, 0x39, 0xeb, 0xe4, 0x12, + 0xc6, 0x57, 0x82, 0x1a, 0x15, 0xe6, 0x2e, 0xe5, 0xee, 0x0d, 0x9b, 0xc9, 0xd9, 0xd7, 0x69, 0xe2, + 0xb8, 0x20, 0xa3, 0x89, 0x23, 0xa1, 0xcc, 0x32, 0x99, 0x38, 0x9e, 0x14, 0xd0, 0x14, 0x02, 0x39, + 0x15, 0xfe, 0xa8, 0xb6, 0x21, 0x14, 0xfe, 0x08, 0xe7, 0x84, 0x1c, 0x5f, 0xfe, 0x3b, 0x5d, 0xf9, + 0x50, 0x72, 0xd6, 0xc9, 0x9a, 0xc5, 0xb7, 0xb6, 0x7d, 0xe5, 0x50, 0x6b, 0x98, 0xc0, 0xda, 0xb6, + 0x9d, 0x71, 0x85, 0xf0, 0x75, 0xc9, 0x83, 0x38, 0xe1, 0xf8, 0x60, 0xfc, 0x6a, 0x6c, 0x33, 0xec, + 0xf8, 0xc2, 0xf5, 0x2d, 0x81, 0xc6, 0x06, 0x2d, 0xbc, 0x24, 0xd0, 0xd4, 0x1c, 0x0a, 0x47, 0xb5, + 0x70, 0x09, 0x17, 0xb7, 0x17, 0xda, 0xaa, 0xce, 0x79, 0xc5, 0x1a, 0x34, 0x3e, 0x10, 0x79, 0x27, + 0xf2, 0x9e, 0x3f, 0xac, 0x35, 0xe0, 0x7c, 0x8f, 0x85, 0xc4, 0x09, 0x88, 0x95, 0xca, 0xf3, 0xb9, + 0xed, 0x3c, 0x97, 0x88, 0x7f, 0xe5, 0xde, 0x4e, 0x6c, 0x38, 0x86, 0x1b, 0x8b, 0xff, 0xbb, 0x80, + 0x26, 0xd7, 0x73, 0x4e, 0x43, 0xd5, 0x95, 0x24, 0x61, 0x23, 0x49, 0x74, 0xe2, 0xa8, 0x94, 0xbf, + 0x24, 0x34, 0x2e, 0x23, 0x5a, 0x12, 0xf1, 0x3d, 0xe0, 0x47, 0x56, 0x5d, 0x59, 0xca, 0xf8, 0xac, + 0xd4, 0x17, 0xf1, 0xab, 0xb1, 0x2d, 0x24, 0x67, 0xe3, 0xce, 0xa3, 0xe9, 0xad, 0xc3, 0xe6, 0x27, + 0xed, 0xbe, 0x68, 0x74, 0xed, 0x67, 0xed, 0x8d, 0x1d, 0x7d, 0xe9, 0xfe, 0xcd, 0x57, 0x63, 0x5b, + 0x40, 0x4e, 0x94, 0x88, 0xef, 0x01, 0x9f, 0xf6, 0xc4, 0xc0, 0xae, 0xd4, 0xe0, 0xd1, 0xc4, 0x40, + 0x0c, 0xc8, 0x68, 0xce, 0x8f, 0xcd, 0xa4, 0x8c, 0x62, 0x16, 0x39, 0x0d, 0xcd, 0x53, 0xf1, 0xf3, + 0xa9, 0xb3, 0xc7, 0x01, 0x57, 0x38, 0xc6, 0x56, 0x1d, 0x8b, 0x17, 0x37, 0xb8, 0xcc, 0xfb, 0x17, + 0xe2, 0x6f, 0xc5, 0x60, 0xe9, 0x34, 0xef, 0x97, 0x6c, 0x8c, 0xa6, 0xc3, 0x6f, 0x9a, 0xf3, 0x7b, + 0x4a, 0x1e, 0xbe, 0xec, 0x0a, 0x46, 0xd3, 0x04, 0xca, 0x78, 0xac, 0xe7, 0x8e, 0x14, 0x95, 0x60, + 0xcc, 0x74, 0x9f, 0x17, 0x91, 0x82, 0x5b, 0x80, 0x72, 0x96, 0xeb, 0x21, 0xcf, 0x77, 0x60, 0x5f, + 0x6b, 0xbe, 0x73, 0xc7, 0xa8, 0x55, 0xaa, 0xd5, 0x5c, 0x7c, 0x0b, 0x8d, 0x0b, 0x44, 0x56, 0x05, + 0x3e, 0xd4, 0x1a, 0x8a, 0x24, 0x0c, 0x12, 0x38, 0x6c, 0x33, 0x2d, 0x93, 0x9f, 0x30, 0x2f, 0xf1, + 0xd9, 0x6f, 0xdc, 0x00, 0x99, 0xbc, 0x78, 0x71, 0x64, 0x2b, 0x41, 0x75, 0x1c, 0xec, 0x01, 0x8c, + 0xd0, 0xee, 0xe2, 0x7a, 0x13, 0x42, 0xe0, 0x6a, 0xfb, 0x9b, 0xd4, 0x50, 0xa3, 0x56, 0xf4, 0x0b, + 0xce, 0x4d, 0xcc, 0x5e, 0x25, 0x3f, 0xec, 0xff, 0x20, 0x92, 0xea, 0xd9, 0x16, 0xf0, 0x37, 0xf9, + 0xc2, 0xa1, 0x46, 0xf3, 0x59, 0x80, 0x2b, 0x81, 0xbf, 0x47, 0xdb, 0x48, 0xd8, 0x2c, 0xd5, 0xd1, + 0xed, 0x87, 0xb8, 0x54, 0xfe, 0x0a, 0x4d, 0xb6, 0xb3, 0xe2, 0x1e, 0xbd, 0x1f, 0xb3, 0x1b, 0x12, + 0xb8, 0xe8, 0xc5, 0xf2, 0x57, 0x57, 0x37, 0x47, 0x6a, 0x1b, 0x5b, 0x36, 0x04, 0x82, 0xfc, 0xd0, + 0x6f, 0xa2, 0xa9, 0x4e, 0x8e, 0xf7, 0xe6, 0x0d, 0x4e, 0x5d, 0x41, 0xd9, 0x53, 0x74, 0x5d, 0x4a, + 0xa0, 0xf6, 0x1c, 0x5d, 0x69, 0xcd, 0x41, 0x5b, 0x72, 0x24, 0x97, 0x08, 0x5d, 0x7e, 0x97, 0x87, + 0x1e, 0x87, 0x3f, 0x09, 0xb9, 0xbd, 0xd8, 0x40, 0xdb, 0x7c, 0xe9, 0x7a, 0x4d, 0x5e, 0x9a, 0xe7, + 0x9f, 0xaf, 0xc6, 0xb6, 0x80, 0x22, 0x95, 0x97, 0xb0, 0xa4, 0xfb, 0x2f, 0x02, 0xd1, 0x02, 0x1a, + 0xd5, 0xe4, 0xee, 0x93, 0x46, 0xd7, 0xe7, 0x57, 0x04, 0x4b, 0x44, 0x7e, 0x45, 0xe0, 0x85, 0xdc, + 0x57, 0x04, 0x26, 0x7a, 0xbe, 0x22, 0x10, 0x81, 0xb1, 0xdd, 0x49, 0x8b, 0x13, 0xa7, 0x5e, 0x11, + 0x78, 0x39, 0xe7, 0x15, 0x81, 0x13, 0x4c, 0x5e, 0x11, 0x78, 0xa9, 0xa2, 0x35, 0x07, 0xd4, 0xb1, + 0x68, 0x5f, 0xff, 0x3c, 0x0f, 0x4d, 0x73, 0x6c, 0x42, 0xa4, 0xf9, 0x4e, 0x77, 0x59, 0xa9, 0xb5, + 0xf9, 0x76, 0xcd, 0xce, 0xc4, 0x74, 0x92, 0xa8, 0x54, 0xfe, 0xa8, 0x5f, 0x2e, 0x4a, 0x7f, 0xf6, + 0x15, 0x9c, 0xac, 0xf9, 0x4a, 0x73, 0xa7, 0x43, 0x9c, 0xbb, 0xfe, 0x80, 0xf2, 0xa2, 0xfe, 0xc8, + 0x46, 0xe2, 0xd1, 0x35, 0xc3, 0xcb, 0x9a, 0x09, 0x32, 0x5c, 0xe0, 0x66, 0xf2, 0xcb, 0xbc, 0x90, + 0x0c, 0x54, 0x88, 0xd7, 0x86, 0xda, 0x00, 0x4a, 0x92, 0xbd, 0xed, 0xd7, 0x86, 0xda, 0x81, 0x9f, + 0x21, 0x32, 0x42, 0x70, 0x77, 0xa1, 0x26, 0x2c, 0x96, 0xe5, 0xe1, 0x91, 0x5e, 0x15, 0x8f, 0x27, + 0xfe, 0xde, 0xed, 0x5b, 0x56, 0x30, 0x46, 0xdf, 0x32, 0xfc, 0x82, 0xb9, 0x7c, 0xcb, 0xe6, 0xf2, + 0xbe, 0x65, 0xec, 0x93, 0x33, 0xb8, 0x97, 0xad, 0xd0, 0x95, 0x4a, 0x54, 0x2e, 0xb9, 0xe1, 0x40, + 0x9e, 0xc9, 0xdf, 0x06, 0x13, 0x91, 0x7a, 0xbb, 0xe9, 0x5c, 0x11, 0xf0, 0x2e, 0x16, 0xff, 0x75, + 0x0e, 0x9a, 0xa9, 0x34, 0x34, 0xd4, 0xb5, 0xac, 0x0f, 0x6a, 0x51, 0x66, 0xb8, 0xaa, 0x6a, 0xbf, + 0x15, 0xd7, 0xb9, 0x15, 0x53, 0xcb, 0xb0, 0x76, 0xc2, 0x52, 0x4c, 0x15, 0x52, 0xb2, 0xe9, 0xfb, + 0xf2, 0x07, 0xc2, 0x73, 0x3d, 0x15, 0x28, 0x65, 0x79, 0xe5, 0x15, 0x75, 0x8b, 0x78, 0xed, 0xd2, + 0xeb, 0xa8, 0x20, 0x82, 0x67, 0x23, 0x08, 0xc4, 0xe5, 0xbe, 0x04, 0x6b, 0xa9, 0xc3, 0x39, 0xbc, + 0x89, 0xec, 0x06, 0x3a, 0xc8, 0x33, 0x49, 0x40, 0x91, 0xbe, 0x6e, 0x93, 0xe7, 0xa1, 0xde, 0x22, + 0x2a, 0xa9, 0x16, 0x9f, 0x40, 0x85, 0xa1, 0x66, 0x93, 0x62, 0x0f, 0x51, 0x5d, 0x13, 0x36, 0x6d, + 0x61, 0x85, 0xf2, 0x78, 0xb0, 0x01, 0x4b, 0xc4, 0xe3, 0x2a, 0x2b, 0x2c, 0x7b, 0x55, 0x57, 0x5e, + 0x46, 0xcb, 0x25, 0xef, 0x5d, 0x90, 0x8b, 0xc8, 0x31, 0x70, 0x13, 0x03, 0x8a, 0xb1, 0xa3, 0x03, + 0xb2, 0x84, 0xe2, 0x2d, 0xb9, 0x68, 0x96, 0xd7, 0x40, 0x77, 0xfe, 0x05, 0xfd, 0xfd, 0x8d, 0x3b, + 0xea, 0xde, 0x04, 0x78, 0x26, 0x87, 0x90, 0x61, 0xef, 0xe4, 0xb9, 0xee, 0x53, 0xc8, 0x0c, 0xda, + 0xc5, 0x07, 0xf2, 0xd1, 0x83, 0x75, 0x1f, 0x04, 0xa2, 0xf5, 0xef, 0x91, 0x31, 0xd6, 0x12, 0xa6, + 0x98, 0x88, 0xde, 0x7e, 0x4c, 0xe8, 0xae, 0x41, 0xe3, 0x1a, 0x02, 0x11, 0x1c, 0xa5, 0x2a, 0x07, + 0x6f, 0xfd, 0x13, 0xba, 0xf2, 0x98, 0x44, 0xcb, 0xe4, 0x47, 0x8c, 0xa1, 0x98, 0xd1, 0x7a, 0x9e, + 0x67, 0xdc, 0x21, 0xa7, 0xb5, 0x95, 0x74, 0xe8, 0x13, 0x63, 0x28, 0xa6, 0xd2, 0x0e, 0xdc, 0x6d, + 0xc9, 0xbd, 0xc9, 0xb7, 0xe5, 0x97, 0x68, 0x72, 0x20, 0x52, 0x67, 0x1e, 0x40, 0x7d, 0x75, 0xf3, + 0x2a, 0x13, 0x32, 0xf3, 0xf0, 0x82, 0x71, 0xb0, 0x08, 0x47, 0x95, 0x3c, 0x87, 0x18, 0x93, 0x0c, + 0xc5, 0x8c, 0xee, 0xfe, 0x91, 0xc3, 0x87, 0x92, 0xb1, 0xcd, 0xd5, 0xb5, 0x24, 0xeb, 0xbc, 0xa3, + 0xad, 0xf8, 0x07, 0x34, 0xbd, 0xbe, 0xd1, 0x1f, 0x68, 0xaa, 0xfa, 0xb0, 0x39, 0x10, 0xd6, 0x1a, + 0xea, 0xb4, 0xfa, 0x50, 0xb0, 0x21, 0x42, 0xac, 0xd4, 0xb0, 0x29, 0xb2, 0x57, 0xbd, 0xfc, 0xd8, + 0xba, 0xda, 0x8a, 0x45, 0x15, 0x35, 0xd5, 0xfc, 0xae, 0x24, 0x06, 0x76, 0x95, 0x1a, 0x43, 0x97, + 0x92, 0xb1, 0xd3, 0xa9, 0xe1, 0x3d, 0x46, 0xe7, 0xf1, 0xea, 0x5a, 0xe3, 0xd3, 0x23, 0xc9, 0xbd, + 0x17, 0x88, 0xd5, 0x93, 0xd7, 0x38, 0x36, 0x2c, 0x50, 0x30, 0x66, 0x2c, 0xd0, 0xa0, 0x2b, 0x7e, + 0xf4, 0x8e, 0x34, 0x1a, 0xdc, 0xc8, 0x8f, 0x18, 0x6d, 0x3b, 0x92, 0x9d, 0x9f, 0xc1, 0x01, 0x52, + 0x61, 0x0b, 0xbf, 0x64, 0x2f, 0xec, 0x40, 0x4f, 0xb3, 0xf8, 0xbf, 0xe6, 0x21, 0x5f, 0xf6, 0x19, + 0xee, 0x7c, 0x44, 0x41, 0xdf, 0xdd, 0xbc, 0x3b, 0xe6, 0xdd, 0xcd, 0xbf, 0x65, 0x78, 0x4a, 0xac, + 0xb3, 0x0c, 0x62, 0x0a, 0xb2, 0x53, 0x32, 0x0e, 0x4b, 0x19, 0x72, 0x08, 0x30, 0x36, 0x16, 0xae, + 0x32, 0x4b, 0x99, 0xb2, 0xd7, 0x75, 0x65, 0x2d, 0xaa, 0x93, 0x46, 0x85, 0x0c, 0x79, 0x1e, 0x0f, + 0x7c, 0x36, 0xa0, 0xcb, 0x80, 0x09, 0x3b, 0xef, 0x47, 0xb3, 0x81, 0x44, 0x58, 0x17, 0x08, 0x47, + 0x5b, 0xfc, 0x8d, 0xf7, 0x2c, 0x4f, 0x7e, 0xce, 0x96, 0x27, 0xbe, 0x7b, 0x96, 0x27, 0x3f, 0x31, + 0xcb, 0x93, 0x7f, 0xe9, 0x69, 0x79, 0xf2, 0xd5, 0x9d, 0x63, 0x79, 0xf2, 0x7d, 0xf9, 0x83, 0xe1, + 0x07, 0x54, 0x64, 0x0d, 0xa9, 0x16, 0x10, 0x93, 0x94, 0x71, 0x9b, 0x00, 0x25, 0xd9, 0x6d, 0x53, + 0x5a, 0x05, 0x34, 0xe9, 0xbd, 0x50, 0x24, 0xea, 0xb4, 0x4a, 0x79, 0x47, 0x57, 0xde, 0x92, 0xec, + 0x35, 0xf2, 0xab, 0xb6, 0x9f, 0xe9, 0x43, 0x3d, 0xc9, 0x5d, 0x47, 0x09, 0xa3, 0xf8, 0xdd, 0xe1, + 0x64, 0xfb, 0xc1, 0x54, 0xcf, 0x36, 0xb3, 0x05, 0xcf, 0x3b, 0x96, 0xf2, 0xc6, 0x2b, 0xbc, 0xbc, + 0x50, 0xb5, 0x8f, 0x2d, 0x9e, 0x17, 0x90, 0xc8, 0x95, 0x10, 0x2c, 0x4c, 0x6c, 0xa0, 0xb7, 0x08, + 0xba, 0xb2, 0x51, 0xf2, 0xa8, 0x97, 0xd7, 0xba, 0xcb, 0x3c, 0x94, 0x34, 0x0d, 0xda, 0xa6, 0xa0, + 0x16, 0x5d, 0x12, 0x68, 0xa8, 0x2f, 0xc1, 0x8f, 0xdf, 0x7e, 0x63, 0xfb, 0xf9, 0x44, 0x7c, 0xb7, + 0xb5, 0xd8, 0x54, 0xcf, 0x36, 0xbe, 0xc3, 0xf7, 0xe5, 0xd3, 0xc2, 0x53, 0xd4, 0x02, 0xe8, 0xa6, + 0xe6, 0x06, 0x1a, 0xea, 0xd5, 0xbf, 0x50, 0x3d, 0xa6, 0x17, 0xbf, 0xb0, 0xec, 0x67, 0x26, 0x63, + 0x29, 0xdc, 0xe3, 0xde, 0xfa, 0x01, 0xd7, 0x6b, 0x70, 0x7b, 0xcd, 0x68, 0xa6, 0xdc, 0x04, 0x33, + 0x9a, 0xa9, 0xb7, 0xda, 0x8c, 0xc6, 0xb2, 0x32, 0x98, 0x76, 0xdd, 0x56, 0x06, 0xdd, 0x1e, 0xe6, + 0x02, 0xe2, 0x98, 0xcc, 0x05, 0x96, 0xdf, 0x1c, 0x73, 0x01, 0xb7, 0x99, 0xc0, 0xff, 0x98, 0xc9, + 0x4c, 0x60, 0xfa, 0xd8, 0xcd, 0x04, 0xc2, 0xb7, 0xde, 0x4c, 0xe0, 0xfa, 0xcd, 0x03, 0x66, 0xfc, + 0x74, 0xcd, 0x03, 0x66, 0xfe, 0x24, 0xcc, 0x03, 0x06, 0x6d, 0x7a, 0xce, 0x59, 0x18, 0x8f, 0x3d, + 0x35, 0x56, 0x3c, 0x76, 0xdb, 0xd5, 0x9d, 0x0e, 0x0d, 0xdd, 0xec, 0x1b, 0xd5, 0xd0, 0xc5, 0x04, + 0x94, 0x13, 0xa4, 0x46, 0x3a, 0xae, 0x70, 0xd0, 0x26, 0x85, 0x1b, 0x69, 0xf6, 0xd7, 0x43, 0x3c, + 0x4f, 0xec, 0x8a, 0x92, 0x13, 0x8c, 0xc8, 0x2f, 0x1b, 0x7b, 0x86, 0x4d, 0xaa, 0xf8, 0x8b, 0xf8, + 0xc8, 0x81, 0x6f, 0x59, 0x5c, 0x51, 0xd7, 0xc3, 0xe8, 0x7c, 0x6b, 0x92, 0x47, 0xbb, 0x13, 0x03, + 0x5f, 0xf2, 0x7d, 0xd5, 0x9c, 0x60, 0x44, 0x7c, 0x81, 0x05, 0x89, 0xa9, 0x30, 0xf9, 0xd1, 0xfb, + 0x2c, 0x7f, 0x6c, 0xbe, 0x5c, 0x46, 0x40, 0x29, 0x9a, 0xac, 0x87, 0xca, 0x57, 0xdc, 0x8c, 0xc0, + 0x91, 0x37, 0xa6, 0x2d, 0xd8, 0x9f, 0xa3, 0x2b, 0x7a, 0x0e, 0xea, 0xca, 0x91, 0x32, 0x71, 0x3f, + 0xd4, 0x8c, 0x81, 0xdf, 0x9b, 0x9f, 0x81, 0xea, 0xe0, 0xff, 0xce, 0x45, 0x93, 0x6c, 0xa0, 0xc3, + 0xf2, 0x48, 0x08, 0xae, 0x3c, 0x12, 0x3c, 0x38, 0xd8, 0x7c, 0x2d, 0xd7, 0x33, 0x1a, 0x23, 0x07, + 0xdf, 0xcd, 0x92, 0xac, 0xc0, 0x69, 0xa3, 0x2c, 0xc0, 0xf1, 0x84, 0x50, 0x16, 0xb6, 0x19, 0x92, + 0xc7, 0x76, 0xa4, 0xfa, 0xbe, 0x63, 0xc4, 0xc1, 0x26, 0x7b, 0x84, 0xd3, 0x5c, 0x3c, 0xd1, 0xe2, + 0xec, 0x13, 0xb9, 0x72, 0x95, 0xc3, 0xad, 0xe3, 0x79, 0x7d, 0xfb, 0x94, 0xe7, 0xcf, 0xa4, 0x4f, + 0x7f, 0x6e, 0xcf, 0x53, 0xfe, 0x2b, 0x94, 0xff, 0xdb, 0x96, 0x10, 0xd3, 0x53, 0xcc, 0xcb, 0x38, + 0xe3, 0x6b, 0x66, 0x2b, 0x50, 0x57, 0x40, 0x0f, 0x79, 0x36, 0x3f, 0x36, 0x2e, 0x1a, 0x39, 0xd4, + 0x6d, 0xb4, 0x5d, 0x50, 0xa1, 0xfe, 0x87, 0xdc, 0x86, 0x1f, 0x98, 0xbe, 0xba, 0xb8, 0x57, 0x40, + 0x93, 0xed, 0x2b, 0x17, 0x7d, 0x68, 0x42, 0x7d, 0x73, 0x0b, 0x09, 0xcc, 0x16, 0x21, 0xc3, 0xf0, + 0x45, 0xe2, 0xfd, 0x68, 0x7c, 0x7d, 0x73, 0xcb, 0xca, 0x40, 0x53, 0x20, 0x1a, 0x21, 0x43, 0x5a, + 0x05, 0xe2, 0x23, 0x68, 0x72, 0x93, 0xd6, 0x14, 0x0a, 0x7f, 0xc4, 0x86, 0xc0, 0x3c, 0xb6, 0xea, + 0x28, 0x15, 0x8b, 0xd1, 0x44, 0x28, 0x21, 0x03, 0x81, 0xf7, 0x8c, 0xad, 0xac, 0xf8, 0x3f, 0xe7, + 0xa1, 0x22, 0xef, 0x7b, 0x7a, 0x4f, 0xaf, 0xf5, 0x33, 0xd3, 0x6b, 0x91, 0x98, 0x98, 0x19, 0xc1, + 0x41, 0x9e, 0xeb, 0xc6, 0xdb, 0xa3, 0x2b, 0xb9, 0x4e, 0x09, 0x68, 0xd2, 0xab, 0x2d, 0xeb, 0x89, + 0xfd, 0x97, 0xaa, 0xfd, 0x56, 0xac, 0x41, 0x68, 0x23, 0x2b, 0x20, 0xc8, 0x6f, 0xb1, 0xae, 0x2c, + 0x90, 0xb8, 0x62, 0x79, 0x16, 0x8c, 0x6f, 0x95, 0x40, 0x86, 0x13, 0x9a, 0xf7, 0x97, 0x6b, 0x5a, + 0x56, 0xa5, 0x2b, 0xe5, 0xe8, 0x25, 0xc9, 0x3e, 0x8b, 0x5c, 0x4c, 0x1c, 0x55, 0xbf, 0xfb, 0xc4, + 0x68, 0x3d, 0x99, 0xfc, 0x3c, 0x96, 0xfc, 0xf3, 0x2e, 0xe7, 0x60, 0x57, 0x04, 0x6e, 0x98, 0xe2, + 0xfd, 0x05, 0x68, 0x86, 0x35, 0x44, 0x45, 0x28, 0x18, 0xd4, 0xea, 0xa3, 0xe6, 0x7a, 0xd7, 0xba, + 0x65, 0x75, 0x38, 0x5a, 0x1b, 0x27, 0xab, 0x7b, 0x34, 0x11, 0xdf, 0x43, 0xc5, 0x75, 0x0b, 0x81, + 0x98, 0x29, 0xf3, 0xa5, 0x5b, 0xbf, 0x4b, 0x9f, 0xed, 0x4f, 0xc4, 0xf7, 0x94, 0xf9, 0xea, 0x1b, + 0x23, 0x8b, 0x3e, 0xfc, 0xf0, 0x43, 0x9b, 0xbc, 0xed, 0xb7, 0x08, 0x99, 0xcf, 0x46, 0x34, 0xec, + 0xa7, 0xfa, 0xb8, 0x42, 0x20, 0x26, 0xb8, 0x62, 0xf9, 0x25, 0xce, 0x94, 0xc6, 0x07, 0x56, 0x2d, + 0xd8, 0xa2, 0x7f, 0x8f, 0xc9, 0xec, 0x81, 0x43, 0x2b, 0x14, 0x9e, 0xd8, 0x9f, 0x1a, 0xde, 0x93, + 0x3e, 0x7b, 0x79, 0xe4, 0xc0, 0xd9, 0x54, 0xcf, 0x36, 0x2b, 0xf9, 0x87, 0xca, 0x8d, 0x26, 0xae, + 0xb7, 0x4c, 0xd4, 0x73, 0x69, 0x1e, 0xe7, 0x67, 0xcd, 0xef, 0x08, 0xb5, 0x34, 0x60, 0x41, 0xc5, + 0x62, 0x10, 0xc2, 0xe1, 0x20, 0x93, 0xa5, 0x3e, 0x5b, 0x42, 0xef, 0xf8, 0x1e, 0x12, 0x18, 0x08, + 0x4b, 0xdf, 0x40, 0x12, 0xc7, 0x89, 0xff, 0x98, 0x05, 0xfb, 0xe7, 0x02, 0x1a, 0xef, 0x67, 0x06, + 0x3e, 0x79, 0x2c, 0xf3, 0xc1, 0x47, 0x92, 0x55, 0x2c, 0x37, 0xf2, 0x86, 0x60, 0x8c, 0xdb, 0xc0, + 0x43, 0x80, 0x3d, 0x0d, 0xa5, 0x9f, 0x28, 0x15, 0x1b, 0x4f, 0x7d, 0x11, 0x7f, 0xd6, 0x07, 0x4e, + 0xb3, 0xa9, 0x2f, 0xe2, 0xd8, 0x76, 0x11, 0xea, 0xc0, 0xf7, 0x15, 0x4c, 0x77, 0xf0, 0x56, 0xb8, + 0x46, 0xf9, 0xbe, 0x3c, 0x3f, 0x9c, 0x6b, 0xae, 0xd1, 0x5a, 0x80, 0xb8, 0x9a, 0xc9, 0x0a, 0xf3, + 0xe9, 0x81, 0x8e, 0x22, 0x2b, 0xcc, 0x20, 0x32, 0xa3, 0x92, 0xc2, 0x7a, 0x34, 0x2d, 0xac, 0x45, + 0xb0, 0x26, 0x08, 0x5b, 0xca, 0x70, 0x59, 0xc6, 0x71, 0xc4, 0x2d, 0x77, 0xad, 0xfc, 0x80, 0xf2, + 0x6a, 0x1d, 0xbf, 0xc5, 0xb4, 0x85, 0x6f, 0x83, 0xd9, 0x44, 0x75, 0xf7, 0x28, 0x8b, 0xea, 0xca, + 0x6f, 0x51, 0x48, 0xf2, 0x04, 0x53, 0x59, 0x01, 0x20, 0x27, 0x79, 0x16, 0xe8, 0xed, 0xb4, 0x00, + 0x1c, 0x80, 0x83, 0x6c, 0xf9, 0xf6, 0xd6, 0x25, 0x00, 0x32, 0xc4, 0x40, 0x07, 0x67, 0x06, 0x30, + 0x89, 0x15, 0x38, 0x45, 0x9e, 0x68, 0x2a, 0x6e, 0xcd, 0x41, 0x93, 0xf9, 0xbb, 0x75, 0xc7, 0x3f, + 0x0c, 0x14, 0x93, 0x39, 0x56, 0x2d, 0x3f, 0xec, 0x44, 0x03, 0x80, 0x9a, 0x93, 0xb1, 0xd3, 0xd0, + 0x7f, 0x14, 0x4c, 0xd6, 0x91, 0x83, 0x66, 0x7a, 0xec, 0xfc, 0xcf, 0x75, 0x3b, 0xfe, 0x36, 0x0f, + 0x4d, 0xa9, 0xc6, 0xe6, 0x84, 0x38, 0x12, 0x38, 0x56, 0x3f, 0xae, 0xb6, 0x10, 0x8c, 0x60, 0xc1, + 0x3e, 0xf3, 0x81, 0x19, 0x33, 0x9a, 0x64, 0xd8, 0x64, 0x85, 0xed, 0xad, 0xc8, 0xb1, 0x22, 0xd6, + 0x8c, 0xe1, 0xad, 0xe0, 0x1f, 0x09, 0xf1, 0x8f, 0x28, 0x3f, 0x10, 0x8c, 0x12, 0x75, 0x44, 0x61, + 0xf9, 0x7b, 0xba, 0xa2, 0x49, 0x50, 0x22, 0xbf, 0x45, 0xf8, 0x61, 0xb8, 0x0f, 0xfb, 0x2f, 0x19, + 0x43, 0x5d, 0x80, 0x9e, 0x4a, 0x39, 0x53, 0x69, 0x23, 0x76, 0x28, 0x31, 0x78, 0x12, 0x70, 0x2f, + 0xdf, 0x66, 0xb1, 0x8f, 0x45, 0x84, 0x4c, 0x0c, 0xb6, 0x1a, 0xfd, 0x97, 0x12, 0xf1, 0x3d, 0x50, + 0x43, 0xd2, 0xad, 0xc0, 0x24, 0xe2, 0x5b, 0x68, 0x92, 0xed, 0x3e, 0x13, 0xcc, 0x88, 0x0d, 0xcb, + 0xed, 0x35, 0x72, 0x31, 0x8f, 0x7e, 0x98, 0xee, 0x38, 0x35, 0xb8, 0x6d, 0xa1, 0xff, 0xe3, 0x96, + 0xb0, 0x96, 0x88, 0xef, 0x29, 0x51, 0xed, 0x5d, 0x44, 0x5d, 0x40, 0xe3, 0x70, 0x40, 0x9d, 0x66, + 0xc8, 0x13, 0x37, 0xbe, 0xfc, 0x43, 0x5d, 0x69, 0x91, 0x68, 0x99, 0xfc, 0x3e, 0x6f, 0x32, 0x9e, + 0x6c, 0xdb, 0x9f, 0x8e, 0xb5, 0x82, 0xc0, 0x81, 0x4a, 0xc7, 0x98, 0xcd, 0x74, 0x57, 0xb7, 0xd1, + 0xde, 0x09, 0x86, 0x8e, 0xe9, 0x1d, 0xe7, 0x21, 0x4c, 0x0c, 0xa8, 0x8c, 0xae, 0xc6, 0xb6, 0x00, + 0xae, 0x35, 0xba, 0x3a, 0x8d, 0xee, 0x3d, 0x89, 0xc1, 0xcf, 0x53, 0xdd, 0xdb, 0x8d, 0xb3, 0x47, + 0x52, 0xbb, 0x09, 0x13, 0x06, 0xbd, 0x54, 0x3a, 0x69, 0x99, 0x79, 0xf6, 0x68, 0xa9, 0xe4, 0x04, + 0x12, 0xf9, 0x81, 0x44, 0x7c, 0x0f, 0x65, 0xbc, 0xf8, 0x77, 0x00, 0xd4, 0x69, 0xc5, 0x7f, 0x57, + 0x84, 0xa6, 0xd2, 0x2e, 0x4c, 0x61, 0x76, 0xd8, 0x43, 0x61, 0x86, 0x33, 0x69, 0x70, 0x8f, 0x70, + 0x68, 0x34, 0x85, 0x19, 0x44, 0x54, 0x30, 0x86, 0xf7, 0x8d, 0xaa, 0x36, 0x23, 0x71, 0x6f, 0x61, + 0x75, 0x89, 0xa1, 0x1e, 0x80, 0x10, 0x50, 0x9a, 0xd1, 0x59, 0x7e, 0x34, 0xe5, 0x99, 0x43, 0x8a, + 0x91, 0x7b, 0xa3, 0x52, 0x8c, 0x7a, 0x4e, 0x09, 0x07, 0xd0, 0xb6, 0x42, 0x57, 0xca, 0x38, 0x25, 0xdc, 0x8d, 0xbf, 0xf6, 0x96, 0xd2, 0xed, 0xa6, 0x3f, 0xa4, 0x6f, 0xb8, 0xd5, 0x63, 0xcf, 0x39, - 0x43, 0x96, 0xf1, 0x4b, 0x05, 0x01, 0x48, 0x06, 0x5d, 0x1e, 0xa7, 0x2a, 0xfb, 0xb9, 0x87, 0xaa, - 0xec, 0xe9, 0x51, 0x54, 0x65, 0x69, 0xc7, 0xbd, 0xed, 0xca, 0xb2, 0xb7, 0x3c, 0x94, 0x65, 0xcf, - 0x5d, 0x87, 0xb2, 0xac, 0x20, 0x34, 0xd9, 0xa6, 0x2c, 0xfb, 0x13, 0x9b, 0xba, 0xec, 0x23, 0xb7, - 0xba, 0x6c, 0x82, 0x3c, 0xdb, 0x95, 0x96, 0xa5, 0x3c, 0x18, 0x6c, 0x84, 0xa4, 0x2c, 0xcf, 0xea, - 0xca, 0x52, 0xbb, 0x2a, 0xad, 0x24, 0x83, 0x2a, 0xcd, 0x32, 0xe0, 0x36, 0x11, 0xac, 0x5d, 0xb1, - 0xf6, 0xaf, 0x3d, 0x15, 0x6b, 0xc7, 0xef, 0x24, 0xc5, 0x5a, 0x61, 0x68, 0xa6, 0xa7, 0x62, 0xed, - 0x4f, 0xec, 0x1a, 0x35, 0xce, 0xa7, 0x7a, 0xa2, 0xb7, 0x4f, 0xb5, 0x13, 0xd3, 0xdd, 0x06, 0x65, - 0xd0, 0xb3, 0xce, 0x10, 0x7f, 0xf3, 0xd2, 0x2a, 0x83, 0x38, 0x72, 0x9f, 0x68, 0x83, 0xce, 0x62, - 0xc4, 0x4c, 0x50, 0x3b, 0x49, 0x24, 0xf6, 0x60, 0xba, 0x8f, 0x24, 0xcd, 0xca, 0x43, 0xba, 0xb2, - 0x5e, 0xb2, 0xba, 0xc9, 0x6f, 0x10, 0xcb, 0xfa, 0xd8, 0x6e, 0x88, 0xb2, 0x22, 0x27, 0x4f, 0x75, - 0xc2, 0x6b, 0x50, 0x56, 0x14, 0x8f, 0xed, 0xae, 0xae, 0x34, 0xf4, 0x0e, 0xeb, 0x2d, 0x2f, 0x2d, - 0x8a, 0x0f, 0x0e, 0x26, 0xb6, 0x76, 0xc5, 0x07, 0xa2, 0xc9, 0x53, 0x9d, 0x46, 0xe7, 0x39, 0xa3, - 0xab, 0x9f, 0x25, 0xe1, 0x1c, 0x3c, 0x41, 0xf1, 0x73, 0x7c, 0x20, 0x66, 0x6c, 0xdf, 0xc6, 0x5c, - 0x19, 0xad, 0xe9, 0x9c, 0x4e, 0xb6, 0x53, 0xee, 0x3a, 0x27, 0x5b, 0xbf, 0xdd, 0x47, 0xad, 0x80, + 0x23, 0x93, 0xf1, 0x4b, 0x05, 0x01, 0x48, 0x16, 0x5d, 0x1e, 0xa7, 0x2a, 0xfb, 0xa5, 0x87, 0xaa, + 0xec, 0xe9, 0x51, 0x54, 0x65, 0x19, 0xc7, 0xbd, 0xed, 0xca, 0xb2, 0xb7, 0x3c, 0x94, 0x65, 0xcf, + 0x5d, 0x87, 0xb2, 0x6c, 0x6a, 0x78, 0xb2, 0x4d, 0x59, 0xf6, 0x17, 0x36, 0x75, 0xd9, 0x47, 0x6e, + 0x75, 0xd9, 0x04, 0x79, 0x8e, 0x2b, 0xfb, 0x4a, 0x79, 0x28, 0xd4, 0x08, 0xb9, 0x57, 0x9e, 0xd5, + 0x95, 0x65, 0x76, 0x55, 0x5a, 0x49, 0x16, 0x55, 0x9a, 0x65, 0xc0, 0x6d, 0x22, 0x58, 0xbb, 0x62, + 0xed, 0x9f, 0x78, 0x2a, 0xd6, 0x4e, 0xdc, 0x49, 0x8a, 0xb5, 0xa2, 0xf0, 0x2c, 0x4f, 0xc5, 0xda, + 0x5f, 0xd8, 0x35, 0x6a, 0x9c, 0x4f, 0xf5, 0x44, 0x6f, 0x9f, 0x6a, 0x27, 0xa6, 0xbb, 0x0d, 0xca, + 0xa0, 0x67, 0x9d, 0x91, 0xfc, 0xe6, 0x67, 0x54, 0x06, 0x71, 0xe4, 0x3e, 0xd1, 0x06, 0x9d, 0xc3, + 0x88, 0x99, 0xa0, 0x76, 0x92, 0x2f, 0xec, 0xc1, 0x4c, 0x1f, 0x49, 0x9a, 0x95, 0x87, 0x75, 0x65, + 0x83, 0x64, 0x75, 0x93, 0xdf, 0x20, 0x96, 0xf5, 0xf1, 0x3d, 0x10, 0x4c, 0x45, 0x4e, 0x9d, 0xee, + 0x84, 0xd7, 0xa0, 0xcc, 0x97, 0x88, 0xef, 0xa9, 0xae, 0x34, 0xf4, 0x0e, 0xeb, 0x2d, 0x2f, 0xf5, + 0x25, 0x06, 0x07, 0x93, 0xdb, 0xba, 0x12, 0x03, 0xb1, 0xd4, 0xe9, 0x4e, 0xa3, 0xf3, 0xbc, 0xd1, + 0xd5, 0xcf, 0x72, 0x6d, 0x0e, 0x9e, 0xa4, 0xf8, 0x39, 0x31, 0x10, 0x37, 0x76, 0x6c, 0x67, 0xae, + 0x8c, 0xd6, 0x74, 0x4e, 0x27, 0xdb, 0x29, 0x77, 0x9d, 0x93, 0x6d, 0xc0, 0xee, 0xa3, 0x36, 0x95, 0x22, 0xf7, 0x4a, 0xbb, 0x8f, 0xda, 0x93, 0x63, 0xf1, 0x51, 0x2b, 0x65, 0x6b, 0x22, 0x25, 0x76, - 0xa7, 0x35, 0xbb, 0xe3, 0x53, 0x1a, 0x87, 0x75, 0x17, 0x10, 0xdf, 0x76, 0x4d, 0xc0, 0x46, 0x97, - 0x5b, 0x12, 0x84, 0x41, 0xc4, 0x99, 0xa3, 0x9c, 0x6e, 0x49, 0xcf, 0xdc, 0xb0, 0x5b, 0x92, 0xcb, - 0x1d, 0xc9, 0xcb, 0xb7, 0x67, 0xda, 0x9d, 0xee, 0xdb, 0x33, 0xfd, 0xfb, 0xfb, 0xf6, 0xbc, 0x8c, - 0xc6, 0x6d, 0xd4, 0x42, 0x61, 0x93, 0x0e, 0x98, 0x41, 0x05, 0x3a, 0x0f, 0x49, 0xb4, 0x4c, 0x2e, - 0xb4, 0xed, 0x30, 0x97, 0x92, 0x8d, 0xf1, 0xe6, 0xb4, 0xa9, 0x43, 0x7e, 0x30, 0xf3, 0x0e, 0x95, - 0x1f, 0xb4, 0x0a, 0x28, 0xc7, 0x17, 0xd2, 0x7c, 0xe9, 0x12, 0x83, 0x41, 0xd6, 0xa4, 0x90, 0xe6, - 0x03, 0x47, 0x38, 0xdc, 0x56, 0x7e, 0x95, 0x7c, 0xff, 0xe0, 0xb7, 0x46, 0xec, 0x24, 0xf8, 0x33, - 0x99, 0x67, 0x7c, 0xe4, 0x08, 0xcc, 0xb3, 0x80, 0xc4, 0xfa, 0xa2, 0x09, 0xea, 0x4a, 0x8b, 0x8c, - 0xb6, 0x83, 0xa0, 0xd0, 0x20, 0xc8, 0x8d, 0xb6, 0x2f, 0x5a, 0x52, 0xa2, 0xe2, 0x21, 0x6f, 0x9f, - 0x9a, 0x67, 0x50, 0xd0, 0x95, 0x0b, 0x02, 0xfa, 0x56, 0x90, 0x5c, 0xc4, 0xba, 0xbc, 0x10, 0x3e, - 0xc4, 0xb8, 0xf0, 0x07, 0xd0, 0xdd, 0x30, 0xc1, 0x23, 0x9c, 0x5a, 0x79, 0x45, 0x1d, 0xd1, 0xfc, - 0x63, 0xac, 0x9f, 0x41, 0x29, 0xf3, 0x83, 0xe9, 0x62, 0xfe, 0x43, 0x16, 0x9a, 0xea, 0x58, 0xf6, - 0x9d, 0x2f, 0xee, 0xae, 0x73, 0x88, 0xbb, 0x3d, 0x32, 0xe4, 0xb5, 0xd4, 0x47, 0x20, 0x26, 0x33, - 0x88, 0xbb, 0xe7, 0xc0, 0x38, 0xb6, 0xcb, 0xa2, 0x77, 0x80, 0xe0, 0x99, 0xa4, 0x25, 0xa1, 0xce, - 0x0c, 0xae, 0xdd, 0x90, 0x67, 0x38, 0xb0, 0xe2, 0x28, 0xe2, 0x80, 0xff, 0x25, 0x1b, 0xcd, 0x82, - 0x48, 0xdc, 0x6e, 0x73, 0xc7, 0x1f, 0xca, 0xe0, 0x3b, 0x4e, 0x4c, 0x51, 0x60, 0x5e, 0xfc, 0x42, - 0x81, 0x1c, 0x15, 0xa0, 0x53, 0x72, 0x54, 0xca, 0xc7, 0x05, 0xbb, 0x5d, 0xc9, 0x95, 0xe8, 0x66, - 0x16, 0xf4, 0x97, 0xf0, 0xf9, 0x26, 0x0e, 0x1e, 0x6c, 0x85, 0x04, 0x62, 0x64, 0xa2, 0x85, 0xe4, - 0x52, 0x27, 0xda, 0xa3, 0x10, 0x4f, 0x87, 0x27, 0xb2, 0xe2, 0x03, 0x9d, 0xf1, 0xa1, 0x9e, 0xd4, - 0xa9, 0x93, 0x46, 0xd7, 0xee, 0xf8, 0xe0, 0x60, 0x7c, 0x78, 0xaf, 0x15, 0x94, 0x15, 0xf3, 0x4e, - 0xe6, 0x1c, 0x34, 0x31, 0x2f, 0xc5, 0x46, 0xbb, 0xfc, 0xe1, 0x65, 0xc1, 0x50, 0xbd, 0xd6, 0x60, - 0x74, 0xe3, 0xbc, 0x93, 0x9d, 0x5d, 0x46, 0x77, 0x87, 0x71, 0xe1, 0x44, 0x7c, 0xb8, 0xf7, 0x4a, - 0x74, 0xb3, 0xea, 0x58, 0xb6, 0xf8, 0x92, 0xcb, 0xb7, 0x02, 0x73, 0x83, 0x96, 0x55, 0xf5, 0x0c, - 0x58, 0x2f, 0x79, 0x27, 0x3c, 0x2c, 0xac, 0x5f, 0xd0, 0x95, 0x67, 0xd1, 0x33, 0x52, 0xba, 0x03, - 0xa2, 0x19, 0xd3, 0x78, 0x5d, 0xac, 0x4d, 0x04, 0x18, 0xcb, 0x41, 0x85, 0xde, 0x7d, 0xef, 0xfc, - 0x6b, 0xb3, 0x76, 0x6c, 0x5a, 0x22, 0x1c, 0xad, 0x05, 0xae, 0xcd, 0x5c, 0x72, 0x6d, 0x2e, 0xfc, - 0x01, 0xb6, 0xc5, 0x5b, 0x57, 0xf4, 0xab, 0x31, 0xe8, 0x8a, 0xb0, 0x78, 0x27, 0xd7, 0x6c, 0x16, - 0x96, 0x25, 0x7e, 0x8f, 0xf9, 0xe0, 0xbd, 0x54, 0x71, 0xd4, 0xc1, 0x14, 0x47, 0x77, 0x92, 0x9b, - 0x53, 0xda, 0x73, 0xb7, 0x43, 0x5d, 0x06, 0x97, 0x90, 0xff, 0x94, 0x85, 0xee, 0x07, 0x8d, 0xbc, - 0x7d, 0x10, 0xac, 0x0c, 0xfd, 0x21, 0xd1, 0xc3, 0x4a, 0xaa, 0x50, 0xce, 0x1a, 0x93, 0x42, 0x19, - 0x07, 0x8a, 0x24, 0x0a, 0xe5, 0x09, 0x6e, 0x25, 0xb2, 0x58, 0x6e, 0x05, 0x23, 0xcf, 0xa6, 0xf2, - 0x9d, 0x07, 0xac, 0x60, 0xe4, 0x22, 0xbb, 0x78, 0xc6, 0xee, 0x03, 0x54, 0xc2, 0x43, 0xa9, 0x1b, - 0xd2, 0x88, 0x26, 0x2f, 0xcc, 0xb8, 0x1f, 0x72, 0x21, 0xc9, 0x26, 0xc4, 0xe9, 0xd9, 0x46, 0x5a, - 0x3b, 0x47, 0x3e, 0x3b, 0x64, 0xb7, 0x65, 0x80, 0x65, 0x15, 0xb7, 0x67, 0xa3, 0x07, 0x32, 0x0c, - 0x77, 0xe7, 0x5f, 0xd0, 0x7a, 0xdb, 0x05, 0x1d, 0xed, 0x94, 0xb0, 0x8b, 0x0c, 0xdc, 0xd3, 0xf9, - 0x30, 0x1c, 0xec, 0x96, 0xd1, 0xbd, 0x2b, 0xd9, 0xb3, 0x95, 0xb7, 0x03, 0x80, 0x38, 0x0f, 0xe4, - 0x9d, 0x23, 0x3e, 0x26, 0x99, 0x77, 0x4a, 0x5e, 0xe8, 0xde, 0x79, 0xc7, 0x88, 0x23, 0x9f, 0x1d, - 0xca, 0x00, 0xea, 0x7d, 0xf9, 0xa8, 0x00, 0xee, 0xcb, 0x2d, 0x78, 0xfd, 0xce, 0x66, 0xa1, 0x7c, - 0xfa, 0x90, 0x90, 0x77, 0x6f, 0x4f, 0x96, 0xae, 0x74, 0x67, 0x49, 0xac, 0x58, 0xde, 0x92, 0x45, - 0x9d, 0x87, 0x62, 0x46, 0xdb, 0x79, 0xb8, 0xb0, 0xf6, 0xfc, 0x49, 0x57, 0xa2, 0x9b, 0xf9, 0xca, - 0xf8, 0x50, 0x4f, 0x7c, 0x20, 0x6a, 0x5c, 0x3c, 0x6f, 0x7b, 0x02, 0xc9, 0x59, 0x10, 0x46, 0x98, - 0x8a, 0xa4, 0x99, 0x9c, 0x15, 0x64, 0xc9, 0x2c, 0x98, 0x79, 0xe2, 0xec, 0x51, 0x30, 0xa9, 0xe3, - 0x07, 0x36, 0x76, 0x9f, 0x4e, 0xf4, 0x1e, 0x49, 0x7d, 0xb7, 0x65, 0x64, 0xef, 0xa5, 0xab, 0x43, - 0x1d, 0x89, 0x81, 0xd6, 0x64, 0xf7, 0x36, 0x78, 0xf3, 0xcc, 0x07, 0xf4, 0xd2, 0xa7, 0x26, 0xad, - 0xb1, 0xf7, 0x92, 0xd1, 0xbd, 0xcb, 0xe8, 0xfa, 0x86, 0x04, 0xe4, 0xc7, 0x66, 0x7a, 0xe6, 0x72, - 0x39, 0xec, 0x0b, 0x0f, 0x6e, 0xf2, 0xab, 0x9d, 0x46, 0xdb, 0x60, 0xea, 0xb3, 0xaf, 0xcc, 0x71, - 0xbe, 0x88, 0x81, 0xbb, 0xbe, 0xf9, 0xa9, 0xc7, 0xb7, 0x62, 0x17, 0x70, 0x8c, 0xb6, 0x71, 0xa0, - 0x55, 0xf3, 0x41, 0x65, 0xfb, 0x21, 0x1e, 0x11, 0x90, 0x48, 0xa3, 0x7a, 0xc0, 0x41, 0x61, 0xb9, - 0x05, 0xdc, 0xe7, 0xa0, 0xae, 0x34, 0x4a, 0x1e, 0xd5, 0xf2, 0x5a, 0x02, 0x0a, 0x38, 0x2c, 0x08, - 0x0c, 0x6e, 0xb2, 0x80, 0x7d, 0xfb, 0x92, 0x7b, 0x4f, 0x94, 0x15, 0x45, 0x68, 0x1a, 0x80, 0x05, - 0x23, 0x7b, 0xa2, 0x89, 0xfe, 0x4d, 0xd0, 0xac, 0xa4, 0x28, 0xa4, 0x45, 0x7c, 0xfe, 0xc0, 0x82, - 0xf8, 0x60, 0x6b, 0xf2, 0xd4, 0xe0, 0xc8, 0xc1, 0xe3, 0xa5, 0x90, 0x9f, 0x89, 0x54, 0xe3, 0x24, - 0xdc, 0xee, 0xb9, 0xbc, 0x68, 0x9a, 0x9c, 0x1f, 0x39, 0x4d, 0x93, 0x7b, 0x23, 0x34, 0x8d, 0xd8, - 0x26, 0xa0, 0x69, 0x0d, 0xf6, 0xbb, 0x56, 0x1f, 0x0c, 0x41, 0x4e, 0x93, 0x7c, 0x60, 0xbb, 0xbc, - 0xea, 0xe5, 0xe7, 0x00, 0x8a, 0x8d, 0xdd, 0x07, 0x60, 0xd4, 0xd2, 0x22, 0xd8, 0x2f, 0xb2, 0x59, - 0x6c, 0xa7, 0x78, 0x7f, 0x21, 0x23, 0xf6, 0x09, 0x6c, 0x93, 0xea, 0x35, 0x24, 0x8d, 0xa3, 0xeb, - 0xba, 0xfa, 0xa3, 0xd2, 0x55, 0x5f, 0xe7, 0xa0, 0xa9, 0x8e, 0x4e, 0xf7, 0x08, 0xaa, 0x1f, 0x2b, - 0x41, 0xf5, 0x92, 0xae, 0x3c, 0x8f, 0x9e, 0x95, 0xdc, 0x07, 0x3e, 0x66, 0x4a, 0xea, 0x92, 0x84, - 0x0a, 0x68, 0x9a, 0x6e, 0xf6, 0xbc, 0x78, 0x9b, 0xa7, 0x94, 0xf2, 0xcf, 0xcb, 0x83, 0xa3, 0x68, - 0xc6, 0x2c, 0x09, 0x07, 0x9f, 0x3a, 0xc6, 0x43, 0xa3, 0x35, 0x37, 0xb3, 0x46, 0xcb, 0xae, 0xc7, - 0x8a, 0xb8, 0x9c, 0xc0, 0x5e, 0xbf, 0xf9, 0x4e, 0x60, 0x64, 0xe1, 0x96, 0x42, 0xea, 0x69, 0x87, - 0x17, 0xd8, 0x83, 0xa3, 0x28, 0xa4, 0x98, 0xe2, 0xa9, 0xce, 0xee, 0xeb, 0xf5, 0xfc, 0x0d, 0xfa, - 0x7a, 0x91, 0x05, 0x11, 0x67, 0xaf, 0x17, 0xdc, 0xda, 0xac, 0xa2, 0xf4, 0xce, 0x5e, 0xf4, 0x14, - 0x2c, 0x8d, 0x55, 0x95, 0x87, 0xc6, 0xea, 0xe1, 0x51, 0x34, 0x56, 0x64, 0x14, 0x5e, 0x3f, 0xf5, - 0xa6, 0x97, 0x7e, 0xea, 0x99, 0x1b, 0xd6, 0x4f, 0xd9, 0xf5, 0x50, 0xaf, 0x7b, 0xe8, 0xa1, 0x96, - 0xea, 0xca, 0x93, 0x36, 0x3d, 0xd4, 0xa3, 0x0e, 0x3d, 0xd4, 0x9b, 0x1b, 0x96, 0x86, 0x4b, 0x8b, - 0xb0, 0xe2, 0xe9, 0x6d, 0x5e, 0x2d, 0x65, 0xd3, 0x41, 0x6d, 0xb8, 0x5e, 0x1d, 0xd4, 0xf7, 0x71, - 0xe7, 0xfa, 0xda, 0x53, 0xeb, 0xd4, 0x7e, 0xe7, 0x68, 0x9d, 0x7e, 0x3c, 0x81, 0x84, 0x9d, 0x38, - 0xec, 0x36, 0x28, 0xbd, 0x38, 0x66, 0x6e, 0xf2, 0x0d, 0x32, 0x73, 0xe2, 0xbf, 0xb1, 0x52, 0xa8, - 0x80, 0x0e, 0xa9, 0x5f, 0xd0, 0x95, 0x77, 0x59, 0xd4, 0xff, 0xb7, 0xc8, 0xda, 0x59, 0x0e, 0x15, - 0x9c, 0x4a, 0x14, 0x7e, 0x56, 0xa8, 0x55, 0xca, 0xea, 0xea, 0x9a, 0xe5, 0x57, 0x87, 0x3a, 0x48, - 0xba, 0x94, 0xab, 0x43, 0x1d, 0x95, 0x55, 0x2b, 0xaa, 0x48, 0xe1, 0x32, 0x65, 0xc5, 0x1a, 0xb5, - 0xea, 0xea, 0x50, 0x07, 0xcb, 0x43, 0xa7, 0xac, 0xae, 0x5e, 0x55, 0x43, 0x1b, 0x55, 0x55, 0x5e, - 0x2b, 0xaf, 0x08, 0x29, 0x6a, 0x3e, 0x1d, 0xc7, 0xca, 0xba, 0x92, 0x4f, 0x47, 0xb1, 0xd2, 0xae, - 0x4c, 0xb6, 0x0f, 0xa2, 0x8e, 0x23, 0x63, 0xa8, 0x7f, 0xc2, 0xb2, 0x10, 0x8c, 0x29, 0x2e, 0xb1, - 0xeb, 0xd8, 0x7e, 0x02, 0x71, 0x89, 0x5d, 0xdf, 0x7c, 0xd7, 0xc5, 0x25, 0x5e, 0x83, 0xf2, 0x21, - 0xfe, 0x26, 0x0b, 0x4c, 0x8c, 0x11, 0x3f, 0x2b, 0x94, 0x25, 0x67, 0x64, 0x62, 0xf3, 0x6d, 0xc4, - 0x89, 0x39, 0xc1, 0xf0, 0x87, 0x0f, 0x54, 0xcc, 0x7a, 0x89, 0xdf, 0x7a, 0x45, 0x2a, 0xfe, 0x44, - 0xd0, 0x95, 0x2e, 0xbb, 0x12, 0x35, 0x7a, 0xd3, 0x95, 0xa8, 0xb7, 0x2d, 0x3e, 0xb1, 0x97, 0xe7, - 0xe0, 0xcc, 0x3b, 0xd4, 0x73, 0x70, 0xd6, 0x8f, 0xcc, 0x73, 0xb0, 0xf0, 0xc7, 0xeb, 0x39, 0x78, - 0xdf, 0x8f, 0xc2, 0x73, 0xd0, 0x11, 0x37, 0x77, 0xf6, 0xcd, 0x8b, 0x9b, 0xfb, 0xad, 0x80, 0xc6, - 0x33, 0x4d, 0x65, 0xe1, 0x9c, 0x31, 0xbe, 0x4d, 0x9e, 0x26, 0x08, 0x55, 0x3f, 0xb8, 0x09, 0x02, - 0x9b, 0x41, 0x7c, 0x9d, 0x8b, 0xbd, 0x7a, 0x3f, 0x35, 0xce, 0x7a, 0x86, 0x8b, 0xbd, 0xba, 0xf0, - 0xba, 0x62, 0xaf, 0x72, 0x31, 0x57, 0xdd, 0xc6, 0x0d, 0x0f, 0xdc, 0x12, 0xe3, 0x86, 0xdf, 0xb9, - 0x63, 0xad, 0xce, 0x1d, 0x95, 0x24, 0xc7, 0xae, 0x12, 0xae, 0x38, 0xac, 0xf3, 0x46, 0x8d, 0xc3, - 0xea, 0x8e, 0xbf, 0xda, 0x60, 0xb7, 0x8b, 0x7c, 0x90, 0xc4, 0x64, 0xf2, 0x50, 0x83, 0xfa, 0x03, - 0xeb, 0x61, 0xf2, 0x9b, 0x14, 0x9d, 0xb5, 0xe8, 0x0e, 0xb4, 0xe0, 0x78, 0x9f, 0xb7, 0xe0, 0x98, - 0x37, 0xea, 0x31, 0x7c, 0x2f, 0xeb, 0x8e, 0x88, 0x2d, 0xcf, 0x14, 0x04, 0xf8, 0x5d, 0x6d, 0x92, - 0xe9, 0x5c, 0xb1, 0x5c, 0xc1, 0x3b, 0x64, 0xf2, 0xc9, 0xb6, 0x4b, 0x13, 0x47, 0x87, 0x70, 0x3c, - 0xa9, 0xd8, 0x82, 0x88, 0xbf, 0x49, 0x5b, 0x54, 0x13, 0xfc, 0x60, 0x41, 0xc9, 0xa2, 0x65, 0xc1, - 0x50, 0x93, 0x2f, 0x02, 0x25, 0xea, 0xb2, 0x8a, 0xc7, 0x1f, 0x7f, 0xfc, 0x99, 0x92, 0x12, 0x5b, - 0xf6, 0xaa, 0x72, 0xcb, 0x2e, 0xed, 0x21, 0x8e, 0x44, 0xa7, 0x76, 0x69, 0x22, 0xb3, 0x4b, 0xf3, - 0x20, 0xd1, 0xa9, 0x79, 0xda, 0x49, 0x01, 0x4d, 0x86, 0x5d, 0x65, 0x87, 0x09, 0x71, 0x7b, 0x7f, - 0xaf, 0x2b, 0xbf, 0x91, 0x1c, 0x55, 0xb2, 0xdf, 0x18, 0xfe, 0xc4, 0xb1, 0xcf, 0x80, 0xeb, 0xe2, - 0x03, 0x31, 0x7a, 0x36, 0xd8, 0x74, 0x24, 0xf3, 0x21, 0x5b, 0xa6, 0x6a, 0x8b, 0xc1, 0x98, 0x04, - 0xac, 0xc9, 0xf9, 0x90, 0xb5, 0xaa, 0x63, 0x6a, 0xaf, 0xe0, 0xb8, 0x0f, 0xff, 0x68, 0x83, 0xe3, - 0xbe, 0x67, 0x05, 0x91, 0x7d, 0x64, 0x54, 0xc8, 0xc5, 0x11, 0x6b, 0x59, 0x80, 0xd9, 0xf9, 0x63, - 0x09, 0x30, 0xcb, 0x02, 0xca, 0xde, 0x0b, 0xf6, 0x7a, 0xbd, 0x76, 0x3d, 0xff, 0x49, 0xd0, 0x95, - 0xbf, 0x13, 0xd0, 0xdf, 0x0a, 0x92, 0x4b, 0xd2, 0x28, 0x7f, 0x2b, 0x78, 0xfa, 0x5c, 0x03, 0xd5, - 0x90, 0xea, 0x3f, 0x01, 0x0e, 0xd7, 0xf1, 0xc1, 0x56, 0x3e, 0xbd, 0x35, 0xd1, 0xce, 0xe9, 0x1d, - 0xf1, 0x4b, 0x67, 0x12, 0x7d, 0x9f, 0x7b, 0xab, 0x17, 0x8e, 0x75, 0x98, 0x88, 0x08, 0xa7, 0x0c, - 0xbc, 0x12, 0xdd, 0x4c, 0x7c, 0xc0, 0xc1, 0x21, 0x01, 0xe7, 0x20, 0x64, 0xa2, 0xdd, 0xe4, 0xa7, - 0x03, 0x46, 0xeb, 0x39, 0x10, 0xfe, 0xe1, 0x49, 0x2f, 0x24, 0x8e, 0x5e, 0x4c, 0x74, 0x9e, 0x81, - 0xc6, 0x24, 0xda, 0x3d, 0x4d, 0x95, 0xe9, 0x76, 0x00, 0x2f, 0xfe, 0xcb, 0x6c, 0x34, 0xd5, 0xf1, - 0x5d, 0x77, 0x9f, 0xe1, 0x4f, 0x1a, 0x9a, 0xde, 0x6d, 0xf8, 0xc3, 0x34, 0xa3, 0x1e, 0xd2, 0xf6, - 0xdb, 0x1a, 0xcb, 0xad, 0xac, 0x42, 0x57, 0x5e, 0x42, 0x2f, 0x48, 0xee, 0xb3, 0xa0, 0xca, 0x6f, - 0x1b, 0x8c, 0xa5, 0x11, 0x87, 0xff, 0x9d, 0x80, 0x66, 0xa8, 0x5a, 0x24, 0xf4, 0x91, 0x2b, 0xe5, - 0xdf, 0x53, 0x6e, 0x99, 0x78, 0x61, 0x3a, 0x95, 0x2b, 0x2f, 0xf4, 0x7e, 0x9e, 0xd3, 0x4a, 0x65, - 0x51, 0x5b, 0x68, 0x8f, 0xf8, 0x85, 0xa9, 0x68, 0x2b, 0x44, 0xc6, 0x11, 0x0a, 0x1b, 0x38, 0x33, - 0x9b, 0x97, 0x75, 0xa5, 0x0a, 0x55, 0x48, 0xde, 0x8b, 0x92, 0xe7, 0x42, 0xfa, 0xcb, 0xf8, 0xc0, - 0x4e, 0xa3, 0x6b, 0xb7, 0x3b, 0x6e, 0xb2, 0x0d, 0x4e, 0xbf, 0xc8, 0x46, 0x33, 0xbd, 0x46, 0xb9, - 0xf3, 0x81, 0x75, 0xe5, 0xd8, 0x80, 0x15, 0x2f, 0x02, 0x80, 0x75, 0x06, 0x3c, 0x48, 0xde, 0x4a, - 0xa1, 0x57, 0xc6, 0xa0, 0x14, 0x82, 0xb1, 0xb0, 0x47, 0xb6, 0x35, 0x16, 0x9f, 0x3c, 0x1b, 0xd4, - 0x3f, 0x65, 0x6b, 0x74, 0x45, 0x45, 0xb5, 0x52, 0x9a, 0x8d, 0xcd, 0x70, 0x3e, 0x99, 0x2d, 0xdf, - 0x76, 0x66, 0xa1, 0x49, 0xcb, 0xb5, 0x48, 0x3a, 0x8d, 0x7f, 0xd6, 0xcd, 0xd3, 0xf8, 0x37, 0x12, - 0x5b, 0x7b, 0xcc, 0x08, 0xc1, 0x89, 0x60, 0x9a, 0xdf, 0x2a, 0x95, 0x5f, 0x70, 0x93, 0x05, 0xb6, - 0x18, 0x5c, 0xcc, 0x4e, 0x7e, 0x97, 0xa5, 0xd9, 0xc4, 0x5b, 0x46, 0x02, 0x23, 0x5a, 0x43, 0x95, - 0x3d, 0xa1, 0x2b, 0x8f, 0xa1, 0xc5, 0x92, 0xfd, 0xdb, 0x64, 0x11, 0xdc, 0xd8, 0xd3, 0x42, 0xee, - 0xc9, 0x1c, 0x34, 0x99, 0xef, 0xf1, 0x93, 0x83, 0x58, 0x0d, 0xe5, 0x62, 0xbe, 0x29, 0x1d, 0x3a, - 0xad, 0xe2, 0x99, 0xaa, 0xc0, 0xbb, 0x41, 0x50, 0x5a, 0x40, 0x1f, 0x79, 0x9e, 0x63, 0x64, 0xa3, - 0xf5, 0x7c, 0x7c, 0x90, 0xbc, 0x7a, 0x64, 0x16, 0x68, 0x79, 0x9b, 0x75, 0x99, 0x8a, 0xae, 0xbc, - 0x80, 0x9e, 0x93, 0x1c, 0x27, 0xed, 0x00, 0x8e, 0xcc, 0xd7, 0xe6, 0x37, 0x84, 0x08, 0xe2, 0xb6, - 0x42, 0x5c, 0x8f, 0x26, 0x52, 0x45, 0x1e, 0x96, 0x22, 0x00, 0xea, 0x36, 0x1f, 0x0b, 0xc9, 0x56, - 0x41, 0x45, 0x67, 0x46, 0x6c, 0xaf, 0x71, 0x96, 0xca, 0xa0, 0x7a, 0xb6, 0xf2, 0x3a, 0xa6, 0x05, - 0x91, 0x0d, 0xda, 0xe2, 0x0d, 0x4b, 0xc3, 0x8b, 0xb1, 0x8e, 0xa9, 0x44, 0xb5, 0xf5, 0x2f, 0xee, - 0x11, 0xd0, 0xd4, 0x8a, 0xf7, 0xb4, 0xfa, 0x0d, 0x38, 0xb3, 0x0c, 0x89, 0x98, 0x21, 0xbe, 0x88, - 0xf2, 0xfd, 0x81, 0x80, 0x16, 0xaa, 0xae, 0x0d, 0x17, 0x0a, 0x58, 0x3c, 0x88, 0x63, 0x47, 0xb0, - 0x42, 0x79, 0x3a, 0xf0, 0xe6, 0xe0, 0x06, 0xca, 0xe4, 0x83, 0xac, 0xbe, 0xac, 0x52, 0x57, 0x14, - 0xf4, 0xa2, 0xe4, 0x1e, 0x5a, 0x7e, 0x30, 0xf1, 0x79, 0x34, 0x71, 0xe4, 0x44, 0x20, 0xd8, 0xa0, - 0x11, 0x8b, 0x1c, 0x6c, 0x1a, 0xbd, 0xae, 0x9e, 0xc8, 0x5c, 0x2f, 0x0b, 0x6c, 0x94, 0xe2, 0xf3, - 0xd9, 0x48, 0xe4, 0x47, 0x08, 0x37, 0x07, 0x03, 0x61, 0xed, 0x4e, 0xbf, 0x46, 0x8d, 0xec, 0x1a, - 0x79, 0x27, 0x8f, 0x74, 0x7d, 0xd0, 0xa2, 0x4a, 0x5f, 0xc4, 0x07, 0xd2, 0x19, 0x9c, 0x3b, 0x1d, - 0xee, 0xd6, 0x83, 0x30, 0x38, 0xde, 0x28, 0xbc, 0x65, 0x30, 0x4d, 0xe9, 0x06, 0xed, 0xa3, 0xc4, - 0x81, 0xfe, 0xea, 0x5a, 0xb8, 0x65, 0xb3, 0xeb, 0xd0, 0x78, 0xd6, 0xdd, 0x83, 0xc0, 0x5d, 0x62, - 0xa7, 0x9d, 0x67, 0x7b, 0x09, 0xd7, 0x54, 0xbc, 0x6e, 0x9e, 0xf8, 0x25, 0x66, 0xb2, 0x1e, 0x9b, - 0x4f, 0x77, 0x8b, 0x24, 0x9e, 0xc2, 0x3a, 0x1c, 0x37, 0x41, 0x72, 0x45, 0x40, 0xc8, 0x1a, 0x59, - 0xac, 0x30, 0xd9, 0x9c, 0xaa, 0x0f, 0xfd, 0x61, 0x48, 0x8b, 0x9c, 0x4f, 0x32, 0x02, 0x92, 0x32, - 0x79, 0x0e, 0x11, 0xf4, 0x70, 0xe0, 0x40, 0x55, 0x72, 0x7d, 0x2a, 0x6d, 0x25, 0x96, 0xbb, 0xdf, - 0x12, 0x2c, 0xd5, 0xe0, 0xde, 0x12, 0x02, 0x95, 0xa0, 0xd5, 0xf6, 0x22, 0x6b, 0x56, 0xd8, 0x75, - 0xf9, 0xd9, 0x56, 0xbe, 0x7a, 0x9b, 0x2e, 0xbf, 0xd0, 0x3d, 0x8e, 0x87, 0x5e, 0xbf, 0xf8, 0xef, - 0xb2, 0xd0, 0xb4, 0x35, 0x81, 0x8a, 0x60, 0xa8, 0x21, 0x18, 0x80, 0xaf, 0xbd, 0x39, 0xb7, 0x47, - 0xac, 0x73, 0x7f, 0xea, 0x93, 0xba, 0xf2, 0x33, 0xfe, 0x53, 0xe7, 0x12, 0x03, 0x3d, 0xb6, 0x50, - 0x8c, 0xaa, 0x58, 0x3d, 0x0e, 0x0f, 0x52, 0x24, 0xf0, 0xdf, 0x1e, 0xa2, 0x49, 0x05, 0xb3, 0xf1, - 0x92, 0xde, 0xd2, 0x95, 0x5f, 0xd0, 0xa4, 0x82, 0xb5, 0x64, 0x3d, 0xf8, 0x1b, 0x61, 0x35, 0x57, - 0x87, 0x3a, 0x0c, 0xbd, 0xc3, 0x6b, 0x9d, 0xf1, 0x58, 0xc7, 0x48, 0xb4, 0x3d, 0x3e, 0x10, 0x35, - 0x39, 0x98, 0xa1, 0x03, 0x46, 0x6b, 0x9b, 0xbb, 0x37, 0xc9, 0x48, 0x48, 0xed, 0x81, 0xbc, 0x76, - 0x49, 0x9e, 0x03, 0x52, 0x55, 0xd2, 0xb9, 0xab, 0x3f, 0xf5, 0xcd, 0x16, 0x23, 0x76, 0x12, 0x20, - 0xaa, 0xf8, 0x72, 0x16, 0x9a, 0x6e, 0xef, 0x74, 0x77, 0xdc, 0x7d, 0x7b, 0x24, 0x9e, 0x87, 0xbc, - 0x6e, 0xdb, 0xaa, 0x66, 0xa2, 0x28, 0xae, 0xc3, 0x1a, 0x47, 0x92, 0x96, 0x1d, 0x5f, 0x79, 0x32, - 0x26, 0xa1, 0x40, 0xc0, 0x5e, 0xb3, 0x5a, 0x57, 0x96, 0xa1, 0x4a, 0xc9, 0x73, 0x37, 0xe4, 0x39, - 0x3c, 0x14, 0x38, 0xf6, 0xd0, 0x7d, 0x2b, 0xff, 0x63, 0x16, 0x9a, 0x7a, 0x0f, 0x5a, 0xd3, 0x43, - 0xeb, 0x52, 0x5d, 0x79, 0x12, 0x3d, 0x2e, 0xb9, 0xf7, 0x48, 0x9e, 0xcb, 0xc3, 0x6a, 0x7c, 0xa0, - 0xd3, 0x09, 0xae, 0x7f, 0x9d, 0x85, 0xc4, 0x7b, 0xc0, 0xea, 0x2b, 0x7b, 0x45, 0x57, 0x96, 0xa3, - 0x2a, 0xc9, 0x63, 0x2f, 0xec, 0x20, 0xe0, 0xde, 0x42, 0x37, 0xb4, 0xc6, 0x72, 0xa8, 0x84, 0x82, - 0x87, 0xd6, 0x6a, 0x17, 0xb4, 0x2e, 0x1c, 0x03, 0xb4, 0x5e, 0x2b, 0x1f, 0xa7, 0x0b, 0x39, 0xf9, - 0x42, 0x41, 0x03, 0x07, 0xb7, 0x17, 0x2d, 0xab, 0x05, 0xd8, 0xed, 0xa3, 0x82, 0xae, 0xbc, 0xce, - 0xac, 0x16, 0x6a, 0xf8, 0x05, 0xc3, 0x22, 0x17, 0xd8, 0xed, 0x07, 0x16, 0x13, 0x53, 0x83, 0xc5, - 0xd4, 0xd2, 0x60, 0xb1, 0x52, 0x59, 0xb9, 0x90, 0x18, 0x1b, 0x2c, 0x56, 0xab, 0x56, 0xae, 0x5a, - 0x5b, 0x45, 0x7f, 0x96, 0x5c, 0x2b, 0x2f, 0x0f, 0xbd, 0xe4, 0xb6, 0x40, 0x70, 0x5b, 0x2b, 0x4c, - 0xe0, 0x06, 0x51, 0x27, 0xdb, 0x47, 0x61, 0x66, 0x0a, 0x2a, 0x9a, 0xc0, 0x72, 0x51, 0xb1, 0x20, - 0x46, 0x4b, 0x74, 0x65, 0xa1, 0xc4, 0x97, 0xa7, 0xb9, 0x77, 0x66, 0x0b, 0x08, 0xad, 0xc3, 0x37, - 0x16, 0x57, 0xf0, 0xf7, 0x38, 0x87, 0x3a, 0x2f, 0x5e, 0xcf, 0x3d, 0xe6, 0x2f, 0xf0, 0x52, 0xcb, - 0xae, 0x24, 0x97, 0x9a, 0xcc, 0x4d, 0xb7, 0xec, 0x4a, 0xc6, 0x93, 0x91, 0xa2, 0xad, 0xf4, 0xf2, - 0x33, 0xd7, 0x80, 0x72, 0x5d, 0x79, 0x11, 0x3d, 0x2f, 0xb9, 0x0f, 0x5f, 0x7e, 0x00, 0x7c, 0x14, - 0x71, 0x5c, 0x8d, 0x5a, 0x18, 0x00, 0xdf, 0x5c, 0x80, 0x41, 0x9e, 0x72, 0xfc, 0xa7, 0x2c, 0x24, - 0xf2, 0xfd, 0xef, 0x8e, 0x0b, 0xf9, 0x73, 0xdb, 0x85, 0xf4, 0xa4, 0xd5, 0xc8, 0x3d, 0xc4, 0xa1, - 0x5f, 0xe0, 0x1e, 0xde, 0x0f, 0x1b, 0x91, 0x68, 0xeb, 0x36, 0x76, 0x1c, 0x31, 0xf4, 0x0e, 0xe3, - 0xf8, 0xd9, 0xd4, 0xb7, 0x27, 0xc8, 0x31, 0x93, 0x7b, 0x59, 0xa7, 0x2b, 0xb5, 0xa8, 0x46, 0xf2, - 0xd8, 0x12, 0xf9, 0x51, 0x5e, 0xcc, 0x44, 0x54, 0xa8, 0x78, 0x6d, 0x96, 0x5d, 0x05, 0xa6, 0xc8, - 0xdc, 0x17, 0xf4, 0x05, 0xa0, 0xf1, 0x60, 0x45, 0x62, 0x21, 0x1a, 0x17, 0x6e, 0xa9, 0xaf, 0xd7, - 0xc2, 0xe4, 0x5e, 0xaa, 0xf4, 0xa7, 0x38, 0x13, 0xe5, 0xbd, 0xeb, 0xf3, 0x37, 0x62, 0xdb, 0x7c, - 0xb3, 0x82, 0xfc, 0x2a, 0xfe, 0xb7, 0x59, 0x68, 0xb6, 0x4d, 0xec, 0xb5, 0x12, 0xeb, 0xf5, 0xe8, - 0x4d, 0x7f, 0xce, 0x2d, 0xba, 0xc2, 0x56, 0x97, 0x1c, 0x38, 0x4e, 0x66, 0x2e, 0xee, 0x44, 0xe9, - 0x68, 0x81, 0xdf, 0x5b, 0x28, 0x0f, 0xd4, 0x84, 0x84, 0xf0, 0x7d, 0x20, 0x0d, 0x37, 0x0b, 0x73, - 0x96, 0x3f, 0xac, 0x2b, 0xc5, 0x12, 0xe9, 0x41, 0xd3, 0xed, 0x80, 0xbe, 0x11, 0x74, 0x8f, 0x64, - 0x02, 0xd2, 0x42, 0x7c, 0xd6, 0xe5, 0x88, 0xf6, 0x60, 0xba, 0xf4, 0x1e, 0x14, 0xbc, 0x2d, 0xe1, - 0xd8, 0x5a, 0x5d, 0xa9, 0x43, 0xaf, 0x49, 0x19, 0xbe, 0x9d, 0xde, 0xb3, 0x74, 0xeb, 0x70, 0xa4, - 0xfd, 0x81, 0x45, 0x15, 0x5f, 0xcd, 0x42, 0x73, 0x3c, 0xc7, 0xbc, 0x3b, 0x80, 0xdf, 0x6e, 0x4d, - 0x3d, 0xca, 0x79, 0xf1, 0xa1, 0x0c, 0x99, 0x63, 0x50, 0x72, 0xf8, 0x8c, 0xed, 0xb4, 0x00, 0xf6, - 0x7f, 0xa1, 0x2b, 0x6b, 0xd1, 0x6a, 0x29, 0xd3, 0xd6, 0xc8, 0xf3, 0x33, 0xef, 0x77, 0x3a, 0xb9, - 0xeb, 0x29, 0x2c, 0x77, 0xad, 0x0f, 0x86, 0x1a, 0xcc, 0x8b, 0x60, 0x32, 0xee, 0x14, 0x78, 0xd7, - 0x50, 0xf2, 0x45, 0xc0, 0x4c, 0xe0, 0x74, 0xaf, 0xab, 0x6c, 0x72, 0x41, 0x73, 0x28, 0x51, 0x23, - 0x92, 0xab, 0xd7, 0x7f, 0x32, 0xb1, 0xa5, 0x95, 0x3e, 0x5a, 0xf9, 0xba, 0x90, 0x9b, 0x2f, 0x14, - 0xa4, 0xc6, 0x39, 0xe8, 0x69, 0xef, 0x49, 0xe5, 0xa9, 0x10, 0xd1, 0xc7, 0x86, 0x12, 0xa1, 0x63, - 0xb1, 0x21, 0x60, 0x61, 0x14, 0xff, 0x92, 0x3e, 0x8f, 0xc6, 0x11, 0x74, 0x49, 0x6e, 0xd7, 0x43, - 0xba, 0x72, 0x9f, 0x44, 0xcb, 0xe4, 0xc9, 0xf6, 0x77, 0x14, 0x83, 0xf1, 0x87, 0x82, 0x4a, 0xeb, - 0xc5, 0xd7, 0xd0, 0xb8, 0xf0, 0x7b, 0xc1, 0x0f, 0x6a, 0x3f, 0xa0, 0x2e, 0x37, 0x58, 0xbf, 0x4d, - 0xcb, 0xe4, 0x12, 0xd2, 0xbd, 0x7f, 0x5b, 0xf2, 0xe8, 0x26, 0xc2, 0xd9, 0x9d, 0xdd, 0x9b, 0x3c, - 0x1e, 0x5b, 0x40, 0x75, 0x72, 0x9d, 0xf0, 0xbb, 0x44, 0xa5, 0x7d, 0x78, 0x59, 0x0a, 0x8f, 0xf5, - 0x8b, 0x48, 0xb4, 0x25, 0xb2, 0x12, 0x12, 0x3d, 0x92, 0x6c, 0x17, 0x88, 0xdd, 0xe8, 0xaa, 0x8a, - 0xff, 0x7d, 0x16, 0x9a, 0xc2, 0xba, 0xdf, 0x1d, 0x70, 0xff, 0x8a, 0x4d, 0x5c, 0xe0, 0x0d, 0x29, - 0x9e, 0x22, 0x37, 0x42, 0x4a, 0xf1, 0xb0, 0x4e, 0xbc, 0xea, 0x9c, 0x5b, 0x20, 0xcf, 0xb3, 0x6d, - 0xda, 0x98, 0xd0, 0x3b, 0x95, 0x4e, 0x1d, 0x15, 0x90, 0x48, 0x86, 0xe3, 0x01, 0xfc, 0xfb, 0x41, - 0x0f, 0x4d, 0xb5, 0xe5, 0x31, 0xb2, 0xfc, 0x48, 0xa6, 0xe3, 0x36, 0x6f, 0x07, 0xc5, 0x81, 0xec, - 0xd0, 0x93, 0x59, 0x68, 0x9a, 0x6d, 0xa0, 0xbb, 0xe3, 0xe0, 0x6b, 0x6c, 0x08, 0xaf, 0xd0, 0xeb, - 0xe0, 0xb1, 0x58, 0x74, 0xac, 0x87, 0xef, 0xd3, 0x95, 0x5f, 0xa2, 0xb7, 0x24, 0xaf, 0xad, 0x90, - 0x17, 0xa6, 0xdb, 0xc6, 0xeb, 0x03, 0x86, 0x68, 0x16, 0xbc, 0xf9, 0x24, 0x96, 0xdc, 0x9b, 0x68, - 0x22, 0x75, 0xdc, 0xe2, 0xa4, 0x94, 0x18, 0x11, 0xd8, 0x2a, 0xe4, 0xf9, 0x89, 0xde, 0x98, 0x71, - 0x78, 0x27, 0x4c, 0x69, 0xf4, 0xed, 0x4f, 0x7e, 0x7d, 0x32, 0x3e, 0xf0, 0x07, 0x66, 0x0a, 0x4c, - 0x4c, 0x01, 0x6c, 0x7d, 0xc4, 0x9f, 0xa1, 0xec, 0x8a, 0xda, 0x35, 0xf8, 0x24, 0x26, 0xc1, 0x76, - 0x9a, 0xbf, 0xe5, 0x29, 0xf0, 0x0d, 0x15, 0xb5, 0x6b, 0xc8, 0xc7, 0x9b, 0xa5, 0xe2, 0x22, 0x94, - 0xdd, 0xa4, 0x35, 0xe1, 0xbd, 0x9f, 0x04, 0xd1, 0xc1, 0xcd, 0xdf, 0x14, 0xab, 0x1a, 0xdb, 0x5a, - 0x8d, 0xbe, 0x03, 0xb4, 0x7d, 0x93, 0xd6, 0x24, 0x2e, 0x45, 0xd9, 0xcb, 0x6b, 0xd7, 0xe0, 0xad, - 0x9f, 0x04, 0xfa, 0x42, 0xf3, 0xb7, 0x7c, 0x3f, 0xb4, 0x5f, 0x4e, 0x07, 0xe7, 0x57, 0xb8, 0x44, - 0x35, 0x9b, 0x14, 0x0f, 0x4e, 0x40, 0xf9, 0x74, 0x7b, 0xc5, 0x37, 0x50, 0xbe, 0x89, 0x5f, 0x6b, - 0xac, 0xe0, 0xd5, 0x2f, 0xe8, 0xca, 0xb3, 0x12, 0x2b, 0x94, 0x17, 0xf3, 0xdc, 0x66, 0x69, 0x51, - 0xe2, 0x48, 0x77, 0x3c, 0xf6, 0x29, 0x33, 0x2b, 0x80, 0xdd, 0xe6, 0x9b, 0xa8, 0xac, 0xab, 0xf8, - 0x3e, 0x8c, 0x8d, 0x37, 0x36, 0xcb, 0x32, 0x6b, 0x62, 0x85, 0xf2, 0x8b, 0x84, 0x35, 0x21, 0xd6, - 0xf7, 0x24, 0x81, 0x37, 0xb6, 0x14, 0x25, 0x43, 0xea, 0x1d, 0xd5, 0x95, 0x15, 0xf0, 0xf7, 0x82, - 0x8a, 0xb5, 0x2b, 0x17, 0x57, 0x57, 0x56, 0x94, 0x94, 0x1a, 0x5d, 0xfd, 0x64, 0xbf, 0xd9, 0x50, - 0xe2, 0x52, 0x94, 0x87, 0x89, 0x6a, 0xca, 0x49, 0x60, 0x90, 0x23, 0x45, 0xf2, 0x34, 0x02, 0x6b, - 0xb1, 0xdd, 0xf4, 0x7c, 0xaa, 0x2b, 0x55, 0x52, 0x29, 0x3e, 0x63, 0xe1, 0x01, 0xce, 0xcd, 0x84, - 0xe1, 0x81, 0xa9, 0x3c, 0x1e, 0x88, 0x0f, 0x0c, 0x56, 0xd7, 0x5a, 0x2f, 0xc8, 0x32, 0x9e, 0xc0, - 0xcb, 0xa5, 0x86, 0x2d, 0x0f, 0xf3, 0x04, 0x5e, 0xa1, 0x83, 0xd3, 0xa8, 0xf0, 0xe2, 0x34, 0x1e, - 0x43, 0xd9, 0x6b, 0x6b, 0x2b, 0x88, 0x53, 0x09, 0x9e, 0xde, 0xfc, 0x2d, 0xcf, 0x70, 0xf4, 0x5d, - 0x5b, 0x5b, 0x51, 0x54, 0x5d, 0xa9, 0x9a, 0x75, 0xe2, 0x9b, 0xcc, 0x37, 0x66, 0x9c, 0x25, 0x58, - 0xa7, 0xbe, 0x31, 0x4f, 0xf1, 0x1d, 0x21, 0xce, 0x88, 0x65, 0x0f, 0x79, 0xf1, 0x92, 0x71, 0xc1, - 0xbc, 0x2e, 0x89, 0x0b, 0x67, 0x8d, 0xde, 0x73, 0x26, 0x7c, 0xec, 0x38, 0x6a, 0x5c, 0x38, 0x9c, - 0xec, 0x6b, 0x67, 0xfe, 0x33, 0xab, 0x50, 0x7e, 0x83, 0xb6, 0xd1, 0x6f, 0x6e, 0x13, 0x71, 0x30, - 0x79, 0x5c, 0x57, 0x96, 0x48, 0xac, 0x50, 0x9e, 0x5f, 0xa1, 0xb0, 0xe4, 0xf2, 0xa9, 0x33, 0xdf, - 0x19, 0xc7, 0xb7, 0x57, 0x57, 0x1a, 0x5d, 0x17, 0x70, 0x20, 0x16, 0xeb, 0x36, 0xb0, 0xf6, 0xe2, - 0xb7, 0x16, 0xa3, 0x0a, 0x4e, 0x25, 0x9f, 0x0a, 0xba, 0xb2, 0x5f, 0x60, 0x9c, 0x6a, 0x87, 0xc0, - 0x33, 0xa9, 0x24, 0x86, 0x8a, 0x9d, 0xd1, 0x2c, 0x82, 0x64, 0xca, 0xf1, 0x81, 0x3e, 0xcb, 0xd0, - 0xbe, 0x08, 0x6c, 0x38, 0xe3, 0x03, 0x7d, 0xa5, 0x45, 0x60, 0x08, 0x6f, 0x16, 0x12, 0xef, 0x57, - 0xb3, 0x90, 0x63, 0x44, 0x49, 0x7f, 0xe0, 0x2d, 0x68, 0x73, 0xae, 0x72, 0x27, 0xab, 0x2c, 0x61, - 0x3c, 0xea, 0x01, 0x01, 0x4d, 0xa6, 0x9f, 0x49, 0xe2, 0x56, 0xa2, 0xf4, 0x8c, 0x0d, 0x49, 0x8b, - 0x8f, 0xad, 0xa9, 0x1c, 0xdd, 0x28, 0xa4, 0xf3, 0x76, 0xef, 0xcc, 0xc0, 0x2c, 0x71, 0xa0, 0x1f, - 0x90, 0xcb, 0x95, 0xe8, 0xa6, 0x8a, 0xda, 0x35, 0x57, 0xa2, 0x9b, 0x56, 0x56, 0xad, 0xbc, 0x12, - 0xdd, 0xb4, 0xbc, 0x76, 0x4d, 0xb2, 0xaf, 0x9d, 0xdc, 0x79, 0xc7, 0x80, 0x62, 0x87, 0x80, 0xf2, - 0x3f, 0x0e, 0x06, 0xc0, 0xab, 0x74, 0x82, 0x37, 0xfe, 0x7d, 0x83, 0xd4, 0x83, 0x07, 0x25, 0x6b, - 0x2e, 0x2f, 0x67, 0xd2, 0x36, 0xc8, 0x91, 0x6f, 0x61, 0x0a, 0x1c, 0xb2, 0xcb, 0x6c, 0x67, 0xde, - 0xdf, 0xab, 0x43, 0x1d, 0xb8, 0x4b, 0xe5, 0x02, 0x5f, 0xf3, 0xc2, 0xf0, 0x7b, 0x5a, 0xe0, 0xe3, - 0xf7, 0xb4, 0xc0, 0xc2, 0x27, 0x8a, 0x16, 0x17, 0x3d, 0xfe, 0xf4, 0x92, 0x25, 0x4b, 0x9e, 0x28, - 0x51, 0xd9, 0x90, 0x62, 0xab, 0x80, 0x72, 0x31, 0x43, 0x8e, 0x9d, 0x56, 0x32, 0xa6, 0xad, 0xc6, - 0xfb, 0x03, 0x8d, 0xe5, 0x97, 0x1d, 0x10, 0xce, 0x5a, 0x15, 0x55, 0x57, 0xda, 0x81, 0x69, 0x41, - 0x7c, 0xb0, 0xb5, 0x42, 0x21, 0x0b, 0x1f, 0xd6, 0x71, 0x60, 0xc3, 0x5d, 0x8c, 0xf7, 0x2f, 0x51, - 0x61, 0x40, 0x71, 0x2b, 0xb1, 0xc8, 0xa5, 0x59, 0xb5, 0x71, 0x18, 0x34, 0x8f, 0x74, 0x8f, 0x35, - 0x5c, 0x1b, 0xc8, 0x7b, 0x6d, 0xeb, 0xc6, 0xb0, 0x1e, 0xd5, 0xbd, 0xf2, 0x79, 0xbb, 0xb9, 0x80, - 0x44, 0x1c, 0xe6, 0xe7, 0xbb, 0x53, 0x8a, 0x9d, 0xa1, 0x59, 0xf9, 0x65, 0xe2, 0x75, 0xe3, 0x7a, - 0xbd, 0x9c, 0x66, 0x86, 0xfd, 0x17, 0x13, 0xbb, 0x4e, 0x18, 0xed, 0x9d, 0xc9, 0xaf, 0xfa, 0x13, - 0x6d, 0xfb, 0x8c, 0xe3, 0xfb, 0x46, 0xb6, 0x9c, 0x4e, 0x9e, 0x1b, 0x4c, 0x0e, 0x1e, 0x01, 0xd5, - 0x58, 0xf1, 0xbf, 0x10, 0xd0, 0xf4, 0x15, 0xfe, 0x70, 0xc4, 0x66, 0x50, 0xa9, 0x6a, 0xbf, 0x16, - 0x43, 0x68, 0xa2, 0x49, 0x86, 0xae, 0xa5, 0xf6, 0x9c, 0x82, 0xa5, 0x54, 0xb6, 0x55, 0xc8, 0xcf, - 0x02, 0xd9, 0xba, 0x91, 0x6c, 0x09, 0x33, 0x27, 0x7d, 0x2f, 0x18, 0x8e, 0xf0, 0x16, 0x84, 0x84, - 0xce, 0x35, 0x5a, 0x4f, 0x8f, 0x6c, 0x39, 0x4d, 0x49, 0x5d, 0xdb, 0x50, 0x34, 0x2e, 0xa8, 0xe7, - 0x82, 0xe4, 0x42, 0x78, 0xb1, 0x79, 0xab, 0x50, 0x60, 0x0b, 0x8a, 0xff, 0x21, 0x1b, 0xcd, 0xf0, - 0xe8, 0x72, 0xe7, 0xeb, 0x97, 0xed, 0x94, 0x6e, 0x5a, 0xfd, 0x32, 0xe4, 0x7f, 0xc0, 0xf4, 0x8e, - 0xc8, 0xab, 0x95, 0x89, 0xb0, 0x16, 0x94, 0xcb, 0x51, 0x21, 0x9d, 0xda, 0x77, 0x6e, 0x66, 0xb5, - 0x2f, 0xb1, 0xc3, 0x75, 0x2a, 0x7d, 0xe7, 0xf1, 0x4a, 0x5f, 0x70, 0x44, 0x1c, 0x63, 0x98, 0x78, - 0xef, 0xb3, 0x90, 0xe7, 0xa6, 0x3b, 0xbf, 0x51, 0xb4, 0xc1, 0xff, 0x1b, 0x39, 0xdd, 0x5a, 0x92, - 0xc3, 0xc4, 0x02, 0xd1, 0xe7, 0x79, 0x17, 0x4a, 0xc1, 0x92, 0x3a, 0x78, 0xbb, 0x50, 0xe6, 0x84, - 0xb2, 0x0a, 0x1b, 0x78, 0x0f, 0xca, 0x17, 0xd8, 0x9b, 0x07, 0x67, 0xfd, 0xc8, 0xa8, 0x01, 0x4a, - 0x61, 0x08, 0xfa, 0xac, 0xdd, 0x96, 0x54, 0x86, 0xbb, 0x04, 0x4e, 0xd2, 0x02, 0x04, 0x06, 0xf6, - 0xd2, 0xb0, 0x24, 0x2d, 0xf5, 0xcc, 0x10, 0x69, 0x41, 0x7c, 0xe8, 0xa8, 0xd1, 0xb5, 0x39, 0xb1, - 0xff, 0x3c, 0x50, 0xc9, 0xa9, 0xfe, 0x13, 0x24, 0xfe, 0x16, 0xb6, 0x83, 0xb3, 0x12, 0xcd, 0xe0, - 0xe3, 0x24, 0x78, 0x08, 0xdb, 0xe0, 0x1d, 0x05, 0x77, 0x77, 0xe8, 0xc6, 0x9f, 0x15, 0x34, 0x2a, - 0xe1, 0x84, 0x37, 0x44, 0x38, 0xe9, 0x7d, 0x44, 0xf2, 0x7c, 0x62, 0x42, 0x82, 0x53, 0xd9, 0xc0, - 0x59, 0xc4, 0x07, 0x76, 0x5a, 0x46, 0x0c, 0x70, 0x81, 0xb7, 0xe7, 0xa1, 0x99, 0x5e, 0xfd, 0x7f, - 0x5a, 0x37, 0x78, 0x48, 0x40, 0x05, 0xa4, 0xbf, 0xe5, 0xd4, 0x90, 0x87, 0x07, 0x7e, 0xce, 0x39, - 0xb0, 0xf7, 0x6e, 0xd1, 0xf9, 0x1c, 0x1e, 0x0e, 0xaa, 0xae, 0xac, 0x92, 0x5c, 0x43, 0xcb, 0xcf, - 0xf2, 0x86, 0x24, 0x36, 0x73, 0x7f, 0xd2, 0x14, 0x7f, 0xeb, 0xd6, 0xf8, 0xc5, 0x9d, 0xe0, 0x49, - 0x09, 0x12, 0x14, 0x38, 0x50, 0xd5, 0x35, 0x9c, 0xb8, 0xd9, 0x03, 0x01, 0xe5, 0x8f, 0xd1, 0xee, - 0xe4, 0x66, 0xa1, 0xa0, 0xd9, 0xbf, 0x44, 0x33, 0x3c, 0xf7, 0xc0, 0xc3, 0x10, 0x60, 0xb1, 0xdd, - 0x10, 0xe0, 0x3e, 0x4f, 0x6b, 0x1c, 0xcc, 0x33, 0x72, 0x76, 0x00, 0xbf, 0xd4, 0x95, 0x37, 0xd1, - 0x2f, 0xa4, 0x34, 0xd0, 0x2a, 0x3f, 0x0a, 0x38, 0xce, 0x01, 0xee, 0xd7, 0x81, 0xec, 0x0e, 0x4c, - 0x45, 0x93, 0x31, 0xfa, 0xb4, 0xb0, 0xdc, 0x72, 0x2f, 0x77, 0xfb, 0x87, 0x47, 0x0b, 0x20, 0x0d, - 0xa8, 0xea, 0xf6, 0xa7, 0x5e, 0x7d, 0xc1, 0xe1, 0x74, 0x7f, 0xbd, 0x48, 0xf6, 0x87, 0xc8, 0xb3, - 0xfa, 0xbc, 0xdb, 0xf5, 0xfe, 0x7a, 0xde, 0x8d, 0x4a, 0x0f, 0xcf, 0xfb, 0xf9, 0xa3, 0x78, 0xde, - 0xc3, 0x20, 0x3f, 0x8c, 0xe3, 0x7d, 0x44, 0x0b, 0x47, 0x6e, 0x99, 0xe3, 0xfd, 0x4d, 0xcf, 0x95, - 0x7a, 0xcf, 0xb9, 0xfe, 0x26, 0x39, 0xd7, 0xff, 0x6b, 0x8b, 0x29, 0x86, 0x60, 0xcd, 0x67, 0x6e, - 0xa5, 0xcf, 0x79, 0x79, 0xe8, 0xa5, 0xcc, 0x3e, 0xe7, 0x79, 0x30, 0xc8, 0x58, 0x5c, 0xce, 0x9f, - 0x45, 0x79, 0xc1, 0x77, 0xdf, 0x0d, 0x6b, 0x11, 0xec, 0x80, 0x3f, 0x09, 0x24, 0xa9, 0xa4, 0x48, - 0x9e, 0x42, 0xc8, 0xc8, 0x4d, 0x5d, 0xc9, 0x53, 0x83, 0x23, 0xdb, 0xbb, 0xae, 0x95, 0xe7, 0x48, - 0x59, 0x0b, 0xfe, 0x44, 0x25, 0xf5, 0xe2, 0x73, 0x28, 0xb7, 0xd1, 0xdf, 0xe4, 0x8f, 0x60, 0xc7, - 0x7b, 0x2c, 0xca, 0x9a, 0x23, 0x41, 0x09, 0xb3, 0x41, 0xc4, 0xb1, 0xdb, 0x12, 0x7b, 0xbf, 0xc1, - 0xbd, 0x73, 0xa5, 0xec, 0xc2, 0xd4, 0x38, 0x15, 0x9a, 0xd8, 0xc9, 0xab, 0x82, 0xdb, 0x4f, 0x5e, - 0x89, 0x55, 0x9c, 0x8f, 0xf6, 0x54, 0xbc, 0x9e, 0x12, 0x5d, 0x79, 0x90, 0xf3, 0xd1, 0x9e, 0x46, - 0x12, 0x62, 0xa4, 0x2e, 0x6d, 0x4f, 0x0c, 0x92, 0x40, 0x31, 0x14, 0xdf, 0x58, 0x3e, 0xd9, 0xb7, - 0x2b, 0xea, 0xb1, 0xcf, 0xed, 0x18, 0x38, 0xcd, 0x52, 0x8e, 0xdc, 0x14, 0xe7, 0x3f, 0x9b, 0x45, - 0xff, 0xf4, 0xb1, 0x5b, 0xf4, 0xb7, 0x0b, 0x28, 0xdb, 0xd7, 0xd8, 0x88, 0xa3, 0x12, 0xe7, 0x97, - 0x7f, 0xa0, 0x2b, 0x11, 0xc9, 0xfc, 0x2d, 0x37, 0x91, 0x70, 0x4f, 0x84, 0x72, 0x6d, 0x8f, 0x9a, - 0xaf, 0x8b, 0xdd, 0x9e, 0xb7, 0xd4, 0xe8, 0x68, 0x4d, 0xec, 0xfc, 0x3a, 0xf5, 0xd9, 0x57, 0xa9, - 0xe1, 0x7e, 0x47, 0xe0, 0xa2, 0x67, 0x8b, 0xf0, 0x3a, 0xd9, 0x00, 0x23, 0x87, 0x0e, 0x13, 0x08, - 0x87, 0xbb, 0xe6, 0x34, 0x0d, 0x36, 0xe7, 0x2c, 0x3b, 0x26, 0xe8, 0xca, 0x21, 0x01, 0xf5, 0x08, - 0x92, 0xe3, 0xf5, 0x97, 0xb7, 0x0b, 0x46, 0xdb, 0x17, 0x26, 0x58, 0x1d, 0x3a, 0x16, 0x1f, 0x3c, - 0xcf, 0x1f, 0x32, 0xa1, 0x27, 0xa8, 0x97, 0x0d, 0xa1, 0x3c, 0x70, 0xb3, 0xf8, 0x40, 0x4c, 0x09, - 0x34, 0x18, 0xad, 0xe7, 0x92, 0xe7, 0x06, 0xad, 0x60, 0x47, 0x47, 0xba, 0x47, 0x8e, 0x5d, 0xe4, - 0x9b, 0x19, 0xd1, 0x21, 0x10, 0x37, 0x98, 0x6d, 0xda, 0x0e, 0x1a, 0x97, 0x86, 0x93, 0x7b, 0x4f, - 0x90, 0x28, 0x6a, 0x7b, 0x4e, 0x27, 0xfa, 0x8e, 0xf3, 0x93, 0x16, 0xff, 0x53, 0x2e, 0x9a, 0x62, - 0x5b, 0xdc, 0x4f, 0x8b, 0x3a, 0xff, 0x63, 0x7a, 0xea, 0xfc, 0x49, 0x2f, 0xea, 0xfc, 0x4e, 0x21, - 0xcb, 0xa3, 0x69, 0xc9, 0xf2, 0x5b, 0x25, 0x17, 0xf8, 0xc1, 0x89, 0x72, 0xe2, 0x5c, 0xe3, 0x84, - 0x4e, 0x2a, 0x31, 0xba, 0x0e, 0xf2, 0x7b, 0x7f, 0x36, 0xe7, 0x50, 0x2e, 0xb6, 0x0a, 0x08, 0xd5, - 0xfb, 0x02, 0x10, 0x95, 0xab, 0x81, 0x48, 0xc0, 0xf0, 0x13, 0xcf, 0x15, 0xcb, 0xab, 0xf9, 0xf1, - 0xad, 0xad, 0x80, 0x14, 0x6c, 0x5b, 0x86, 0x8d, 0xe3, 0x47, 0x00, 0x43, 0x2c, 0xa0, 0x31, 0x3f, - 0x8e, 0xc2, 0xde, 0x05, 0x82, 0x0d, 0x9a, 0xe5, 0xd0, 0xdd, 0xde, 0x69, 0xb4, 0x6e, 0x4a, 0x9d, - 0x19, 0x80, 0xb6, 0x25, 0x2a, 0x37, 0x83, 0xcb, 0xf6, 0x3d, 0xeb, 0x07, 0xb2, 0x7d, 0x17, 0x0f, - 0x08, 0x68, 0xbc, 0xaf, 0x25, 0x12, 0xac, 0xab, 0xf7, 0x35, 0x6a, 0xe4, 0x9a, 0x7d, 0xac, 0x2b, - 0x1f, 0x48, 0x56, 0x29, 0x4d, 0x18, 0x44, 0xbc, 0x2b, 0xb1, 0x8a, 0xc5, 0x18, 0xba, 0x98, 0x88, - 0x9e, 0x8a, 0x0f, 0x0d, 0x24, 0x87, 0xbe, 0x28, 0x2d, 0x32, 0x7a, 0x4f, 0x9b, 0x5c, 0x83, 0xab, - 0xc6, 0x5c, 0x49, 0x7b, 0xa7, 0xc9, 0x5c, 0x0c, 0xec, 0xa4, 0x8a, 0x1f, 0x58, 0x14, 0x19, 0xd1, - 0xd5, 0x43, 0xb5, 0xa6, 0x2d, 0x3e, 0x2e, 0xa0, 0xc9, 0x76, 0xf8, 0x14, 0x5f, 0x44, 0xb9, 0xcd, - 0x5a, 0xa8, 0x89, 0x9a, 0x14, 0x94, 0x64, 0x06, 0xe7, 0x45, 0xb5, 0x66, 0x5b, 0x0c, 0x77, 0x2a, - 0xf4, 0x9b, 0xfd, 0x1a, 0x42, 0x56, 0xa1, 0x07, 0x30, 0x2e, 0xb4, 0x03, 0x63, 0xba, 0xb8, 0xda, - 0x7c, 0x4e, 0xcf, 0x37, 0x51, 0x81, 0x93, 0xb9, 0x15, 0x97, 0x5b, 0xeb, 0xcc, 0x18, 0x9e, 0x1b, - 0xbf, 0x5a, 0xd0, 0x54, 0x9e, 0xc8, 0x13, 0x0d, 0x64, 0xbd, 0xc5, 0xbb, 0xc6, 0xa1, 0xfb, 0x4c, - 0x18, 0xc7, 0xf6, 0xe7, 0xd5, 0x9c, 0x6c, 0x94, 0x98, 0xad, 0xba, 0xcc, 0x83, 0xe6, 0xa5, 0x77, - 0x2d, 0xa2, 0x2e, 0x6a, 0xdc, 0x83, 0xf8, 0x7d, 0xe5, 0x61, 0x8c, 0x55, 0xcb, 0xbe, 0x79, 0xac, - 0xda, 0x0a, 0xbb, 0x59, 0x5f, 0x0e, 0xb5, 0x4f, 0x2f, 0xb2, 0x9b, 0xf5, 0x4d, 0x85, 0x2b, 0x55, - 0x63, 0x15, 0x31, 0x0e, 0x98, 0x37, 0xe8, 0x5b, 0xe6, 0x50, 0xcf, 0x02, 0x4f, 0x89, 0x03, 0xbd, - 0xd8, 0xd5, 0xb3, 0x53, 0x40, 0x83, 0xc2, 0x14, 0xb3, 0x0e, 0x4d, 0xec, 0x66, 0x8b, 0xd4, 0x06, - 0xf6, 0xf1, 0x7d, 0x5d, 0x59, 0xcf, 0x28, 0xed, 0xb7, 0x79, 0xe5, 0xd3, 0x75, 0x53, 0xda, 0xd5, - 0xa3, 0x90, 0xda, 0x1e, 0x54, 0xf2, 0xb8, 0xef, 0x41, 0x25, 0xe7, 0x8f, 0x9d, 0x4a, 0x6e, 0x7b, - 0x94, 0x52, 0xc9, 0x9c, 0xa9, 0xcb, 0xf8, 0x9b, 0x64, 0xea, 0xf2, 0x07, 0x41, 0x57, 0xce, 0x08, - 0xe8, 0x2b, 0x41, 0x4a, 0x0f, 0xe2, 0x38, 0x68, 0x94, 0x37, 0x31, 0x44, 0x66, 0xbc, 0xc5, 0x24, - 0xd1, 0xdf, 0x66, 0xa3, 0xd9, 0x5e, 0xab, 0xbd, 0xdb, 0xcc, 0x2d, 0xb2, 0xbd, 0x9c, 0xc8, 0xc9, - 0xd7, 0x60, 0x73, 0x1b, 0x37, 0x85, 0xc4, 0x6f, 0x38, 0xa1, 0x90, 0x9a, 0x6e, 0xdc, 0x6f, 0x18, - 0x5f, 0x41, 0x17, 0xa9, 0x61, 0x47, 0x82, 0x4e, 0x6d, 0x03, 0x51, 0x8a, 0x65, 0x38, 0x00, 0xaa, - 0x72, 0xf0, 0x00, 0x91, 0xcc, 0x64, 0x40, 0x7c, 0x1a, 0x9a, 0xc0, 0x7d, 0x3e, 0x67, 0x0d, 0x20, - 0xdc, 0xb8, 0x35, 0x40, 0xd6, 0x75, 0x5a, 0x03, 0x38, 0x6d, 0x49, 0xb2, 0x7f, 0x00, 0x5b, 0x92, - 0x9c, 0xeb, 0xb1, 0x25, 0xc9, 0xbd, 0x4e, 0x5b, 0x92, 0xbc, 0xeb, 0xb6, 0x25, 0x11, 0xbb, 0x2c, - 0xc4, 0x0a, 0x72, 0x35, 0xcc, 0x96, 0x51, 0xc4, 0xfa, 0xbe, 0x5b, 0xab, 0x7f, 0x75, 0xa8, 0x0d, - 0xdc, 0xfc, 0x79, 0xba, 0xc1, 0x38, 0xd3, 0x13, 0xbf, 0x68, 0xf2, 0x6c, 0x90, 0x66, 0x99, 0x20, - 0x5a, 0x4e, 0xa7, 0x5f, 0x5a, 0x44, 0xf1, 0x70, 0x69, 0x91, 0x89, 0x71, 0xab, 0x2a, 0x4b, 0x8b, - 0x1c, 0x62, 0x09, 0x8a, 0x65, 0x15, 0x94, 0x07, 0x5a, 0x6b, 0x22, 0xa1, 0x83, 0xd8, 0xb5, 0x66, - 0x91, 0x3c, 0xd7, 0xa1, 0xf7, 0x76, 0xee, 0x38, 0xe9, 0x28, 0xfe, 0xd6, 0xfe, 0x86, 0x81, 0x34, - 0xee, 0x0d, 0x5d, 0xf9, 0xb9, 0xfd, 0x0d, 0xbb, 0x79, 0xca, 0x6b, 0xc7, 0x9b, 0xc7, 0x91, 0x05, - 0xe8, 0x7b, 0x1b, 0x95, 0x4c, 0xb8, 0x21, 0xa3, 0x92, 0x89, 0x37, 0xdf, 0xa8, 0xa4, 0x06, 0xe5, - 0x35, 0xfb, 0xc2, 0xe1, 0x0f, 0x1a, 0x88, 0xb4, 0x0b, 0x07, 0x94, 0x22, 0x45, 0x72, 0x09, 0x0d, - 0xc8, 0x7d, 0xc8, 0x38, 0xb5, 0xd3, 0xe8, 0xd8, 0x07, 0x4f, 0x11, 0x4d, 0x65, 0x09, 0x21, 0x02, - 0x53, 0xa7, 0x3e, 0x37, 0xfa, 0xb7, 0xa9, 0xa4, 0x8b, 0xf8, 0x36, 0xc2, 0xa7, 0x4a, 0x44, 0x4e, - 0xd5, 0xba, 0xb2, 0x4c, 0x22, 0x07, 0x28, 0x3f, 0xe7, 0x38, 0x68, 0x90, 0x85, 0x73, 0x07, 0xf2, - 0x6c, 0x91, 0x15, 0x9f, 0x10, 0x6b, 0xdf, 0x81, 0xf6, 0x8e, 0xc7, 0x76, 0x55, 0x28, 0x2a, 0x1e, - 0x56, 0x54, 0x38, 0x1b, 0x98, 0x29, 0x54, 0x84, 0x5f, 0xcc, 0xd9, 0xc0, 0xcc, 0xf4, 0xb6, 0x81, - 0xe1, 0xac, 0x5e, 0x7e, 0xc5, 0x82, 0x67, 0x16, 0x60, 0x8c, 0xfd, 0x68, 0x06, 0x8c, 0x9d, 0x21, - 0xbf, 0x3f, 0xd9, 0x77, 0x9c, 0xd9, 0x9f, 0x5a, 0x71, 0x93, 0xd0, 0x97, 0x2f, 0xa3, 0xbc, 0x88, - 0xcf, 0x1f, 0x88, 0xd0, 0x38, 0x8f, 0x33, 0xdc, 0x4e, 0xf5, 0xfe, 0x40, 0x84, 0xbc, 0x2d, 0xd0, - 0x52, 0x9e, 0x68, 0x33, 0xbc, 0x23, 0xa5, 0xe2, 0xef, 0xd1, 0xa4, 0x96, 0x40, 0x5d, 0xfd, 0x7b, - 0x5a, 0x43, 0x4b, 0xa3, 0x6f, 0x5d, 0xa3, 0x86, 0xc5, 0x4d, 0x93, 0xca, 0x5f, 0xd7, 0x95, 0x35, - 0x92, 0xbd, 0x46, 0xae, 0xe4, 0xbd, 0x5e, 0x98, 0xf8, 0xd5, 0x88, 0x0e, 0x2d, 0x01, 0xe9, 0xac, - 0xd1, 0xb5, 0x39, 0x3e, 0xb0, 0x0b, 0x1a, 0x5d, 0x1d, 0xea, 0x78, 0x8c, 0x4a, 0x74, 0x3b, 0xf9, - 0x0a, 0xd5, 0x3e, 0xa8, 0x58, 0xc9, 0xd9, 0xa1, 0x4d, 0xb3, 0x80, 0xde, 0xb2, 0x43, 0xbb, 0xcf, - 0x66, 0x87, 0xb6, 0x61, 0x69, 0xb8, 0xc8, 0xac, 0x0a, 0xf8, 0x9a, 0x34, 0xce, 0xe2, 0xec, 0x55, - 0x94, 0xeb, 0x5b, 0xaf, 0x05, 0x22, 0x58, 0xac, 0x34, 0x09, 0x52, 0xd6, 0x42, 0x09, 0xa5, 0x71, - 0x14, 0xf3, 0x47, 0x11, 0x5b, 0xfb, 0x63, 0x46, 0xef, 0xe9, 0x64, 0xec, 0xd2, 0xd5, 0xa1, 0x8e, - 0x25, 0xe6, 0x02, 0xf1, 0x0f, 0x15, 0x7a, 0x88, 0xc5, 0x28, 0xdb, 0xdf, 0x50, 0x4f, 0x92, 0x60, - 0x15, 0xe8, 0xca, 0x24, 0xc9, 0xfc, 0x2d, 0xe7, 0x25, 0x7a, 0x63, 0x89, 0xb6, 0x4b, 0xaa, 0xf9, - 0x43, 0x7c, 0x18, 0xe5, 0x84, 0x7c, 0xf5, 0x1b, 0x48, 0x72, 0xab, 0xa9, 0xba, 0x32, 0x59, 0xc2, - 0x05, 0xd0, 0xea, 0xf0, 0x79, 0x15, 0xff, 0x12, 0xcb, 0xd0, 0x04, 0x80, 0x8a, 0x8a, 0x46, 0x5f, - 0x18, 0x22, 0xfa, 0x11, 0xa1, 0x17, 0x5f, 0x8e, 0x3b, 0x19, 0x87, 0x77, 0xaa, 0x7c, 0xa1, 0xf8, - 0x02, 0x1a, 0x4f, 0x5e, 0x98, 0x8d, 0x4f, 0xe1, 0xd8, 0x79, 0xe4, 0x39, 0xb3, 0x4a, 0xe5, 0x02, - 0xf8, 0x36, 0x7f, 0xf3, 0xc6, 0xa7, 0x4c, 0x4a, 0xff, 0x50, 0x54, 0xb5, 0x2a, 0xc5, 0x6a, 0x34, - 0x89, 0xa1, 0x17, 0xbc, 0xbd, 0xf7, 0x51, 0x6b, 0xd7, 0x22, 0xc9, 0x5e, 0x43, 0x5f, 0x93, 0xc4, - 0xd9, 0xa3, 0xc4, 0x96, 0xcf, 0x5e, 0x2f, 0x3e, 0x83, 0xc6, 0xaf, 0xdb, 0x50, 0x41, 0xb2, 0x02, - 0xcf, 0xc6, 0x5b, 0x3c, 0x47, 0x57, 0x0a, 0x25, 0xab, 0x54, 0x9e, 0xc0, 0x32, 0x5b, 0x99, 0xd8, - 0x88, 0x95, 0x8b, 0x11, 0x34, 0x81, 0xa7, 0x33, 0xe6, 0xa4, 0xf1, 0x2c, 0xe6, 0x2e, 0x04, 0x47, - 0x3a, 0xc0, 0xad, 0x80, 0x08, 0x60, 0x3c, 0xbd, 0x41, 0xaf, 0xc6, 0xb9, 0xd3, 0xa9, 0x53, 0x9f, - 0x13, 0x80, 0xe6, 0x1b, 0x88, 0xcb, 0xc0, 0x48, 0x0a, 0x7f, 0xf6, 0xfd, 0x96, 0xab, 0x2c, 0x2b, - 0x94, 0xe7, 0xd8, 0xac, 0x0d, 0x29, 0xbe, 0xa0, 0x96, 0x8c, 0xb4, 0x99, 0xf8, 0xbe, 0x79, 0xcf, - 0xc2, 0x1b, 0x58, 0x78, 0x36, 0x2c, 0x09, 0x22, 0x45, 0x72, 0x95, 0x03, 0xa3, 0x26, 0xda, 0xbf, - 0x30, 0xce, 0x5c, 0xac, 0xae, 0x2d, 0x65, 0xe6, 0x5d, 0x23, 0x7a, 0x9b, 0xd1, 0x7f, 0x11, 0x52, - 0x51, 0x90, 0xa9, 0x30, 0x39, 0x4d, 0x72, 0x23, 0x60, 0x73, 0x20, 0x95, 0x0c, 0x67, 0x92, 0x11, - 0xe0, 0x5e, 0xa2, 0x6a, 0xbe, 0x70, 0x30, 0x80, 0xe3, 0xb2, 0x51, 0x32, 0x82, 0xaf, 0x90, 0xe7, - 0xc7, 0x07, 0x76, 0x80, 0xdd, 0x1a, 0xb5, 0x8a, 0xde, 0x9e, 0x3c, 0xbd, 0x33, 0x3e, 0xd0, 0x07, - 0x66, 0x6c, 0xc6, 0xae, 0x23, 0xc6, 0xa7, 0x47, 0x55, 0x5b, 0x9f, 0xef, 0x13, 0x44, 0xe9, 0x05, - 0x54, 0xe0, 0x3c, 0x92, 0xeb, 0x0a, 0x47, 0x44, 0x6c, 0xe3, 0x79, 0x3a, 0x4d, 0x5e, 0xc8, 0x9b, - 0x45, 0x31, 0x22, 0x03, 0x30, 0x31, 0x4f, 0xfe, 0xc1, 0x76, 0x15, 0x1f, 0x15, 0xd0, 0x6c, 0x2b, - 0x4c, 0x41, 0x78, 0xa5, 0x16, 0xf1, 0x55, 0xfa, 0x70, 0xa2, 0x15, 0xcc, 0x50, 0x97, 0xa3, 0x7c, - 0x02, 0x4f, 0xd4, 0xb3, 0xee, 0x11, 0x13, 0x3a, 0x59, 0x21, 0x53, 0xb9, 0xba, 0x9c, 0x13, 0x58, - 0x13, 0xea, 0x37, 0x9e, 0x61, 0x1a, 0x79, 0x8e, 0x4d, 0x0d, 0xd0, 0xba, 0x05, 0xe4, 0x79, 0xb0, - 0xfa, 0xe2, 0x2b, 0xd9, 0x68, 0x8e, 0x67, 0xdf, 0xbb, 0xcd, 0x7f, 0x2b, 0x13, 0x8b, 0x61, 0x7e, - 0x95, 0x2d, 0x46, 0x91, 0xe7, 0x5e, 0xdc, 0x4e, 0x5e, 0xe3, 0x6d, 0x5d, 0x79, 0x03, 0xbd, 0x2e, - 0x65, 0x3a, 0x0a, 0xea, 0x52, 0xe0, 0xb9, 0xf6, 0x51, 0xf8, 0x8d, 0x7f, 0x29, 0x30, 0x7e, 0xc3, - 0x1c, 0x96, 0x57, 0x69, 0x34, 0x78, 0x06, 0x29, 0x6a, 0x60, 0xa2, 0x1c, 0x4e, 0x82, 0xd3, 0x20, - 0xae, 0x40, 0x93, 0xeb, 0xad, 0xeb, 0x50, 0xd3, 0xd2, 0x44, 0x8c, 0xc5, 0x31, 0xaa, 0x73, 0x54, - 0xc9, 0x53, 0x78, 0xb6, 0x28, 0xb1, 0xf7, 0x1b, 0xd5, 0xd1, 0xa0, 0x6c, 0xb1, 0xae, 0x94, 0x22, - 0x49, 0xe2, 0x57, 0x96, 0xf1, 0x68, 0x8a, 0x3f, 0xcd, 0x42, 0x73, 0x4c, 0x6e, 0x0c, 0x92, 0x89, - 0xdf, 0x7c, 0x09, 0x55, 0x59, 0x4c, 0xd0, 0x95, 0xf3, 0x02, 0x3a, 0x27, 0x48, 0x99, 0xe6, 0x91, - 0x3f, 0x49, 0x2b, 0x26, 0x80, 0x70, 0xbd, 0xb7, 0x47, 0x58, 0xf0, 0x7f, 0x64, 0xa3, 0xfb, 0xbd, - 0x57, 0xfd, 0xd3, 0x14, 0x17, 0xdc, 0xde, 0x30, 0x63, 0xc4, 0x37, 0x24, 0xe3, 0x89, 0xc8, 0xf3, - 0xf9, 0x2b, 0xed, 0x01, 0x3b, 0x99, 0x6f, 0x75, 0x57, 0x16, 0x9a, 0x65, 0x21, 0x8c, 0x8a, 0x90, - 0xd6, 0xa0, 0x05, 0x22, 0x7e, 0x5f, 0xa3, 0xaa, 0xfd, 0x5a, 0xfc, 0x42, 0x40, 0xe3, 0xc3, 0x5a, - 0x68, 0xa3, 0x16, 0x7a, 0x95, 0x3e, 0x78, 0xe5, 0x3b, 0x04, 0x5d, 0xf9, 0xbd, 0x64, 0x15, 0xcb, - 0xbf, 0x8e, 0x0f, 0xec, 0x48, 0xec, 0x20, 0x8c, 0x45, 0xb2, 0x67, 0x6b, 0x72, 0x70, 0x6b, 0x7c, - 0xf0, 0x7c, 0xb2, 0x67, 0xeb, 0x06, 0xed, 0x23, 0x13, 0xe4, 0xfa, 0x2f, 0xc6, 0x63, 0xbb, 0x36, - 0xb4, 0xac, 0xd3, 0x16, 0x62, 0x0a, 0xd3, 0x04, 0xe2, 0x03, 0xfd, 0xec, 0xb6, 0xb0, 0x16, 0x58, - 0xd4, 0xbf, 0xb0, 0x21, 0xe4, 0xdf, 0xa8, 0x85, 0x48, 0xba, 0x64, 0xf2, 0x0b, 0x7a, 0x24, 0x7a, - 0xdb, 0xab, 0x6b, 0x69, 0x42, 0x53, 0x76, 0xeb, 0xd8, 0x32, 0xa8, 0x7a, 0x25, 0xdd, 0xb7, 0xc8, - 0xf7, 0xf3, 0xbb, 0x64, 0x55, 0xb1, 0x08, 0x50, 0x6c, 0xa4, 0xe2, 0xab, 0x59, 0xa8, 0xd0, 0x7b, - 0x94, 0x3b, 0x5f, 0x97, 0xf8, 0xb6, 0xcd, 0x39, 0x69, 0x5e, 0x1a, 0xf0, 0xb7, 0xbe, 0xc9, 0xe3, - 0x41, 0x4b, 0x9c, 0x3b, 0x6d, 0x6c, 0xeb, 0x48, 0xf6, 0x6c, 0x4d, 0xf5, 0x6f, 0x8a, 0x5f, 0x3c, - 0x69, 0xf3, 0x55, 0x22, 0x11, 0xc8, 0xd2, 0x6e, 0x4f, 0xda, 0x5d, 0xce, 0x0c, 0x83, 0x7f, 0x3f, - 0xce, 0xe1, 0x52, 0x7c, 0xd7, 0x82, 0xa1, 0xfd, 0xf5, 0xc8, 0xba, 0x01, 0xfd, 0xc6, 0x1a, 0x34, - 0xb1, 0xbe, 0xd1, 0xaf, 0x05, 0x22, 0xe0, 0xeb, 0x4a, 0x04, 0x6a, 0x8f, 0x99, 0x7c, 0xa1, 0xad, - 0x42, 0x9e, 0x01, 0x1f, 0x6c, 0xd2, 0xde, 0xd8, 0xe7, 0xd5, 0xe8, 0xee, 0x34, 0xfa, 0xf6, 0x5b, - 0x63, 0xda, 0x5a, 0x8b, 0x6b, 0xd1, 0x24, 0x58, 0xa4, 0xd2, 0xd0, 0x10, 0xd2, 0xc2, 0x61, 0xa2, - 0xa4, 0x58, 0x62, 0x1e, 0xbf, 0xbd, 0x86, 0x29, 0x51, 0x20, 0x6a, 0x3f, 0x66, 0xad, 0x58, 0xe6, - 0xf4, 0x02, 0xd5, 0xde, 0x58, 0x5c, 0x8e, 0x50, 0xbd, 0xaf, 0x42, 0x0b, 0x45, 0x4c, 0x2a, 0x83, - 0xa8, 0x2a, 0x1e, 0x35, 0x39, 0x79, 0xae, 0x98, 0x3a, 0x7c, 0x57, 0x28, 0xf0, 0x1c, 0x93, 0x30, - 0xb7, 0x45, 0x2a, 0xd7, 0x46, 0xac, 0x45, 0xe3, 0x5b, 0xc2, 0x5a, 0x68, 0x75, 0x70, 0x83, 0x16, - 0x20, 0xfa, 0x0a, 0xd9, 0x64, 0x5b, 0xac, 0x52, 0x79, 0x76, 0xea, 0xcc, 0xa5, 0x91, 0xfd, 0x67, - 0x98, 0xc5, 0x47, 0xc4, 0x2c, 0xb5, 0xe5, 0x38, 0x2e, 0x50, 0xad, 0xe6, 0x62, 0x0d, 0x9a, 0x44, - 0xb6, 0xb5, 0x32, 0xd8, 0xe4, 0xf3, 0x53, 0xa7, 0x21, 0x1c, 0x85, 0xd7, 0x5e, 0xc3, 0x68, 0xe4, - 0x23, 0x47, 0x8c, 0xee, 0x4e, 0x36, 0x96, 0xbd, 0x91, 0xb8, 0x0a, 0x21, 0xd8, 0x52, 0x73, 0xcd, - 0x44, 0xd0, 0xb6, 0x58, 0x57, 0xe6, 0x4b, 0x5c, 0xb1, 0x3c, 0x13, 0x46, 0xb2, 0x4a, 0xe0, 0x16, - 0x71, 0x9f, 0xcc, 0x6a, 0xc4, 0x57, 0x4d, 0x58, 0x31, 0x7f, 0x99, 0x60, 0x0d, 0x02, 0xb7, 0x85, - 0xba, 0x52, 0x2c, 0x59, 0xa5, 0x34, 0xa2, 0x3f, 0x2b, 0x70, 0x8c, 0x66, 0xb5, 0x2c, 0xdb, 0x2b, - 0xe8, 0xca, 0x6e, 0x01, 0xed, 0x12, 0xa4, 0x0c, 0x57, 0x89, 0x46, 0x1d, 0x48, 0x8b, 0x05, 0x39, - 0xff, 0x74, 0x1b, 0xfc, 0x5c, 0x16, 0xec, 0xe7, 0x7e, 0x59, 0xe0, 0xce, 0xee, 0xb2, 0x60, 0xed, - 0xfa, 0x65, 0xc1, 0xbe, 0x6b, 0xc5, 0xfb, 0x9c, 0xee, 0xed, 0x77, 0x15, 0x42, 0x2d, 0x7b, 0x5d, - 0x57, 0xd6, 0xa0, 0x3a, 0x29, 0xd3, 0x27, 0xa4, 0xdd, 0xd4, 0xcc, 0x48, 0xaf, 0x27, 0x0b, 0xcd, - 0xb6, 0xa5, 0xd2, 0xba, 0x8b, 0x90, 0x5e, 0x96, 0xfd, 0xed, 0xad, 0xd5, 0x95, 0x95, 0xe8, 0x55, - 0x29, 0xc3, 0xe7, 0xc8, 0xf3, 0x6c, 0x49, 0xe9, 0xbc, 0x9e, 0x18, 0xdb, 0x1b, 0xdc, 0x9b, 0x85, - 0xe6, 0xa4, 0x1d, 0xed, 0xce, 0x87, 0x1a, 0x62, 0x80, 0x9d, 0xe9, 0x13, 0xe4, 0x62, 0x7e, 0x47, - 0x9c, 0x57, 0x71, 0x14, 0xd8, 0xd9, 0x91, 0x8b, 0x0a, 0x39, 0x3b, 0x12, 0x3b, 0xe4, 0x7c, 0xea, - 0x01, 0x39, 0xbf, 0xd3, 0x95, 0x30, 0x0f, 0x38, 0xef, 0xf2, 0x07, 0xc1, 0xc0, 0xc7, 0x09, 0x35, - 0x18, 0x68, 0xd2, 0x43, 0x8c, 0x0d, 0x60, 0xe0, 0x07, 0xdf, 0xf8, 0x67, 0xfe, 0x66, 0x66, 0x97, - 0x6c, 0x3d, 0x90, 0xcf, 0xbb, 0x1f, 0xc8, 0x07, 0xd3, 0x3f, 0x90, 0xa4, 0xbb, 0xf5, 0x3c, 0x06, - 0x28, 0x12, 0xe6, 0xf2, 0x5e, 0xd6, 0xe8, 0x4a, 0xa5, 0xc4, 0x15, 0xcb, 0x4f, 0x19, 0x67, 0x3e, - 0x4b, 0xb4, 0x5d, 0x48, 0x7e, 0xd5, 0x6f, 0x3e, 0x8d, 0x43, 0x5d, 0x57, 0x87, 0x3a, 0xd8, 0xe7, - 0x5c, 0x89, 0x6e, 0xb2, 0x96, 0x7b, 0x25, 0xba, 0x89, 0xfb, 0x12, 0x66, 0x00, 0x6d, 0x0d, 0x25, - 0xbe, 0x85, 0x26, 0xd4, 0x07, 0x03, 0x01, 0xad, 0x1e, 0x26, 0x84, 0x57, 0xb3, 0x4c, 0x57, 0x96, - 0x48, 0x7c, 0xb9, 0x3c, 0x6f, 0xe4, 0x93, 0xef, 0x12, 0xbb, 0x4e, 0xb0, 0xe9, 0x92, 0x9f, 0x7e, - 0x9b, 0xda, 0xb4, 0x27, 0xd1, 0xb6, 0x2f, 0x15, 0x6d, 0x1d, 0xe9, 0x39, 0x35, 0xb2, 0xe9, 0x13, - 0xcb, 0xd8, 0xdd, 0xea, 0xc6, 0x69, 0xc7, 0x73, 0xbf, 0x87, 0x76, 0x3c, 0xef, 0x06, 0x6c, 0x48, - 0x29, 0xbd, 0x9c, 0x16, 0x8c, 0xa8, 0x97, 0x40, 0x86, 0x1b, 0x4b, 0x18, 0xea, 0xcd, 0xd9, 0x60, - 0xf0, 0x71, 0x57, 0x12, 0xcc, 0xf5, 0x36, 0x7e, 0x71, 0x0c, 0x04, 0x73, 0xa9, 0xae, 0x94, 0x10, - 0x82, 0x79, 0xde, 0xa8, 0x7b, 0x63, 0x77, 0xf1, 0x4f, 0xbf, 0x4b, 0x63, 0xde, 0xec, 0xb4, 0x18, - 0x61, 0x36, 0x2a, 0xac, 0x0e, 0xf8, 0x23, 0xcb, 0x9c, 0x26, 0xd7, 0xaa, 0xf6, 0xeb, 0xe2, 0x39, - 0xe8, 0xbe, 0x34, 0x75, 0xe1, 0xe6, 0xe2, 0x83, 0x59, 0x68, 0xa6, 0xd2, 0xd0, 0x40, 0x2a, 0xb5, - 0x06, 0xce, 0xa7, 0xe3, 0x0d, 0x6f, 0x23, 0x72, 0xc1, 0xd2, 0x54, 0x78, 0x1a, 0x91, 0x4f, 0xe6, - 0x4d, 0xc6, 0xab, 0x2b, 0xbd, 0xed, 0xc0, 0x9f, 0x73, 0xa3, 0x01, 0x57, 0x98, 0x20, 0xb0, 0x10, - 0xf3, 0xb0, 0x8a, 0x2d, 0xd3, 0x74, 0x65, 0x1d, 0xfa, 0x95, 0x94, 0x66, 0xe1, 0xf2, 0x7c, 0xe3, - 0x9b, 0x6d, 0x84, 0xa2, 0xdb, 0x71, 0xd4, 0x68, 0x3d, 0xe1, 0xb0, 0x61, 0xa7, 0xd4, 0x8e, 0xd7, - 0xc2, 0x6c, 0xb1, 0x80, 0x7b, 0xb3, 0xd0, 0x2c, 0xcf, 0x29, 0xee, 0xfc, 0x17, 0x68, 0x9d, 0xae, - 0xbc, 0x83, 0xde, 0x96, 0xd2, 0x2d, 0x5f, 0x96, 0xc6, 0xb2, 0x45, 0xa3, 0xbc, 0x42, 0xff, 0x79, - 0x1a, 0x12, 0x69, 0x18, 0xea, 0x60, 0x4b, 0x03, 0x15, 0xa0, 0xbd, 0x83, 0xc6, 0x11, 0x6b, 0x6f, - 0x02, 0x2a, 0x55, 0xba, 0xb2, 0x80, 0xc4, 0x78, 0xc6, 0xa6, 0x00, 0x73, 0xe2, 0xb1, 0xdd, 0xcc, - 0x9f, 0x23, 0xb5, 0xf3, 0x6c, 0x62, 0xdf, 0x76, 0x66, 0x10, 0x70, 0xad, 0x7c, 0x56, 0x68, 0x46, - 0x41, 0x56, 0xe1, 0x74, 0x57, 0x38, 0x69, 0x95, 0x8e, 0x2a, 0x3e, 0x8f, 0x72, 0x02, 0x96, 0x93, - 0x51, 0x09, 0x8e, 0xb3, 0x61, 0x16, 0xc8, 0x33, 0xd8, 0xc0, 0xf1, 0x81, 0x3e, 0x73, 0x54, 0xe2, - 0x66, 0x04, 0x24, 0xcb, 0x4b, 0x2a, 0x6e, 0x25, 0x6e, 0x11, 0x50, 0xbe, 0xd6, 0xe0, 0x8f, 0x60, - 0x8d, 0x1f, 0x6c, 0xe8, 0x7a, 0x5d, 0x69, 0x90, 0x58, 0xa1, 0xfc, 0x3a, 0x3c, 0x72, 0x75, 0x3e, - 0x5f, 0x9d, 0x09, 0x80, 0x87, 0x3e, 0x63, 0x8a, 0x53, 0x62, 0x27, 0xd4, 0xd5, 0x9f, 0x1c, 0xda, - 0x97, 0xfa, 0x6e, 0x37, 0xe4, 0x16, 0x22, 0xe6, 0xe5, 0xd8, 0x21, 0x09, 0x1b, 0xa2, 0x6f, 0x05, - 0xdd, 0x3e, 0x4b, 0xf8, 0x4c, 0xda, 0xf7, 0xef, 0x56, 0xd9, 0x1c, 0xe2, 0x01, 0x01, 0xa1, 0x20, - 0xcd, 0x7f, 0x10, 0x26, 0xf8, 0x47, 0x76, 0xe1, 0x1f, 0xd7, 0xf6, 0x2e, 0x62, 0x49, 0x13, 0x88, - 0x86, 0xa8, 0x52, 0x57, 0x14, 0x89, 0x1b, 0x4a, 0x7e, 0x1c, 0x22, 0xb1, 0x24, 0x8e, 0x6e, 0x37, - 0xb6, 0x6f, 0x4b, 0x5d, 0xea, 0x4e, 0x0e, 0x7e, 0x6b, 0x9c, 0x39, 0x9c, 0xdc, 0xf5, 0x0d, 0x51, - 0xd3, 0x9c, 0xdd, 0x0b, 0x6e, 0x50, 0xf0, 0x3a, 0x41, 0x0a, 0x3b, 0x95, 0x1b, 0x40, 0xfc, 0xa3, - 0x80, 0x26, 0x62, 0x0b, 0x79, 0xba, 0xb8, 0x5c, 0xbc, 0xb8, 0x27, 0xc6, 0xb0, 0xb8, 0x2a, 0xae, - 0x1b, 0x2c, 0xef, 0x4d, 0x5d, 0x79, 0x5d, 0xb2, 0x0d, 0x27, 0xbf, 0xcc, 0xa7, 0x93, 0x63, 0xb9, - 0x10, 0x88, 0x02, 0x64, 0xfb, 0x97, 0xb0, 0x79, 0x50, 0xcb, 0x67, 0x97, 0x03, 0xd3, 0x53, 0x10, - 0x9f, 0xc1, 0xf6, 0xab, 0xb6, 0x71, 0xc5, 0x7f, 0xc6, 0xa9, 0x6f, 0x82, 0x2d, 0x0d, 0x16, 0x72, - 0x25, 0xce, 0xc5, 0xb3, 0x3d, 0x96, 0x4e, 0x11, 0x3a, 0x89, 0xca, 0xe0, 0xec, 0x29, 0x6f, 0x11, - 0xcc, 0x53, 0x8f, 0xed, 0x66, 0x79, 0x44, 0x98, 0xc1, 0x46, 0xea, 0xdb, 0x93, 0x89, 0xb6, 0x0b, - 0xbc, 0x79, 0x08, 0xce, 0x37, 0x45, 0x65, 0xac, 0x34, 0x69, 0x2f, 0xc4, 0x3d, 0x20, 0x52, 0xd7, - 0xe1, 0x4f, 0xc8, 0xed, 0xbb, 0x12, 0xdd, 0x44, 0x5c, 0xf2, 0xe2, 0x03, 0x3b, 0x13, 0x7f, 0x38, - 0x96, 0xe8, 0x6d, 0x87, 0x28, 0x95, 0x89, 0xfd, 0xe7, 0xe3, 0x43, 0x3d, 0xa0, 0x93, 0x37, 0xbf, - 0x19, 0xb2, 0xbf, 0x3b, 0x97, 0x25, 0xfe, 0x06, 0x4d, 0x0c, 0x86, 0x57, 0xe2, 0xcf, 0xc0, 0x2e, - 0x59, 0xe3, 0xf0, 0x07, 0xce, 0x74, 0x7e, 0xe0, 0xaa, 0x3a, 0x1c, 0x04, 0xe1, 0x45, 0x5d, 0x79, - 0x4e, 0xb2, 0x75, 0x90, 0x4b, 0xd9, 0x67, 0xad, 0x22, 0xd0, 0xcd, 0x3e, 0x8c, 0xcf, 0x97, 0x42, - 0x70, 0x90, 0xad, 0xaf, 0xa8, 0x0b, 0x68, 0x2a, 0x99, 0x88, 0x5b, 0x42, 0x7e, 0x9a, 0x3d, 0x26, - 0x0d, 0xd7, 0x87, 0xca, 0x4d, 0x62, 0x43, 0x72, 0xf7, 0x94, 0x97, 0xb0, 0xb5, 0xf0, 0x49, 0xf6, - 0x60, 0x55, 0x26, 0xb4, 0x62, 0xd8, 0xb0, 0xad, 0xc7, 0x3d, 0x88, 0xb8, 0x53, 0x40, 0xd3, 0x98, - 0xca, 0x96, 0x5b, 0x16, 0x4a, 0x1f, 0x05, 0x01, 0x9a, 0xae, 0x0f, 0x95, 0x3f, 0xab, 0x2b, 0x4b, - 0x25, 0xaf, 0xde, 0xf2, 0x3c, 0xb6, 0x34, 0x9b, 0x79, 0x30, 0xbf, 0x16, 0xaf, 0x7e, 0xe2, 0x4b, - 0x56, 0xd6, 0x9f, 0x09, 0xd4, 0x40, 0x75, 0xb6, 0x95, 0xf5, 0x67, 0x0a, 0x7d, 0xcd, 0x3f, 0x35, - 0x06, 0x63, 0x2c, 0x0d, 0x43, 0x56, 0xe1, 0x74, 0x2b, 0xe7, 0xcf, 0x0a, 0x34, 0x09, 0x1f, 0x7a, - 0x2d, 0x75, 0x83, 0x9c, 0x48, 0xc7, 0x79, 0x48, 0xb2, 0xd7, 0xc8, 0x22, 0xa4, 0x77, 0x83, 0xeb, - 0x0d, 0xc4, 0xa7, 0x6a, 0x6f, 0x22, 0x46, 0x05, 0x94, 0x57, 0x0f, 0x61, 0x3c, 0xc0, 0x04, 0xe5, - 0x3d, 0x5d, 0xd1, 0x24, 0x52, 0x24, 0xbf, 0x09, 0xd7, 0xcc, 0xe8, 0xdb, 0x9f, 0x38, 0xf3, 0xc7, - 0xd2, 0xa2, 0xf8, 0xa5, 0x43, 0x46, 0xdf, 0x81, 0x91, 0xe8, 0xe6, 0x91, 0xd6, 0x4e, 0xa3, 0x7b, - 0x6b, 0xf2, 0x54, 0x27, 0x1e, 0xcc, 0x44, 0x6a, 0x5c, 0x10, 0x8f, 0x52, 0x12, 0xda, 0x0b, 0x92, - 0xe5, 0xe0, 0x48, 0x92, 0xc1, 0x96, 0x86, 0xa2, 0xf7, 0xc3, 0xc1, 0x40, 0xea, 0xd4, 0xe7, 0x89, - 0xc3, 0xdd, 0x04, 0x76, 0xc9, 0x24, 0xe2, 0x6b, 0xf6, 0xc4, 0x57, 0x93, 0xa9, 0xe4, 0xa4, 0xd4, - 0x9e, 0xda, 0xea, 0x01, 0x48, 0x67, 0x05, 0x89, 0x7a, 0xfa, 0x4f, 0x26, 0x07, 0xb7, 0xc5, 0x07, - 0x77, 0x26, 0x07, 0x3b, 0xa9, 0x8e, 0x9b, 0xcf, 0x72, 0xb5, 0xc2, 0xe6, 0x3a, 0x08, 0xa6, 0x2a, - 0x98, 0x32, 0xe3, 0x5d, 0x07, 0xe7, 0x64, 0x30, 0x31, 0xb7, 0xb9, 0x0b, 0x56, 0xa3, 0x3c, 0x2d, - 0x80, 0x9f, 0x83, 0x02, 0x2a, 0x6d, 0x5b, 0x24, 0x91, 0x22, 0x79, 0x3e, 0x78, 0x97, 0x26, 0xdb, - 0xdb, 0x88, 0xb5, 0x3c, 0x79, 0x6e, 0x0f, 0x12, 0x37, 0xaa, 0xae, 0xfe, 0xd4, 0xa9, 0x4d, 0x2a, - 0x69, 0x2d, 0xfe, 0x8e, 0xa5, 0x91, 0xc3, 0xae, 0x17, 0x53, 0xbd, 0x75, 0x05, 0x18, 0x67, 0xd6, - 0x58, 0xed, 0x88, 0x4b, 0x25, 0xd7, 0x53, 0x7e, 0xd4, 0x1b, 0xfb, 0x60, 0xab, 0x64, 0xfe, 0x30, - 0x54, 0xbe, 0x97, 0xf8, 0x3e, 0xca, 0x37, 0x37, 0x1d, 0xcf, 0x2d, 0xe2, 0xb9, 0x1f, 0xf4, 0x9c, - 0x1b, 0x02, 0xaa, 0x58, 0xe1, 0xfb, 0x59, 0x2f, 0x79, 0xae, 0x63, 0xde, 0x78, 0x6c, 0xb7, 0x6d, - 0x3a, 0xd6, 0xd2, 0xbc, 0x77, 0x13, 0x9b, 0x1b, 0x7d, 0x91, 0x77, 0x83, 0xa1, 0x26, 0x3c, 0xe1, - 0xb4, 0x31, 0x3f, 0x13, 0xb5, 0x5c, 0x37, 0x78, 0x26, 0xf0, 0x96, 0xdb, 0x86, 0x93, 0xe7, 0xd2, - 0xf4, 0x9d, 0x24, 0x25, 0x93, 0x03, 0x0a, 0x55, 0x5b, 0xeb, 0xd9, 0x6f, 0xa0, 0x29, 0x8e, 0x97, - 0xf1, 0xe6, 0xa5, 0x24, 0x7a, 0x0b, 0x4d, 0x75, 0x3d, 0x6c, 0x37, 0x6f, 0xf4, 0x17, 0xd1, 0x54, - 0xd7, 0x7e, 0x5c, 0x97, 0x91, 0x01, 0x89, 0x4c, 0xe9, 0x41, 0x8b, 0xc9, 0x53, 0x01, 0xd1, 0x90, - 0x3b, 0x45, 0xa2, 0xee, 0x11, 0x3a, 0xea, 0xb2, 0x80, 0xe9, 0xa1, 0xcb, 0x82, 0x0d, 0xc7, 0x9b, - 0xf5, 0x80, 0x88, 0x8a, 0xbf, 0x15, 0xd0, 0x34, 0xdb, 0x98, 0x77, 0x85, 0x0a, 0xb0, 0xf8, 0x5f, - 0x4e, 0xa3, 0x41, 0x64, 0x6d, 0x64, 0xe9, 0xab, 0x4e, 0xb2, 0xf4, 0x31, 0x1c, 0xcd, 0x9e, 0x94, - 0x8d, 0x42, 0x94, 0xb2, 0xbc, 0x6c, 0x84, 0x04, 0x7d, 0xce, 0x46, 0x82, 0x2e, 0x18, 0x9d, 0x04, - 0x25, 0x03, 0xdc, 0x7d, 0x14, 0xa8, 0x7b, 0x27, 0xef, 0x20, 0x0a, 0xd4, 0x63, 0x71, 0xf7, 0x28, - 0xd0, 0x7b, 0x14, 0xe8, 0x4f, 0x9b, 0x02, 0x7d, 0xd6, 0x0a, 0xe1, 0x3d, 0x81, 0x2a, 0x20, 0xd3, - 0x84, 0xf0, 0x1e, 0x17, 0xca, 0x2d, 0xc8, 0xb2, 0xe5, 0x84, 0xbf, 0x47, 0x7c, 0xde, 0x6a, 0xe2, - 0xf3, 0x6d, 0x07, 0xf1, 0x59, 0xa5, 0x2b, 0xe5, 0x8c, 0xf8, 0x5c, 0x3a, 0x16, 0xe2, 0x73, 0x01, - 0x98, 0xf8, 0x60, 0x8f, 0xf0, 0xb6, 0x7d, 0xd8, 0xb1, 0xbb, 0xe4, 0x1e, 0x41, 0x9a, 0x9e, 0x20, - 0xf5, 0x78, 0x35, 0xee, 0x11, 0xa4, 0x37, 0x93, 0x20, 0x25, 0xd9, 0x11, 0xa7, 0xc3, 0x46, 0x93, - 0xc7, 0x86, 0x92, 0xa4, 0x24, 0xef, 0x2d, 0x38, 0x65, 0xbb, 0x69, 0x52, 0x8a, 0x89, 0x8a, 0xb7, - 0x67, 0xa1, 0x69, 0xb6, 0x93, 0xba, 0x3b, 0x0c, 0xd0, 0x5e, 0xb3, 0x59, 0xe0, 0xcc, 0xf0, 0x04, - 0x76, 0x9b, 0xd5, 0x0d, 0x4b, 0x72, 0x09, 0xd9, 0xee, 0xf8, 0x70, 0x8b, 0xa0, 0x3e, 0x28, 0xfe, - 0x0b, 0x01, 0x89, 0x54, 0x93, 0xc8, 0x11, 0xb4, 0x6f, 0x3b, 0x09, 0xda, 0x8a, 0xeb, 0x20, 0x68, - 0x47, 0x97, 0xb2, 0x16, 0xa2, 0x71, 0xfe, 0xf0, 0xb2, 0x60, 0xa8, 0x1e, 0xf6, 0x2d, 0x5f, 0xa5, - 0x3f, 0xcb, 0xca, 0x74, 0xe5, 0x69, 0xf4, 0xa4, 0xe4, 0xb1, 0x26, 0x79, 0x06, 0x89, 0x43, 0x4a, - 0xbf, 0xc3, 0x79, 0xbe, 0xf8, 0x54, 0x6d, 0xfd, 0x7e, 0xa4, 0xa7, 0x6a, 0x5c, 0xf8, 0x03, 0x0b, - 0xb9, 0xe1, 0x7d, 0xaa, 0xbd, 0x02, 0x8e, 0x79, 0x6e, 0x3b, 0xd2, 0x95, 0xce, 0x23, 0x7d, 0xdc, - 0x5c, 0x1a, 0x3b, 0xd2, 0x09, 0x5c, 0xa0, 0xab, 0x31, 0x1c, 0x21, 0x3d, 0x28, 0xe7, 0x34, 0x56, - 0x90, 0xca, 0x0b, 0xf1, 0xe1, 0x4f, 0xbc, 0x2f, 0x62, 0xf1, 0x9f, 0x67, 0xa1, 0x02, 0xab, 0xdf, - 0xdd, 0x71, 0x4a, 0xaf, 0x8e, 0xe5, 0x94, 0xc6, 0x98, 0x07, 0xb1, 0x6c, 0x99, 0xae, 0x54, 0x20, - 0x45, 0x72, 0x6d, 0x82, 0x3c, 0x03, 0x76, 0xcf, 0x82, 0xf1, 0xcc, 0x5a, 0x92, 0x64, 0x0e, 0x2a, - 0x00, 0xc5, 0x1f, 0x77, 0xd0, 0xaf, 0x38, 0x0f, 0x7a, 0xc9, 0x75, 0xdc, 0xdd, 0x9c, 0x10, 0xc8, - 0x0b, 0xc9, 0x45, 0x7d, 0xc2, 0xc6, 0x8b, 0x16, 0x8d, 0xc6, 0x8b, 0xde, 0x51, 0x3c, 0xe8, 0x63, - 0x96, 0xb4, 0x14, 0x54, 0xeb, 0x38, 0x53, 0x11, 0x93, 0x96, 0x8e, 0x67, 0x72, 0x52, 0x4b, 0x3c, - 0xfa, 0x98, 0x33, 0x43, 0xcd, 0xac, 0x34, 0xe4, 0x6d, 0x06, 0xa2, 0x36, 0xef, 0x7b, 0x10, 0xb5, - 0x65, 0xfb, 0x04, 0x5d, 0xd1, 0x05, 0xd4, 0x25, 0x48, 0xae, 0x73, 0x95, 0x7f, 0xe3, 0x84, 0x0d, - 0x6a, 0xb8, 0x4d, 0xe2, 0xb4, 0xe3, 0xe8, 0x01, 0xf1, 0xd8, 0xb6, 0xe4, 0xa7, 0x67, 0x4c, 0xee, - 0x18, 0x53, 0xbe, 0xc0, 0x9f, 0x25, 0x07, 0xb7, 0x1a, 0xdd, 0x6d, 0x50, 0x4e, 0x76, 0x19, 0x0f, - 0x65, 0xf5, 0x6d, 0x3d, 0x0d, 0x1c, 0x9e, 0xd1, 0x76, 0x30, 0x3e, 0x10, 0xa3, 0x57, 0xf8, 0xf4, - 0xc8, 0xf6, 0x2e, 0xe2, 0x86, 0xf1, 0x5d, 0x16, 0x9a, 0xca, 0xad, 0xe8, 0xee, 0xb8, 0xb3, 0x2f, - 0xdb, 0x14, 0xf0, 0x69, 0xee, 0x2c, 0x6f, 0xaa, 0x0d, 0x77, 0xd6, 0x68, 0xfb, 0xc6, 0xc4, 0xac, - 0xfc, 0x85, 0x7d, 0x49, 0x57, 0x9e, 0x47, 0xcf, 0x4a, 0xee, 0x2d, 0x18, 0xeb, 0x8d, 0x2d, 0xfe, - 0x7a, 0x1a, 0x9a, 0x09, 0x02, 0x2f, 0xc6, 0xa2, 0xd1, 0x0b, 0xbb, 0x94, 0x5c, 0x32, 0x81, 0x06, - 0xd2, 0x9b, 0x45, 0x2e, 0x19, 0x71, 0x1f, 0xc3, 0xc7, 0x07, 0xa2, 0x1e, 0x30, 0x95, 0xfc, 0xff, - 0x04, 0x72, 0xd1, 0xfe, 0xd4, 0xad, 0xe9, 0xf6, 0xe9, 0xca, 0x0b, 0xbc, 0xa6, 0xfb, 0x31, 0x36, - 0x46, 0xa2, 0x3d, 0xca, 0xc2, 0x2f, 0xb3, 0x50, 0x6f, 0x38, 0xc8, 0x5a, 0x7c, 0x20, 0x66, 0x5e, - 0x32, 0x5b, 0xd6, 0xdd, 0xac, 0x31, 0x65, 0xdd, 0x7d, 0x9b, 0x39, 0xb8, 0x66, 0x5b, 0xea, 0x58, - 0xea, 0xe0, 0x3a, 0xd7, 0x3d, 0x35, 0x78, 0xb2, 0x51, 0x73, 0x2f, 0xf3, 0x95, 0x11, 0x0a, 0x8b, - 0xdc, 0xaf, 0x0c, 0x75, 0x71, 0x7d, 0x17, 0x4d, 0x01, 0x56, 0x43, 0x69, 0x89, 0x04, 0xc3, 0x38, - 0x26, 0x4b, 0x0e, 0x3e, 0xfc, 0xe7, 0x74, 0xe5, 0x19, 0xc9, 0x59, 0x27, 0x3f, 0x42, 0x90, 0xc7, - 0x50, 0xd4, 0xe8, 0xee, 0xe7, 0x19, 0x5b, 0xe6, 0x54, 0x49, 0x22, 0x68, 0x39, 0x3a, 0x8a, 0x1b, - 0xd1, 0x04, 0x1a, 0x68, 0xc5, 0x1f, 0x58, 0x9f, 0xce, 0x0a, 0x5f, 0xb1, 0x9a, 0x40, 0xe4, 0x6d, - 0x6c, 0x44, 0xca, 0xf7, 0x94, 0x0b, 0x6d, 0x5e, 0xd8, 0xf0, 0x06, 0x62, 0x32, 0xfe, 0x5a, 0x79, - 0xee, 0x0e, 0x21, 0xab, 0x40, 0x50, 0xf9, 0xe6, 0xe2, 0x1e, 0x01, 0x4d, 0x6e, 0xf4, 0xb5, 0x04, - 0xea, 0xdf, 0x63, 0xf1, 0xb5, 0xf3, 0xbc, 0x33, 0xaf, 0xad, 0xc0, 0xad, 0x80, 0x93, 0x69, 0x01, - 0xbb, 0x82, 0xf2, 0xe5, 0xba, 0xf2, 0x9c, 0xe4, 0xe8, 0x2f, 0x4b, 0x30, 0x77, 0x62, 0xff, 0x79, - 0xc0, 0x6f, 0xb0, 0x08, 0xf0, 0x06, 0x66, 0x4c, 0x05, 0x80, 0x2a, 0x5b, 0x93, 0x63, 0x0c, 0x71, - 0x23, 0xf3, 0xb3, 0x1d, 0x97, 0x49, 0x75, 0xec, 0x04, 0x64, 0x9b, 0xcb, 0x2d, 0xf6, 0x0b, 0xa4, - 0x2e, 0xb7, 0x0f, 0x98, 0x54, 0xa8, 0xdd, 0x21, 0x19, 0xd7, 0x38, 0xbc, 0x6f, 0x37, 0x0b, 0xcc, - 0xfd, 0x36, 0xff, 0xba, 0x26, 0xc6, 0x5e, 0xb9, 0x64, 0x62, 0x70, 0x83, 0x26, 0xbe, 0xb9, 0x25, - 0xee, 0x89, 0x93, 0x3d, 0x5b, 0x13, 0x67, 0x8f, 0x31, 0xf7, 0xb8, 0x05, 0x46, 0xec, 0x88, 0x31, - 0xb4, 0xa5, 0x84, 0x39, 0xee, 0xbe, 0x0b, 0xa1, 0x0e, 0x56, 0xd5, 0x11, 0xb3, 0x59, 0x1c, 0x20, - 0x8e, 0x14, 0xc9, 0x0a, 0x1b, 0x6f, 0x24, 0xda, 0x0e, 0xcc, 0x37, 0x04, 0x13, 0x5f, 0x55, 0x87, - 0x65, 0x65, 0x9b, 0x93, 0xad, 0xa7, 0x4c, 0x86, 0x92, 0xbc, 0x4b, 0x7d, 0xb0, 0xdd, 0xe6, 0xbe, - 0x53, 0x9f, 0x5e, 0x95, 0x0c, 0xc5, 0x2b, 0xf3, 0xd0, 0x8d, 0x29, 0xf3, 0x4e, 0x0a, 0x5c, 0x3c, - 0x53, 0x5b, 0xd4, 0x48, 0x2b, 0xa2, 0xe9, 0x47, 0x6c, 0xaf, 0x48, 0xd0, 0xd2, 0xef, 0x0e, 0xa5, - 0xfe, 0xb8, 0x0f, 0x08, 0x47, 0xf2, 0x10, 0xed, 0xbb, 0x98, 0x38, 0xd6, 0xc6, 0x44, 0x94, 0xf0, - 0x13, 0x5e, 0x8c, 0xf8, 0xc0, 0x2e, 0x10, 0xa3, 0x5c, 0x89, 0x6e, 0x66, 0x31, 0x21, 0x79, 0x39, - 0x60, 0xea, 0xe4, 0x26, 0x10, 0xef, 0x99, 0x25, 0x97, 0x5a, 0x47, 0x8e, 0x0d, 0x26, 0x0e, 0xf4, - 0x13, 0x0f, 0x55, 0x2e, 0x04, 0xea, 0x7b, 0x08, 0xd5, 0x07, 0x03, 0xe1, 0x96, 0x26, 0x2e, 0xee, - 0x1e, 0x16, 0x9a, 0x71, 0xc5, 0xf2, 0xd3, 0xd6, 0xdf, 0x10, 0xb4, 0x3d, 0xa4, 0x85, 0x83, 0x2d, - 0xa1, 0x7a, 0x0d, 0xc4, 0x4f, 0x21, 0xb0, 0x44, 0x4f, 0xee, 0x39, 0x97, 0xea, 0xbf, 0x90, 0xfa, - 0xe3, 0xd6, 0x44, 0xac, 0x1b, 0xe4, 0x1f, 0x2a, 0x37, 0x88, 0xf8, 0xbe, 0x23, 0x5a, 0xfd, 0xb4, - 0x31, 0x44, 0xab, 0xc7, 0xd6, 0x46, 0xf6, 0x68, 0xf5, 0x33, 0x2c, 0xc4, 0x8b, 0x0f, 0x1b, 0x3e, - 0xd2, 0x1e, 0x93, 0x5e, 0xfc, 0x10, 0xe5, 0x44, 0x7c, 0xeb, 0xc3, 0x85, 0xd3, 0x31, 0xa8, 0x2e, - 0x19, 0x33, 0xa8, 0xae, 0x27, 0x80, 0x2a, 0xeb, 0xca, 0x62, 0x09, 0x0f, 0x21, 0x3f, 0xea, 0x09, - 0xa6, 0xf0, 0x95, 0x36, 0x3f, 0x75, 0xdc, 0x5c, 0xfc, 0xa3, 0xc0, 0xb9, 0x20, 0x63, 0x41, 0x11, - 0xf8, 0x54, 0xef, 0x12, 0x74, 0x65, 0x87, 0x20, 0xd9, 0xeb, 0xe4, 0x8f, 0x98, 0x13, 0x32, 0x89, - 0x80, 0x15, 0x08, 0x86, 0x9a, 0x7c, 0x8d, 0x8b, 0xb5, 0x0f, 0x23, 0x5a, 0x28, 0xe0, 0x6b, 0x2c, - 0xb9, 0x12, 0xdd, 0x9c, 0x38, 0x78, 0x66, 0x24, 0xda, 0xc3, 0x23, 0x2f, 0xcb, 0x73, 0x59, 0xef, - 0x48, 0x7e, 0xfd, 0x75, 0x7c, 0xa0, 0x3d, 0xb1, 0xef, 0xa2, 0x67, 0x83, 0xd2, 0x22, 0xa3, 0xf3, - 0x5c, 0xc5, 0xda, 0x95, 0xa4, 0xa0, 0x6d, 0x1f, 0xcb, 0x30, 0xa2, 0xda, 0x57, 0x62, 0x77, 0x77, - 0x9e, 0x79, 0x5d, 0xee, 0xce, 0xd5, 0x84, 0xcc, 0x52, 0x42, 0x9a, 0x0f, 0x7b, 0x1f, 0xcf, 0xe2, - 0x9c, 0xae, 0x6d, 0x35, 0xf2, 0x14, 0x36, 0x04, 0x75, 0xba, 0xb6, 0xd5, 0x9b, 0x58, 0x86, 0x64, - 0x21, 0x2f, 0xf4, 0x8e, 0x02, 0x87, 0x17, 0xcc, 0x82, 0xa0, 0x95, 0xaf, 0xd0, 0x95, 0x6a, 0x9a, - 0x83, 0xfc, 0x25, 0x6b, 0x5b, 0xf0, 0xc5, 0xc4, 0xa5, 0x54, 0x78, 0xe8, 0x70, 0x4f, 0x06, 0x29, - 0x4e, 0x7c, 0xe0, 0x4b, 0x93, 0xe6, 0xeb, 0xd8, 0x67, 0x74, 0x6d, 0x4e, 0xec, 0xfd, 0x86, 0xa6, - 0x28, 0x7f, 0x1f, 0x4d, 0x0e, 0x06, 0x1a, 0x49, 0xa6, 0x7d, 0x2c, 0x50, 0xba, 0x0f, 0x3f, 0x6c, - 0x38, 0x75, 0x82, 0xa3, 0x4a, 0x5e, 0x68, 0xff, 0x1d, 0x1f, 0x6c, 0x85, 0xb4, 0x5e, 0xe0, 0xf2, - 0x50, 0x1a, 0x1f, 0xe8, 0x4c, 0xb4, 0x9f, 0x4a, 0x1d, 0xeb, 0x00, 0x89, 0xb2, 0xea, 0xe8, 0xfe, - 0x7d, 0x7c, 0x94, 0x9f, 0x41, 0x13, 0x38, 0xdc, 0x7a, 0x5d, 0x5d, 0x9f, 0x46, 0xe3, 0x19, 0xac, - 0x5f, 0x97, 0x84, 0x67, 0xb3, 0xa0, 0x2b, 0x7f, 0x8a, 0x7e, 0x27, 0xa5, 0x21, 0x97, 0xe4, 0x19, - 0x04, 0x27, 0xd2, 0x2b, 0x4a, 0xd9, 0x4b, 0xa2, 0x71, 0xb4, 0xe5, 0xc1, 0x03, 0x3a, 0xe2, 0xb2, - 0xc0, 0xbf, 0xba, 0x97, 0x05, 0xc7, 0x7b, 0x67, 0xa9, 0x25, 0x2f, 0x0b, 0x04, 0x3b, 0x17, 0x37, - 0xa0, 0xc9, 0x76, 0x30, 0x10, 0x67, 0x73, 0xc8, 0x16, 0xbe, 0xc3, 0x42, 0x70, 0x33, 0x51, 0x5e, - 0x73, 0x30, 0xd8, 0x48, 0x89, 0x30, 0x95, 0xfc, 0x12, 0xe7, 0x22, 0x04, 0xa2, 0x5d, 0x2b, 0x7e, - 0x8d, 0xca, 0x95, 0x14, 0x77, 0x66, 0xa3, 0x59, 0xae, 0xaf, 0xbc, 0x3b, 0x68, 0xeb, 0xd7, 0x6d, - 0xfc, 0xf0, 0xcf, 0x46, 0xc5, 0x7e, 0xf0, 0x55, 0x95, 0xbe, 0x88, 0x6f, 0x94, 0x8c, 0xb1, 0xe2, - 0x47, 0x37, 0xee, 0x16, 0x89, 0x93, 0x93, 0xba, 0xdc, 0x22, 0x0b, 0x6d, 0x01, 0x1b, 0x33, 0xf8, - 0x44, 0x16, 0xff, 0x85, 0x80, 0xe6, 0x64, 0x58, 0xb9, 0xf8, 0x3a, 0x1a, 0xcf, 0x30, 0x1a, 0x09, - 0x66, 0x97, 0x21, 0x31, 0x0b, 0x8e, 0x3a, 0x62, 0x75, 0xe0, 0xa2, 0x41, 0xd0, 0xe4, 0x94, 0xac, - 0x4e, 0xac, 0x35, 0x1f, 0x93, 0xf0, 0x06, 0x22, 0x4d, 0x9d, 0xee, 0x0e, 0x3b, 0x12, 0xde, 0x40, - 0x64, 0x40, 0x66, 0x33, 0x79, 0x0e, 0x7f, 0x07, 0x70, 0x78, 0x89, 0x5d, 0x46, 0xd7, 0x37, 0x10, - 0xfe, 0x40, 0xc5, 0x4d, 0x8a, 0xff, 0xbb, 0x88, 0x66, 0x5a, 0xc9, 0x3d, 0x6d, 0x0c, 0xc7, 0x32, - 0x7b, 0x3c, 0x1e, 0xc1, 0x0a, 0xe0, 0x6d, 0x8b, 0xc7, 0x33, 0x81, 0x5d, 0x31, 0x6a, 0x2e, 0x3f, - 0xdd, 0x1e, 0x59, 0xe7, 0xb6, 0xb3, 0x1f, 0x8b, 0x08, 0xe7, 0x04, 0xcc, 0xc7, 0xec, 0xf4, 0x9c, - 0x13, 0xe1, 0x97, 0x2a, 0x1c, 0xb1, 0xd8, 0x7f, 0x76, 0x1d, 0xec, 0x0a, 0x63, 0x4a, 0x36, 0x0b, - 0x6e, 0xae, 0x24, 0x97, 0x28, 0x09, 0x9d, 0x81, 0x0d, 0xcb, 0x83, 0xc1, 0xc6, 0xb5, 0x26, 0x66, - 0xbb, 0xd9, 0x1c, 0x4b, 0xc0, 0xce, 0xb1, 0xe4, 0x8d, 0x91, 0x63, 0x91, 0xc6, 0xce, 0xb1, 0xd8, - 0x39, 0x95, 0x0e, 0x37, 0xa7, 0x32, 0x6e, 0xec, 0x9c, 0xca, 0x8b, 0xdf, 0x93, 0x53, 0x71, 0x71, - 0x28, 0x4e, 0x3a, 0x2f, 0xff, 0x07, 0xa4, 0xf3, 0x2c, 0x6e, 0x68, 0x7c, 0x26, 0x33, 0x86, 0x9b, - 0xce, 0x0d, 0x7d, 0xcc, 0x98, 0x21, 0x74, 0x5d, 0xf3, 0xf2, 0xcc, 0x10, 0x46, 0x88, 0x94, 0x19, - 0x9a, 0x37, 0x2a, 0x33, 0xc4, 0x98, 0x20, 0x4a, 0xdb, 0x4e, 0xf0, 0xa6, 0x6d, 0xd3, 0xce, 0xfc, - 0xfd, 0x69, 0x5b, 0x8b, 0xfd, 0x9a, 0xf8, 0x43, 0xb3, 0x5f, 0x54, 0xd4, 0x37, 0x89, 0x63, 0xbf, - 0xa8, 0xa8, 0x8f, 0xb0, 0x5f, 0x9c, 0x3e, 0x9b, 0xb1, 0x5f, 0x54, 0xf2, 0x67, 0x63, 0xbf, 0x26, - 0xdf, 0x35, 0xec, 0xd7, 0x94, 0x1f, 0x90, 0xfd, 0x2a, 0x43, 0x39, 0x0d, 0x5a, 0xb8, 0x9e, 0x68, - 0x9b, 0x89, 0xce, 0x42, 0x0b, 0xd7, 0x53, 0x4d, 0x94, 0x85, 0x61, 0xb1, 0x46, 0x9c, 0x89, 0xd8, - 0xb4, 0x70, 0xbd, 0xf9, 0xb6, 0x5a, 0xcc, 0xc1, 0x54, 0x72, 0x9f, 0x9d, 0xf8, 0x74, 0x4d, 0x75, - 0x20, 0xf2, 0xb8, 0x0c, 0x18, 0x15, 0xc7, 0xe1, 0xe3, 0x58, 0x87, 0x89, 0x8c, 0xee, 0x2f, 0xb2, - 0xf3, 0x0e, 0xeb, 0x9d, 0xbc, 0x83, 0x98, 0x66, 0xf4, 0xba, 0x48, 0xc8, 0x1f, 0x58, 0x0f, 0xa3, - 0xdf, 0x08, 0x67, 0x41, 0x88, 0x7a, 0xb8, 0x1d, 0x44, 0x4b, 0x6c, 0x27, 0xea, 0xad, 0x2a, 0x20, - 0xea, 0xad, 0xdf, 0xf1, 0xc1, 0x56, 0x92, 0xb5, 0x3b, 0x03, 0x51, 0x6f, 0x35, 0x17, 0x3f, 0x40, - 0xe3, 0x35, 0x16, 0x85, 0x7b, 0xba, 0x77, 0x14, 0xee, 0x34, 0xd7, 0xd4, 0x11, 0x85, 0x1b, 0x87, - 0x83, 0xb1, 0x06, 0x63, 0x41, 0xa0, 0xce, 0x1e, 0x25, 0x36, 0x4c, 0x26, 0xa5, 0xc2, 0xaa, 0xef, - 0x32, 0x6e, 0x62, 0xf6, 0x73, 0x68, 0xf2, 0xa8, 0x31, 0xb7, 0xd3, 0xf3, 0x22, 0x4f, 0xe8, 0xca, - 0x63, 0x68, 0xb1, 0x94, 0x86, 0x90, 0x92, 0x67, 0xc0, 0x91, 0xb1, 0x72, 0x60, 0x45, 0x8a, 0xb7, - 0x67, 0xa3, 0x59, 0xae, 0x1e, 0x77, 0x07, 0x59, 0xaf, 0xda, 0xc8, 0xfa, 0x0c, 0xc4, 0x2d, 0x9f, - 0x6e, 0x9b, 0xa9, 0x99, 0x4d, 0xdc, 0x8a, 0xf3, 0x06, 0xf2, 0xc2, 0xf3, 0xdb, 0x49, 0xd0, 0x6f, - 0xcd, 0x47, 0x33, 0x41, 0x25, 0xec, 0x22, 0x82, 0x7f, 0xe1, 0x45, 0x04, 0x3f, 0x3d, 0x0a, 0x11, - 0x9c, 0x56, 0x2f, 0x6a, 0xa3, 0x8b, 0xff, 0x95, 0xe0, 0xd0, 0x6f, 0x97, 0x7f, 0x29, 0xe8, 0xca, - 0x49, 0x41, 0xa2, 0xa5, 0x72, 0x8f, 0x60, 0x0c, 0xc5, 0x8c, 0xb6, 0xf3, 0xa0, 0xc7, 0x85, 0x4c, - 0x91, 0x89, 0x9d, 0x5f, 0x27, 0x06, 0x5a, 0x93, 0xdd, 0xdb, 0x2c, 0x79, 0x0d, 0xb6, 0xc7, 0x32, - 0xdf, 0xe8, 0xde, 0x98, 0x71, 0xf0, 0xf4, 0x95, 0xe8, 0x66, 0xc8, 0x5f, 0x08, 0xf8, 0x17, 0xfa, - 0xa6, 0x86, 0xbf, 0x36, 0x5a, 0x4f, 0x00, 0xfd, 0x4f, 0xbc, 0x7e, 0xf7, 0x5e, 0x02, 0x46, 0xc0, - 0xe8, 0xbf, 0x68, 0xb4, 0xed, 0xb7, 0xf2, 0xb9, 0x0c, 0xf5, 0xc0, 0x91, 0x9b, 0xcc, 0x04, 0x79, - 0xde, 0xf6, 0x5d, 0x8c, 0x7f, 0x77, 0x29, 0x79, 0xec, 0x4c, 0xea, 0xcc, 0xf1, 0xd4, 0xa5, 0x4f, - 0x8d, 0xd8, 0xc9, 0x2b, 0xd1, 0xcd, 0x4c, 0x19, 0x2f, 0xfe, 0x85, 0x80, 0x66, 0x84, 0x34, 0xec, - 0x5f, 0x6b, 0x8f, 0x2f, 0x4b, 0xe0, 0x49, 0x17, 0x74, 0x65, 0x97, 0x20, 0x79, 0xb7, 0x91, 0x5b, - 0xe2, 0x97, 0x0e, 0x25, 0xf7, 0x1e, 0x24, 0xf1, 0x62, 0x7a, 0x4f, 0xd3, 0xb4, 0x2f, 0x7d, 0x57, - 0x87, 0x3a, 0xe2, 0x83, 0xad, 0x64, 0xf9, 0xf4, 0x5b, 0x4d, 0x66, 0xe0, 0xd4, 0xe7, 0xac, 0x24, - 0x3e, 0xb0, 0xcb, 0x62, 0x6e, 0x30, 0x2d, 0x6e, 0x7e, 0xfd, 0xf0, 0x27, 0xf1, 0x81, 0x3d, 0x58, - 0xfc, 0xf1, 0x09, 0xbf, 0x7f, 0x89, 0xfd, 0xe7, 0x93, 0x7b, 0x8e, 0x24, 0xf6, 0xb6, 0x99, 0xab, - 0xf7, 0x5e, 0x8d, 0x38, 0x2c, 0xa0, 0xa9, 0x1b, 0x34, 0xad, 0x99, 0x14, 0x43, 0x98, 0x49, 0xa2, - 0x4d, 0x20, 0x72, 0x33, 0x77, 0xbd, 0xdc, 0x42, 0x56, 0x33, 0xb8, 0x8b, 0xc6, 0xef, 0x1e, 0x84, - 0xf3, 0x22, 0x27, 0x85, 0x0f, 0xc2, 0xfc, 0x9e, 0xe1, 0x6d, 0xf1, 0x81, 0xce, 0x91, 0x3d, 0xd1, - 0x44, 0xff, 0x26, 0x38, 0x2c, 0xb3, 0x10, 0x7f, 0x3f, 0xfc, 0x84, 0xc4, 0xaa, 0x63, 0xfd, 0x06, - 0xf7, 0x4a, 0xc4, 0xe7, 0xb9, 0xb4, 0x2c, 0xb9, 0x56, 0xec, 0x0f, 0x2b, 0x2d, 0xcb, 0x78, 0x96, - 0x96, 0xc5, 0xf2, 0xa3, 0xb7, 0xb2, 0xa8, 0x90, 0xa7, 0x09, 0xee, 0x02, 0xc9, 0xdc, 0x60, 0x7f, - 0x9a, 0xac, 0x2a, 0x78, 0x9a, 0xac, 0xdf, 0xec, 0xb0, 0x32, 0x3d, 0x4d, 0x56, 0xf3, 0xb2, 0x2e, - 0x41, 0x57, 0x76, 0x0a, 0xa8, 0x4d, 0x90, 0xd2, 0xdc, 0x3d, 0x79, 0x0d, 0x8c, 0xc7, 0xca, 0x93, - 0x9f, 0x0e, 0x18, 0xad, 0xe7, 0x2c, 0x9b, 0xd3, 0xe1, 0x4f, 0x2c, 0x94, 0x7a, 0xe9, 0x40, 0xa2, - 0xb7, 0xdd, 0xe8, 0xea, 0x67, 0x97, 0xc1, 0xac, 0x4a, 0xec, 0x3f, 0x8f, 0x55, 0x9b, 0xe6, 0x28, - 0x10, 0x9d, 0xef, 0x4a, 0x74, 0xf3, 0x65, 0x81, 0xbf, 0x85, 0x97, 0x05, 0xf6, 0xf5, 0x58, 0xce, - 0xe2, 0x5a, 0xca, 0x8f, 0x42, 0xce, 0x92, 0xe6, 0xab, 0xee, 0x70, 0x39, 0xcb, 0x61, 0x16, 0x82, - 0xc1, 0x5b, 0xce, 0xd2, 0x70, 0x5d, 0x72, 0x16, 0xcc, 0xc5, 0x73, 0x72, 0x16, 0x9b, 0x81, 0x0c, - 0x6b, 0xe6, 0x96, 0xb9, 0x1c, 0x10, 0xc6, 0x20, 0x74, 0x09, 0xe8, 0xca, 0x06, 0x22, 0x74, 0xa9, - 0x77, 0x42, 0x6d, 0xcf, 0x56, 0x5e, 0xee, 0x02, 0x13, 0x5c, 0x89, 0x6e, 0x26, 0x21, 0x7c, 0x1d, - 0xf7, 0x1b, 0xa7, 0xd1, 0x61, 0xe9, 0x2e, 0xe2, 0x43, 0x3d, 0xf1, 0xd8, 0xa9, 0xe4, 0x9e, 0x23, - 0x8e, 0xbe, 0x44, 0x78, 0xf3, 0xe7, 0x02, 0xcb, 0x5f, 0x6f, 0x7b, 0xb4, 0x36, 0x7a, 0x3d, 0x5a, - 0xab, 0x75, 0xe5, 0x69, 0xfb, 0xa3, 0xb5, 0x80, 0x0f, 0x9d, 0x6c, 0x62, 0xd6, 0xed, 0x5f, 0x1a, - 0x83, 0xb1, 0xea, 0x4a, 0x30, 0x8a, 0x67, 0x89, 0xeb, 0xc6, 0xfc, 0xa2, 0x95, 0x3d, 0xad, 0x2b, - 0x4f, 0x20, 0x59, 0xf2, 0x5a, 0x93, 0x3c, 0x07, 0x34, 0xe0, 0x8e, 0x8d, 0x26, 0xa4, 0xd0, 0x7f, - 0xc8, 0x46, 0xd3, 0xed, 0x9d, 0x7e, 0xc4, 0x74, 0x10, 0x33, 0xf9, 0x71, 0x02, 0xdd, 0xed, 0xbe, - 0x70, 0x65, 0xaf, 0xe8, 0xca, 0x72, 0x54, 0x25, 0x79, 0x1e, 0xc5, 0xf5, 0x1a, 0x1d, 0x7d, 0x9e, - 0x0d, 0x41, 0x0e, 0xb9, 0x78, 0x77, 0x36, 0x18, 0xfd, 0x53, 0x77, 0x90, 0xc3, 0x5b, 0x2b, 0x15, - 0x3c, 0x28, 0xa0, 0x89, 0x20, 0x2f, 0x5b, 0xe6, 0x6f, 0x34, 0xa9, 0x15, 0xa0, 0xc1, 0x5a, 0x74, - 0x25, 0x24, 0xd9, 0x2a, 0xe4, 0x75, 0xfc, 0x2f, 0x6a, 0xe6, 0xbc, 0xff, 0x7c, 0x69, 0x51, 0xea, - 0xbb, 0x4f, 0x8c, 0xed, 0x31, 0x80, 0x89, 0x44, 0x47, 0x7b, 0xb2, 0xf5, 0x54, 0x3a, 0x41, 0x5d, - 0x62, 0x97, 0x6e, 0xc4, 0xba, 0x16, 0x40, 0x85, 0x49, 0xaa, 0xe1, 0xdf, 0x46, 0xef, 0x69, 0xa3, - 0x7b, 0xd7, 0xc8, 0xa1, 0xcf, 0x4a, 0x54, 0xdb, 0x8c, 0x65, 0xeb, 0x75, 0xa5, 0x01, 0xad, 0x93, - 0x32, 0x6d, 0xa0, 0x5c, 0x41, 0x42, 0x2c, 0x72, 0xc7, 0x9a, 0xec, 0xd9, 0xca, 0x68, 0xeb, 0xd2, - 0x22, 0xa0, 0xe7, 0xc0, 0x56, 0x9d, 0xbb, 0xa5, 0x46, 0xe7, 0x76, 0x23, 0xd6, 0x05, 0xa7, 0x57, - 0xfc, 0xf7, 0x24, 0xd8, 0xa2, 0x7b, 0x92, 0xbb, 0xe3, 0x02, 0xae, 0xb0, 0xd9, 0xee, 0x64, 0xb8, - 0x80, 0x63, 0xb1, 0xdf, 0xb9, 0x9d, 0x57, 0xef, 0x35, 0x5d, 0xa9, 0x41, 0x2b, 0xa4, 0x8c, 0x87, - 0x41, 0x71, 0x28, 0x0c, 0x64, 0xc9, 0x8c, 0xbc, 0xe3, 0x72, 0x14, 0xff, 0x75, 0x36, 0xa4, 0x2c, - 0x77, 0x5d, 0xbd, 0x45, 0x36, 0x4b, 0xa2, 0xd1, 0xe5, 0xe1, 0xef, 0xb8, 0x05, 0xf8, 0xca, 0xf7, - 0xbe, 0xaa, 0xfc, 0x55, 0xac, 0x70, 0xd8, 0x07, 0xdd, 0x90, 0xc0, 0x7d, 0x05, 0x9f, 0xad, 0x14, - 0x04, 0xf7, 0xf8, 0x50, 0xb8, 0x6c, 0xa5, 0x1e, 0x43, 0x91, 0xe4, 0xb3, 0xe4, 0xd5, 0x67, 0x4d, - 0xcb, 0xf6, 0x08, 0xba, 0xd2, 0x2d, 0xa0, 0x4e, 0x41, 0xf2, 0xdc, 0x43, 0xb9, 0x05, 0x8e, 0x82, - 0x5d, 0xb7, 0x5b, 0x64, 0x60, 0xf7, 0x97, 0x59, 0x90, 0xe4, 0xfb, 0xa7, 0x7d, 0x51, 0xcb, 0x2a, - 0x75, 0x45, 0x41, 0x2f, 0x4a, 0xde, 0x5b, 0x41, 0x5f, 0x2a, 0x8e, 0x39, 0xf0, 0x36, 0xb6, 0x4b, - 0x8e, 0x47, 0x53, 0x94, 0x86, 0x06, 0xcc, 0x41, 0x59, 0xa1, 0x43, 0x5c, 0xcf, 0x92, 0xa2, 0x2b, - 0x73, 0x79, 0x58, 0x9f, 0x0a, 0x91, 0xc6, 0x19, 0x7c, 0xd3, 0x67, 0x47, 0x18, 0xd3, 0xb3, 0x53, - 0x8d, 0x72, 0x4d, 0xa0, 0x09, 0x17, 0x66, 0xe1, 0x50, 0xd9, 0x8f, 0xeb, 0xca, 0x23, 0x12, 0x94, - 0xc8, 0x0f, 0x38, 0x06, 0x06, 0x68, 0xad, 0xae, 0x65, 0x11, 0x10, 0x75, 0x21, 0x27, 0x5f, 0x28, - 0x14, 0x54, 0x68, 0x2f, 0xfa, 0xd1, 0x54, 0x7f, 0xc0, 0x1f, 0x59, 0x11, 0x5c, 0xef, 0x0f, 0xd4, - 0xfa, 0xc2, 0xe1, 0x0f, 0x82, 0xa1, 0x06, 0x72, 0x83, 0xb0, 0x4f, 0x97, 0xbb, 0x56, 0x7e, 0x68, - 0x64, 0x7b, 0x67, 0xea, 0xf3, 0x56, 0x93, 0x8d, 0xec, 0xd9, 0x4a, 0x24, 0xed, 0x24, 0xe7, 0x83, - 0xd1, 0xd5, 0x4f, 0x12, 0x72, 0xb8, 0xfb, 0x89, 0x21, 0xaf, 0xfc, 0x52, 0xb5, 0xba, 0xb2, 0xd2, - 0x4e, 0x51, 0xbe, 0x00, 0x5f, 0x40, 0x98, 0x79, 0x0c, 0xd3, 0x90, 0x4a, 0x02, 0x42, 0xbc, 0xb0, - 0x13, 0xb9, 0x3a, 0xd4, 0x41, 0xca, 0xf1, 0x6d, 0x81, 0xab, 0x58, 0x5d, 0x69, 0x97, 0x8f, 0x5c, - 0x16, 0x5c, 0xd6, 0x0f, 0xb9, 0x18, 0xdc, 0xbe, 0x10, 0x74, 0xe5, 0x84, 0xe0, 0xb2, 0x7f, 0xd0, - 0x05, 0x93, 0x05, 0x35, 0x47, 0x3b, 0xe1, 0x88, 0x6c, 0x4e, 0x0c, 0x83, 0x0f, 0xf4, 0x63, 0x35, - 0x99, 0x49, 0x7b, 0x7b, 0x35, 0x04, 0x6e, 0x31, 0x3e, 0xd4, 0x03, 0x4f, 0x26, 0x39, 0x32, 0xc0, - 0xdd, 0x58, 0x82, 0x4b, 0x45, 0xe5, 0x00, 0x5e, 0x8e, 0x39, 0x8c, 0x8b, 0xe7, 0x41, 0xca, 0x1e, - 0x1f, 0x88, 0x91, 0x4c, 0x2a, 0x26, 0xa1, 0xee, 0x58, 0xa4, 0x8d, 0x41, 0xcf, 0x1b, 0x1b, 0x83, - 0x3e, 0x9d, 0x63, 0xd0, 0x57, 0xa3, 0xc9, 0xbc, 0xd6, 0x89, 0xe5, 0x55, 0xc6, 0xce, 0x5f, 0x8e, - 0x2a, 0x79, 0x16, 0x43, 0xc4, 0x84, 0xa1, 0x20, 0x86, 0xfb, 0xaa, 0xa3, 0xa1, 0xd8, 0x2d, 0xa0, - 0xc9, 0xfe, 0x70, 0x15, 0xb1, 0xf4, 0x31, 0x4f, 0x09, 0xab, 0xca, 0xf2, 0xc1, 0x59, 0xee, 0x21, - 0x92, 0xc3, 0xee, 0x40, 0x3f, 0xb3, 0xf0, 0x81, 0xf1, 0x16, 0x30, 0x13, 0x9e, 0x12, 0xf9, 0x85, - 0xf8, 0xc0, 0x8e, 0xc4, 0xe1, 0xf3, 0x8e, 0x16, 0x23, 0xbd, 0x51, 0xd8, 0x11, 0x93, 0x64, 0x2a, - 0x2d, 0x8a, 0x0f, 0xec, 0x01, 0x05, 0x04, 0x2c, 0x8c, 0x3b, 0x6c, 0xd5, 0x31, 0xbf, 0xd8, 0x2e, - 0xa0, 0xdc, 0x46, 0x13, 0x04, 0xb1, 0x7d, 0xdd, 0x04, 0xf9, 0x01, 0x2f, 0x8c, 0x81, 0x61, 0x14, - 0x5b, 0xdf, 0xac, 0xd6, 0x95, 0xd7, 0x24, 0xe8, 0x20, 0xbf, 0x0c, 0x4b, 0x21, 0x2b, 0xc0, 0xf0, - 0x0e, 0xea, 0x9f, 0xc4, 0x7e, 0x72, 0x44, 0x7c, 0xde, 0x2d, 0xf3, 0xc8, 0xa9, 0x3b, 0x95, 0xd1, - 0xd5, 0x6f, 0xb4, 0x0e, 0x19, 0x67, 0x2e, 0x1a, 0xc7, 0xb7, 0x26, 0xbb, 0xb7, 0xa9, 0x30, 0x60, - 0xd9, 0x25, 0x41, 0x57, 0x06, 0x05, 0x34, 0x20, 0x48, 0x4e, 0x74, 0x21, 0x77, 0x0b, 0xc9, 0xc1, - 0x83, 0x89, 0x8e, 0xed, 0xc6, 0x99, 0x1e, 0xeb, 0xda, 0xe2, 0xb4, 0x29, 0x70, 0x13, 0xae, 0x0e, - 0x75, 0x5c, 0x1d, 0xda, 0x94, 0x38, 0x77, 0x3a, 0xb1, 0xb5, 0xcb, 0xfc, 0x83, 0x5e, 0x70, 0x10, - 0xf7, 0x10, 0x37, 0xd9, 0x03, 0xfd, 0xa9, 0xd6, 0xef, 0x52, 0x67, 0xfa, 0xe3, 0xb1, 0xdd, 0xf5, - 0x1b, 0x9b, 0x98, 0x18, 0x8e, 0x5f, 0x3a, 0xac, 0x32, 0xb5, 0x65, 0x98, 0x78, 0xf3, 0x7d, 0x75, - 0x38, 0x3e, 0x78, 0x21, 0x75, 0xe6, 0x58, 0xea, 0xdb, 0x8b, 0x60, 0xae, 0xc5, 0xc6, 0xb4, 0x9b, - 0xb6, 0x00, 0xa6, 0x28, 0xde, 0x91, 0x83, 0x0a, 0xac, 0xa5, 0xdf, 0x1d, 0x2f, 0xc6, 0x4a, 0x1b, - 0x6f, 0xe5, 0xcd, 0x76, 0xdb, 0xd8, 0x2a, 0x80, 0xf1, 0x0b, 0x83, 0xc6, 0x8e, 0xa3, 0x3c, 0xbb, - 0x7c, 0xfb, 0x69, 0xbb, 0x0e, 0x41, 0x57, 0xda, 0x04, 0xd4, 0x2a, 0x48, 0xae, 0x43, 0x90, 0xeb, - 0x8d, 0xcf, 0x0e, 0x1b, 0x3b, 0x8e, 0xf2, 0x08, 0x1f, 0x76, 0x03, 0x9f, 0x38, 0xb1, 0x14, 0x33, - 0xba, 0x3a, 0x47, 0x4e, 0xb6, 0x81, 0xf8, 0xcb, 0x64, 0xd2, 0x77, 0x9c, 0x36, 0x3a, 0xf6, 0x41, - 0xde, 0x09, 0xf3, 0x65, 0xe4, 0x3e, 0x16, 0xa7, 0x06, 0xba, 0x14, 0x8f, 0xed, 0x4a, 0x1c, 0x39, - 0x31, 0x72, 0xa0, 0x15, 0x12, 0xae, 0xb0, 0x97, 0x0f, 0x38, 0xb3, 0xbf, 0xce, 0x45, 0x73, 0xcb, - 0x7d, 0x91, 0xfa, 0xf7, 0x6c, 0xb1, 0x21, 0x6d, 0xaf, 0xe0, 0x5b, 0xee, 0x57, 0xf0, 0x05, 0x67, - 0x6c, 0x34, 0x9c, 0x40, 0xea, 0xe2, 0x8d, 0x3c, 0x81, 0xab, 0xd0, 0x38, 0x9c, 0xf6, 0xab, 0x36, - 0x4c, 0x00, 0x09, 0x27, 0x8c, 0xa1, 0x65, 0xf2, 0xa3, 0xf0, 0x34, 0xc0, 0xf8, 0xc9, 0x9e, 0xad, - 0xd5, 0xb5, 0x40, 0xe1, 0x96, 0x82, 0x03, 0xca, 0xa3, 0xa5, 0x8f, 0x8e, 0xf4, 0xec, 0x31, 0x86, - 0xa2, 0x2a, 0xed, 0x21, 0x06, 0xd0, 0xe4, 0x8d, 0xfe, 0x50, 0xa4, 0x05, 0x70, 0x47, 0x75, 0x65, - 0x98, 0xbc, 0x82, 0xcb, 0x74, 0xa5, 0x42, 0x72, 0x54, 0xc9, 0x8f, 0x39, 0x86, 0xb7, 0xe5, 0x07, - 0xf1, 0x9e, 0xc8, 0x31, 0x84, 0x0d, 0x89, 0xe7, 0x5c, 0x3f, 0x12, 0xef, 0x17, 0x10, 0x6a, 0xc0, - 0x7b, 0x8f, 0x23, 0x3a, 0xe6, 0xf2, 0x56, 0x99, 0x5c, 0x85, 0xfc, 0x5b, 0x22, 0x13, 0xa2, 0x21, - 0x1d, 0x43, 0x5a, 0xc4, 0xe7, 0x0f, 0x2c, 0x00, 0xe9, 0x32, 0x0f, 0x31, 0x20, 0x5a, 0x4e, 0x1c, - 0xe8, 0x07, 0x59, 0x72, 0x7c, 0x60, 0x30, 0xd1, 0x1b, 0x2b, 0xb9, 0x3a, 0xd4, 0x61, 0x42, 0xb5, - 0x3f, 0xe0, 0x8b, 0x68, 0x0b, 0x8c, 0xae, 0x2f, 0x21, 0x71, 0x68, 0xa2, 0xa3, 0x7d, 0x64, 0x7b, - 0x17, 0x41, 0x1d, 0x14, 0x69, 0x94, 0xf0, 0x8f, 0xa4, 0x5a, 0xb5, 0x5a, 0xa9, 0xae, 0x51, 0xb9, - 0x95, 0x94, 0x1d, 0x16, 0x74, 0xa5, 0x47, 0x40, 0xfb, 0x05, 0x69, 0x14, 0xc8, 0x91, 0x7d, 0x89, - 0xf6, 0x8b, 0x26, 0xb9, 0x8a, 0x13, 0xa4, 0x90, 0x5b, 0x81, 0xd1, 0x23, 0x79, 0x32, 0x40, 0x83, - 0x41, 0x93, 0x64, 0xee, 0x34, 0x76, 0x9c, 0x76, 0xa4, 0x53, 0xb9, 0x12, 0xdd, 0x44, 0x73, 0x76, - 0x5d, 0x89, 0x6e, 0x72, 0xbc, 0x27, 0xc9, 0xbe, 0xf6, 0x12, 0x4f, 0x04, 0x77, 0x21, 0x07, 0x3d, - 0x98, 0x76, 0x65, 0x77, 0x07, 0xbe, 0xfb, 0x85, 0x8d, 0x42, 0x76, 0x61, 0x25, 0xfc, 0x75, 0xf8, - 0x83, 0xea, 0x70, 0xc6, 0x35, 0x3b, 0xee, 0xc3, 0x03, 0x52, 0x9d, 0x88, 0xb9, 0x99, 0x64, 0xf0, - 0xdb, 0x8e, 0xfb, 0x2c, 0xc8, 0x19, 0xed, 0x7c, 0xe4, 0x77, 0x79, 0xd0, 0x49, 0x87, 0x0a, 0xc9, - 0xd6, 0x7d, 0x3a, 0x60, 0xc4, 0xf6, 0xf0, 0x2d, 0x19, 0x1e, 0xbc, 0x3a, 0xd4, 0x41, 0x34, 0x55, - 0xdc, 0x6e, 0x10, 0x0a, 0xa6, 0xad, 0xdb, 0xd8, 0x71, 0xc4, 0x81, 0x0d, 0xff, 0x07, 0x01, 0x15, - 0x38, 0xf7, 0x56, 0x2c, 0xb4, 0x30, 0x14, 0xce, 0x68, 0x63, 0xa1, 0x9a, 0x42, 0x34, 0x2e, 0xdc, - 0x52, 0x5f, 0xaf, 0x85, 0xc3, 0xd4, 0x27, 0x95, 0xfc, 0x34, 0x6b, 0x28, 0xb8, 0x80, 0x09, 0x27, - 0x03, 0x86, 0x99, 0x2c, 0x8d, 0x51, 0x0e, 0xd8, 0x7d, 0x92, 0x94, 0x43, 0x45, 0x76, 0xa2, 0x1a, - 0xe3, 0x01, 0x3b, 0x09, 0x3c, 0xdf, 0x69, 0xc1, 0x8d, 0x49, 0x46, 0x87, 0xc1, 0x74, 0xf1, 0xb1, - 0xf1, 0xd4, 0x3b, 0xf7, 0x16, 0x22, 0xf1, 0x5a, 0x8b, 0x8f, 0x61, 0x01, 0x69, 0x09, 0x1f, 0x33, - 0x56, 0x04, 0x8e, 0xad, 0x05, 0x0b, 0x18, 0x3b, 0xf3, 0x85, 0x1d, 0x2d, 0x02, 0x0a, 0x6f, 0x13, - 0x74, 0x65, 0xab, 0x1d, 0x2d, 0x6e, 0x74, 0xa0, 0x45, 0xc0, 0x57, 0x36, 0xb4, 0x98, 0x16, 0x21, - 0xae, 0xae, 0x52, 0x57, 0x56, 0xd7, 0x28, 0xab, 0xab, 0xbe, 0x1f, 0x42, 0x14, 0x7f, 0x6f, 0xa9, - 0x6e, 0x41, 0x39, 0xd8, 0xa0, 0x2b, 0x3e, 0x4b, 0x71, 0xbb, 0x36, 0x3e, 0xd0, 0x99, 0x3c, 0x73, - 0x8c, 0x3c, 0x2a, 0xc7, 0xb7, 0xc6, 0x63, 0xbb, 0xe2, 0x83, 0x83, 0xf1, 0xe1, 0xbd, 0xf0, 0x20, - 0x8f, 0x6c, 0x19, 0x76, 0x28, 0x76, 0x89, 0x32, 0x00, 0xe7, 0xca, 0x33, 0xda, 0x7a, 0x98, 0x0d, - 0xd4, 0xd5, 0xa1, 0x8e, 0x9a, 0x60, 0x44, 0xd5, 0x7c, 0x0d, 0x1f, 0x25, 0xfb, 0xda, 0x2d, 0x9d, - 0xeb, 0x0d, 0xe8, 0xf9, 0xf8, 0x17, 0xe8, 0x0f, 0x42, 0x1a, 0x45, 0x1f, 0x31, 0x4d, 0x72, 0xaa, - 0xfa, 0xc2, 0xcc, 0xb0, 0x88, 0x72, 0x50, 0x8c, 0xd7, 0x21, 0xc2, 0x50, 0x5e, 0x5b, 0x4b, 0x80, - 0x64, 0x21, 0x41, 0x2a, 0x89, 0xf6, 0x28, 0xe4, 0x9b, 0x62, 0x5c, 0x3c, 0x50, 0xb3, 0xf1, 0xa1, - 0x9e, 0xd4, 0xa9, 0x93, 0x46, 0xd7, 0x6e, 0xd8, 0x1a, 0x46, 0xd8, 0x80, 0xbe, 0x70, 0x91, 0x53, - 0x61, 0xf8, 0x03, 0xf1, 0x3e, 0x6f, 0xdb, 0x2f, 0x61, 0xbe, 0xc5, 0x3e, 0xdb, 0x38, 0xdb, 0x12, - 0x82, 0x56, 0x5d, 0xfc, 0x0d, 0xcc, 0xc3, 0xb4, 0xd0, 0x4e, 0x26, 0xd6, 0x83, 0xb5, 0x1a, 0x7f, - 0xfd, 0xac, 0xd5, 0xce, 0x9b, 0xc8, 0x5a, 0x95, 0x85, 0x75, 0xa5, 0x19, 0x05, 0x24, 0x0f, 0x94, - 0x21, 0x57, 0x12, 0x39, 0x32, 0xbe, 0xb9, 0x00, 0x41, 0xf8, 0x60, 0x77, 0xc1, 0x1b, 0xce, 0x74, - 0xf3, 0x04, 0xab, 0xe2, 0x42, 0x2a, 0x9f, 0x60, 0x5b, 0xed, 0xf9, 0x40, 0x6f, 0xcb, 0xa1, 0x5e, - 0xf7, 0x3f, 0x01, 0x26, 0x04, 0xb6, 0xe7, 0xce, 0x62, 0x42, 0x5a, 0x05, 0x5d, 0xd9, 0x24, 0xa0, - 0x3f, 0x95, 0xbc, 0x8e, 0x41, 0x7e, 0x63, 0x2c, 0xaf, 0xee, 0x4d, 0x79, 0x6f, 0x77, 0x64, 0xa3, - 0x59, 0x2b, 0x83, 0xc4, 0xf0, 0x62, 0x75, 0xd0, 0x26, 0x98, 0x5e, 0xeb, 0x7e, 0xb1, 0x96, 0xa6, - 0x8f, 0xcc, 0x6e, 0xbe, 0x55, 0xb9, 0x63, 0x7a, 0xab, 0xea, 0xec, 0x32, 0xb7, 0xe7, 0x75, 0x65, - 0x11, 0x7d, 0xab, 0x1e, 0x36, 0xff, 0x2b, 0xa2, 0x2f, 0xd4, 0xd5, 0xa1, 0x8e, 0x44, 0x6f, 0xd4, - 0x38, 0x7e, 0x0a, 0x98, 0xed, 0xd4, 0xf9, 0xd6, 0xd4, 0xa5, 0xed, 0x8f, 0x2d, 0x59, 0x72, 0xad, - 0x7c, 0xbc, 0x2e, 0xe4, 0xe5, 0x0b, 0x05, 0x0d, 0x96, 0xf4, 0x6d, 0x9d, 0x1d, 0x71, 0xc0, 0x73, - 0xf5, 0x92, 0xae, 0x3c, 0x64, 0x47, 0x1c, 0xd3, 0x19, 0x22, 0xb2, 0x65, 0x5d, 0x1f, 0x9b, 0x42, - 0x95, 0x44, 0xf1, 0x4f, 0xb7, 0x61, 0x5c, 0x0c, 0xe5, 0xf8, 0x40, 0x1f, 0x39, 0x98, 0x53, 0x83, - 0x4c, 0xae, 0x95, 0x38, 0x7b, 0x94, 0x0b, 0x36, 0xed, 0x71, 0x2b, 0xff, 0x6b, 0x36, 0x2a, 0x74, - 0x8f, 0x7d, 0x77, 0x5c, 0xcd, 0xb7, 0xc6, 0x70, 0x35, 0xc1, 0xc0, 0x18, 0x5f, 0xcd, 0x47, 0x8d, - 0x6f, 0xb6, 0xa5, 0xdb, 0x21, 0xbb, 0x5f, 0xc4, 0xed, 0xbe, 0xa9, 0x24, 0x61, 0x77, 0xda, 0x83, - 0xc9, 0xf8, 0x29, 0xfc, 0x56, 0xb9, 0x25, 0xde, 0xff, 0x3d, 0x0b, 0xcd, 0x51, 0xb5, 0x26, 0x3a, - 0xf0, 0xb2, 0x50, 0xb0, 0xe9, 0x96, 0x5c, 0xc0, 0x2a, 0xfb, 0x05, 0x5c, 0x6c, 0x62, 0x4c, 0x72, - 0x01, 0x67, 0x11, 0x62, 0x11, 0x53, 0x6f, 0x1c, 0xb1, 0x78, 0xbb, 0xae, 0x1c, 0x09, 0x65, 0x99, - 0x69, 0x9b, 0xe4, 0xb9, 0xec, 0x45, 0xb4, 0xb6, 0x1e, 0xaf, 0x3f, 0xc3, 0x03, 0xf8, 0xdf, 0xb2, - 0xd1, 0xfd, 0xde, 0x63, 0xde, 0x1d, 0xd7, 0x6d, 0xed, 0x18, 0xae, 0x1b, 0x9f, 0x99, 0x20, 0x3e, - 0xb8, 0xcb, 0xb1, 0x39, 0x77, 0xdc, 0x45, 0xa3, 0xb9, 0xed, 0x32, 0x1d, 0x0b, 0x4d, 0x6a, 0x9d, - 0x1c, 0xdc, 0xca, 0x1f, 0x31, 0x7b, 0x22, 0xf9, 0xb7, 0x0f, 0x1a, 0xf0, 0x6f, 0x5f, 0xf1, 0x3f, - 0x64, 0xa3, 0xc2, 0x8a, 0x46, 0xcd, 0x17, 0x20, 0x66, 0x7a, 0xb7, 0xe4, 0xb6, 0xbd, 0x6a, 0xbf, - 0x6d, 0x4f, 0xf2, 0x2a, 0x26, 0xb8, 0x6d, 0x60, 0x97, 0x68, 0x7c, 0x7a, 0x38, 0xb1, 0xe7, 0xfc, - 0xed, 0xbf, 0x73, 0xdf, 0x53, 0x9e, 0x56, 0xf6, 0x81, 0xae, 0x44, 0x50, 0x48, 0x4a, 0xbb, 0xd1, - 0x72, 0x09, 0x0f, 0x8c, 0xf1, 0x81, 0x3e, 0xfe, 0xf3, 0x29, 0x11, 0xeb, 0x75, 0x75, 0xed, 0x86, - 0x82, 0xb0, 0x21, 0xbc, 0xc1, 0xe0, 0xee, 0x1c, 0x74, 0x9f, 0xc7, 0xa4, 0x77, 0xc7, 0x85, 0x7e, - 0x65, 0x0c, 0x17, 0xda, 0x16, 0xa9, 0x08, 0x06, 0xe9, 0xd9, 0x0a, 0xbb, 0x77, 0xa7, 0x5c, 0xe2, - 0x4e, 0x41, 0x57, 0xda, 0x05, 0xb4, 0x4d, 0x90, 0xd2, 0x1f, 0x85, 0xec, 0xe7, 0x4d, 0xa6, 0xad, - 0xbb, 0xbb, 0xe7, 0x6c, 0x3c, 0xb6, 0x2b, 0xd5, 0x7f, 0x02, 0x28, 0xa4, 0xf8, 0x40, 0xcc, 0x18, - 0xda, 0x9c, 0xe8, 0x3b, 0xc1, 0x42, 0xe6, 0x98, 0x55, 0x40, 0xf9, 0x0e, 0xb6, 0xa6, 0xb6, 0x0c, - 0xc3, 0x5d, 0xe7, 0x3f, 0x9f, 0xdc, 0xf5, 0xbe, 0xcf, 0x8d, 0x81, 0x01, 0x70, 0x4f, 0x2b, 0xfe, - 0x2f, 0xd9, 0x68, 0xb6, 0x6b, 0x21, 0x6b, 0xe5, 0x1f, 0xfa, 0xce, 0xbf, 0x6e, 0x17, 0xc7, 0x94, - 0x9b, 0x0c, 0x2c, 0xb9, 0xf3, 0x8b, 0x33, 0xde, 0x79, 0x2c, 0x2a, 0xb9, 0x94, 0xdc, 0x73, 0xfa, - 0xd1, 0xd2, 0x47, 0x8d, 0xb6, 0x6d, 0x46, 0xfb, 0x1f, 0x1c, 0x62, 0x99, 0xbb, 0x00, 0x01, 0x7c, - 0xa4, 0x2b, 0x1b, 0x51, 0x44, 0xca, 0xb0, 0xef, 0x3f, 0x18, 0x0a, 0xd8, 0x9b, 0x83, 0xe6, 0x78, - 0x4e, 0x7b, 0x0f, 0x09, 0xdc, 0x42, 0x24, 0x60, 0xd9, 0x92, 0x67, 0x3a, 0x8c, 0x5b, 0x89, 0x06, - 0xfe, 0x2a, 0x0b, 0x52, 0x52, 0x79, 0x63, 0x81, 0xdb, 0x64, 0xa0, 0x2b, 0x7e, 0x8c, 0xf2, 0x82, - 0x2d, 0x91, 0xe6, 0x96, 0x08, 0x01, 0xae, 0x75, 0xba, 0xf2, 0x8e, 0x44, 0x8a, 0xe4, 0x35, 0x60, - 0xce, 0x68, 0x59, 0x2c, 0x75, 0xf5, 0x8f, 0x44, 0xdb, 0x8d, 0xe8, 0x50, 0xd1, 0x07, 0xfe, 0x06, - 0x6d, 0x81, 0xd1, 0x7a, 0x7a, 0x64, 0xcb, 0x69, 0xa8, 0x2d, 0x29, 0x2d, 0x5a, 0xe7, 0x0b, 0xfb, - 0xeb, 0x17, 0x18, 0x47, 0x62, 0x89, 0xde, 0xaf, 0x49, 0x21, 0x93, 0x99, 0xf2, 0xa5, 0x2a, 0x19, - 0xbe, 0xec, 0x59, 0x5d, 0x59, 0x8a, 0x9e, 0x92, 0x66, 0x39, 0x77, 0x25, 0x9d, 0x81, 0x30, 0xaf, - 0x91, 0x2b, 0xfe, 0x5f, 0xb3, 0xd1, 0x6c, 0xaf, 0xed, 0xbc, 0x3b, 0x6e, 0xd9, 0x2a, 0x9b, 0x6a, - 0xe7, 0x81, 0xb4, 0xc6, 0x4f, 0x38, 0x29, 0x34, 0x76, 0x58, 0x84, 0xeb, 0x36, 0x15, 0xa3, 0x1b, - 0x8f, 0xb4, 0xee, 0xb7, 0xf1, 0xaa, 0x11, 0xfe, 0x28, 0xc3, 0x69, 0xc8, 0x0f, 0x13, 0x75, 0xd4, - 0x67, 0x5f, 0x59, 0xb4, 0x33, 0x75, 0xcb, 0x30, 0xbf, 0xc8, 0x61, 0xb0, 0x08, 0x72, 0xa1, 0xbf, - 0x9a, 0x80, 0x26, 0xd9, 0x36, 0x42, 0x5c, 0x0a, 0x3e, 0xbe, 0xec, 0x7e, 0xe0, 0x33, 0x22, 0x45, - 0xf2, 0x34, 0x22, 0x6e, 0x8a, 0xed, 0xf6, 0x13, 0xdf, 0x97, 0xea, 0x4a, 0x95, 0x54, 0x8a, 0xcf, - 0xa0, 0x71, 0xfe, 0x40, 0x40, 0x0b, 0x55, 0xd7, 0x5a, 0xf9, 0xfd, 0xee, 0x97, 0x68, 0x99, 0x3c, - 0x95, 0x80, 0xd6, 0xb6, 0xd6, 0xe4, 0xf0, 0xee, 0xf8, 0xc0, 0x60, 0x75, 0xad, 0x4a, 0xeb, 0xc4, - 0x37, 0xd1, 0x44, 0x3a, 0xa0, 0x15, 0x8d, 0xa3, 0xfc, 0x69, 0x5d, 0x79, 0x42, 0xb2, 0x55, 0xc8, - 0xf3, 0x13, 0xbd, 0x31, 0xe3, 0xf0, 0x4e, 0x72, 0x38, 0x34, 0x34, 0x22, 0x5c, 0x9b, 0xd4, 0x96, - 0x61, 0x62, 0x4a, 0x65, 0xeb, 0x23, 0xfe, 0x0c, 0x65, 0x57, 0xd4, 0xae, 0xc1, 0xc8, 0x76, 0x12, - 0xc0, 0x8d, 0xf9, 0x9b, 0x9a, 0x5d, 0x56, 0xd4, 0xae, 0x21, 0xb0, 0x66, 0x96, 0x8a, 0x8b, 0x50, - 0x76, 0x93, 0xd6, 0x44, 0xd2, 0xf2, 0x61, 0xa0, 0x30, 0x7f, 0x53, 0xbf, 0x4b, 0x63, 0x5b, 0xab, - 0xd1, 0x77, 0x80, 0xb6, 0x6f, 0xd2, 0x9a, 0xc4, 0xa5, 0x28, 0x7b, 0x79, 0xed, 0x1a, 0x2b, 0x15, - 0xdf, 0x43, 0x92, 0xf9, 0x5b, 0xbe, 0x1f, 0xda, 0x2f, 0xa7, 0x83, 0xf3, 0x2b, 0x5c, 0xa2, 0x9a, - 0x4d, 0xc4, 0x2e, 0x01, 0xe5, 0x85, 0xb1, 0xe2, 0x8b, 0x48, 0xd4, 0x4d, 0x82, 0x5a, 0x22, 0x45, - 0xf2, 0xfb, 0xe4, 0x10, 0xb1, 0xe6, 0x82, 0x8e, 0xd1, 0x96, 0x38, 0x7a, 0x31, 0xd1, 0x79, 0xc6, - 0x16, 0x15, 0x80, 0x46, 0x50, 0xbf, 0x3a, 0xd4, 0x7e, 0x75, 0xa8, 0x83, 0xd8, 0x40, 0x95, 0x16, - 0x55, 0x56, 0xad, 0xa8, 0x5a, 0x5d, 0x85, 0xff, 0xac, 0x50, 0xab, 0x94, 0xd5, 0xf8, 0xaf, 0x65, - 0x4a, 0xf5, 0x8a, 0xaa, 0xca, 0xd2, 0xa2, 0xea, 0x9a, 0xea, 0xd5, 0xd5, 0xca, 0x8a, 0xea, 0x37, - 0x94, 0xd5, 0xd5, 0xab, 0x6a, 0x54, 0x32, 0xa7, 0xa8, 0xa0, 0xbc, 0x8f, 0x83, 0x01, 0x8d, 0xc9, - 0xe3, 0x4b, 0x4c, 0x16, 0x26, 0xc7, 0x2c, 0xa2, 0x36, 0x9c, 0x46, 0x57, 0x7f, 0x72, 0xcf, 0x69, - 0xa3, 0x23, 0xe6, 0xdc, 0x71, 0xd2, 0x51, 0xfc, 0xad, 0x1d, 0xc5, 0x42, 0x94, 0xae, 0x37, 0x74, - 0xe5, 0xe7, 0x76, 0x14, 0xfb, 0x32, 0x21, 0x0a, 0x68, 0x32, 0x74, 0x1e, 0xe3, 0x62, 0x9b, 0x38, - 0x36, 0xf2, 0x82, 0xf8, 0x60, 0x2b, 0xd5, 0x4c, 0x1b, 0xc3, 0xba, 0x71, 0xf6, 0x70, 0x3c, 0xb6, - 0x8b, 0x0d, 0x55, 0x62, 0x47, 0xb4, 0xcb, 0x78, 0x32, 0x0f, 0x59, 0xe9, 0xea, 0x38, 0x32, 0xaf, - 0xd0, 0x31, 0x33, 0x4b, 0x00, 0xc7, 0x93, 0x75, 0x8f, 0xa1, 0xec, 0xb5, 0xb5, 0x15, 0x24, 0x6c, - 0x17, 0x86, 0x62, 0xf3, 0x37, 0x8d, 0x48, 0xc0, 0xfa, 0xae, 0xad, 0xad, 0x28, 0xaa, 0xae, 0x54, - 0xcd, 0x3a, 0xf1, 0x4d, 0x66, 0x4c, 0x3b, 0x91, 0xc6, 0xe4, 0x7d, 0x89, 0x19, 0xd3, 0x3e, 0xc5, - 0x77, 0x04, 0x33, 0x5a, 0x4b, 0xfb, 0x74, 0xf1, 0x92, 0x71, 0xc1, 0x7c, 0x10, 0x13, 0x17, 0xce, - 0x1a, 0xbd, 0xe7, 0xcc, 0x8d, 0xdd, 0x71, 0xd4, 0xb8, 0x70, 0x38, 0xd9, 0xd7, 0xce, 0x8c, 0x6c, - 0x6b, 0x50, 0x5e, 0xb3, 0x2f, 0x1c, 0xfe, 0xa0, 0x81, 0xb8, 0xc3, 0x43, 0x18, 0x35, 0x28, 0x92, - 0x4b, 0x1c, 0x0e, 0xfc, 0xd4, 0xb2, 0x10, 0xe8, 0x4f, 0x30, 0x8b, 0x4a, 0x9d, 0xfa, 0xdc, 0xe8, - 0xdf, 0xa6, 0x92, 0x2e, 0xe2, 0xdb, 0x08, 0x9f, 0x2a, 0x76, 0x8c, 0x9f, 0x54, 0x5e, 0xad, 0x2b, - 0xcb, 0x24, 0x72, 0x80, 0x94, 0xf1, 0x66, 0x07, 0x0d, 0xb9, 0x3f, 0xb9, 0x03, 0x79, 0xb6, 0x88, - 0x85, 0x03, 0x05, 0x41, 0x35, 0xd0, 0xb1, 0xf1, 0xd8, 0xae, 0x0a, 0x45, 0xc5, 0xc3, 0x8a, 0x0a, - 0xca, 0x6f, 0xd0, 0x36, 0xfa, 0x4d, 0xe4, 0x40, 0x3c, 0xda, 0x1f, 0xd6, 0x95, 0x62, 0x89, 0x15, - 0xca, 0x33, 0x2b, 0x94, 0x22, 0x7a, 0x45, 0x53, 0x67, 0xbe, 0x33, 0x8e, 0x6f, 0xaf, 0xae, 0x34, - 0xba, 0x2e, 0xa8, 0xac, 0x85, 0xf8, 0x5b, 0x0b, 0x21, 0xa8, 0x41, 0x16, 0x22, 0xfd, 0x75, 0x5d, - 0x59, 0x23, 0xd9, 0x2a, 0xe4, 0x2a, 0x42, 0x56, 0x9c, 0xd2, 0x53, 0xed, 0x26, 0x1e, 0x58, 0xa9, - 0xd4, 0xad, 0xae, 0x52, 0x4b, 0x8b, 0x7e, 0xbe, 0x4a, 0x7d, 0xd5, 0xfc, 0xbf, 0x6a, 0x75, 0x45, - 0x65, 0x69, 0x11, 0x94, 0xbe, 0x83, 0x7f, 0x28, 0x2b, 0x56, 0x50, 0x2b, 0xfd, 0xf8, 0x40, 0x0c, - 0xda, 0xa9, 0xb6, 0x41, 0xc5, 0xdf, 0xa3, 0x49, 0x2d, 0x81, 0xba, 0xfa, 0xf7, 0xb4, 0x86, 0x96, - 0x46, 0x1c, 0x27, 0x75, 0x2a, 0xde, 0x28, 0x3c, 0xbd, 0xbd, 0x46, 0xae, 0x4c, 0x7d, 0xb3, 0xc5, - 0x88, 0x9d, 0x84, 0x7b, 0x6a, 0x3d, 0xc5, 0xd1, 0xa1, 0x25, 0xa9, 0x63, 0xa7, 0x93, 0xc7, 0x63, - 0x46, 0xd7, 0xe6, 0xf8, 0xc0, 0x2e, 0x68, 0x74, 0x75, 0xa8, 0xe3, 0x31, 0x28, 0xc5, 0x51, 0x51, - 0xad, 0x0a, 0xd5, 0x3e, 0xa8, 0xf8, 0x34, 0xca, 0x37, 0xc1, 0x9a, 0xf9, 0xc3, 0x8f, 0x87, 0x50, - 0x5c, 0xac, 0x50, 0x9e, 0x48, 0x4e, 0x09, 0xec, 0xc5, 0x59, 0x79, 0xf1, 0xe5, 0x6c, 0xc8, 0x0f, - 0x7b, 0x37, 0x72, 0xc6, 0xcb, 0x6c, 0xcf, 0xf5, 0x74, 0xaf, 0xe7, 0xfa, 0x4e, 0x7f, 0xa5, 0x57, - 0xeb, 0xca, 0x6b, 0x68, 0x95, 0x94, 0xf6, 0x08, 0x6e, 0xec, 0x8d, 0xfe, 0x77, 0xd9, 0xe8, 0x7e, - 0xf0, 0x58, 0x87, 0x8c, 0x0f, 0xfe, 0xc0, 0x4a, 0xdf, 0x87, 0x75, 0xfe, 0x8f, 0xb5, 0xeb, 0xf5, - 0x96, 0x76, 0xb1, 0x88, 0x5e, 0x4c, 0xae, 0x1d, 0xa3, 0xbe, 0x8e, 0xc6, 0x35, 0xf9, 0x03, 0xe6, - 0x64, 0x18, 0x06, 0x26, 0x95, 0xbf, 0x60, 0xbe, 0xc9, 0xb4, 0x4c, 0x2e, 0x89, 0x5f, 0x3a, 0x93, - 0xd8, 0x73, 0x31, 0xc0, 0x79, 0xdd, 0xf9, 0x48, 0x18, 0x1c, 0x7f, 0x60, 0x3d, 0xd8, 0x5d, 0xc6, - 0x07, 0x76, 0x8e, 0x1c, 0xec, 0xa6, 0x49, 0x6c, 0x69, 0x57, 0x3c, 0x32, 0x7c, 0x06, 0x06, 0x11, - 0x36, 0x32, 0x94, 0x8d, 0x71, 0xe4, 0x1d, 0xb6, 0x91, 0xa1, 0xab, 0xf8, 0x92, 0x8b, 0xad, 0x9d, - 0x8f, 0x6f, 0x0f, 0x63, 0x6b, 0x27, 0x02, 0x5b, 0x1b, 0x8f, 0xc5, 0x8c, 0xdd, 0x07, 0xac, 0xc4, - 0xf9, 0x16, 0x67, 0xfb, 0xb6, 0xae, 0xbc, 0x81, 0x5e, 0x97, 0x32, 0xee, 0xba, 0x2c, 0xc1, 0x0a, - 0xd9, 0xa6, 0x26, 0x7a, 0xa3, 0xc6, 0x37, 0x5d, 0xa0, 0xc8, 0x22, 0xf9, 0x6e, 0xce, 0x5c, 0x1c, - 0x39, 0xd8, 0x3d, 0xf2, 0xd9, 0x21, 0x3b, 0x43, 0x5b, 0xdc, 0x93, 0x8d, 0x1e, 0x48, 0x33, 0xf4, - 0xdd, 0x71, 0x55, 0x3d, 0xae, 0x58, 0xce, 0x2d, 0xba, 0x62, 0xef, 0xe8, 0xca, 0x5b, 0xe8, 0x0d, - 0x29, 0xf3, 0xfe, 0xc9, 0xcf, 0x8c, 0xfd, 0x6c, 0x98, 0xaa, 0x0e, 0xbe, 0xb1, 0xb8, 0xcb, 0x7e, - 0x38, 0x4a, 0x78, 0xb5, 0xbf, 0x49, 0x53, 0x7d, 0x81, 0xf5, 0xb7, 0xe2, 0xba, 0x6d, 0x44, 0x28, - 0x42, 0xa7, 0x03, 0x41, 0xb2, 0x87, 0xd7, 0x06, 0x5b, 0x10, 0x18, 0x4c, 0x70, 0x3d, 0x64, 0xc9, - 0x38, 0xd3, 0x93, 0xd8, 0x7f, 0x1e, 0x8c, 0x3a, 0xc8, 0x57, 0x72, 0x16, 0x8b, 0xb6, 0xac, 0x15, - 0x5c, 0x3f, 0xf3, 0xc1, 0x61, 0x57, 0x26, 0x9b, 0x7b, 0x70, 0xbc, 0xaf, 0x0c, 0x77, 0x53, 0x48, - 0xba, 0xd9, 0xcc, 0x3b, 0x26, 0xcf, 0x73, 0x84, 0xe2, 0x80, 0x55, 0x26, 0xda, 0xbf, 0x48, 0x0e, - 0x7d, 0x91, 0xec, 0xdb, 0x97, 0xdc, 0x7b, 0xc2, 0x29, 0xf2, 0xe1, 0x16, 0x57, 0xbc, 0x3f, 0x1b, - 0xcd, 0x4d, 0x37, 0xfe, 0xbd, 0xfb, 0x32, 0xca, 0x7d, 0x79, 0x53, 0x57, 0x5e, 0x47, 0x6b, 0xa5, - 0x51, 0x36, 0x50, 0x7e, 0x62, 0x7d, 0x86, 0x23, 0xa2, 0x56, 0xa0, 0xe6, 0x41, 0xd9, 0xee, 0xca, - 0x3f, 0x0a, 0xe8, 0xa1, 0xd5, 0x21, 0x5f, 0x20, 0xcc, 0xba, 0xad, 0x0e, 0xf2, 0x61, 0xbd, 0xe8, - 0x8d, 0x69, 0xf0, 0xba, 0x31, 0xe5, 0x26, 0x65, 0x6e, 0xbb, 0x31, 0x33, 0xb9, 0x1f, 0x9c, 0x69, - 0x0f, 0x8d, 0x45, 0x3d, 0xca, 0xe5, 0xa1, 0xce, 0x7c, 0x63, 0x59, 0x91, 0x3c, 0x8b, 0x8d, 0x9f, - 0x1a, 0xfe, 0x3a, 0xd1, 0xf9, 0x19, 0x7c, 0x96, 0x53, 0xf4, 0x58, 0xbc, 0x2d, 0x1b, 0xcd, 0xcf, - 0x3c, 0xdc, 0xdd, 0x01, 0x80, 0x8d, 0x28, 0x3f, 0x42, 0xc3, 0xb1, 0xe5, 0x8c, 0x21, 0x1c, 0x1b, - 0xd6, 0xe0, 0xb3, 0x2e, 0xf2, 0x43, 0xf4, 0x2f, 0xd8, 0x2c, 0x87, 0x79, 0x57, 0xaa, 0xff, 0x64, - 0x62, 0x4b, 0xab, 0xca, 0x9a, 0xd3, 0x83, 0x18, 0xd3, 0xce, 0xc9, 0xf3, 0x1d, 0x27, 0x11, 0x1f, - 0x88, 0xf1, 0x83, 0x13, 0x48, 0xdb, 0x6a, 0xc7, 0xca, 0x95, 0x5a, 0xd8, 0x1f, 0xd2, 0x1a, 0x6e, - 0x11, 0x11, 0x54, 0x81, 0x53, 0x49, 0xd1, 0x09, 0x09, 0x21, 0x34, 0x4f, 0x57, 0xe6, 0x4a, 0x7c, - 0xb9, 0x3c, 0xc5, 0x41, 0xb2, 0xa8, 0x7c, 0xad, 0xf8, 0x82, 0x0b, 0xc5, 0x16, 0x67, 0xa4, 0x4a, - 0x72, 0x42, 0xb6, 0x20, 0x21, 0x2c, 0xf2, 0x6a, 0xe6, 0x6d, 0x90, 0x5f, 0x72, 0xbd, 0x7c, 0x47, - 0x12, 0xbd, 0x9f, 0x5a, 0x27, 0xb6, 0xf7, 0x9b, 0x52, 0x78, 0x17, 0x8c, 0xf6, 0xce, 0xf8, 0xa5, - 0x43, 0xa9, 0xfe, 0x4d, 0x10, 0x77, 0x22, 0x3e, 0x10, 0x4d, 0x6d, 0xff, 0x36, 0x11, 0x3d, 0xe5, - 0xc4, 0xc4, 0xfc, 0x47, 0x14, 0x77, 0xdb, 0x51, 0xb1, 0x6d, 0xfe, 0x7b, 0xa8, 0x78, 0x6c, 0xdc, - 0x81, 0xc7, 0x06, 0x9a, 0xa7, 0xc5, 0x2e, 0xc4, 0x42, 0x07, 0x26, 0x86, 0x13, 0x64, 0xc7, 0xe7, - 0xa4, 0x57, 0xf6, 0xe5, 0x78, 0xdd, 0x0c, 0x18, 0xf1, 0x07, 0xbf, 0x19, 0x2b, 0xd8, 0xcd, 0xc0, - 0x36, 0x96, 0x70, 0x33, 0x20, 0x8e, 0x25, 0x57, 0x2e, 0x17, 0xc2, 0x37, 0x38, 0x84, 0xcc, 0x89, - 0xbd, 0xdf, 0xa8, 0x7c, 0x33, 0xb1, 0xd2, 0x75, 0x45, 0x16, 0x98, 0x97, 0xcc, 0xba, 0x22, 0x22, - 0x80, 0x6e, 0xc6, 0x8b, 0x22, 0xee, 0x15, 0x50, 0x5e, 0x93, 0x2f, 0xd0, 0xe2, 0x6b, 0x24, 0x46, - 0xc2, 0xbf, 0xd3, 0x95, 0x8f, 0x25, 0x52, 0x24, 0x37, 0x83, 0xfb, 0x03, 0x3f, 0x50, 0x29, 0x3d, - 0x41, 0x67, 0x85, 0xc9, 0xa5, 0x6f, 0xea, 0x81, 0xfb, 0x61, 0xc2, 0x60, 0x34, 0x0a, 0xea, 0x87, - 0xab, 0x43, 0x1d, 0xc6, 0xd9, 0xbd, 0x26, 0x73, 0x8f, 0xe3, 0x06, 0x9a, 0x04, 0x65, 0xdf, 0x89, - 0x91, 0x2f, 0x71, 0xe8, 0x21, 0x6c, 0xdc, 0x0c, 0x03, 0x8e, 0x6c, 0xef, 0x4c, 0xf5, 0xef, 0x55, - 0xc9, 0xcc, 0x65, 0x01, 0x5d, 0xd9, 0x80, 0xfc, 0x52, 0xe6, 0xc3, 0x72, 0x91, 0x4a, 0xee, 0xfb, - 0x9b, 0xee, 0x82, 0xd6, 0x60, 0x96, 0xd1, 0xd2, 0x91, 0xfd, 0xb3, 0xe7, 0x5d, 0xe5, 0x41, 0xed, - 0x4e, 0xbf, 0xab, 0xb5, 0x63, 0x50, 0x93, 0xf1, 0xb9, 0x97, 0x2c, 0x35, 0x19, 0xe7, 0x0f, 0x7b, - 0xa7, 0x28, 0xcb, 0x7e, 0x98, 0xdb, 0x7f, 0x59, 0x40, 0x0f, 0x56, 0xe1, 0x18, 0x16, 0xac, 0x07, - 0x8d, 0x2b, 0x7b, 0x0b, 0xee, 0x3f, 0xfd, 0xa8, 0xd1, 0x96, 0x20, 0xcf, 0x85, 0x10, 0x1c, 0x16, - 0x02, 0xa0, 0x0c, 0x0a, 0xd8, 0x3c, 0x3b, 0xa8, 0xae, 0xdd, 0xd9, 0xa8, 0x28, 0xfd, 0x88, 0xf7, - 0xde, 0x99, 0x51, 0x20, 0xad, 0x4e, 0x57, 0x6a, 0x51, 0x8d, 0x34, 0xea, 0x16, 0xca, 0x52, 0xe6, - 0x53, 0xe1, 0xbf, 0xab, 0xf8, 0x6f, 0x04, 0x54, 0x54, 0xe9, 0x0f, 0xdf, 0x36, 0x48, 0x5b, 0xa3, - 0x2b, 0x2a, 0xaa, 0x95, 0x46, 0x5d, 0x83, 0x3c, 0xd7, 0x68, 0x3d, 0x37, 0xb2, 0xbf, 0x6f, 0x8c, - 0xa0, 0xf6, 0x49, 0x36, 0x9a, 0x97, 0x61, 0xc8, 0x7b, 0xb0, 0x36, 0x36, 0xac, 0x36, 0xfa, 0x1e, - 0xca, 0x52, 0xe6, 0x73, 0xb1, 0x01, 0xdb, 0x3f, 0x23, 0x34, 0x15, 0xbc, 0xf7, 0x4d, 0x1c, 0x4f, - 0xa1, 0xeb, 0x77, 0x28, 0x3f, 0xe2, 0x0b, 0x6f, 0xc0, 0x0a, 0x42, 0x16, 0xba, 0xe8, 0x97, 0x12, - 0x2b, 0x94, 0x55, 0xc0, 0xf5, 0x2c, 0x81, 0x1a, 0x28, 0x58, 0x68, 0x26, 0x73, 0xbc, 0x11, 0x57, - 0x87, 0x3a, 0xa8, 0x33, 0xf0, 0xea, 0xa0, 0x55, 0xc6, 0x19, 0xe7, 0x2f, 0x0b, 0x05, 0x9b, 0x48, - 0x45, 0xb2, 0xaf, 0x5d, 0x65, 0xa3, 0x8b, 0xeb, 0x99, 0xba, 0x0e, 0xce, 0x74, 0x15, 0x3e, 0x18, - 0xa2, 0xae, 0x9b, 0x48, 0xa6, 0xc6, 0x6a, 0x80, 0x6b, 0xe5, 0x8f, 0x87, 0x1e, 0x53, 0x27, 0x32, - 0x2d, 0x5b, 0x75, 0xcd, 0x72, 0x75, 0x1c, 0xd1, 0xcc, 0xa9, 0xe3, 0xea, 0xd6, 0x54, 0x54, 0x54, - 0xd5, 0xd5, 0xa9, 0x79, 0xa0, 0x8d, 0x53, 0xc7, 0xad, 0xae, 0x5e, 0x59, 0xb5, 0x6a, 0xcd, 0x6a, - 0xa6, 0x86, 0xfb, 0xa5, 0xc3, 0xa5, 0x0d, 0xf2, 0x6c, 0x33, 0xe8, 0x79, 0x8a, 0x58, 0x3f, 0xe0, - 0x28, 0x7f, 0x4c, 0xbb, 0x98, 0xd8, 0x71, 0x62, 0x64, 0xcf, 0xc1, 0xc4, 0xfe, 0xf3, 0xf1, 0x81, - 0x18, 0x00, 0x56, 0xa2, 0xab, 0x3b, 0x79, 0x3c, 0x66, 0x05, 0x2f, 0x63, 0x10, 0xf6, 0x04, 0xca, - 0x0d, 0x47, 0x7c, 0xa1, 0x08, 0x11, 0x8e, 0xce, 0xd5, 0x95, 0x39, 0x12, 0x94, 0xc8, 0x22, 0x09, - 0x4e, 0xd9, 0xdd, 0x6f, 0x9e, 0xcd, 0xfe, 0xf3, 0x23, 0xfb, 0xbf, 0x55, 0xa1, 0x4a, 0x5c, 0x84, - 0xb2, 0xb5, 0x40, 0x03, 0x71, 0x7b, 0x02, 0xc5, 0xa8, 0x16, 0x68, 0xa0, 0x3d, 0xcc, 0x83, 0x3b, - 0x74, 0x84, 0xf4, 0x30, 0x2b, 0xc4, 0x15, 0x68, 0x92, 0xf6, 0xa1, 0x56, 0xdf, 0x62, 0xc2, 0xc9, - 0x6a, 0x7f, 0x93, 0xc6, 0xab, 0x48, 0xed, 0x35, 0x74, 0x0c, 0x12, 0xb7, 0x10, 0xc6, 0xb0, 0x37, - 0x11, 0xd7, 0xa0, 0x09, 0xf5, 0x2d, 0xa1, 0x90, 0x16, 0x88, 0xd4, 0x45, 0xb4, 0x66, 0xa2, 0x30, - 0x7d, 0x5c, 0x57, 0x96, 0x48, 0x7c, 0xb9, 0x3c, 0x8f, 0x8c, 0xd4, 0xf7, 0xb9, 0xd1, 0x7b, 0x1a, - 0xc6, 0x63, 0xd4, 0x19, 0x51, 0x96, 0xf0, 0xed, 0xc5, 0xd7, 0xd0, 0xc4, 0x70, 0x44, 0x6b, 0xae, - 0x33, 0x21, 0x2c, 0x50, 0xaf, 0xe1, 0xcc, 0x46, 0xe3, 0xcb, 0x17, 0xea, 0x4a, 0xb1, 0x64, 0xab, - 0x70, 0x2c, 0x11, 0x8f, 0x77, 0xad, 0x3c, 0x57, 0x17, 0xb2, 0xf2, 0x05, 0xd5, 0xd6, 0x52, 0x3c, - 0x28, 0x98, 0xdb, 0xab, 0x35, 0xd3, 0x88, 0xe4, 0xa5, 0xde, 0xd9, 0x17, 0x38, 0xc0, 0x5e, 0x64, - 0x2e, 0x85, 0xc4, 0xe6, 0x5e, 0xa3, 0x2b, 0x2f, 0xff, 0xff, 0xec, 0xfd, 0x0b, 0x74, 0x14, 0xc7, - 0xb6, 0x18, 0x0c, 0x9f, 0x1e, 0x49, 0x20, 0x15, 0xe2, 0xd5, 0x06, 0x2c, 0x8b, 0xd7, 0x78, 0x8c, - 0x6d, 0x31, 0x96, 0x10, 0x34, 0xf8, 0x25, 0x1b, 0xdb, 0x2d, 0x09, 0x38, 0xb2, 0x79, 0xc8, 0xc3, - 0xe3, 0x9c, 0x63, 0x1f, 0x1f, 0x3c, 0xcc, 0x34, 0x62, 0x0e, 0xd2, 0xcc, 0x9c, 0x99, 0x91, 0x6c, - 0xf0, 0x3d, 0xf7, 0x17, 0x58, 0x02, 0xc9, 0x08, 0x04, 0x6d, 0x1e, 0x46, 0x16, 0x2f, 0x1b, 0x0c, - 0xb6, 0x91, 0x04, 0xc6, 0xc6, 0x42, 0x12, 0xe6, 0xde, 0x95, 0x7b, 0xf3, 0xe7, 0xbb, 0xb9, 0x37, - 0xb9, 0x71, 0x72, 0x73, 0xb3, 0x92, 0x2f, 0x39, 0xc9, 0xf2, 0xf4, 0xcc, 0x28, 0xdf, 0x97, 0x45, - 0xf2, 0xad, 0xac, 0x6f, 0xe5, 0x73, 0x1e, 0xdf, 0xb7, 0xaa, 0x76, 0x55, 0x77, 0xf5, 0x74, 0xf7, - 0x48, 0xf2, 0x1b, 0x1f, 0xaf, 0xe5, 0x65, 0x34, 0x55, 0xbb, 0xaa, 0xab, 0x76, 0xed, 0xbd, 0x6b, - 0xd7, 0xae, 0x5d, 0x7b, 0x7b, 0xa1, 0xbd, 0xf4, 0x34, 0x7c, 0x13, 0xb2, 0x12, 0xc3, 0x37, 0xb9, - 0x87, 0x5c, 0xc3, 0x99, 0xf7, 0xf6, 0xc0, 0xbd, 0x1b, 0x14, 0x82, 0x7f, 0x0c, 0x56, 0x4d, 0x47, - 0xf6, 0x6a, 0x83, 0x83, 0xa9, 0x13, 0xd7, 0xbf, 0xac, 0x9e, 0xdc, 0x23, 0xe4, 0x17, 0x0a, 0x33, - 0x66, 0xf9, 0xa0, 0x47, 0xf1, 0x65, 0xeb, 0xfd, 0x68, 0x35, 0x09, 0x30, 0x6c, 0xdc, 0x8f, 0xea, - 0x13, 0x35, 0x58, 0x7f, 0x22, 0xe1, 0xbd, 0x5e, 0xe0, 0xc3, 0x01, 0xc1, 0xfd, 0xe9, 0x93, 0xe4, - 0x0b, 0x46, 0x38, 0x20, 0xf3, 0x17, 0x48, 0x20, 0x20, 0xe6, 0x48, 0x63, 0x93, 0x6d, 0xcc, 0x68, - 0xc8, 0x27, 0x65, 0x2a, 0xb6, 0x4d, 0xca, 0x04, 0xb4, 0x4b, 0x3c, 0x81, 0x92, 0x43, 0x43, 0x36, - 0x49, 0x99, 0xea, 0x10, 0x6a, 0xf4, 0xc7, 0x13, 0xa0, 0x82, 0xd1, 0xbb, 0x54, 0x72, 0xc9, 0xcd, - 0x15, 0x4b, 0x25, 0xf4, 0x05, 0xd1, 0xe0, 0x1b, 0xa9, 0xcb, 0xe7, 0x68, 0xd8, 0x67, 0xa0, 0x49, - 0x0e, 0xaa, 0x74, 0x3d, 0x42, 0xc6, 0xb2, 0xd9, 0x84, 0x2d, 0xf6, 0x9a, 0x53, 0xf0, 0x5a, 0x94, - 0x57, 0xdc, 0x98, 0x0f, 0x66, 0x1c, 0x55, 0xe5, 0x26, 0xb4, 0xd3, 0x6b, 0x15, 0x7b, 0x2c, 0x6f, - 0x2e, 0x23, 0x06, 0x78, 0x55, 0xa2, 0x8b, 0xa5, 0xcf, 0x05, 0x13, 0xf9, 0x7d, 0x2e, 0xc0, 0x52, - 0x9b, 0xdd, 0xe9, 0x0c, 0x24, 0x1a, 0xe9, 0x54, 0x3c, 0xff, 0x56, 0x40, 0x22, 0xff, 0xb5, 0x3b, - 0x63, 0xaf, 0x2b, 0x1b, 0xfb, 0x4c, 0x40, 0xf3, 0xac, 0x7e, 0x21, 0xa0, 0x19, 0x3e, 0x25, 0x11, - 0xdb, 0xc5, 0xef, 0x21, 0x3f, 0xd7, 0x1f, 0x05, 0xeb, 0xe9, 0x37, 0x45, 0x2f, 0x2d, 0x92, 0x0a, - 0x01, 0xc7, 0x58, 0x29, 0x29, 0x89, 0xcd, 0x21, 0x09, 0xd2, 0x6d, 0xd2, 0xdf, 0xd1, 0x67, 0xc4, - 0x6b, 0x8c, 0x18, 0xf5, 0x30, 0xef, 0x0a, 0x55, 0x76, 0x1b, 0x31, 0xea, 0x67, 0x43, 0x5f, 0x70, - 0x06, 0xd4, 0xba, 0x8f, 0x64, 0x3e, 0xf9, 0x94, 0xd0, 0xa4, 0x25, 0xf3, 0x7a, 0xd5, 0x93, 0xaa, - 0xfc, 0x38, 0x7a, 0xd4, 0x6b, 0x19, 0xab, 0x34, 0x03, 0x1a, 0xe3, 0x22, 0xb6, 0xec, 0xf4, 0xe3, - 0x5c, 0xb6, 0xe4, 0xff, 0x21, 0xa0, 0x99, 0x5c, 0xcb, 0x3b, 0x2d, 0xf7, 0xa3, 0xf3, 0xc1, 0x8e, - 0x6c, 0x4b, 0x70, 0xb0, 0xbb, 0x4b, 0x8f, 0x61, 0x6d, 0x44, 0x47, 0xa6, 0x8b, 0x9c, 0x14, 0xd0, - 0xf4, 0x8d, 0x3b, 0x43, 0xd1, 0x6f, 0x67, 0x8d, 0x9f, 0xcd, 0x5e, 0xe3, 0xa5, 0x78, 0xf7, 0xd2, - 0xd7, 0x98, 0x4a, 0x8a, 0xcc, 0xa7, 0xd7, 0x32, 0xb7, 0xf6, 0xa7, 0x7b, 0xda, 0x72, 0x2e, 0x33, - 0x75, 0xc4, 0xcb, 0x1e, 0xad, 0x34, 0x03, 0x9a, 0xe7, 0x5e, 0xe5, 0xff, 0x2e, 0xa0, 0x19, 0x46, - 0xc3, 0x3f, 0xb6, 0x45, 0xce, 0x4c, 0x42, 0x33, 0x41, 0xec, 0xf2, 0xcb, 0xbc, 0x26, 0x6b, 0x99, - 0x2b, 0x1d, 0x96, 0x19, 0xb6, 0x96, 0x45, 0xce, 0xab, 0xbc, 0x23, 0x4b, 0xb1, 0xab, 0xcf, 0xa1, - 0xd8, 0xad, 0x88, 0x49, 0x63, 0x2a, 0x76, 0x93, 0xb1, 0x62, 0xb7, 0xd9, 0xb7, 0xea, 0xbb, 0xd7, - 0xec, 0xa8, 0x8e, 0x96, 0xff, 0x95, 0x75, 0xb4, 0x82, 0x6f, 0x50, 0x47, 0x9b, 0xf4, 0x0d, 0xe9, - 0x68, 0x86, 0x42, 0x35, 0xd9, 0x5e, 0xa1, 0xb2, 0x90, 0xc6, 0x77, 0xa7, 0x50, 0x71, 0x89, 0x4a, - 0x0a, 0x6d, 0x13, 0x95, 0xc0, 0x54, 0x09, 0x65, 0x9b, 0x55, 0x12, 0x0a, 0xf2, 0x8d, 0xeb, 0x11, - 0x2b, 0x55, 0xb9, 0x0a, 0x3d, 0xe6, 0xb5, 0xf2, 0x8b, 0x34, 0x03, 0x86, 0x91, 0x5b, 0xd0, 0xfc, - 0x4f, 0x01, 0x89, 0x7c, 0xd3, 0x3f, 0x36, 0x51, 0xf3, 0xba, 0x0b, 0xcd, 0x84, 0xc3, 0xe0, 0xb7, - 0x22, 0x6a, 0x12, 0xd9, 0xb9, 0x07, 0x88, 0x6b, 0xa4, 0x1e, 0xc0, 0x62, 0x2d, 0x1f, 0x9f, 0xc2, - 0x18, 0x1b, 0xa6, 0xc1, 0x83, 0xd7, 0x92, 0x37, 0x6f, 0xa5, 0x7a, 0x3f, 0x00, 0x77, 0x77, 0x60, - 0x1b, 0xad, 0xbf, 0x2b, 0xd5, 0x41, 0x22, 0xdc, 0xdf, 0x38, 0x43, 0x12, 0x08, 0xbc, 0xad, 0xb5, - 0x5f, 0x48, 0x0f, 0x77, 0xa4, 0xfa, 0xde, 0xe1, 0x53, 0x05, 0x54, 0x55, 0xaa, 0x72, 0x39, 0xf2, - 0x7a, 0xad, 0x13, 0x93, 0x8a, 0x69, 0xda, 0x7e, 0x32, 0x03, 0x9d, 0x1e, 0x3c, 0xad, 0x2e, 0x16, - 0xda, 0xe4, 0x4e, 0xa2, 0x82, 0xe7, 0xc6, 0x41, 0x05, 0xe4, 0xd6, 0x0e, 0xa8, 0x60, 0x0e, 0x1f, - 0x89, 0xdc, 0x42, 0x08, 0xfb, 0x05, 0x34, 0x6d, 0x8d, 0x92, 0xe0, 0xa9, 0x60, 0x75, 0x16, 0x15, - 0x2c, 0x51, 0xe5, 0x99, 0x3a, 0x15, 0x4c, 0xc6, 0x90, 0xee, 0xf1, 0x10, 0x41, 0x55, 0x85, 0x2a, - 0x7b, 0x51, 0x99, 0x37, 0xab, 0x7b, 0x69, 0x0e, 0x78, 0xe2, 0x1b, 0x23, 0xa1, 0x51, 0xba, 0xff, - 0xdc, 0x85, 0xa6, 0xeb, 0xa0, 0x3f, 0x4e, 0x7e, 0xd4, 0x63, 0x73, 0x67, 0x2f, 0x43, 0xd5, 0x2a, - 0x55, 0xae, 0x46, 0xcf, 0x78, 0xb3, 0x11, 0x30, 0xd1, 0xb0, 0xd8, 0xff, 0x6d, 0x12, 0x9a, 0xbe, - 0x36, 0x14, 0x37, 0x2d, 0x67, 0xc0, 0xfa, 0x26, 0x6c, 0x95, 0x2a, 0x3f, 0xc1, 0x1f, 0x86, 0x97, - 0x18, 0x47, 0xd5, 0xf1, 0xc5, 0xc1, 0x86, 0xbb, 0x28, 0x53, 0xbc, 0x1e, 0xee, 0x3c, 0x0c, 0xa8, - 0x97, 0x48, 0x44, 0x7c, 0xe3, 0x3c, 0x3c, 0x37, 0xeb, 0x23, 0x7c, 0x6c, 0x5c, 0xe8, 0xd1, 0xcd, - 0x9f, 0x82, 0x9f, 0x32, 0x4e, 0xc1, 0x79, 0x46, 0x6e, 0x40, 0xfb, 0x53, 0x30, 0x79, 0xb8, 0x05, - 0xb9, 0x01, 0xf5, 0x33, 0xf0, 0x53, 0xc6, 0x96, 0x95, 0xcf, 0xb5, 0xb7, 0xdd, 0xb2, 0xf8, 0xf6, - 0x2c, 0xb3, 0x16, 0x6f, 0x85, 0x2b, 0xf8, 0xee, 0xad, 0x70, 0x31, 0x5d, 0x59, 0x9b, 0x64, 0xf8, - 0x96, 0x33, 0x65, 0x6d, 0x1d, 0xaf, 0xac, 0x95, 0xf1, 0x6a, 0x5a, 0xb9, 0x5b, 0xf7, 0x8c, 0xa7, - 0x6a, 0x9a, 0xe1, 0x0d, 0x4f, 0xb5, 0xb4, 0x72, 0xf7, 0xea, 0x0d, 0xbe, 0x9a, 0x55, 0x7a, 0xac, - 0xa2, 0xc5, 0xba, 0xda, 0xb6, 0x99, 0x3e, 0x89, 0xa8, 0xa7, 0x76, 0x27, 0xbc, 0xc7, 0xd2, 0x27, - 0x11, 0xf5, 0xd2, 0xd2, 0xd4, 0x99, 0xc3, 0xc9, 0xa1, 0xb7, 0xb5, 0xde, 0xa1, 0xd4, 0xc9, 0x81, - 0xe4, 0xe0, 0x01, 0x23, 0xf2, 0x77, 0x5d, 0x3d, 0x0d, 0x25, 0x3c, 0x70, 0x43, 0x1b, 0x3a, 0xaa, - 0x87, 0xee, 0xa0, 0xef, 0x25, 0xea, 0xc5, 0x5f, 0xd8, 0xc5, 0xc0, 0x21, 0x41, 0xf9, 0x4c, 0xd6, - 0xf2, 0xfb, 0xa0, 0x47, 0xce, 0x21, 0x26, 0x73, 0x6b, 0x7f, 0x6a, 0xf8, 0x3c, 0x5b, 0x68, 0xe2, - 0xfa, 0x6a, 0xb2, 0x95, 0xbf, 0x21, 0xa8, 0xf2, 0x3e, 0x01, 0xbd, 0x2e, 0x78, 0xb3, 0x89, 0x5e, - 0x8a, 0xc2, 0x90, 0x30, 0x3a, 0xbf, 0xa3, 0xd8, 0xc9, 0x1f, 0xe6, 0xa1, 0x19, 0xc6, 0x28, 0xee, - 0x0c, 0xf9, 0xb5, 0x31, 0xb7, 0x2b, 0x32, 0x91, 0x5f, 0xf0, 0x38, 0x82, 0xc8, 0xaf, 0x05, 0xa6, - 0x88, 0xc9, 0xdc, 0xb2, 0x98, 0xa2, 0xd0, 0x28, 0x08, 0x35, 0xfa, 0x13, 0x0a, 0x60, 0x82, 0x5e, - 0x3b, 0xda, 0x77, 0x8d, 0xf7, 0x6b, 0xda, 0xf5, 0x22, 0xbd, 0x6b, 0xed, 0xe6, 0x9b, 0x5a, 0xe7, - 0xc1, 0x54, 0x6f, 0x6b, 0xea, 0xf8, 0x95, 0xac, 0xf0, 0x93, 0x3e, 0xae, 0x63, 0xdd, 0x9c, 0x90, - 0x8d, 0x73, 0x49, 0xa4, 0x22, 0x13, 0x74, 0x60, 0x87, 0xe0, 0xcc, 0xc3, 0x8b, 0xd0, 0x02, 0x60, - 0x55, 0x2e, 0x3d, 0xe5, 0x86, 0x28, 0xd6, 0xf1, 0x99, 0xdc, 0xfc, 0x1d, 0x9a, 0x19, 0x8a, 0x13, - 0xdb, 0x7e, 0x6d, 0xe4, 0x95, 0x30, 0x5c, 0x32, 0x91, 0x85, 0x2c, 0x84, 0x47, 0x0f, 0xd6, 0x5a, - 0xe9, 0x21, 0x92, 0x17, 0xb3, 0x22, 0x18, 0x79, 0x25, 0x5c, 0x01, 0x11, 0xf7, 0x83, 0xe5, 0x34, - 0x66, 0x7f, 0xfb, 0x9e, 0x4c, 0xff, 0x20, 0xbd, 0x02, 0x80, 0xbc, 0xd4, 0xd6, 0xf6, 0xe2, 0x2b, - 0xa8, 0x50, 0x79, 0x35, 0xea, 0x0f, 0x07, 0xf5, 0x83, 0xf8, 0x8b, 0xaa, 0xfc, 0x4b, 0xaf, 0x5e, - 0x28, 0xad, 0x65, 0x7f, 0x51, 0xe7, 0x96, 0x74, 0xff, 0x89, 0xd4, 0xb5, 0x63, 0x24, 0x0c, 0x6c, - 0x07, 0x78, 0xe4, 0xdf, 0x1e, 0xe9, 0x8c, 0xf9, 0xc3, 0xc1, 0x48, 0x53, 0xb9, 0xbb, 0x51, 0xf1, - 0xc7, 0x13, 0x15, 0xaf, 0xf8, 0xe3, 0x09, 0xa5, 0xdc, 0xdd, 0x14, 0x89, 0x27, 0x2a, 0xa2, 0x91, - 0x60, 0xbc, 0xdc, 0x1d, 0x8d, 0x85, 0x22, 0xb1, 0x50, 0x62, 0x97, 0x4f, 0xef, 0x57, 0xdc, 0x8d, - 0xc4, 0x26, 0xff, 0xab, 0xab, 0x9a, 0xa2, 0x89, 0x5d, 0xd5, 0xcd, 0x8d, 0x3b, 0x41, 0x40, 0x51, - 0x7f, 0xe5, 0x67, 0x55, 0x79, 0x8d, 0xd7, 0xa6, 0x5a, 0x5a, 0xd6, 0xe4, 0x7f, 0xb5, 0x42, 0xc1, - 0x85, 0x15, 0xdb, 0x9a, 0x1b, 0x77, 0x56, 0x40, 0x00, 0xb3, 0x72, 0xed, 0xe0, 0xb1, 0xd4, 0xe5, - 0x73, 0x34, 0xc8, 0x13, 0xf1, 0x44, 0x35, 0xdc, 0x20, 0x6c, 0xba, 0x11, 0x5f, 0x43, 0xd3, 0xe2, - 0x0c, 0x0f, 0xb5, 0x4a, 0xa3, 0x7f, 0x17, 0x7d, 0xc1, 0xb4, 0x51, 0x95, 0xeb, 0xbd, 0x59, 0x55, - 0xd2, 0x53, 0x2c, 0xb6, 0x23, 0x71, 0xed, 0x39, 0x7c, 0x48, 0x3b, 0xdf, 0x33, 0x7a, 0xec, 0x16, - 0x9c, 0xd3, 0xb4, 0x91, 0x56, 0xed, 0xe2, 0x01, 0xad, 0xe3, 0xbc, 0xd6, 0xdf, 0x03, 0x9f, 0xd7, - 0xdf, 0x29, 0x2c, 0x5b, 0xaa, 0x75, 0xec, 0x1b, 0x55, 0xcf, 0xf8, 0xb2, 0xfa, 0x13, 0xff, 0x81, - 0x80, 0x66, 0xeb, 0x45, 0x9b, 0xc3, 0x61, 0x45, 0x09, 0x2a, 0x41, 0xee, 0x88, 0x08, 0xc1, 0x55, - 0xbd, 0xf6, 0x30, 0x52, 0x84, 0x5b, 0xef, 0x66, 0x5a, 0x51, 0x91, 0x08, 0x35, 0x29, 0xe5, 0xf4, - 0xbc, 0x07, 0x31, 0xea, 0xfa, 0x3a, 0xb5, 0xcf, 0xda, 0x61, 0x8c, 0x78, 0x43, 0xa5, 0xef, 0x43, - 0x4f, 0xa7, 0x87, 0xfb, 0xd2, 0xef, 0x0f, 0x8d, 0x9e, 0xf8, 0x48, 0x3b, 0xdf, 0xa3, 0x5d, 0x39, - 0x02, 0x23, 0xd4, 0x0e, 0x1f, 0xca, 0xbc, 0xf3, 0xa1, 0xd3, 0xf0, 0xed, 0xc7, 0x21, 0xfe, 0x67, - 0x01, 0xcd, 0x37, 0x6a, 0x12, 0xa1, 0xc6, 0xd0, 0x6e, 0x72, 0x6f, 0xb5, 0x69, 0x47, 0x4c, 0xf1, - 0xef, 0x88, 0x34, 0x06, 0xe9, 0xa5, 0x04, 0x0d, 0x6d, 0x9d, 0x1b, 0x56, 0x7a, 0x5d, 0xe0, 0xa7, - 0x65, 0x40, 0x54, 0x24, 0x76, 0xc4, 0x94, 0x38, 0x06, 0x29, 0x87, 0xc8, 0x6a, 0x94, 0x9c, 0x49, - 0xfe, 0xa9, 0xd1, 0xb7, 0x3a, 0xb4, 0xd6, 0x11, 0x63, 0x7a, 0x5c, 0x76, 0x46, 0x2c, 0x23, 0x6f, - 0x1e, 0x4a, 0x0e, 0x1d, 0x82, 0x79, 0xa6, 0x4f, 0x7e, 0xa6, 0x75, 0xec, 0x4b, 0x0d, 0x1c, 0x85, - 0x95, 0x02, 0xb1, 0x3a, 0x7a, 0xe2, 0x23, 0x23, 0x47, 0xd8, 0xe0, 0xd0, 0xc3, 0x4b, 0x7d, 0xb9, - 0x07, 0x29, 0x1e, 0x14, 0xd0, 0x3d, 0xf1, 0x9d, 0x21, 0x48, 0x50, 0xf5, 0x8b, 0x50, 0x62, 0xc7, - 0xda, 0x48, 0xc0, 0xdf, 0xb8, 0x31, 0x11, 0x89, 0x61, 0xe1, 0x39, 0x99, 0xb0, 0xe9, 0x06, 0x55, - 0x5e, 0xeb, 0x75, 0x86, 0x92, 0x2a, 0xb5, 0x5b, 0x37, 0xd3, 0xc7, 0x2e, 0xa4, 0x7a, 0x3b, 0x53, - 0xbd, 0x97, 0xb5, 0xde, 0x2b, 0x5a, 0xdf, 0x5b, 0xda, 0xde, 0x4b, 0xba, 0x0f, 0x0a, 0x3f, 0x20, - 0xc8, 0x80, 0xeb, 0xdc, 0x97, 0x78, 0x5a, 0x40, 0x77, 0x9b, 0x6a, 0x37, 0xee, 0x8a, 0x27, 0x94, - 0xa6, 0xfa, 0x48, 0x30, 0x4e, 0xa3, 0x5d, 0x93, 0x18, 0x7e, 0x4e, 0x30, 0xd2, 0x6a, 0x18, 0xcb, - 0xce, 0xe6, 0x6d, 0x4a, 0x45, 0x9c, 0x14, 0xbb, 0xd7, 0x6f, 0xc4, 0xdb, 0xec, 0xa9, 0xd3, 0xb5, - 0x7e, 0xa5, 0x29, 0x12, 0xde, 0xa8, 0x24, 0xf4, 0x27, 0x14, 0xf5, 0x91, 0xa0, 0x75, 0x94, 0x30, - 0x44, 0xa7, 0x0f, 0x88, 0x87, 0x05, 0x34, 0x37, 0xd4, 0x10, 0x8e, 0xc4, 0x14, 0xbd, 0xbf, 0x38, - 0x87, 0x59, 0x1a, 0x37, 0x8e, 0x64, 0x3a, 0xcd, 0x05, 0x27, 0x95, 0xc3, 0x40, 0x8d, 0x41, 0xb1, - 0x3c, 0xaa, 0x99, 0xfe, 0x73, 0xe9, 0xfe, 0x13, 0x59, 0xc3, 0xc9, 0xd5, 0x95, 0xb8, 0x47, 0x40, - 0x77, 0x45, 0x76, 0x6e, 0x8a, 0x24, 0xfc, 0x8d, 0x9b, 0xc3, 0x31, 0xc5, 0x1f, 0xdc, 0x55, 0x13, - 0x69, 0x0e, 0x27, 0xc8, 0x8d, 0xcd, 0x54, 0x58, 0x3d, 0xbb, 0x7a, 0xe9, 0xe1, 0xc8, 0xce, 0x8a, - 0x04, 0x2e, 0xad, 0x68, 0x86, 0xe2, 0x8a, 0x00, 0x2e, 0x2f, 0x07, 0x21, 0xeb, 0xa6, 0x85, 0x6e, - 0x3d, 0x94, 0x58, 0xea, 0xd8, 0x95, 0xd1, 0xfd, 0xdd, 0x3e, 0xbb, 0xbe, 0xc4, 0xcf, 0x05, 0x74, - 0x4f, 0x93, 0xff, 0x55, 0xbe, 0xa2, 0x5e, 0x89, 0x05, 0x94, 0x70, 0x02, 0xd3, 0xd1, 0x14, 0x32, - 0x92, 0x37, 0x05, 0x55, 0xee, 0x16, 0xbc, 0xce, 0x70, 0x52, 0x0c, 0x8b, 0x42, 0xf3, 0x90, 0xa2, - 0x7a, 0x6d, 0x39, 0x2d, 0xa2, 0x9c, 0x41, 0xa2, 0x7e, 0x51, 0x31, 0xd6, 0x3a, 0xac, 0x0f, 0x52, - 0x67, 0x0b, 0xcc, 0x43, 0x04, 0x26, 0xd5, 0x77, 0x1e, 0xb8, 0x4a, 0xeb, 0x38, 0xa9, 0xed, 0xe9, - 0x4d, 0xf5, 0xbd, 0xc3, 0xfb, 0xbb, 0xfb, 0x9c, 0x87, 0x23, 0xaa, 0x02, 0x9a, 0xc5, 0x49, 0x0a, - 0x52, 0x4d, 0x84, 0x5a, 0x31, 0x99, 0xcf, 0x6f, 0x54, 0xf9, 0x45, 0xaf, 0x2d, 0x80, 0x54, 0x63, - 0x92, 0x68, 0x30, 0x13, 0x22, 0xd0, 0x4c, 0x73, 0xb0, 0x95, 0x6b, 0xda, 0xc1, 0x63, 0xc9, 0x9b, - 0x07, 0xd3, 0x17, 0x55, 0x9f, 0x6d, 0xd7, 0xe2, 0x5f, 0x0a, 0x68, 0x2e, 0xee, 0xa5, 0x21, 0x84, - 0x15, 0x01, 0xe6, 0x0e, 0xd4, 0x14, 0x69, 0xf1, 0x37, 0x92, 0xb1, 0x4d, 0x25, 0x63, 0x23, 0xee, - 0x9f, 0xde, 0x5c, 0x80, 0xd2, 0xcb, 0x2c, 0x02, 0x24, 0x7b, 0x28, 0x43, 0x74, 0x67, 0xed, 0xb3, - 0x76, 0xd3, 0x66, 0x70, 0x65, 0x1f, 0x0d, 0xe4, 0xd9, 0xfb, 0x81, 0xd6, 0x7b, 0x09, 0xf3, 0x55, - 0x2c, 0xac, 0x24, 0x94, 0x78, 0x72, 0xb0, 0x2f, 0x75, 0xed, 0x92, 0xb6, 0xaf, 0xcb, 0xca, 0x41, - 0xcb, 0x99, 0x98, 0xcd, 0xf5, 0x79, 0xb1, 0x89, 0x3f, 0x4f, 0x4d, 0x63, 0x57, 0xe4, 0xe5, 0xfc, - 0x79, 0x6a, 0x21, 0x77, 0x58, 0xc2, 0x98, 0x31, 0x1f, 0xaa, 0x26, 0x96, 0x48, 0xa8, 0xca, 0x38, - 0x07, 0x4d, 0x67, 0x2a, 0xe1, 0x2c, 0xe3, 0x1c, 0x54, 0xc4, 0x9d, 0x80, 0x2c, 0xf7, 0x80, 0x2b, - 0xb9, 0xe4, 0xc0, 0x33, 0x58, 0xe0, 0x8b, 0x05, 0x5c, 0x6a, 0x60, 0x31, 0xdd, 0x79, 0x23, 0xd5, - 0x7a, 0x91, 0x66, 0x01, 0x26, 0x21, 0x4f, 0xb9, 0x9c, 0xbd, 0x97, 0x6c, 0x92, 0x8c, 0xcf, 0x24, - 0x62, 0xe2, 0x4f, 0x55, 0xf9, 0x35, 0x6b, 0x22, 0xf1, 0x1d, 0x7c, 0x7e, 0xa2, 0x2c, 0xbf, 0x07, - 0x62, 0x5f, 0x24, 0x79, 0x8b, 0x0e, 0x1f, 0x4a, 0x8e, 0xf4, 0x68, 0xbd, 0x97, 0x32, 0x03, 0x17, - 0x00, 0x1f, 0xa3, 0xaf, 0x5f, 0x4a, 0xdf, 0xfc, 0xc8, 0x4d, 0x8f, 0x41, 0x9c, 0x3e, 0xe6, 0x4e, - 0x0f, 0xb7, 0x25, 0x87, 0xaf, 0xf3, 0x72, 0xd8, 0xed, 0x90, 0x8a, 0xfc, 0x1f, 0x09, 0xe8, 0xae, - 0x6d, 0xcd, 0xdb, 0xb7, 0x2b, 0x31, 0x1f, 0x4d, 0x19, 0xec, 0xc3, 0x32, 0x86, 0xbc, 0x2a, 0x9c, - 0x5a, 0x7d, 0x4c, 0x50, 0xe5, 0x23, 0x82, 0xd7, 0x0e, 0x42, 0xda, 0x0d, 0x85, 0x15, 0x2c, 0xd5, - 0x70, 0x05, 0x49, 0x17, 0x4e, 0x77, 0x38, 0xea, 0x60, 0xc7, 0xed, 0x70, 0x3c, 0x9b, 0xd2, 0x27, - 0x27, 0xdc, 0x56, 0x97, 0x3e, 0xb4, 0x1f, 0x78, 0x37, 0x33, 0x70, 0x01, 0xb6, 0x43, 0xad, 0xe3, - 0x24, 0xdf, 0x95, 0x3e, 0x17, 0xf7, 0xb2, 0xa5, 0x4b, 0x7d, 0x76, 0x03, 0x12, 0xcf, 0x83, 0x44, - 0x5a, 0x13, 0xf3, 0x07, 0x94, 0xed, 0xcd, 0x8d, 0x9b, 0x68, 0x90, 0xed, 0x10, 0x96, 0x9f, 0x01, - 0x92, 0xcc, 0x77, 0x6a, 0xf5, 0x76, 0x55, 0x0e, 0x78, 0x9d, 0xa1, 0xa4, 0xd5, 0x58, 0x1e, 0x35, - 0xd0, 0xba, 0x8a, 0x84, 0x51, 0x59, 0x11, 0x57, 0x02, 0xe5, 0x54, 0x37, 0x23, 0x61, 0x55, 0x81, - 0x73, 0xdc, 0xf5, 0x91, 0xa0, 0x7b, 0xb4, 0xb5, 0x55, 0xdb, 0x3f, 0x94, 0xea, 0x6d, 0xd5, 0x99, - 0xc8, 0xe7, 0xfc, 0x09, 0xb1, 0x4d, 0x40, 0xc5, 0xf1, 0x80, 0x3f, 0x5c, 0x17, 0x4e, 0x28, 0xb1, - 0x16, 0x7f, 0x63, 0xc9, 0x2c, 0x32, 0xb2, 0x97, 0x55, 0xf9, 0x25, 0xaf, 0xa9, 0x42, 0x5a, 0x87, - 0x7f, 0x55, 0x84, 0xe8, 0xcf, 0xf2, 0x2c, 0xc2, 0x48, 0xbd, 0xdb, 0x9a, 0xfa, 0xe4, 0x00, 0x7c, - 0x0f, 0xff, 0xd7, 0x73, 0x54, 0x97, 0x25, 0x58, 0x35, 0xb8, 0xa8, 0x9a, 0x96, 0x7f, 0xd9, 0x52, - 0x9f, 0xa9, 0x73, 0xbc, 0xef, 0xce, 0x6a, 0xf2, 0xbf, 0x8a, 0x99, 0xb4, 0x1e, 0xd3, 0x6d, 0x9c, - 0x99, 0xf8, 0x67, 0x93, 0xe1, 0xfc, 0x56, 0x95, 0x1b, 0xbc, 0xb6, 0x00, 0xd2, 0x06, 0x8c, 0x23, - 0x7c, 0x9c, 0xac, 0x88, 0xb2, 0x72, 0x10, 0x75, 0x80, 0x12, 0xaa, 0xb4, 0x76, 0x1f, 0x4e, 0x7e, - 0xf6, 0x36, 0x8f, 0x13, 0x5e, 0xd2, 0x19, 0xab, 0xf9, 0xf8, 0xd2, 0xa5, 0x3e, 0xdb, 0xcf, 0x88, - 0xa7, 0x04, 0x34, 0x9d, 0xd0, 0xe8, 0xe6, 0x28, 0x3e, 0xec, 0xbf, 0xa0, 0xc4, 0x22, 0x25, 0x73, - 0xc6, 0xcc, 0xd4, 0xff, 0x0b, 0x55, 0xde, 0xe4, 0xcd, 0x6e, 0x27, 0xc9, 0x20, 0x9d, 0x9b, 0xa3, - 0x15, 0xdb, 0x63, 0x91, 0xa6, 0x8a, 0xdd, 0x4a, 0x2c, 0x42, 0x37, 0x3d, 0x7e, 0x67, 0xb8, 0x3d, - 0xd2, 0x91, 0xfa, 0xe8, 0x5c, 0xaa, 0xb7, 0xd3, 0xcd, 0xef, 0x83, 0x64, 0xb9, 0x3b, 0x7d, 0xd9, - 0x7d, 0xe2, 0xf1, 0xcd, 0x31, 0x2b, 0xc5, 0xf2, 0x76, 0xcc, 0x86, 0xc1, 0x60, 0xc9, 0xdd, 0x04, - 0x85, 0x8a, 0x2a, 0x6f, 0xf3, 0x3a, 0x80, 0x48, 0x3f, 0xe7, 0xf6, 0x8b, 0x20, 0xae, 0xa9, 0xf0, - 0x6f, 0x27, 0xa2, 0x39, 0x18, 0x2c, 0x37, 0x94, 0xf4, 0x8e, 0xf3, 0xa9, 0xe3, 0x7d, 0x3a, 0xd5, - 0x59, 0x17, 0x1a, 0x6f, 0x1a, 0x0e, 0x5f, 0x10, 0xdf, 0xc3, 0x8a, 0x9e, 0xb5, 0x8a, 0x1e, 0x51, - 0x4a, 0xc8, 0x10, 0x49, 0xb4, 0x5b, 0x67, 0x28, 0xc7, 0x51, 0xd2, 0x13, 0x0b, 0xe8, 0xe2, 0xc9, - 0xc1, 0xf3, 0xc6, 0xb9, 0xc5, 0x69, 0x94, 0xce, 0x1f, 0x11, 0xff, 0xb1, 0x80, 0x4a, 0x6d, 0x6a, - 0x57, 0xfb, 0x43, 0x8d, 0xcd, 0x31, 0xa5, 0xe4, 0x9e, 0x71, 0x64, 0x13, 0x6f, 0x52, 0xe5, 0xdf, - 0x7a, 0x73, 0x74, 0x22, 0xad, 0x75, 0x98, 0xc8, 0x76, 0xa8, 0xa7, 0x9c, 0x0d, 0xc9, 0x48, 0xb5, - 0xc3, 0x87, 0xe0, 0x62, 0xdd, 0x71, 0x32, 0x39, 0xbe, 0x24, 0xee, 0x75, 0x21, 0xb7, 0x5e, 0xbd, - 0x26, 0xda, 0x9c, 0xa5, 0x84, 0x93, 0x63, 0x40, 0x49, 0x29, 0xc1, 0xfe, 0x27, 0x82, 0x2a, 0x5f, - 0x15, 0xbc, 0x63, 0x82, 0x4b, 0x5d, 0xfc, 0xc1, 0xa2, 0x21, 0xda, 0x3c, 0xc1, 0xc3, 0x45, 0xd9, - 0x9a, 0xfa, 0xcd, 0x8b, 0xbf, 0xc1, 0x13, 0xc6, 0x98, 0x03, 0x16, 0xff, 0x4e, 0x40, 0x73, 0xcc, - 0x22, 0xba, 0x26, 0xda, 0x0c, 0x1b, 0xcb, 0x5c, 0x32, 0xf5, 0x5e, 0x41, 0x95, 0xdf, 0x12, 0xbc, - 0x0e, 0x40, 0xd2, 0x9f, 0xda, 0x97, 0x4f, 0x60, 0x73, 0x09, 0x44, 0x9b, 0xbf, 0xc6, 0xfe, 0xe2, - 0x30, 0x2e, 0x9b, 0x79, 0xad, 0x53, 0x9a, 0x60, 0x5e, 0xf3, 0x72, 0xcc, 0x8b, 0x01, 0x65, 0xcf, - 0x8b, 0x95, 0x4f, 0x60, 0x5e, 0x4d, 0x4a, 0xd3, 0x37, 0x37, 0x2f, 0xf6, 0xfd, 0x2a, 0xbc, 0x2d, - 0x22, 0xbf, 0x77, 0x0c, 0xcb, 0x8e, 0x34, 0x1f, 0x74, 0x26, 0x4b, 0xbd, 0x5d, 0x28, 0x5b, 0x5b, - 0x97, 0xa2, 0xff, 0x25, 0xa0, 0x85, 0x8e, 0xdf, 0xb8, 0x33, 0x4c, 0x7f, 0x4f, 0x9a, 0xae, 0x2e, - 0xca, 0x2c, 0xce, 0x7b, 0x16, 0x65, 0x8c, 0x4e, 0x0f, 0xee, 0x19, 0xd2, 0x0f, 0xb1, 0x37, 0x17, - 0x3f, 0x24, 0xf3, 0xd9, 0x45, 0xc1, 0x62, 0x3f, 0x7b, 0x43, 0xf8, 0x16, 0x0d, 0x68, 0x5f, 0x56, - 0x97, 0xc7, 0xbc, 0xbe, 0x49, 0x00, 0xee, 0x9b, 0xc2, 0x81, 0xfb, 0x8a, 0x74, 0x70, 0xac, 0x4f, - 0x5b, 0xec, 0x6d, 0xaf, 0x0b, 0x39, 0x0c, 0x6e, 0x1b, 0xbf, 0x39, 0x83, 0xdb, 0x97, 0xd5, 0x93, - 0xbc, 0xf9, 0x25, 0xc1, 0x32, 0xc1, 0xd6, 0xf2, 0xb6, 0x4f, 0x70, 0x30, 0xbd, 0xfd, 0xe6, 0x5b, - 0x30, 0xbd, 0x7d, 0x59, 0x5d, 0xe8, 0x9d, 0x54, 0xd2, 0xfa, 0x6e, 0x41, 0xd9, 0x93, 0x16, 0x2b, - 0xdc, 0x3f, 0x19, 0xc3, 0x0a, 0x77, 0xe2, 0x07, 0x65, 0x85, 0xe3, 0x67, 0xe2, 0x60, 0x90, 0xfb, - 0x7f, 0xc6, 0x69, 0x90, 0xfb, 0xe8, 0xce, 0x31, 0xc8, 0x01, 0x29, 0xd5, 0x97, 0xfd, 0x6c, 0x2c, - 0xcb, 0xdc, 0xfb, 0x63, 0x5a, 0xe6, 0x72, 0xab, 0xbe, 0xdf, 0xa5, 0xd5, 0x6e, 0x68, 0x0c, 0xab, - 0x5d, 0xee, 0x91, 0x7e, 0xcf, 0x16, 0xbd, 0xd3, 0xe3, 0xb0, 0xe8, 0xe5, 0x9e, 0xc0, 0x33, 0xaa, - 0xbc, 0x32, 0xb7, 0xb5, 0x6f, 0x41, 0x6e, 0x6b, 0x5f, 0x6e, 0xfb, 0x5e, 0x57, 0x4e, 0xfb, 0xde, - 0x0b, 0xdf, 0xb0, 0x7d, 0x8f, 0xb2, 0xe5, 0x5f, 0xdc, 0x55, 0xf6, 0x33, 0x7b, 0x53, 0xdf, 0xbf, - 0x19, 0x87, 0xa9, 0xaf, 0xf7, 0x87, 0x68, 0xea, 0x63, 0x52, 0xfc, 0x67, 0xb9, 0x6c, 0x7e, 0xa7, - 0x73, 0xdb, 0xfc, 0x7e, 0xfb, 0xed, 0xda, 0xfc, 0xbe, 0xac, 0x2e, 0xf2, 0x4e, 0x26, 0x32, 0xf1, - 0x4a, 0xd1, 0x8f, 0xdc, 0xfe, 0xb7, 0x99, 0x77, 0x75, 0x98, 0xc6, 0x9e, 0x7e, 0x55, 0xf0, 0xae, - 0x0e, 0x6e, 0xf0, 0x6d, 0xc8, 0x32, 0xfe, 0xe5, 0xf6, 0x77, 0xd8, 0xc4, 0x9b, 0x15, 0xa7, 0xb3, - 0xf0, 0x67, 0x13, 0x34, 0x2b, 0x5a, 0xfc, 0x32, 0xaa, 0x0c, 0x2f, 0x88, 0x19, 0x9c, 0xf5, 0x90, - 0x79, 0x41, 0x14, 0xe5, 0x70, 0xd9, 0x33, 0x59, 0x0f, 0x67, 0x4e, 0xdc, 0x7a, 0x38, 0xae, 0x13, - 0xa4, 0xf8, 0x23, 0x3f, 0x41, 0xde, 0x76, 0xb0, 0x4b, 0xde, 0x35, 0x0e, 0x6b, 0xc0, 0xe9, 0x1f, - 0xa6, 0xd5, 0xd2, 0x90, 0x46, 0xb6, 0xe6, 0xcb, 0x81, 0x9c, 0xe6, 0x4b, 0x30, 0x12, 0xfe, 0xee, - 0xbb, 0x31, 0x5f, 0xf2, 0x8a, 0x5a, 0x0e, 0x4b, 0x66, 0x77, 0xb6, 0x25, 0x13, 0x4c, 0x87, 0x3b, - 0xbf, 0x6d, 0x4b, 0xa6, 0x31, 0xbc, 0x82, 0x2c, 0xa3, 0xe6, 0x07, 0x4e, 0x46, 0xcd, 0x39, 0x64, - 0x64, 0x2d, 0xdf, 0x9d, 0x51, 0xd3, 0x90, 0xeb, 0x6d, 0x93, 0x27, 0x60, 0xe0, 0xbc, 0xfb, 0x07, - 0x64, 0xe0, 0x7c, 0xdf, 0xd9, 0xc0, 0x59, 0xc2, 0xa8, 0xf1, 0x3b, 0x30, 0x70, 0x9a, 0x76, 0x48, - 0x27, 0x63, 0xe7, 0xd5, 0x9c, 0xc6, 0xce, 0x7b, 0xc8, 0x70, 0xe3, 0xdf, 0x95, 0xb1, 0xd3, 0xa0, - 0xcf, 0x9f, 0xe5, 0xb2, 0x7b, 0xfe, 0xcb, 0xdc, 0x76, 0xcf, 0xd2, 0x71, 0x48, 0xba, 0x57, 0xbf, - 0x53, 0xbb, 0x27, 0x2f, 0x16, 0x72, 0x99, 0x40, 0xff, 0xdd, 0x58, 0xd6, 0xbf, 0x0b, 0x3f, 0x68, - 0xeb, 0x9f, 0x21, 0xa7, 0x9d, 0xcc, 0x80, 0xff, 0x6e, 0x2c, 0x33, 0xe0, 0x85, 0x1f, 0xb4, 0x19, - 0xd0, 0x71, 0x82, 0x6c, 0x20, 0xa2, 0x1f, 0x4d, 0x6a, 0x8a, 0x04, 0x9b, 0x1b, 0x95, 0x92, 0xf9, - 0x54, 0x20, 0x65, 0x99, 0xb9, 0xd6, 0x91, 0x5a, 0x92, 0xe3, 0xbb, 0x42, 0x95, 0xbd, 0x5e, 0x0a, - 0x2e, 0xb9, 0x61, 0x78, 0x2c, 0x20, 0x6f, 0xe6, 0xe6, 0xe5, 0xf4, 0xc5, 0x61, 0xac, 0xe1, 0x9c, - 0x3a, 0x41, 0x6d, 0x6f, 0x14, 0x52, 0x6c, 0x40, 0x93, 0x5f, 0x51, 0xb6, 0xed, 0x88, 0x44, 0x76, - 0x96, 0x2c, 0x20, 0xdf, 0x98, 0x6b, 0xf3, 0x16, 0x1d, 0x57, 0xaf, 0x8b, 0x04, 0x95, 0xea, 0xa5, - 0x58, 0x51, 0x64, 0x0d, 0x24, 0x0f, 0xfb, 0x8a, 0x9b, 0x96, 0x80, 0x0e, 0x65, 0x8a, 0x5e, 0xc7, - 0x80, 0xc5, 0x28, 0xe4, 0x54, 0x04, 0xab, 0x1b, 0xc9, 0xa9, 0xb8, 0x90, 0x18, 0xd3, 0x7e, 0xae, - 0xca, 0xab, 0xbc, 0x59, 0x55, 0xd2, 0xf2, 0xe4, 0x70, 0x3b, 0xa8, 0x76, 0x35, 0x32, 0x5c, 0xa2, - 0x42, 0xa7, 0x5a, 0xf7, 0xde, 0xd4, 0xb1, 0x2b, 0xd0, 0x75, 0x79, 0x72, 0xf0, 0x20, 0xc5, 0x2d, - 0x49, 0x89, 0xe8, 0xcb, 0xea, 0x44, 0x4c, 0x0b, 0x68, 0x9e, 0xf2, 0x6a, 0x54, 0x09, 0x07, 0xfd, - 0xdb, 0x1a, 0x15, 0x7c, 0xe4, 0xac, 0xa7, 0x96, 0xac, 0x9a, 0xe6, 0x44, 0x64, 0xfb, 0xf6, 0x92, - 0xfb, 0xe9, 0x84, 0xb3, 0x59, 0x9b, 0xe3, 0x6c, 0xc8, 0x0b, 0xe7, 0xcd, 0xd9, 0x8f, 0xe4, 0x4f, - 0x8e, 0xbc, 0xa5, 0xb5, 0x77, 0xa4, 0x87, 0x2e, 0x82, 0x0e, 0x96, 0xea, 0x3b, 0x8f, 0xa9, 0xa5, - 0xa7, 0xcd, 0x1d, 0x8d, 0x04, 0x6f, 0x8f, 0x74, 0xe1, 0xa6, 0xa1, 0x70, 0x83, 0x9b, 0xcf, 0xea, - 0xa8, 0xd3, 0x83, 0x2e, 0xc3, 0x92, 0x23, 0x3d, 0xe9, 0xb7, 0x3f, 0x4e, 0x1d, 0xba, 0xe0, 0xde, - 0x19, 0x6a, 0x6c, 0x64, 0xa1, 0x6f, 0xb5, 0xd6, 0x91, 0x8a, 0x65, 0x4b, 0x7d, 0x39, 0x07, 0x20, - 0x5e, 0x11, 0x90, 0x18, 0x56, 0x5e, 0xa9, 0x8f, 0x04, 0x37, 0xc2, 0xe6, 0x01, 0xc6, 0xb0, 0x07, - 0xc6, 0x21, 0xba, 0xb6, 0xa9, 0xf2, 0x2f, 0xbd, 0x36, 0x8d, 0xa5, 0x6a, 0x6b, 0xd9, 0xed, 0x91, - 0xae, 0xd4, 0xf1, 0x2b, 0xd1, 0x48, 0x50, 0x1b, 0x1e, 0x4a, 0x7f, 0x78, 0x40, 0x3b, 0xdf, 0x93, - 0xbc, 0xd1, 0x9e, 0xbc, 0x71, 0x40, 0x3b, 0x7c, 0x28, 0xd5, 0x49, 0xd7, 0xa2, 0x46, 0x66, 0x23, - 0x77, 0x2f, 0x65, 0x11, 0x3f, 0x6d, 0xba, 0xd7, 0x4d, 0xdd, 0xb9, 0xad, 0xb0, 0xd2, 0x7c, 0xa0, - 0x82, 0x89, 0x9b, 0xba, 0xd9, 0x43, 0x99, 0xf7, 0xf2, 0xd0, 0x42, 0xc7, 0x6f, 0xdc, 0x19, 0xa6, - 0xee, 0xd0, 0x57, 0x33, 0x75, 0x57, 0x3f, 0xa4, 0xca, 0x65, 0xd4, 0x3d, 0xd5, 0xad, 0xbf, 0xa4, - 0xb1, 0x80, 0xfd, 0x40, 0x32, 0x30, 0x7a, 0x4e, 0xe4, 0xa1, 0xfb, 0xe8, 0x42, 0xc5, 0x61, 0x64, - 0xb5, 0x24, 0xc8, 0x74, 0x3d, 0x3d, 0x8f, 0x31, 0xbb, 0xfc, 0x26, 0xeb, 0x73, 0x80, 0x6f, 0xe0, - 0x9c, 0x79, 0x46, 0xe0, 0x0e, 0x8b, 0xb0, 0xa8, 0x70, 0x92, 0x37, 0x4e, 0x8b, 0x71, 0x68, 0x4e, - 0xfd, 0x55, 0xf4, 0x64, 0x29, 0x20, 0xf8, 0x99, 0x59, 0x29, 0x75, 0xf5, 0x2c, 0x38, 0xd4, 0x97, - 0xa5, 0xdf, 0xee, 0xd7, 0x3a, 0x0f, 0x62, 0x39, 0x46, 0x42, 0x4d, 0xed, 0x6a, 0x0e, 0x27, 0x42, - 0x5f, 0xb4, 0xee, 0x89, 0x2b, 0x8d, 0xdb, 0xb3, 0x40, 0x79, 0xb5, 0x9a, 0x80, 0xe9, 0xf5, 0x8b, - 0x8d, 0xe3, 0x68, 0xd5, 0xab, 0xaa, 0xdc, 0x8c, 0xe2, 0xde, 0xf1, 0xe0, 0x48, 0x7a, 0xd8, 0x81, - 0x6b, 0x52, 0xbd, 0x97, 0x53, 0x97, 0xcf, 0x59, 0x87, 0x0c, 0x34, 0x60, 0xe6, 0x26, 0xfd, 0xcb, - 0x9e, 0xbf, 0x14, 0xd0, 0xa2, 0xdc, 0x5f, 0xbd, 0x23, 0xf8, 0xc8, 0xf3, 0xcf, 0x17, 0xa3, 0x79, - 0x1b, 0x77, 0x85, 0x03, 0x3f, 0x5d, 0xf9, 0x7c, 0x95, 0x2b, 0x9f, 0x93, 0xb9, 0xae, 0x7c, 0x42, - 0xf8, 0xac, 0x69, 0x77, 0xe5, 0xb3, 0x66, 0xc2, 0x57, 0x3e, 0x4f, 0xb8, 0x6b, 0x64, 0xed, 0xc6, - 0x75, 0xc3, 0xfe, 0x41, 0x2a, 0x72, 0x5f, 0x04, 0x1d, 0x73, 0xba, 0x08, 0x6a, 0x52, 0xe5, 0xad, - 0x96, 0x8b, 0xa0, 0x75, 0x5f, 0xef, 0x22, 0xe8, 0xf6, 0xc8, 0xdb, 0xa9, 0x13, 0x67, 0x53, 0xc7, - 0x3a, 0x40, 0x19, 0xf9, 0xe9, 0x5e, 0xe8, 0x8f, 0xe4, 0x5e, 0xa8, 0x6b, 0x1c, 0x1e, 0xdb, 0xc4, - 0xfd, 0x38, 0xc7, 0xdd, 0xcf, 0x92, 0xf1, 0xdf, 0xfd, 0x24, 0x62, 0xcd, 0x39, 0xaf, 0x7e, 0x4e, - 0x8d, 0xe9, 0xb0, 0x1d, 0x50, 0xe5, 0x97, 0x9d, 0xaf, 0x77, 0x56, 0x7d, 0xed, 0xeb, 0x1d, 0x32, - 0x42, 0xc7, 0xdb, 0x9d, 0x23, 0xe3, 0xf2, 0xd7, 0x26, 0x97, 0x65, 0x39, 0x6f, 0x70, 0x2a, 0x72, - 0xdf, 0xe0, 0x70, 0x29, 0x22, 0xc8, 0x78, 0x7e, 0xba, 0xd0, 0xf9, 0xe9, 0x42, 0x67, 0x9c, 0x17, - 0x3a, 0x26, 0x4d, 0x72, 0xea, 0xb7, 0x70, 0x63, 0x31, 0x6d, 0xa2, 0x37, 0x16, 0xe3, 0xba, 0x72, - 0x98, 0xfe, 0x23, 0xbf, 0x72, 0xf8, 0x67, 0x0e, 0x57, 0x0e, 0x33, 0xc8, 0xbc, 0xef, 0xcc, 0x4b, - 0x85, 0xcb, 0x39, 0x2f, 0x15, 0x20, 0x6b, 0x4d, 0x18, 0x8b, 0xeb, 0x1c, 0x97, 0x0a, 0x35, 0xe3, - 0xbb, 0x54, 0xf8, 0x56, 0x6e, 0x14, 0xc4, 0x1f, 0xec, 0x8d, 0xc2, 0x5d, 0x3f, 0xc0, 0x1b, 0x85, - 0xf3, 0xa0, 0x2a, 0xe3, 0x8a, 0x8d, 0x09, 0x7f, 0x2c, 0xd1, 0x1c, 0x25, 0x43, 0x85, 0xbb, 0xa3, - 0x84, 0x2a, 0x2b, 0x5e, 0x9b, 0x6a, 0x6e, 0xa0, 0x71, 0x28, 0xe5, 0x87, 0xa9, 0x75, 0xbf, 0x95, - 0x1c, 0x1c, 0x22, 0xb2, 0x0b, 0xef, 0x2f, 0x13, 0x1e, 0xa8, 0xcd, 0x07, 0xc5, 0x7f, 0x24, 0xa0, - 0x12, 0xbe, 0x98, 0x66, 0x36, 0x52, 0x38, 0xf7, 0xf3, 0x03, 0x82, 0x2a, 0xff, 0x89, 0xd7, 0x11, - 0x4a, 0x7a, 0xd9, 0x3c, 0xe6, 0x8a, 0x38, 0xad, 0xb4, 0x62, 0x18, 0x26, 0xa0, 0x75, 0x0f, 0xd0, - 0x3c, 0x4c, 0x5f, 0x65, 0x12, 0x8e, 0xe3, 0xf8, 0xc1, 0x3b, 0xa9, 0xbf, 0x3f, 0x96, 0x93, 0xfa, - 0x1d, 0x73, 0x87, 0x53, 0x72, 0x27, 0xde, 0xe1, 0xdc, 0xf3, 0x63, 0xbc, 0xc3, 0x29, 0xfd, 0xb1, - 0xdf, 0xe1, 0xcc, 0xfd, 0x51, 0xdc, 0xe1, 0x70, 0x17, 0x2c, 0xf3, 0xbe, 0xd5, 0x0b, 0x96, 0x31, - 0xaf, 0x3b, 0xe6, 0xff, 0xc8, 0xaf, 0x3b, 0x16, 0xfc, 0x80, 0xaf, 0x3b, 0x7e, 0xa9, 0xca, 0x9b, - 0xd1, 0x46, 0x6f, 0x4e, 0xfb, 0xa3, 0x34, 0x5f, 0x3b, 0xdc, 0x95, 0xea, 0xbb, 0x60, 0xa9, 0x07, - 0x43, 0x93, 0xd9, 0x3c, 0xab, 0x5f, 0x70, 0x9c, 0xcf, 0x43, 0xf3, 0x1d, 0x7a, 0xfd, 0xe3, 0xb9, - 0xde, 0x00, 0xc4, 0xa5, 0x7b, 0xda, 0x7e, 0xb0, 0xd7, 0x1b, 0x1f, 0xe4, 0xa1, 0x05, 0xb0, 0x59, - 0x39, 0x9a, 0x9f, 0x7f, 0x65, 0xbd, 0xd9, 0x78, 0x42, 0x95, 0x4b, 0xf8, 0xf3, 0xe8, 0x14, 0x53, - 0x14, 0xa3, 0xf1, 0x3f, 0xc2, 0xfd, 0xf7, 0x42, 0x76, 0x40, 0xb3, 0xbf, 0x14, 0x54, 0xf9, 0xcf, - 0x05, 0x23, 0xa4, 0xd9, 0x27, 0x02, 0x1f, 0xd3, 0xcc, 0x01, 0x8d, 0x5f, 0x2d, 0xc0, 0x99, 0x36, - 0x70, 0x23, 0x39, 0x74, 0x08, 0x2b, 0x4f, 0x24, 0x07, 0xae, 0xd5, 0xfb, 0x51, 0xeb, 0xef, 0xcc, - 0xbc, 0xdb, 0x9e, 0xee, 0x69, 0xd3, 0x83, 0xf3, 0x60, 0xd6, 0x7b, 0x6b, 0xc0, 0x94, 0x99, 0xff, - 0xd3, 0x8f, 0xe0, 0x9d, 0x6d, 0xba, 0xa7, 0xad, 0x46, 0x86, 0xab, 0x6c, 0x53, 0xf0, 0xb4, 0x67, - 0x55, 0x79, 0x0d, 0x5a, 0xe5, 0x1d, 0x03, 0xc9, 0xd2, 0xdd, 0x0e, 0x13, 0xe4, 0xb9, 0xcb, 0xf3, - 0x7e, 0x1e, 0x5a, 0xe8, 0xd8, 0xcf, 0x9d, 0x92, 0x49, 0xea, 0xab, 0x71, 0x15, 0xa1, 0x73, 0xe0, - 0xaa, 0xfb, 0xf8, 0xc0, 0x6b, 0x3f, 0x58, 0xc6, 0xba, 0xe1, 0x42, 0x73, 0xd7, 0x28, 0x89, 0xef, - 0x83, 0xab, 0x5a, 0x2c, 0x77, 0x86, 0x24, 0xca, 0x95, 0x71, 0x65, 0xf8, 0x5c, 0x8d, 0x0c, 0x33, - 0x48, 0x0e, 0x1d, 0x61, 0x85, 0x24, 0x6d, 0x72, 0x72, 0xf8, 0x02, 0xcb, 0xd2, 0x0b, 0xff, 0xa6, - 0x4e, 0x5c, 0x2f, 0x77, 0x6b, 0xe7, 0x0f, 0xa6, 0x8f, 0x5e, 0x62, 0xb7, 0x13, 0x59, 0xed, 0xb8, - 0xab, 0xc0, 0x35, 0xaa, 0x5c, 0x8b, 0xaa, 0xbd, 0xb9, 0xa6, 0x2d, 0xdd, 0x07, 0x51, 0x84, 0x1c, - 0x96, 0x8d, 0x86, 0xac, 0xfb, 0x6f, 0x79, 0x68, 0x9e, 0x7d, 0x27, 0x7f, 0x3c, 0x5b, 0x87, 0x1e, - 0xd3, 0xee, 0x87, 0x4a, 0xe1, 0x2c, 0x4f, 0x48, 0xce, 0x95, 0x92, 0xe6, 0x3b, 0xac, 0xb7, 0x53, - 0x00, 0xa9, 0x4b, 0xf9, 0x68, 0xde, 0xda, 0x50, 0xdc, 0x99, 0x6f, 0xc2, 0x56, 0xbe, 0xa9, 0x57, - 0xe5, 0xd5, 0x3c, 0xdf, 0x3c, 0x6e, 0xbd, 0x60, 0xfe, 0xea, 0x11, 0xf8, 0x5e, 0xb4, 0x46, 0xe0, - 0x5b, 0xa9, 0xca, 0xcb, 0x79, 0xb7, 0xf4, 0x07, 0x9c, 0xbf, 0x37, 0x86, 0x73, 0x7a, 0x5d, 0x76, - 0x30, 0xbe, 0x4a, 0x55, 0xbe, 0xdf, 0x08, 0x42, 0x51, 0x6a, 0x55, 0xb9, 0x1c, 0xe3, 0xf2, 0xd5, - 0x65, 0xc7, 0xe5, 0x83, 0xae, 0x98, 0x7d, 0xd7, 0xda, 0x95, 0x63, 0x88, 0xbe, 0xaa, 0xf3, 0x82, - 0x2a, 0x9f, 0x15, 0xd0, 0x29, 0xc1, 0x9b, 0x73, 0x29, 0xa4, 0xdf, 0x3b, 0xac, 0xed, 0x77, 0x14, - 0x19, 0xee, 0xbf, 0xb8, 0xd0, 0x7c, 0x87, 0xf1, 0xdd, 0x19, 0x62, 0xe2, 0x45, 0x53, 0x98, 0xb8, - 0xf1, 0x8b, 0x89, 0xf9, 0xaa, 0x5c, 0x4a, 0xc5, 0x84, 0x68, 0x0a, 0x1d, 0xc7, 0x47, 0xbe, 0xa4, - 0x99, 0x55, 0x72, 0x63, 0x68, 0xc2, 0xec, 0xf9, 0x91, 0xcb, 0xe6, 0x81, 0xea, 0x46, 0x12, 0xe6, - 0x90, 0x31, 0xe8, 0x33, 0x68, 0x92, 0xc2, 0xbb, 0x28, 0x90, 0x0c, 0xfa, 0xb4, 0x48, 0x9a, 0xcb, - 0x87, 0x32, 0xd1, 0xef, 0xbb, 0xe1, 0xf0, 0xe5, 0xa3, 0x40, 0xe6, 0x0b, 0x10, 0xd7, 0xb7, 0x70, - 0x01, 0x92, 0x37, 0xd1, 0x0b, 0x90, 0x27, 0xb9, 0x1d, 0x35, 0xdf, 0xa0, 0x0c, 0x63, 0x47, 0x9d, - 0x99, 0x63, 0x5f, 0xb4, 0xf7, 0xf5, 0x62, 0x48, 0xfb, 0x69, 0x47, 0xfb, 0xe1, 0xe8, 0x6c, 0x97, - 0x5c, 0x68, 0xfa, 0x46, 0x25, 0xd6, 0x12, 0x82, 0x3c, 0xfe, 0xc4, 0x5b, 0x73, 0x25, 0x2a, 0x8c, - 0x45, 0x1a, 0x21, 0x97, 0xbe, 0xc0, 0xbd, 0xd6, 0x61, 0x85, 0x92, 0x18, 0x87, 0x16, 0x6e, 0x5c, - 0xc2, 0x32, 0xea, 0xb3, 0x5a, 0x71, 0x05, 0x9a, 0x84, 0xff, 0xd6, 0x09, 0x99, 0x44, 0x55, 0xa7, - 0x45, 0xd2, 0x74, 0xbe, 0xa9, 0xbb, 0xae, 0xd6, 0x47, 0x2b, 0xc4, 0x72, 0x94, 0xe7, 0x8f, 0x85, - 0x29, 0x9d, 0x12, 0x62, 0xc0, 0xbf, 0xa5, 0x19, 0x26, 0x78, 0x7f, 0x2c, 0xec, 0xc3, 0xc5, 0xe2, - 0x6a, 0x92, 0x45, 0x31, 0x10, 0x0b, 0x11, 0x64, 0x1a, 0x61, 0x59, 0xef, 0xf5, 0xf2, 0xe5, 0xe6, - 0x81, 0xa6, 0xba, 0xbb, 0x33, 0xb7, 0x20, 0x7f, 0x22, 0x03, 0xa8, 0xf2, 0xaa, 0xf2, 0x83, 0xe8, - 0x7e, 0x6f, 0x36, 0x0a, 0xcc, 0x0d, 0xa9, 0xf0, 0xcd, 0xb8, 0xd0, 0x9c, 0x35, 0x4a, 0x82, 0x03, - 0xd5, 0x05, 0xc0, 0x63, 0x68, 0x72, 0xa0, 0x31, 0xd2, 0x1c, 0xd4, 0xf7, 0xe7, 0x05, 0x10, 0x59, - 0x09, 0xca, 0xa4, 0xa2, 0xe4, 0xd0, 0x11, 0x6e, 0x43, 0x9c, 0xe1, 0xf2, 0xb1, 0x2a, 0xf1, 0x71, - 0x54, 0xe4, 0x0f, 0x90, 0x2b, 0x6c, 0x1d, 0x5f, 0x24, 0x8f, 0xb4, 0x51, 0x2a, 0x4d, 0x49, 0x0e, - 0x1d, 0xd1, 0xf6, 0xf7, 0x65, 0x06, 0xf6, 0xd4, 0xd5, 0xfa, 0x8c, 0x72, 0x71, 0x17, 0x2c, 0x13, - 0x09, 0x2b, 0x0b, 0x68, 0x7b, 0x49, 0x95, 0x65, 0xaf, 0x5e, 0x28, 0x3d, 0xec, 0x7f, 0x25, 0xee, - 0xe6, 0x27, 0x02, 0x4e, 0x6e, 0x44, 0xed, 0x1d, 0x6d, 0xed, 0xd4, 0x5a, 0x47, 0x92, 0x83, 0x43, - 0x94, 0xc0, 0xca, 0xf5, 0x68, 0xa8, 0x5f, 0x56, 0xcf, 0x89, 0xe1, 0x4d, 0x16, 0xca, 0x7d, 0x45, - 0x46, 0x72, 0x56, 0xbd, 0xe7, 0xaa, 0xdf, 0xa8, 0xf2, 0x8b, 0xe8, 0x57, 0x5e, 0x07, 0x74, 0xb0, - 0xe8, 0x9e, 0x26, 0x2a, 0x21, 0xd1, 0x3d, 0x99, 0xaf, 0x28, 0x9b, 0xfe, 0xe7, 0x82, 0x31, 0x9f, - 0xcf, 0x05, 0xbd, 0x7f, 0xcf, 0x3f, 0x74, 0xa1, 0xbb, 0x2d, 0x7d, 0xdf, 0x19, 0x62, 0xc3, 0x67, - 0xda, 0xe1, 0x16, 0x5a, 0x82, 0xcf, 0x9b, 0x09, 0x6d, 0x7c, 0x1b, 0xdb, 0x63, 0xaa, 0xfc, 0x30, - 0x5a, 0xee, 0x75, 0x42, 0x89, 0x54, 0xe2, 0x84, 0x6f, 0xcf, 0x7e, 0x17, 0x9a, 0xc9, 0xec, 0xa0, - 0x10, 0xeb, 0x16, 0x33, 0xf8, 0x72, 0x94, 0x1f, 0x36, 0x98, 0x7b, 0xa1, 0x2a, 0xcf, 0xf3, 0x92, - 0x02, 0x69, 0x16, 0xbb, 0xaf, 0x75, 0x37, 0x90, 0x8c, 0xd6, 0xc0, 0xda, 0xa4, 0x0e, 0x70, 0xd1, - 0x80, 0xb9, 0x0d, 0xd0, 0xc8, 0x70, 0x81, 0x8b, 0xa4, 0x62, 0xad, 0xf7, 0x8a, 0x76, 0xe6, 0x0c, - 0xf3, 0x68, 0x87, 0x52, 0xf1, 0x05, 0x34, 0x53, 0xbf, 0xe9, 0xa3, 0xf2, 0x9f, 0x91, 0x6a, 0xb9, - 0x2a, 0x2f, 0xf6, 0x5a, 0x6b, 0xb3, 0x47, 0x00, 0x71, 0x89, 0x7d, 0x56, 0xc0, 0x2a, 0x2c, 0xf8, - 0xd0, 0x62, 0xaf, 0x75, 0x76, 0xd9, 0x5d, 0x50, 0xee, 0xfd, 0xe7, 0x02, 0x2a, 0x59, 0xa3, 0x24, - 0x4c, 0xe0, 0xdf, 0x2b, 0xff, 0x56, 0x55, 0xab, 0xf2, 0xd3, 0x68, 0xa5, 0xd7, 0x71, 0x54, 0xd2, - 0xbd, 0xb0, 0xac, 0xe6, 0xe9, 0xc4, 0x79, 0x4e, 0xf2, 0xfc, 0x53, 0x17, 0xba, 0xc7, 0xa6, 0xfd, - 0x9d, 0xc1, 0x2a, 0x9b, 0x4c, 0xac, 0x72, 0x6f, 0x36, 0xab, 0x58, 0x56, 0x76, 0x7c, 0xcc, 0x42, - 0xd3, 0x39, 0x38, 0xa3, 0x45, 0x9a, 0x9b, 0x03, 0xaf, 0x9e, 0xb4, 0x80, 0x90, 0x8f, 0x90, 0x2f, - 0x61, 0x15, 0x83, 0xea, 0x85, 0xf1, 0x52, 0x7d, 0x0d, 0x42, 0xf0, 0x17, 0xd9, 0x40, 0x01, 0x91, - 0xf7, 0xa9, 0xb2, 0xdb, 0xcb, 0x15, 0x4b, 0x22, 0xdf, 0x94, 0xf2, 0x19, 0x57, 0x2f, 0x3e, 0x83, - 0xa6, 0xc0, 0x2f, 0x9e, 0x69, 0x48, 0x00, 0x78, 0xbe, 0x9c, 0x8d, 0x80, 0xb2, 0x09, 0x5f, 0x55, - 0x85, 0xd9, 0x1a, 0x95, 0x7a, 0xb9, 0xc9, 0x98, 0xc7, 0xeb, 0xf9, 0x6b, 0x81, 0xec, 0x67, 0x35, - 0x98, 0x92, 0x01, 0xe8, 0xfb, 0xe5, 0x07, 0xba, 0x70, 0x0e, 0x63, 0x62, 0x9b, 0x0a, 0xf9, 0x90, - 0x1b, 0x26, 0x62, 0x62, 0x85, 0x3f, 0x87, 0x3d, 0xc3, 0xdc, 0xf4, 0xce, 0x60, 0x84, 0x75, 0x26, - 0x46, 0x28, 0xb5, 0x32, 0x02, 0x5b, 0xc1, 0x09, 0x6f, 0x17, 0x76, 0xd8, 0x60, 0xdb, 0x85, 0x15, - 0x93, 0x9e, 0x3f, 0xb8, 0x50, 0xe1, 0x0b, 0x91, 0x30, 0xa8, 0x81, 0x4b, 0xd1, 0xa4, 0xdd, 0xf8, - 0x6f, 0x46, 0x03, 0x25, 0xaa, 0x3c, 0xdb, 0x4b, 0x8b, 0xa4, 0x29, 0x5a, 0xf7, 0x40, 0xfa, 0xe8, - 0x25, 0xad, 0x6b, 0x08, 0xeb, 0x70, 0x50, 0x28, 0xae, 0x40, 0xf9, 0xf8, 0x2f, 0x1e, 0x67, 0x3c, - 0xcd, 0x4f, 0xd7, 0xdb, 0xb0, 0x8d, 0x05, 0x43, 0x8b, 0x55, 0xa8, 0x10, 0xff, 0x4b, 0xb8, 0x65, - 0x7c, 0x74, 0xae, 0xc3, 0x8b, 0x4f, 0xa2, 0x22, 0xfc, 0x37, 0x30, 0x49, 0xfe, 0xb8, 0x1a, 0x1b, - 0x0d, 0xc4, 0x0d, 0xa8, 0x28, 0xde, 0xbc, 0x2d, 0xac, 0x24, 0xd6, 0x37, 0x37, 0x51, 0x3f, 0xe0, - 0x65, 0xaa, 0xbc, 0xc4, 0x6b, 0x94, 0x4a, 0xf7, 0x66, 0x06, 0x2e, 0x18, 0xc3, 0x26, 0x7f, 0xa4, - 0x7b, 0xda, 0xb4, 0xbe, 0xc3, 0xe9, 0x9b, 0x47, 0x68, 0x30, 0x58, 0x03, 0xba, 0x0a, 0x4f, 0x19, - 0xcd, 0xf5, 0xea, 0x38, 0xe4, 0xa6, 0x4c, 0x99, 0x6e, 0x68, 0x12, 0x9a, 0x41, 0x16, 0x85, 0x9e, - 0x1f, 0x08, 0xa6, 0x1f, 0xb7, 0x1a, 0x78, 0xe6, 0x66, 0x1b, 0x46, 0x93, 0x43, 0x47, 0xd8, 0x49, - 0x8f, 0x3f, 0xe2, 0x3d, 0x83, 0xa6, 0xd0, 0x1f, 0x9c, 0xb4, 0x01, 0x14, 0x70, 0xe5, 0x52, 0x31, - 0x7d, 0x31, 0xc1, 0x92, 0x05, 0x19, 0x55, 0xe2, 0x8b, 0x48, 0xa4, 0x3f, 0x6b, 0x39, 0x8d, 0x1a, - 0x16, 0x82, 0x9c, 0x65, 0x6c, 0xaa, 0x25, 0x91, 0x1e, 0x2a, 0x88, 0x4a, 0x4d, 0x89, 0xcf, 0x06, - 0x4e, 0xac, 0x43, 0xd3, 0x68, 0xe9, 0x16, 0x25, 0x16, 0x37, 0x54, 0x75, 0x72, 0xa0, 0xc8, 0xaa, - 0x62, 0x83, 0x4c, 0x77, 0x76, 0xa4, 0x7a, 0x2f, 0xfb, 0xb2, 0x6a, 0xc5, 0x67, 0x74, 0x24, 0x6d, - 0xd8, 0x48, 0xd3, 0x28, 0x78, 0xf8, 0x4c, 0x8c, 0x1b, 0x36, 0xea, 0xa3, 0x22, 0xa9, 0xc8, 0xd3, - 0xd7, 0x86, 0xd3, 0xc3, 0x67, 0x7c, 0x46, 0x35, 0x87, 0x2b, 0xa2, 0x33, 0x4f, 0xb2, 0xe2, 0x8a, - 0xa8, 0xcd, 0x6c, 0x18, 0x44, 0x59, 0xf6, 0xf1, 0x55, 0xe2, 0x41, 0x01, 0x4d, 0xa5, 0xbf, 0xe1, - 0x30, 0x4b, 0xd3, 0x1b, 0x34, 0xa8, 0x72, 0xd0, 0x6b, 0xae, 0x91, 0xe8, 0x61, 0x9d, 0x66, 0x56, - 0xf0, 0x35, 0x87, 0xb1, 0xee, 0xe2, 0xce, 0xdc, 0x3a, 0x9c, 0x39, 0xd7, 0x95, 0x1c, 0xec, 0x73, - 0x93, 0xa8, 0x5f, 0xb8, 0x88, 0x26, 0x2b, 0x1c, 0xec, 0x73, 0xd7, 0x05, 0x49, 0xac, 0xd2, 0xd1, - 0x13, 0x1f, 0xa5, 0x6f, 0xf6, 0xe3, 0x02, 0x79, 0x5b, 0x38, 0x12, 0x6b, 0xf2, 0x37, 0xba, 0x21, - 0xa1, 0xd2, 0x62, 0x9f, 0xf9, 0x1b, 0x62, 0x08, 0x15, 0x36, 0x46, 0x02, 0xe0, 0xc5, 0x0b, 0xc9, - 0x10, 0xd6, 0xa9, 0xf2, 0xb3, 0x5e, 0xbd, 0x50, 0x7a, 0x0a, 0xcb, 0x5a, 0x4e, 0xe8, 0x97, 0x35, - 0xec, 0x54, 0xe0, 0x15, 0x0c, 0x26, 0xe7, 0x33, 0x67, 0xd2, 0x43, 0x17, 0xb5, 0x8e, 0x0f, 0x35, - 0xb5, 0x4b, 0xa7, 0x53, 0x28, 0x81, 0xb1, 0x2f, 0xf6, 0xe9, 0x3d, 0x89, 0xbf, 0x44, 0xc5, 0xf4, - 0xdb, 0x6b, 0x95, 0x16, 0xa5, 0x91, 0x38, 0x0d, 0x17, 0x55, 0xaf, 0x50, 0xe5, 0x65, 0x5e, 0x53, - 0x85, 0x74, 0x2f, 0x9d, 0x37, 0xe9, 0xa7, 0x0c, 0xf8, 0xf0, 0x8b, 0xd6, 0x3d, 0x98, 0xeb, 0xa0, - 0x6c, 0xb1, 0xcf, 0xd4, 0xa0, 0xaa, 0x4c, 0x95, 0xef, 0x47, 0xf7, 0x79, 0x2d, 0x6c, 0x21, 0x4d, - 0xd7, 0x69, 0x9e, 0x32, 0xcf, 0xc9, 0x3c, 0x30, 0x7f, 0x71, 0x52, 0x8d, 0xc2, 0x7f, 0xfd, 0x8d, - 0xeb, 0xb1, 0x2c, 0xf5, 0xd6, 0xed, 0xb8, 0xd1, 0xb3, 0xa6, 0x6c, 0xbf, 0x7f, 0x86, 0xdf, 0xf2, - 0xf2, 0x18, 0x61, 0x3a, 0x6e, 0x79, 0xac, 0x39, 0x77, 0x92, 0x7b, 0x05, 0xcd, 0x8c, 0xf1, 0xaa, - 0x0a, 0x61, 0x65, 0x60, 0x94, 0x3a, 0x55, 0x5e, 0xed, 0xb5, 0xd6, 0x4a, 0xcb, 0xe4, 0xdd, 0xcd, - 0x31, 0xc5, 0x4d, 0x30, 0x91, 0x1c, 0xec, 0xe3, 0x6f, 0x2a, 0xd2, 0x3d, 0x6d, 0xb6, 0x6a, 0xbc, - 0xb5, 0x97, 0x2a, 0xdc, 0x3b, 0xaa, 0xf5, 0xe6, 0x46, 0xaa, 0x74, 0x1f, 0xb7, 0x5f, 0x00, 0x22, - 0xd8, 0xfb, 0x2b, 0x6e, 0xfb, 0x4d, 0xb9, 0xd0, 0x02, 0xa7, 0x6e, 0xee, 0x8c, 0x5d, 0x78, 0xab, - 0x69, 0x17, 0x76, 0x5b, 0x0d, 0x3e, 0x66, 0xf2, 0x74, 0x4c, 0x67, 0xc1, 0x23, 0xc7, 0xb4, 0x2f, - 0xd7, 0xaa, 0xb2, 0x8c, 0x9e, 0xf6, 0x8e, 0x81, 0x26, 0x69, 0x7e, 0x4e, 0x74, 0x7b, 0xfe, 0xaf, - 0x3c, 0x54, 0x6a, 0xde, 0xd9, 0xf1, 0x6e, 0xf3, 0x0d, 0xa8, 0x6e, 0x5f, 0xe1, 0x80, 0xf7, 0xb8, - 0x95, 0xf4, 0xc7, 0x6b, 0xbd, 0x88, 0xa3, 0x82, 0x96, 0x68, 0xa0, 0x8e, 0xa5, 0xde, 0x7b, 0x49, - 0x95, 0x5f, 0xf0, 0x42, 0x89, 0xf4, 0x3c, 0x64, 0x6b, 0x49, 0x9d, 0x39, 0x9c, 0x1c, 0xfc, 0xa0, - 0x25, 0x1a, 0xc8, 0xda, 0x70, 0x97, 0xb8, 0x33, 0x07, 0xe8, 0x9d, 0x5d, 0x39, 0xb1, 0x94, 0x13, - 0xdf, 0x16, 0xb2, 0xa2, 0x86, 0x14, 0xcb, 0xda, 0xa3, 0xa1, 0x67, 0x71, 0x27, 0xc9, 0xe3, 0x9c, - 0x60, 0x69, 0x78, 0x36, 0xab, 0xb2, 0xcf, 0x0b, 0x25, 0x52, 0x9d, 0xd1, 0x16, 0x24, 0xb6, 0xbc, - 0x45, 0xae, 0x5b, 0x2b, 0x57, 0xaf, 0x5d, 0x05, 0x15, 0x95, 0x9b, 0xd7, 0xeb, 0x25, 0xc9, 0xc1, - 0x83, 0x50, 0xb8, 0x98, 0xb9, 0x9c, 0xc0, 0xe7, 0x53, 0x9d, 0xad, 0xa9, 0xde, 0x4e, 0x1f, 0xf4, - 0xc8, 0xae, 0xc1, 0x73, 0x2c, 0x96, 0xf4, 0xa0, 0x8d, 0x26, 0xa6, 0x2b, 0x1b, 0x3c, 0x77, 0xfd, - 0x2d, 0x5c, 0xad, 0x5a, 0xfb, 0xb9, 0xd3, 0xf2, 0x8c, 0x61, 0xd6, 0x2a, 0xc9, 0x66, 0x2d, 0xa6, - 0x2e, 0x8d, 0x4f, 0xbd, 0xa5, 0x09, 0xae, 0x72, 0xe1, 0x83, 0x1d, 0x9d, 0x73, 0x20, 0xd6, 0xf3, - 0x1f, 0xf3, 0x51, 0xf1, 0x86, 0xa8, 0x42, 0x1c, 0xd3, 0xc3, 0x6b, 0x23, 0x0d, 0x62, 0x0d, 0x2a, - 0x66, 0x12, 0x92, 0x4b, 0x98, 0x4e, 0xac, 0x23, 0xa6, 0x0a, 0xa9, 0x18, 0x9c, 0xd4, 0xa8, 0x82, - 0x60, 0xaa, 0x13, 0x1f, 0xc7, 0x87, 0x3f, 0xf8, 0xad, 0x1f, 0x80, 0x08, 0x82, 0xb8, 0x62, 0xa9, - 0x10, 0x3a, 0xa8, 0xab, 0xf5, 0x71, 0xa5, 0xe2, 0x72, 0x3d, 0x59, 0x1a, 0xc7, 0x49, 0x2c, 0x59, - 0xda, 0x34, 0x96, 0x32, 0x2f, 0xd3, 0x7f, 0x45, 0xbb, 0x79, 0x4c, 0x4f, 0x8f, 0xc7, 0x2d, 0x64, - 0xbe, 0xdd, 0x42, 0x6a, 0xfd, 0xe7, 0x32, 0xfd, 0xe7, 0x52, 0x27, 0x2e, 0x68, 0xb7, 0x4e, 0x64, - 0x2f, 0xe4, 0x12, 0x34, 0x29, 0x12, 0xdd, 0x1c, 0x57, 0x62, 0x94, 0x1d, 0xe6, 0xa8, 0xf2, 0x5d, - 0x5e, 0x5a, 0x24, 0x15, 0x81, 0x16, 0x95, 0x1c, 0x1a, 0xf2, 0xd1, 0x22, 0x71, 0x25, 0x42, 0x01, - 0xc8, 0x7e, 0xcc, 0x92, 0x93, 0x17, 0xc1, 0x8a, 0x71, 0xc5, 0x52, 0x31, 0xa8, 0x33, 0x2c, 0xff, - 0xb3, 0x51, 0x23, 0xae, 0xe2, 0xb5, 0x5c, 0xd0, 0x9b, 0x1e, 0x54, 0xe5, 0x45, 0xbc, 0x96, 0x7b, - 0x37, 0x7c, 0xd4, 0x72, 0xb7, 0xc1, 0x6b, 0xbc, 0xab, 0xf8, 0xdb, 0xc9, 0x42, 0xae, 0x1b, 0xe3, - 0x76, 0xd2, 0xd2, 0x0d, 0x8d, 0xa1, 0xc5, 0xdf, 0x43, 0x72, 0xab, 0x4d, 0xb6, 0xdb, 0x22, 0x9b, - 0xd5, 0x06, 0xd5, 0x19, 0x16, 0x8b, 0x6e, 0xa2, 0xa6, 0xba, 0x2a, 0xfc, 0x61, 0xe4, 0xf1, 0x9a, - 0xe8, 0x48, 0x12, 0xe1, 0xeb, 0x80, 0x73, 0xc0, 0xbf, 0xe7, 0x5f, 0xb8, 0xd0, 0x8c, 0x4d, 0xfe, - 0xf8, 0x4e, 0x13, 0xc1, 0x79, 0xec, 0x08, 0x2e, 0x8b, 0x9e, 0x16, 0x58, 0xe9, 0xc9, 0x44, 0x34, - 0x73, 0xcc, 0x44, 0xa3, 0xd3, 0x45, 0x49, 0x16, 0x5d, 0x18, 0xab, 0x3e, 0xc7, 0xbc, 0xea, 0xfa, - 0xea, 0x2e, 0xb0, 0xae, 0xae, 0x69, 0xf9, 0xe6, 0x59, 0x96, 0x8f, 0x5f, 0x95, 0x79, 0x96, 0x55, - 0xe1, 0x91, 0x3d, 0x47, 0x4f, 0x41, 0x56, 0x04, 0xdf, 0xa4, 0x69, 0xc2, 0x4a, 0xb9, 0xcc, 0x68, - 0x24, 0xb9, 0x3a, 0x97, 0xb6, 0xcc, 0x93, 0xb5, 0x40, 0x53, 0xcc, 0xd8, 0xc1, 0x65, 0x9e, 0x7f, - 0xe3, 0x42, 0x53, 0x30, 0x5a, 0x37, 0x26, 0x94, 0x28, 0xc6, 0xe8, 0xf2, 0xac, 0x7c, 0x83, 0xe3, - 0x62, 0xa1, 0x95, 0xa8, 0x30, 0x9e, 0x50, 0xa2, 0xdc, 0xf9, 0x09, 0xae, 0x3b, 0x58, 0xa1, 0x9e, - 0xc8, 0x95, 0xcf, 0xb7, 0xaa, 0xd7, 0x8a, 0x55, 0xa8, 0xa0, 0x91, 0x68, 0xc4, 0x79, 0xc6, 0x25, - 0x04, 0x94, 0x48, 0x25, 0x40, 0x03, 0xe9, 0xbe, 0xce, 0xf4, 0xd0, 0xc5, 0xb2, 0xba, 0xf5, 0xab, - 0x37, 0x94, 0xaf, 0xf2, 0xf9, 0x36, 0xf8, 0x16, 0xfb, 0x00, 0x40, 0x5c, 0x91, 0xcd, 0xbd, 0x44, - 0x72, 0xeb, 0xdc, 0x5b, 0x6c, 0xcf, 0xb7, 0x5f, 0x8f, 0x0f, 0xc7, 0x4f, 0xb4, 0xe7, 0x26, 0x83, - 0x63, 0x02, 0x91, 0xb2, 0x75, 0xe1, 0x78, 0xc2, 0x1f, 0x06, 0xaa, 0xfc, 0xfa, 0xba, 0xc6, 0x8a, - 0x2c, 0x5d, 0x83, 0xde, 0x11, 0x81, 0xae, 0x31, 0x3d, 0xeb, 0xd0, 0xf2, 0x4d, 0xa8, 0x1b, 0xf5, - 0xd4, 0x34, 0x91, 0xcf, 0x12, 0xec, 0x4b, 0x5e, 0x52, 0x20, 0x79, 0xf5, 0x7d, 0x01, 0xee, 0xe1, - 0xdd, 0xfe, 0x68, 0x45, 0x43, 0xb3, 0x3f, 0xdc, 0xb0, 0x7b, 0x47, 0xa4, 0xb9, 0x62, 0x59, 0xb9, - 0xbb, 0x39, 0x5e, 0xf1, 0x8a, 0x12, 0x4f, 0x2c, 0xab, 0xf0, 0x33, 0x6f, 0x06, 0x30, 0x5b, 0xd4, - 0x22, 0x14, 0x8e, 0x04, 0x95, 0xd5, 0xfe, 0xa6, 0x50, 0xe3, 0x2e, 0x2a, 0x41, 0x49, 0x62, 0x40, - 0xae, 0x58, 0x2a, 0x4e, 0xf5, 0x0e, 0x69, 0xa7, 0x0f, 0xa4, 0xaf, 0x0d, 0x6b, 0x1d, 0x27, 0x58, - 0x7b, 0x0e, 0x40, 0x7c, 0x00, 0xe5, 0x05, 0xa2, 0xcd, 0xf4, 0xad, 0xee, 0x2c, 0x55, 0x9e, 0xe9, - 0xc5, 0xbf, 0x25, 0x54, 0x53, 0xbf, 0xd9, 0x9d, 0x3a, 0x3b, 0x98, 0x3a, 0x76, 0xc5, 0x87, 0x0b, - 0xc4, 0x95, 0x68, 0x52, 0x93, 0xd2, 0x14, 0x89, 0xed, 0x22, 0xac, 0x37, 0xb5, 0xfa, 0x7e, 0x55, - 0xf6, 0x78, 0x69, 0x91, 0x54, 0xa2, 0xed, 0x6b, 0xd7, 0xfa, 0xde, 0xd2, 0xce, 0x5f, 0xd4, 0xae, - 0x74, 0xeb, 0xbe, 0xed, 0xee, 0x35, 0xd5, 0x3e, 0x0a, 0x21, 0x6e, 0x41, 0x05, 0xdb, 0x42, 0xbb, - 0x75, 0x81, 0x49, 0xa2, 0x75, 0x42, 0x89, 0xb4, 0x22, 0x39, 0xd8, 0x43, 0xd8, 0xa2, 0xdc, 0x0d, - 0x19, 0x7d, 0x53, 0x6f, 0x0d, 0xc0, 0xee, 0x09, 0x15, 0xe9, 0x8b, 0x7b, 0x52, 0xbd, 0x9d, 0x99, - 0xfd, 0x1f, 0x68, 0xc3, 0x43, 0x7a, 0x98, 0x02, 0x1f, 0x34, 0x16, 0x9f, 0xe7, 0x6e, 0x89, 0x8b, - 0x8c, 0x6c, 0x7c, 0xc6, 0x2d, 0xf1, 0x03, 0xec, 0x2f, 0xbd, 0x29, 0x7d, 0xe0, 0x73, 0xfc, 0x46, - 0x19, 0x89, 0xb0, 0x50, 0x19, 0x57, 0x1a, 0xb7, 0x73, 0xd1, 0x15, 0xc4, 0x43, 0x42, 0x96, 0x58, - 0x24, 0x82, 0xa1, 0xfa, 0xb7, 0xaa, 0xbc, 0x21, 0x6b, 0x1f, 0x7e, 0x5a, 0xbb, 0xf9, 0x26, 0x6b, - 0x96, 0x1c, 0x1c, 0xc2, 0x1d, 0x11, 0xe7, 0x2d, 0x1e, 0x88, 0xdf, 0xaa, 0xcb, 0x22, 0xe1, 0xc6, - 0x50, 0x58, 0xa9, 0x8c, 0x6c, 0xdf, 0x8e, 0xff, 0x5d, 0xfc, 0x65, 0xf5, 0xec, 0xd8, 0x5d, 0xbe, - 0x9f, 0xf9, 0x26, 0x41, 0xb9, 0x6f, 0x32, 0xad, 0x30, 0x8b, 0xe0, 0xaa, 0x1e, 0x41, 0x95, 0x8f, - 0x0b, 0xe8, 0x4d, 0xc1, 0x7b, 0x37, 0xe6, 0x06, 0x1b, 0x46, 0x90, 0x5e, 0x05, 0x9f, 0x02, 0x58, - 0x6c, 0xd0, 0x2f, 0xbe, 0x23, 0x8f, 0x90, 0xbf, 0x77, 0x71, 0x47, 0x62, 0xf3, 0xd0, 0xee, 0x0c, - 0xd5, 0x70, 0x83, 0x49, 0x35, 0x9c, 0x97, 0xad, 0x1a, 0xf2, 0x53, 0x1a, 0x9f, 0x7a, 0xb8, 0x5a, - 0x95, 0x6b, 0x90, 0xec, 0x9d, 0x85, 0xb1, 0xb2, 0x3e, 0x12, 0x34, 0x21, 0x43, 0x2a, 0xb1, 0x2e, - 0x94, 0x93, 0xdf, 0xc7, 0xff, 0x2a, 0x44, 0xc5, 0xfc, 0xd7, 0xc5, 0x47, 0x51, 0x61, 0x98, 0xf6, - 0xc7, 0x6f, 0x2f, 0x7a, 0x21, 0x30, 0xfb, 0xc9, 0x4b, 0x54, 0x2f, 0xd4, 0xcb, 0x71, 0xc3, 0xc4, - 0xae, 0xa8, 0xc2, 0x6d, 0x30, 0xd0, 0x90, 0x15, 0x32, 0x29, 0xc1, 0xb6, 0x16, 0x56, 0x8e, 0x05, - 0x3d, 0x27, 0x62, 0xf2, 0x38, 0x41, 0xef, 0x24, 0x62, 0x4c, 0xb2, 0xe5, 0x7e, 0x90, 0x2d, 0x10, - 0x7f, 0xe1, 0x2e, 0x55, 0x9e, 0x01, 0xb2, 0xa5, 0x28, 0x10, 0x6d, 0xb6, 0x17, 0x2d, 0x05, 0xce, - 0xa2, 0xa5, 0xff, 0xc6, 0xe8, 0x7e, 0x7b, 0xd1, 0x72, 0x3f, 0xca, 0x6b, 0xd0, 0x25, 0x18, 0x7c, - 0xa5, 0x01, 0x7f, 0xa5, 0xc1, 0xf8, 0x4a, 0x43, 0xb4, 0x59, 0x8c, 0xeb, 0x2a, 0xc0, 0x64, 0x23, - 0x1d, 0x21, 0xcb, 0x42, 0xba, 0x9e, 0xce, 0x81, 0x9c, 0xbc, 0x6e, 0x8f, 0x74, 0x6d, 0x5c, 0xb5, - 0x76, 0xed, 0xed, 0x91, 0x9e, 0xcc, 0xb9, 0x4b, 0xe9, 0xf3, 0x43, 0x5a, 0xff, 0xe9, 0xe4, 0x67, - 0x07, 0xb4, 0xee, 0x81, 0xcc, 0xc7, 0x7d, 0xc9, 0x1b, 0x57, 0x70, 0xf5, 0x86, 0xb5, 0xb5, 0x5b, - 0x37, 0x6c, 0xde, 0x94, 0x0d, 0xf2, 0xe9, 0x47, 0xda, 0xd1, 0xfe, 0xf4, 0xcd, 0x36, 0x5d, 0xbf, - 0xa8, 0x43, 0x45, 0xcd, 0xe1, 0x50, 0xa2, 0x3e, 0x16, 0x0a, 0x28, 0x44, 0xf4, 0xb9, 0xc0, 0xa4, - 0x69, 0x94, 0x4a, 0x73, 0xa1, 0x6d, 0x72, 0xf8, 0xd3, 0xd4, 0xd9, 0x11, 0x7d, 0x82, 0xb7, 0x47, - 0x7a, 0xb4, 0xf6, 0xd7, 0x7d, 0x06, 0x9c, 0xb8, 0x02, 0x15, 0x60, 0xb1, 0x8f, 0x35, 0x98, 0x3c, - 0x66, 0x36, 0x84, 0x12, 0x49, 0x04, 0x8b, 0x1a, 0x3e, 0x73, 0xb2, 0xbd, 0xc4, 0x07, 0x55, 0xe2, - 0xef, 0x38, 0xf9, 0x88, 0x8c, 0x33, 0xa7, 0x21, 0x1f, 0x57, 0x6b, 0x03, 0x37, 0x52, 0x87, 0x2e, - 0x18, 0xd2, 0xb1, 0xf7, 0x20, 0x96, 0xb9, 0x3d, 0x6d, 0x86, 0x93, 0x6a, 0x96, 0x54, 0x06, 0xf9, - 0xa9, 0x7f, 0x0c, 0x5a, 0x72, 0xf2, 0xb3, 0x01, 0x4d, 0x63, 0xe2, 0xab, 0x3e, 0x12, 0x69, 0xac, - 0xab, 0x05, 0xcd, 0xa9, 0xfa, 0x69, 0x55, 0x7e, 0xd2, 0x9b, 0x55, 0x25, 0x79, 0x41, 0xae, 0x6b, - 0xea, 0x25, 0xcc, 0x15, 0x57, 0xcf, 0xd6, 0xd5, 0x96, 0xf3, 0x69, 0xdd, 0xb5, 0xae, 0x1b, 0xa3, - 0xed, 0x07, 0xe9, 0x27, 0xb2, 0xda, 0x8a, 0x67, 0x04, 0x84, 0x20, 0x5c, 0x41, 0x6d, 0x28, 0xbe, - 0x93, 0xbc, 0x25, 0xb7, 0x39, 0xdb, 0xd5, 0xfa, 0x13, 0x7e, 0x5c, 0x0f, 0xc9, 0x5f, 0xb8, 0x06, - 0xd2, 0x26, 0x9d, 0x70, 0xd3, 0xc3, 0x67, 0xd2, 0x6f, 0xbf, 0xc5, 0x66, 0x0a, 0x9f, 0xce, 0xda, - 0x70, 0x96, 0xb8, 0x93, 0xc3, 0xed, 0xc9, 0xe1, 0x76, 0x3b, 0x79, 0x0f, 0xce, 0xe9, 0x5a, 0xfb, - 0xb5, 0xd4, 0xb5, 0x4b, 0x3e, 0xee, 0x0b, 0x62, 0xaf, 0x80, 0x8a, 0x82, 0xf4, 0xfb, 0xf1, 0x92, - 0xa9, 0xf6, 0x87, 0x4f, 0x7d, 0x80, 0x24, 0x06, 0xb7, 0x01, 0xcf, 0xc6, 0x97, 0x3a, 0x76, 0x25, - 0x75, 0xb0, 0xff, 0x1b, 0x1b, 0x9f, 0xf1, 0x81, 0x2a, 0xcc, 0xca, 0xa8, 0xc4, 0x5b, 0xb8, 0xde, - 0x56, 0x80, 0x78, 0xb4, 0x02, 0x74, 0xef, 0x1a, 0x25, 0xb1, 0xce, 0x4f, 0x0c, 0xbe, 0xcd, 0x0d, - 0x0d, 0x4a, 0x3c, 0xa1, 0x04, 0xd7, 0xf9, 0x03, 0x3b, 0x42, 0xdf, 0x88, 0xbd, 0xe7, 0x89, 0x2c, - 0x1d, 0xec, 0xbe, 0x5c, 0x3a, 0x58, 0xb6, 0xd1, 0xf3, 0x3d, 0xc1, 0xac, 0xf6, 0x76, 0x0b, 0xaa, - 0xdc, 0xe4, 0x2d, 0x0c, 0x34, 0xc6, 0xc1, 0x0a, 0xec, 0xa7, 0x56, 0x60, 0x50, 0x7d, 0xd7, 0x2e, - 0x5b, 0xba, 0x14, 0x38, 0x75, 0x69, 0xc5, 0xb2, 0xa5, 0x4b, 0x93, 0x83, 0x1f, 0xe8, 0x01, 0x2c, - 0xd6, 0x3e, 0x6c, 0x54, 0x3d, 0x9c, 0x55, 0xb5, 0x6c, 0x29, 0xab, 0xc3, 0x40, 0xa4, 0x98, 0xb8, - 0x6b, 0xbf, 0x91, 0xee, 0xeb, 0x5c, 0xfc, 0x65, 0xf5, 0xbc, 0x58, 0xa9, 0x2f, 0x1f, 0x03, 0xf9, - 0xf2, 0x71, 0x2f, 0xbe, 0x02, 0xd2, 0xc0, 0x57, 0xb0, 0x56, 0x22, 0xff, 0x80, 0x8a, 0x6d, 0xd2, - 0x19, 0xf3, 0x27, 0xa4, 0x33, 0x2e, 0x05, 0x13, 0x55, 0x2d, 0x55, 0xee, 0xc8, 0xd6, 0x09, 0x25, - 0xd2, 0x34, 0xd0, 0x8a, 0xd2, 0x37, 0x8f, 0xa4, 0x87, 0x7b, 0xeb, 0x6a, 0xc1, 0xbe, 0x54, 0xfb, - 0x5d, 0x69, 0x73, 0x2d, 0x4c, 0x16, 0x81, 0x36, 0x47, 0x12, 0x65, 0x51, 0x59, 0xb4, 0x29, 0x75, - 0xe8, 0x52, 0xe6, 0xe0, 0x61, 0xba, 0xa1, 0x9c, 0x6f, 0xc3, 0x94, 0xca, 0xdd, 0x60, 0xdd, 0x1e, - 0xe9, 0x82, 0xdc, 0xc8, 0xe5, 0xa3, 0x3d, 0x47, 0xb5, 0x91, 0xd6, 0x2f, 0x5a, 0xf7, 0x1a, 0xc6, - 0x34, 0xb7, 0xd6, 0x71, 0x52, 0x1b, 0xb8, 0xa1, 0x03, 0xa7, 0x4e, 0x9c, 0xc5, 0x82, 0xe7, 0xea, - 0x5e, 0x2a, 0xcd, 0x98, 0x83, 0xe5, 0xd8, 0x54, 0x29, 0x79, 0x53, 0x67, 0x6f, 0xa4, 0x0e, 0xf6, - 0x37, 0x11, 0x28, 0x30, 0xfb, 0x53, 0x13, 0x19, 0x3f, 0x3c, 0x30, 0xc4, 0xfc, 0x57, 0x17, 0xf2, - 0xe4, 0xea, 0xf1, 0xce, 0xd0, 0x63, 0x7e, 0x65, 0xd2, 0x63, 0x1e, 0x70, 0xd4, 0x63, 0x94, 0xa6, - 0x68, 0xa3, 0x3f, 0xa1, 0xd4, 0x44, 0xc2, 0xdb, 0x43, 0x0d, 0x13, 0xf2, 0x6b, 0x1d, 0x07, 0x92, - 0xa4, 0x12, 0x2b, 0x7e, 0x9d, 0xf4, 0x9b, 0x8e, 0x3c, 0x74, 0x8f, 0x45, 0x73, 0x8c, 0x7f, 0x5f, - 0x47, 0xbb, 0xad, 0xd6, 0xa3, 0x9d, 0xac, 0xca, 0x4f, 0xf1, 0x6c, 0xba, 0x8c, 0x63, 0xd3, 0x72, - 0x37, 0x90, 0x71, 0xaa, 0x6b, 0xbf, 0xd6, 0xdf, 0x83, 0x11, 0x36, 0x74, 0x24, 0xf3, 0xf1, 0x7b, - 0x5a, 0xf7, 0xa7, 0xf4, 0x55, 0x05, 0xc1, 0x25, 0xcf, 0xcc, 0x2f, 0xa2, 0x49, 0xa1, 0x28, 0x9e, - 0x2f, 0x15, 0x02, 0x35, 0xaa, 0xfc, 0xb8, 0x97, 0x16, 0x49, 0x95, 0xb8, 0xb9, 0x1e, 0x82, 0x85, - 0x67, 0xed, 0x7a, 0x3c, 0xda, 0x53, 0xad, 0xec, 0x7b, 0x94, 0x6d, 0x60, 0xd2, 0x82, 0x8f, 0xb6, - 0xd7, 0x7d, 0x4e, 0x1c, 0xf1, 0x29, 0xcd, 0xa5, 0xba, 0xfb, 0xe1, 0xb6, 0xe4, 0xe0, 0x07, 0xfa, - 0xd7, 0x28, 0x07, 0xfc, 0x7b, 0x17, 0x2a, 0xb5, 0x6b, 0x7a, 0x27, 0x7a, 0xbc, 0xdd, 0x63, 0x7b, - 0x6f, 0x82, 0xb7, 0x38, 0x70, 0x82, 0x01, 0x62, 0xa7, 0x2e, 0x08, 0x3c, 0x16, 0x4c, 0x24, 0xbf, - 0x41, 0x95, 0xd7, 0xa2, 0x67, 0xbd, 0x39, 0xb0, 0xc2, 0x30, 0x9a, 0x85, 0x4b, 0x27, 0x6a, 0xff, - 0x64, 0x32, 0x2a, 0xd2, 0x47, 0x22, 0x3e, 0x46, 0xd3, 0xd3, 0x33, 0xe2, 0x26, 0x08, 0xa2, 0x45, - 0xd2, 0x5d, 0x74, 0xa7, 0x19, 0x3a, 0x12, 0xa2, 0x1f, 0xad, 0xab, 0xa5, 0x19, 0xe8, 0x6b, 0xc5, - 0xc7, 0xd1, 0xe4, 0x50, 0x38, 0xac, 0xc4, 0xea, 0xea, 0x29, 0x6e, 0x89, 0xc5, 0x90, 0x95, 0x49, - 0x33, 0xe9, 0x58, 0xf6, 0xb5, 0xa7, 0x6f, 0x1e, 0x49, 0x0e, 0x0e, 0xd7, 0xd5, 0xfb, 0x58, 0x9d, - 0xf8, 0x22, 0x2a, 0x0e, 0x71, 0xe7, 0x09, 0x4a, 0xe5, 0x8f, 0xaa, 0xf2, 0x0a, 0xaf, 0xa9, 0x42, - 0x5a, 0x04, 0xec, 0x4b, 0x7d, 0x83, 0xfa, 0x4e, 0xa4, 0x2f, 0xbf, 0x97, 0x1c, 0xfc, 0x08, 0xef, - 0x04, 0xdd, 0x03, 0x99, 0xd7, 0x6f, 0x82, 0xb4, 0xf6, 0x99, 0xda, 0x88, 0x0f, 0xf1, 0xba, 0x3e, - 0x59, 0x34, 0xb2, 0xf3, 0x4c, 0x87, 0xf1, 0x04, 0xa2, 0xcd, 0x14, 0xbd, 0x64, 0xfb, 0x59, 0x82, - 0xf2, 0x9a, 0x14, 0xe6, 0xf1, 0x40, 0xf8, 0x13, 0xff, 0x96, 0x44, 0x7d, 0xf0, 0x5a, 0xdf, 0x5b, - 0x0c, 0xbe, 0x49, 0x69, 0x12, 0x1f, 0xe3, 0x55, 0xfc, 0x07, 0x54, 0xf9, 0x3e, 0x50, 0xf1, 0xe7, - 0x01, 0x7c, 0x03, 0xeb, 0x9c, 0x1f, 0xe1, 0x52, 0xd0, 0xfa, 0x97, 0xa1, 0xbc, 0x96, 0x68, 0x80, - 0xaa, 0xfc, 0x04, 0x55, 0xf8, 0xb7, 0x34, 0x9b, 0xc6, 0x68, 0x60, 0xf7, 0x95, 0x5b, 0xea, 0x6b, - 0xdc, 0x75, 0xb5, 0x3e, 0x5c, 0x87, 0x19, 0x95, 0xca, 0x8f, 0x42, 0xc6, 0xa8, 0xcf, 0xe8, 0xf2, - 0xe3, 0x11, 0xbe, 0x21, 0x5c, 0x61, 0xdf, 0x1e, 0xe9, 0xc2, 0xba, 0xff, 0x7b, 0x7b, 0xb5, 0x1b, - 0xb7, 0xb4, 0x4f, 0x4f, 0xdf, 0x1e, 0xe9, 0x4a, 0x7d, 0x7a, 0x55, 0xeb, 0xbd, 0x86, 0x47, 0xf3, - 0xc6, 0x59, 0xed, 0xd3, 0xd3, 0xe9, 0xbe, 0x4e, 0x5d, 0xcc, 0x3c, 0x85, 0x8a, 0xe8, 0x72, 0xb4, - 0x3c, 0x42, 0x0d, 0x16, 0x64, 0xed, 0x8d, 0x52, 0x69, 0x06, 0x7c, 0x22, 0x14, 0x6d, 0x79, 0x04, - 0x78, 0xdf, 0x67, 0x54, 0x8a, 0xab, 0x74, 0x9f, 0x18, 0xd0, 0xe6, 0x21, 0xd4, 0x2f, 0xf5, 0x89, - 0x71, 0xb3, 0xf8, 0x1a, 0xba, 0x67, 0x4c, 0xf6, 0x9a, 0x31, 0x47, 0x99, 0x95, 0xd4, 0x1a, 0x05, - 0x9a, 0x39, 0x5c, 0x24, 0x12, 0x6b, 0xd4, 0x82, 0xac, 0x2e, 0xb2, 0x3b, 0x00, 0xd3, 0xd3, 0x33, - 0x9c, 0xc7, 0x4c, 0xb1, 0x61, 0x75, 0xd4, 0x0b, 0x19, 0x7e, 0xb3, 0xfd, 0x6d, 0x0c, 0xbf, 0x99, - 0x20, 0x9a, 0x1e, 0x30, 0xee, 0x4e, 0x30, 0x4f, 0x90, 0xb0, 0x4b, 0x85, 0xd5, 0x55, 0xaa, 0xfc, - 0xa8, 0x37, 0xbb, 0x4e, 0x5a, 0x04, 0x6f, 0x18, 0xf0, 0x19, 0x64, 0xe0, 0x42, 0x72, 0xe8, 0x48, - 0xba, 0xa7, 0x0d, 0x6e, 0xe7, 0x40, 0x96, 0xd3, 0xa0, 0x8a, 0xd9, 0xcd, 0xaa, 0xb0, 0x04, 0x47, - 0x4f, 0x7a, 0xa7, 0xd0, 0x1b, 0x4e, 0xd2, 0x55, 0x05, 0x58, 0x5f, 0x29, 0x8f, 0x31, 0xba, 0xa1, - 0x3a, 0x35, 0xc7, 0xc8, 0xda, 0xd5, 0x63, 0xe9, 0xf3, 0x43, 0x9e, 0x8b, 0x2e, 0xe3, 0xb6, 0x53, - 0x06, 0x61, 0xfe, 0x7d, 0x5a, 0x20, 0xbf, 0xed, 0x6d, 0x8a, 0xf9, 0x6e, 0xe5, 0x98, 0xb3, 0x34, - 0xdb, 0x10, 0x7c, 0xa4, 0x2b, 0x7a, 0x5c, 0x18, 0xe5, 0xae, 0x08, 0x4d, 0xad, 0xee, 0x34, 0xfd, - 0x49, 0x70, 0xbc, 0x7d, 0xe7, 0xa6, 0x35, 0x91, 0xcd, 0xa4, 0x5e, 0x95, 0xd7, 0xa1, 0xe7, 0xbc, - 0xb9, 0xb0, 0xc3, 0xef, 0x26, 0x1c, 0x52, 0x9d, 0x76, 0x93, 0x23, 0x02, 0xf5, 0xe2, 0xe2, 0xba, - 0x12, 0x7f, 0x8f, 0xf2, 0x13, 0x86, 0x6d, 0x28, 0xa4, 0xca, 0xdb, 0xbd, 0xa4, 0x40, 0xfa, 0x4d, - 0x56, 0xaf, 0x65, 0xf0, 0x3a, 0x83, 0x16, 0xf5, 0xb4, 0x81, 0xaa, 0xa1, 0x47, 0xa0, 0xdd, 0xb8, - 0x49, 0x5e, 0x5f, 0x2b, 0xfb, 0x6a, 0x93, 0x83, 0x43, 0xa9, 0xb3, 0xfb, 0xb5, 0xfd, 0xfb, 0x00, - 0x1c, 0x1f, 0x88, 0x56, 0xad, 0x91, 0x6b, 0x7e, 0x95, 0x1c, 0x1c, 0x4a, 0x8e, 0x9c, 0xc5, 0x67, - 0x66, 0x52, 0xbe, 0xd8, 0x47, 0xbe, 0xe2, 0xb9, 0xe9, 0x42, 0x6e, 0x36, 0xc3, 0x6a, 0x7f, 0x38, - 0xf8, 0x4a, 0x28, 0x98, 0xd8, 0x51, 0xef, 0x0f, 0xec, 0xf4, 0x37, 0x7c, 0x65, 0xb5, 0x4e, 0xf8, - 0x5a, 0xa7, 0x45, 0xe1, 0xbb, 0x63, 0x1b, 0x2a, 0x69, 0xc6, 0x44, 0x00, 0x33, 0x00, 0xe2, 0x8f, - 0xb5, 0x5f, 0x4d, 0x0e, 0x7d, 0xa8, 0x0d, 0xbe, 0xa7, 0xf5, 0xdf, 0xd4, 0xba, 0xda, 0x3d, 0xff, - 0xc3, 0x45, 0x8e, 0xdb, 0x4e, 0xcd, 0xef, 0x0c, 0x2e, 0x0a, 0x98, 0x74, 0xb1, 0x45, 0xd9, 0x5c, - 0x94, 0x3d, 0x2f, 0x07, 0x3f, 0x16, 0x2b, 0x76, 0x80, 0xab, 0x28, 0x3f, 0xd1, 0x57, 0xb0, 0x63, - 0x63, 0xcb, 0x19, 0xdb, 0x56, 0x96, 0x52, 0x05, 0x34, 0xcb, 0x6e, 0x78, 0xe2, 0x34, 0xe4, 0x0a, - 0x05, 0xe9, 0xdd, 0xa8, 0x2b, 0x14, 0x14, 0x45, 0xfa, 0x78, 0x01, 0xee, 0x42, 0xe1, 0x6d, 0x82, - 0x1b, 0x4d, 0x09, 0x2b, 0x89, 0x57, 0x22, 0xb1, 0x9d, 0x86, 0x66, 0xe5, 0xe3, 0x8b, 0xb8, 0x1b, - 0xc8, 0x7c, 0xd3, 0x0d, 0xe4, 0x3c, 0x54, 0xb4, 0x8d, 0x7d, 0x95, 0x28, 0x44, 0x05, 0x3e, 0xa3, - 0xc0, 0xf3, 0x49, 0x3e, 0xba, 0x5b, 0x57, 0x41, 0x37, 0xc4, 0xeb, 0x9a, 0xfc, 0x0d, 0x77, 0xe2, - 0xe5, 0xd7, 0xff, 0x5f, 0xb0, 0x3c, 0xe6, 0xfb, 0x40, 0x50, 0xe5, 0xf7, 0x04, 0xce, 0x10, 0x79, - 0x52, 0x18, 0x3d, 0xd6, 0xab, 0xbd, 0xde, 0xad, 0x5f, 0xcf, 0x80, 0xea, 0x01, 0xef, 0x84, 0xaa, - 0xea, 0x37, 0x57, 0xaf, 0xad, 0xab, 0xd9, 0x5a, 0xb7, 0x4e, 0x5e, 0xb3, 0xaa, 0x4c, 0x6b, 0xbf, - 0xac, 0xb5, 0x5f, 0x05, 0xf0, 0xc5, 0xe5, 0xf5, 0xbe, 0xba, 0x2d, 0xf2, 0xa6, 0x55, 0xb4, 0x0e, - 0x0e, 0x4f, 0xac, 0x6e, 0xe3, 0xcf, 0x65, 0xdf, 0xaa, 0x5a, 0xbd, 0x19, 0x26, 0x01, 0x56, 0xb5, - 0x4e, 0xf6, 0x3d, 0xb7, 0x6a, 0x13, 0xab, 0x1a, 0xdc, 0xab, 0xf5, 0x0e, 0xb1, 0x2a, 0xb7, 0xbc, - 0x76, 0x2d, 0xb8, 0xd2, 0x40, 0x09, 0x67, 0xdc, 0xdc, 0xc9, 0x5f, 0x33, 0x17, 0x18, 0x1e, 0x8f, - 0xdc, 0xe5, 0xff, 0x4a, 0xad, 0xff, 0x86, 0x76, 0xf2, 0x92, 0x76, 0xe3, 0x9a, 0xd6, 0x7d, 0x85, - 0xdd, 0xfc, 0x97, 0xbb, 0x21, 0xa4, 0x10, 0x68, 0x2d, 0xd0, 0xad, 0xee, 0x5f, 0x40, 0x15, 0x6d, - 0x20, 0x71, 0xa3, 0x27, 0xdd, 0x8f, 0xda, 0x81, 0x02, 0xf4, 0xcb, 0x04, 0xce, 0xdd, 0x94, 0x1e, - 0xe8, 0xfe, 0xad, 0x0b, 0x95, 0x58, 0x5b, 0xdd, 0x19, 0x22, 0xe4, 0x59, 0x93, 0x08, 0xb9, 0x3b, - 0x5b, 0x84, 0xd0, 0xd9, 0x8c, 0xcf, 0x72, 0xb1, 0x45, 0x95, 0x37, 0xa2, 0xe7, 0xbd, 0x8e, 0xb8, - 0x90, 0x16, 0x59, 0x51, 0x08, 0x8b, 0x93, 0xfb, 0x34, 0xf7, 0x65, 0x01, 0x9a, 0x4c, 0xbb, 0x12, - 0x97, 0xa1, 0xc9, 0x21, 0xfc, 0x87, 0xce, 0x87, 0x77, 0x13, 0x3e, 0xa4, 0x65, 0x52, 0x11, 0xf4, - 0x87, 0x8f, 0x17, 0xac, 0x4c, 0x5c, 0x82, 0x0a, 0xfc, 0x8d, 0x21, 0x7f, 0x9c, 0xe2, 0x93, 0x38, - 0xb6, 0x43, 0x89, 0x54, 0xcc, 0x3e, 0xff, 0xa1, 0x76, 0xf8, 0xa0, 0x0f, 0x0a, 0xf1, 0x8a, 0xf9, - 0x63, 0x81, 0x1d, 0xfc, 0xe3, 0x44, 0x52, 0x20, 0x4d, 0x07, 0xe8, 0x9a, 0xfa, 0xcd, 0xa9, 0xd3, - 0xd7, 0x53, 0xa7, 0xdb, 0x7c, 0xa4, 0x58, 0xf4, 0xa1, 0xe9, 0x91, 0x78, 0x4d, 0x73, 0x3c, 0x11, - 0x69, 0x0a, 0xed, 0x86, 0xc3, 0x1e, 0x70, 0x1d, 0x79, 0x18, 0x9c, 0x5d, 0x27, 0x89, 0x5a, 0x7f, - 0x8f, 0xd6, 0x71, 0x9d, 0x1a, 0xc2, 0xe1, 0xf6, 0x28, 0x1b, 0x48, 0x7c, 0x14, 0x4d, 0x8a, 0xc4, - 0x89, 0xc6, 0x5f, 0x60, 0x1c, 0xa6, 0x68, 0x11, 0xbb, 0xbd, 0xa7, 0x34, 0x08, 0xca, 0x3e, 0xad, - 0x13, 0xeb, 0x10, 0x8a, 0x2b, 0xb1, 0x90, 0x02, 0x8d, 0x27, 0x19, 0x27, 0x0e, 0xae, 0x58, 0x2a, - 0xe1, 0x3b, 0x80, 0xab, 0x24, 0xf6, 0x28, 0xc5, 0x80, 0x12, 0xe5, 0xac, 0x3b, 0x1c, 0xd2, 0x0d, - 0xbb, 0xc3, 0x99, 0x47, 0xb9, 0x8a, 0xdc, 0xe1, 0x54, 0xb9, 0xd7, 0x6f, 0xf0, 0xad, 0x93, 0xd7, - 0x96, 0x41, 0x6c, 0x9a, 0xc5, 0xba, 0xbc, 0xfd, 0x94, 0x17, 0x45, 0x70, 0xc0, 0x83, 0xfb, 0x55, - 0x4e, 0x14, 0x75, 0xe6, 0x14, 0x45, 0xee, 0xef, 0x52, 0x16, 0x71, 0xa2, 0x27, 0x80, 0x0a, 0x29, - 0x2b, 0xc0, 0x1d, 0x90, 0x4d, 0xf8, 0x30, 0xde, 0x3b, 0xd4, 0xab, 0xca, 0x0f, 0x7a, 0xf5, 0x16, - 0xd2, 0x5c, 0x4a, 0x57, 0x66, 0xcf, 0x26, 0xca, 0x2c, 0x3a, 0x58, 0x95, 0x47, 0x95, 0x17, 0xa2, - 0xf9, 0x5e, 0x46, 0xdc, 0xe6, 0x85, 0x85, 0x2e, 0x3c, 0xeb, 0xd0, 0x14, 0xfe, 0xf1, 0x80, 0xdb, - 0xfc, 0x02, 0x00, 0x36, 0x4a, 0x93, 0x87, 0xff, 0x3c, 0xcb, 0xe3, 0x72, 0xce, 0x73, 0xc7, 0xf3, - 0xb7, 0x02, 0x9a, 0x6b, 0x78, 0xa4, 0x36, 0x87, 0x13, 0xa1, 0x26, 0xb2, 0xf1, 0xb2, 0x7d, 0xee, - 0x11, 0xeb, 0xe3, 0x04, 0xc2, 0x30, 0x9c, 0xdb, 0x56, 0xa1, 0x9d, 0x9f, 0x16, 0xb7, 0x3f, 0xba, - 0x26, 0xb4, 0x3f, 0x56, 0x3d, 0xad, 0xca, 0x4f, 0xa2, 0x2a, 0x6f, 0xae, 0x51, 0x31, 0x7d, 0x1d, - 0xdc, 0xe9, 0x53, 0x27, 0xae, 0xf3, 0x32, 0xdc, 0xf3, 0xaf, 0xf3, 0x38, 0xc7, 0x15, 0x53, 0xe3, - 0x3b, 0xed, 0xe9, 0x39, 0x26, 0xb3, 0x47, 0xb2, 0xc9, 0x2c, 0xd7, 0xd4, 0xc8, 0x75, 0xd6, 0xaa, - 0x70, 0x22, 0xb6, 0x6b, 0x5c, 0x12, 0xba, 0xf4, 0x17, 0xa8, 0x48, 0x6f, 0x21, 0xce, 0x40, 0x79, - 0x3b, 0x95, 0x5d, 0x94, 0x84, 0xf0, 0x9f, 0xe2, 0x0a, 0x54, 0xd0, 0xe2, 0x6f, 0x6c, 0x86, 0x69, - 0x4f, 0x91, 0x16, 0x58, 0x9e, 0x26, 0x35, 0x93, 0x38, 0xab, 0xf4, 0x8d, 0x86, 0x0f, 0x80, 0xab, - 0x5c, 0x8f, 0x09, 0x55, 0xbf, 0x50, 0xe5, 0x4d, 0xc8, 0xe7, 0xcd, 0xb9, 0x0e, 0xd2, 0xbd, 0x39, - 0x56, 0xd1, 0x49, 0xf6, 0x7b, 0xd1, 0x34, 0xf3, 0x57, 0xc5, 0x12, 0x34, 0xb9, 0x85, 0xbe, 0x2e, - 0x11, 0xdc, 0x79, 0x65, 0x45, 0x3e, 0xf6, 0xd3, 0xf3, 0x3f, 0x05, 0x6e, 0x1f, 0xae, 0x87, 0x8d, - 0x3d, 0x7e, 0xe7, 0x29, 0x70, 0x55, 0x8f, 0xa8, 0xf2, 0x72, 0xb4, 0xcc, 0xeb, 0x38, 0x17, 0xce, - 0x26, 0x00, 0x1a, 0x0f, 0x65, 0x84, 0x7f, 0xe3, 0xe2, 0x6c, 0xfc, 0x46, 0x9b, 0x1f, 0x85, 0x67, - 0x08, 0x3f, 0xa7, 0xf1, 0x69, 0x23, 0xeb, 0x55, 0xf9, 0x39, 0x54, 0xe7, 0x75, 0xc6, 0x08, 0x67, - 0x05, 0xe0, 0xd1, 0xe8, 0x44, 0x89, 0xeb, 0x51, 0x31, 0xdf, 0x8d, 0xd9, 0x07, 0x12, 0x23, 0x35, - 0x9f, 0xf7, 0x81, 0x74, 0xa3, 0x29, 0xf4, 0x87, 0xe1, 0x08, 0xe2, 0xe3, 0x8b, 0x3c, 0x37, 0xf2, - 0xd0, 0x2c, 0x7d, 0x6c, 0x5b, 0xa2, 0x81, 0x3b, 0x90, 0x52, 0xc5, 0x67, 0xd8, 0x9d, 0x29, 0x28, - 0x3c, 0x64, 0x17, 0xa4, 0x77, 0xa6, 0x0b, 0x98, 0x5b, 0x3f, 0xd1, 0xf8, 0xc8, 0xd1, 0x1e, 0x9c, - 0xfb, 0xe9, 0xd7, 0xe9, 0x1d, 0x6a, 0xc2, 0xee, 0x31, 0x0c, 0xe8, 0x3c, 0xab, 0x55, 0xb9, 0xc6, - 0xee, 0x31, 0xcc, 0x12, 0xf3, 0x63, 0x98, 0x2d, 0xd1, 0xc0, 0x84, 0x5f, 0xc2, 0x3c, 0xa5, 0xca, - 0x4f, 0xa0, 0xc7, 0xbd, 0xb6, 0xf8, 0x67, 0x62, 0x2a, 0x39, 0x74, 0x84, 0x46, 0xd4, 0x20, 0xc4, - 0x91, 0xee, 0x69, 0x6b, 0x89, 0x06, 0x28, 0xa7, 0xfd, 0x9d, 0x0b, 0xcd, 0xce, 0x6a, 0xfb, 0xa3, - 0x70, 0xcd, 0x67, 0xf3, 0x19, 0x1f, 0x87, 0x51, 0x4b, 0x9b, 0x3d, 0x26, 0x2c, 0x68, 0xa4, 0xcf, - 0x32, 0x39, 0x34, 0x5a, 0x79, 0x0c, 0x1f, 0x5d, 0x59, 0x4f, 0xfa, 0xd1, 0x5f, 0xe0, 0x8e, 0xfe, - 0xb3, 0xd8, 0x3b, 0x12, 0x60, 0x28, 0xfa, 0xd0, 0xa3, 0x14, 0x15, 0x86, 0xa2, 0x2d, 0x2b, 0x6a, - 0x42, 0x41, 0x1a, 0xfa, 0xc6, 0xa7, 0xff, 0xa6, 0x75, 0x8f, 0x90, 0xba, 0x7c, 0xbd, 0x8e, 0xfc, - 0x16, 0x97, 0xa3, 0x82, 0x40, 0x28, 0x18, 0x8b, 0x97, 0x14, 0x10, 0x74, 0xcc, 0xcf, 0x46, 0x87, - 0x1c, 0x8f, 0x87, 0xe2, 0x09, 0x7f, 0x38, 0x81, 0xa1, 0x7d, 0x00, 0x2b, 0x2e, 0x42, 0x53, 0xfd, - 0x8d, 0xe4, 0xa1, 0x9c, 0x52, 0x17, 0x5d, 0xdf, 0xdc, 0x04, 0x17, 0x25, 0x3e, 0x73, 0xa1, 0xe7, - 0x69, 0x34, 0xd5, 0xd4, 0x1a, 0xcf, 0x06, 0xb7, 0x67, 0xb3, 0x09, 0xd0, 0xb1, 0xe1, 0x7f, 0xc9, - 0x91, 0xc1, 0x45, 0xac, 0x11, 0xfa, 0x6f, 0xcf, 0xbe, 0x49, 0x9c, 0x31, 0x62, 0x23, 0x79, 0x73, - 0x7a, 0x27, 0x4a, 0x88, 0xd5, 0x66, 0x09, 0x41, 0xc2, 0xec, 0x52, 0x09, 0xb1, 0xc8, 0x49, 0x42, - 0xc0, 0x5b, 0x1e, 0x7a, 0x42, 0xa7, 0x72, 0x62, 0x2d, 0xbd, 0x43, 0x01, 0xd1, 0x80, 0xcf, 0xea, - 0xf4, 0x0e, 0xa5, 0xc2, 0xb1, 0x17, 0xfd, 0x3a, 0x84, 0xef, 0x0e, 0xae, 0x54, 0x56, 0xa3, 0x42, - 0x78, 0xc6, 0x5b, 0x57, 0x4b, 0xcf, 0x48, 0xa0, 0xc0, 0xb3, 0x42, 0xb6, 0x35, 0x40, 0x7f, 0x50, - 0xaa, 0x0f, 0xcc, 0xa7, 0x83, 0x89, 0xbf, 0x41, 0x53, 0x43, 0x61, 0x2c, 0xd1, 0xa9, 0x8a, 0x4e, - 0xb3, 0xd1, 0x90, 0xe1, 0x99, 0x6b, 0xf4, 0x4b, 0x95, 0x6b, 0x97, 0xb4, 0xf6, 0x0b, 0xf4, 0xb5, - 0x12, 0x17, 0xb0, 0x87, 0x62, 0xdc, 0xdc, 0xc8, 0x5e, 0x3a, 0x16, 0x4e, 0x44, 0x3a, 0xc2, 0x50, - 0xe1, 0x4b, 0xe3, 0x94, 0x8e, 0xe2, 0xb3, 0x94, 0xf1, 0x8a, 0x58, 0x64, 0xaa, 0xe5, 0x34, 0x60, - 0xc8, 0x43, 0x3c, 0xae, 0x29, 0x5a, 0x49, 0x2f, 0x5a, 0x57, 0xbb, 0x76, 0xf8, 0x43, 0x0c, 0x63, - 0x60, 0x89, 0x34, 0xa9, 0x7a, 0x46, 0x95, 0x57, 0xa2, 0x27, 0xbc, 0x22, 0x26, 0x65, 0x33, 0x15, - 0x4b, 0xf7, 0x1b, 0xe6, 0x42, 0x6e, 0x85, 0xca, 0x47, 0x5b, 0xf7, 0x8e, 0xb6, 0x1f, 0x4c, 0x0e, - 0x1e, 0xd4, 0x0e, 0x77, 0x25, 0x87, 0x8e, 0x78, 0xfe, 0x9e, 0xb7, 0xae, 0xe8, 0x5d, 0xdc, 0x19, - 0xe2, 0x76, 0xb3, 0x49, 0xdc, 0xce, 0xb1, 0x84, 0x87, 0x21, 0xb3, 0x71, 0x7c, 0x5a, 0xc8, 0xa3, - 0xc5, 0xee, 0x4d, 0xd4, 0x5d, 0x26, 0xa4, 0x9a, 0x8d, 0xb0, 0x7c, 0x5b, 0x27, 0x8d, 0xa6, 0xbb, - 0x00, 0x4d, 0x82, 0xe6, 0xe2, 0x83, 0x8c, 0x4d, 0x41, 0x9e, 0xcc, 0x54, 0xe5, 0x69, 0x8c, 0x4d, - 0xe1, 0x1f, 0xc6, 0x87, 0xcb, 0x39, 0xce, 0x71, 0x19, 0x06, 0x18, 0x83, 0x73, 0x0a, 0xe1, 0xcb, - 0x75, 0xb5, 0x1c, 0x9b, 0xac, 0x44, 0x88, 0xbe, 0x9a, 0x37, 0x5e, 0xfd, 0x83, 0x67, 0xab, 0x51, - 0x2c, 0x15, 0xf3, 0x04, 0xe5, 0xe3, 0x6a, 0xc4, 0xa7, 0x50, 0x11, 0x16, 0x8b, 0x3e, 0x7f, 0xd8, - 0xfc, 0xee, 0xc9, 0x28, 0x95, 0x66, 0x40, 0x63, 0x77, 0x5d, 0x7d, 0xcb, 0x0a, 0x77, 0x4d, 0x5d, - 0xad, 0xcf, 0x67, 0x54, 0x8a, 0xcf, 0xa2, 0xa9, 0x4c, 0xe4, 0x43, 0x1f, 0x05, 0xc6, 0x2d, 0xaa, - 0xb9, 0x86, 0xef, 0xe7, 0x11, 0xe8, 0xc7, 0x0c, 0xa0, 0x07, 0x3d, 0x98, 0x64, 0x0c, 0x03, 0xe4, - 0xd0, 0x6c, 0x83, 0xa7, 0x7b, 0x2f, 0x19, 0x9e, 0xa1, 0x20, 0x6f, 0x14, 0x74, 0xb7, 0xbf, 0xc5, - 0x1f, 0x6a, 0xf4, 0x6f, 0x6b, 0x54, 0xea, 0xea, 0xe5, 0x60, 0x30, 0xa6, 0xc4, 0xe3, 0x90, 0x02, - 0x09, 0x4b, 0x8c, 0x7c, 0xf0, 0x53, 0x75, 0x82, 0x91, 0xa6, 0x6a, 0x9d, 0xef, 0x27, 0x6f, 0x9e, - 0x74, 0xd7, 0xd5, 0xbb, 0x53, 0xc7, 0xae, 0xf8, 0x9c, 0xe0, 0x4c, 0x37, 0xc5, 0x85, 0xb6, 0x37, - 0xc5, 0xf6, 0x83, 0x34, 0x6e, 0x8a, 0x5f, 0x46, 0x2c, 0x14, 0x14, 0xe1, 0xfe, 0x31, 0xac, 0x1e, - 0x84, 0x70, 0x59, 0x03, 0x69, 0x2e, 0xed, 0x9c, 0xc8, 0xb9, 0xcc, 0x3b, 0xf4, 0x55, 0x39, 0x58, - 0x62, 0xf5, 0x08, 0x53, 0x55, 0x78, 0xe3, 0x40, 0x73, 0xbc, 0x94, 0xf0, 0xd8, 0xaa, 0x1b, 0x11, - 0x0f, 0x17, 0xd6, 0xec, 0x50, 0x02, 0x3b, 0x31, 0xc2, 0x6b, 0x22, 0xe1, 0xed, 0x8d, 0xa1, 0x40, - 0x62, 0x75, 0x2c, 0xd2, 0xb4, 0x25, 0x1a, 0xf8, 0xfa, 0x9b, 0x5f, 0x99, 0x49, 0x79, 0xa8, 0x16, - 0x55, 0x79, 0x3a, 0x7b, 0x84, 0x3a, 0x29, 0x39, 0x74, 0xa4, 0x25, 0x1a, 0x60, 0x0a, 0x85, 0x44, - 0x37, 0x6b, 0x2e, 0x40, 0x05, 0x29, 0x90, 0xee, 0x82, 0xcc, 0x2a, 0xe9, 0x9e, 0x36, 0xfc, 0x93, - 0x49, 0x3a, 0xb2, 0x99, 0x1b, 0x57, 0x66, 0xf9, 0x13, 0x77, 0xb0, 0x34, 0xed, 0xb0, 0x05, 0x13, - 0x3a, 0x2d, 0x52, 0x5d, 0x76, 0x2c, 0xbc, 0x49, 0x73, 0x60, 0x5b, 0x24, 0xe3, 0xde, 0xf7, 0x51, - 0xfa, 0x83, 0x3d, 0x30, 0x15, 0x4f, 0xca, 0x85, 0xdc, 0xce, 0x6d, 0xef, 0x0c, 0x39, 0x5b, 0x67, - 0xba, 0x4e, 0xb6, 0x1e, 0x1e, 0xe9, 0xac, 0x08, 0xd1, 0x12, 0x79, 0x05, 0xd2, 0xb6, 0x18, 0x10, - 0x41, 0x3b, 0x03, 0xd9, 0x4a, 0x03, 0xc6, 0x8f, 0x89, 0x12, 0x69, 0x01, 0x90, 0x0c, 0x8f, 0x4b, - 0x7e, 0x6c, 0x56, 0x71, 0xbb, 0x08, 0x15, 0xf3, 0x03, 0xc1, 0xba, 0x2c, 0x68, 0x9f, 0x60, 0xc6, - 0x80, 0x1f, 0x1e, 0x35, 0x8f, 0x7b, 0x59, 0xbf, 0x51, 0x09, 0x34, 0xc7, 0x42, 0x89, 0x5d, 0xdf, - 0x54, 0xfc, 0xaa, 0xaf, 0xa6, 0xfe, 0xbd, 0x6c, 0x55, 0xff, 0xaa, 0x55, 0xf9, 0x69, 0x9e, 0x38, - 0x25, 0x8e, 0x38, 0xcb, 0x46, 0x4f, 0x9d, 0xd6, 0x6e, 0xb5, 0x27, 0x47, 0xce, 0x96, 0x6b, 0xed, - 0x23, 0x5a, 0xff, 0x8d, 0xf4, 0xf9, 0xcf, 0xb4, 0xae, 0xa1, 0x74, 0x67, 0x87, 0xa6, 0x76, 0x69, - 0xfb, 0xda, 0x47, 0x5f, 0xbf, 0x94, 0xee, 0xec, 0x58, 0xcc, 0x6b, 0x89, 0x8a, 0x73, 0x48, 0x04, - 0xe2, 0x31, 0x65, 0xa3, 0xe7, 0x2c, 0x24, 0x7a, 0x4e, 0x72, 0xb0, 0x6f, 0x02, 0xc7, 0x3e, 0xdc, - 0x17, 0x92, 0xc0, 0x24, 0x60, 0x8b, 0x5a, 0x66, 0x59, 0xd1, 0xfa, 0x3b, 0xb5, 0xf6, 0x4b, 0xe9, - 0xe1, 0x36, 0x7a, 0xde, 0xfb, 0xc2, 0x85, 0x16, 0x3a, 0x2e, 0xca, 0x9d, 0xc1, 0x22, 0xf5, 0x26, - 0x55, 0x64, 0xbe, 0x35, 0x52, 0x1d, 0x37, 0xa9, 0xf1, 0x1d, 0xff, 0x78, 0xaf, 0x3d, 0x7b, 0x9c, - 0xe8, 0x7e, 0x90, 0x66, 0x74, 0x3a, 0xe9, 0x23, 0x7b, 0xf2, 0x10, 0x51, 0x69, 0x9e, 0x53, 0x76, - 0xd5, 0xfb, 0x43, 0xb1, 0x9f, 0xe8, 0xfd, 0xeb, 0xd2, 0xfb, 0x32, 0x55, 0x5e, 0x82, 0xca, 0xbd, - 0x76, 0x48, 0xd5, 0x29, 0x7d, 0x60, 0xdf, 0xa8, 0x7a, 0x41, 0x1b, 0x60, 0xce, 0xa9, 0xff, 0x9b, - 0x0b, 0xac, 0x52, 0x06, 0xf8, 0x8f, 0xe2, 0x1e, 0x93, 0x4e, 0x67, 0xe2, 0x6f, 0xca, 0xb2, 0xf1, - 0xa0, 0xeb, 0xd7, 0x80, 0xb7, 0x9c, 0xf4, 0xfc, 0x2f, 0x04, 0x34, 0x99, 0xb6, 0x17, 0xbd, 0xa8, - 0xe0, 0x39, 0x65, 0x97, 0x4e, 0xc1, 0xe4, 0xb5, 0x00, 0x94, 0x48, 0x85, 0xd0, 0x17, 0xd6, 0xb1, - 0x49, 0x81, 0xb8, 0x82, 0x34, 0xe3, 0x1e, 0x90, 0xc1, 0x3b, 0x61, 0x5a, 0x26, 0x15, 0xd3, 0x6f, - 0xc3, 0xb2, 0xb3, 0xe2, 0xec, 0x20, 0xa9, 0x79, 0x4e, 0x41, 0x52, 0xa1, 0xb5, 0x29, 0x96, 0x93, - 0x29, 0x48, 0x2a, 0x8d, 0x24, 0xc7, 0x46, 0x2e, 0x4d, 0xd7, 0x49, 0x84, 0x2a, 0x69, 0xda, 0x14, - 0x38, 0x90, 0xf1, 0x2f, 0x8a, 0x75, 0x5e, 0x3d, 0x20, 0xd8, 0xc6, 0x55, 0x20, 0x21, 0x93, 0xcc, - 0xef, 0x39, 0x37, 0xf1, 0x8f, 0x35, 0xcb, 0xb9, 0x1b, 0x3f, 0x16, 0xa3, 0xd4, 0xcd, 0x12, 0x55, - 0x84, 0xc2, 0x0d, 0x11, 0x32, 0xb6, 0x72, 0x37, 0x61, 0x6c, 0xfa, 0x4f, 0x4b, 0x34, 0x50, 0xee, - 0x0e, 0x47, 0x82, 0x0a, 0xe1, 0x82, 0x72, 0x77, 0xc2, 0x1f, 0xdf, 0xf9, 0xcd, 0xc5, 0x67, 0xa8, - 0x47, 0x45, 0x24, 0xb5, 0x1a, 0x79, 0x75, 0x9d, 0x47, 0x94, 0x74, 0x49, 0x95, 0x2b, 0xbd, 0x46, - 0xa9, 0xe4, 0x81, 0xa4, 0xc5, 0x7a, 0x26, 0xb5, 0x35, 0xeb, 0x36, 0xb9, 0xe1, 0x47, 0xaa, 0xe3, - 0xda, 0xed, 0x91, 0xae, 0xf4, 0x45, 0xd5, 0x67, 0x80, 0x8b, 0xcf, 0xa2, 0xc9, 0x4a, 0x18, 0xb2, - 0x10, 0xe7, 0x93, 0xfe, 0x20, 0xe7, 0x10, 0x2d, 0x93, 0x3c, 0x98, 0xa2, 0x4f, 0x9d, 0xc9, 0xd9, - 0x1b, 0x03, 0x16, 0x1f, 0x46, 0x05, 0x8d, 0xa1, 0xa6, 0x50, 0x82, 0x7a, 0xf5, 0x2e, 0x24, 0x77, - 0xda, 0xa4, 0x44, 0x2a, 0x4e, 0x0d, 0x74, 0x8f, 0x9e, 0xfb, 0x84, 0xa5, 0x42, 0xcd, 0xf7, 0xba, - 0xdc, 0x3f, 0xf3, 0x41, 0x9d, 0x58, 0x8e, 0xf2, 0xa3, 0x98, 0x23, 0xc1, 0xb7, 0xb7, 0x04, 0x9f, - 0xf2, 0x48, 0x81, 0x34, 0x69, 0xf4, 0xdc, 0x27, 0xe9, 0xb3, 0x7b, 0x18, 0x38, 0x29, 0x14, 0x6b, - 0xd0, 0xa4, 0x78, 0xa8, 0x29, 0xda, 0xc8, 0x92, 0xec, 0x92, 0x43, 0x0a, 0x2d, 0x92, 0x16, 0x68, - 0xdd, 0x1f, 0x80, 0xd7, 0xa6, 0x3b, 0xc2, 0x13, 0x82, 0x9b, 0x09, 0x53, 0x80, 0x13, 0x5b, 0x05, - 0x84, 0xe0, 0xe9, 0xfd, 0xfa, 0xe6, 0xc6, 0x46, 0x9a, 0x21, 0x97, 0xbc, 0x61, 0xe1, 0x8a, 0xa5, - 0x0d, 0x10, 0x58, 0x65, 0xbb, 0xbf, 0x31, 0xae, 0x94, 0x83, 0x95, 0x01, 0x6a, 0xc1, 0x13, 0x56, - 0x4f, 0x51, 0xf2, 0x84, 0x5b, 0xbb, 0xf9, 0x26, 0x4d, 0x39, 0x9b, 0x3a, 0x71, 0xbd, 0x3c, 0x39, - 0x78, 0xd0, 0x16, 0xda, 0xc7, 0x75, 0x2e, 0xbe, 0xc4, 0xdf, 0x69, 0x16, 0x19, 0xcf, 0xe3, 0xb8, - 0x3b, 0xcd, 0x4a, 0x3d, 0x1b, 0x22, 0x79, 0x1a, 0x03, 0x7d, 0xd2, 0x47, 0x4d, 0xc3, 0x1f, 0xd3, - 0xbc, 0x79, 0x10, 0x66, 0x82, 0xbc, 0x96, 0xe7, 0xaf, 0x3e, 0x5f, 0xe2, 0x2f, 0x02, 0x10, 0xd7, - 0xbd, 0xe1, 0xa5, 0x62, 0xdf, 0x3d, 0xd8, 0x95, 0xed, 0xbb, 0x37, 0x6e, 0x12, 0x56, 0xe9, 0xd7, - 0xf0, 0x53, 0x38, 0x27, 0x64, 0x7a, 0x0d, 0xef, 0x36, 0x77, 0x0c, 0xa1, 0x0b, 0xe0, 0x52, 0x3e, - 0xdd, 0xf7, 0xf6, 0x68, 0x6b, 0xa7, 0x7e, 0x15, 0xff, 0x1c, 0x17, 0x7c, 0xa1, 0x98, 0xc5, 0xcf, - 0x2f, 0xf7, 0xea, 0x85, 0x0e, 0x5d, 0x11, 0xee, 0xa4, 0x5d, 0x19, 0xd1, 0x1a, 0x1e, 0x41, 0xae, - 0x16, 0x89, 0xfa, 0x10, 0x13, 0x0f, 0x71, 0x57, 0x8b, 0x24, 0xcd, 0x87, 0x93, 0x1f, 0x1c, 0xf8, - 0x5a, 0x24, 0xe2, 0x35, 0x8c, 0x45, 0x25, 0x8d, 0xf0, 0xe6, 0x6a, 0x91, 0xc4, 0x5a, 0xfd, 0x59, - 0xc6, 0x34, 0x23, 0x2e, 0x2c, 0x7b, 0x96, 0xb1, 0xd0, 0xf4, 0xe8, 0x02, 0x0a, 0x01, 0x53, 0x30, - 0x16, 0xf6, 0xfe, 0x42, 0xdc, 0xa4, 0xc7, 0x7d, 0x98, 0xce, 0xde, 0xf7, 0x3f, 0xae, 0xc7, 0x7d, - 0xb0, 0x45, 0x35, 0x9d, 0x8c, 0x2d, 0xaa, 0x59, 0x60, 0x88, 0x97, 0x01, 0x41, 0x44, 0xec, 0xce, - 0x20, 0xfd, 0xd6, 0x92, 0x00, 0xcb, 0xac, 0x50, 0x7a, 0xd8, 0xb9, 0x67, 0x90, 0xc5, 0xf6, 0xfd, - 0xeb, 0x1d, 0x88, 0x8d, 0x59, 0x31, 0x2e, 0x66, 0x92, 0xaf, 0xfc, 0x5c, 0x95, 0x57, 0x65, 0x05, - 0x21, 0xb1, 0xfd, 0x12, 0x1f, 0x98, 0xc4, 0xfe, 0x4b, 0xe6, 0x68, 0x25, 0xf4, 0x5e, 0xdd, 0x51, - 0x54, 0x33, 0x5b, 0x13, 0x1f, 0x0a, 0x02, 0xe2, 0x0f, 0x41, 0xda, 0x2b, 0xcf, 0xa8, 0x0b, 0x2c, - 0xd0, 0x5c, 0xc8, 0x0d, 0x5d, 0xcc, 0xaf, 0xce, 0x0a, 0xbd, 0x41, 0x02, 0x93, 0xb3, 0x25, 0xb8, - 0x77, 0xfc, 0x48, 0xf7, 0x59, 0xa2, 0x71, 0x10, 0x73, 0xa3, 0x11, 0x8d, 0xe3, 0x41, 0xbe, 0x2f, - 0x88, 0xc9, 0xe1, 0x80, 0x66, 0x3d, 0x44, 0x07, 0x13, 0x72, 0x79, 0xe3, 0x12, 0x72, 0xba, 0x24, - 0xcd, 0x9f, 0x88, 0x24, 0xad, 0x5a, 0xa7, 0xca, 0xcf, 0xa2, 0x9f, 0x7b, 0x9d, 0x10, 0x24, 0x2d, - 0xa2, 0xbe, 0x95, 0xdc, 0xb8, 0xad, 0x28, 0xfe, 0x5c, 0xa0, 0x78, 0xf0, 0x1c, 0xa7, 0x57, 0xb7, - 0x59, 0x0b, 0x75, 0x67, 0xe8, 0x5e, 0x2f, 0x98, 0x4e, 0xdf, 0x15, 0x76, 0x0e, 0x0c, 0xb6, 0xf3, - 0xaa, 0xf5, 0x27, 0xfc, 0xa6, 0xe3, 0x38, 0x7d, 0x34, 0x48, 0x9e, 0xe0, 0x82, 0x2e, 0xe6, 0xe9, - 0x13, 0xd0, 0x1c, 0x86, 0x63, 0x9f, 0x12, 0x88, 0xc4, 0x82, 0x3a, 0x0d, 0x6e, 0xca, 0xa2, 0xc1, - 0x6f, 0x44, 0x0c, 0xe8, 0x71, 0x69, 0xed, 0x3f, 0xaa, 0xfb, 0xcc, 0x92, 0x9e, 0xe8, 0xe3, 0x06, - 0x9e, 0x69, 0x0e, 0x71, 0x4c, 0xa3, 0x37, 0xbd, 0xd3, 0x02, 0x34, 0xe3, 0x65, 0x7c, 0x30, 0x7b, - 0x19, 0x6d, 0x66, 0x34, 0x9e, 0x05, 0xec, 0x75, 0xa1, 0xbb, 0x1d, 0x9a, 0x8a, 0x31, 0x7d, 0x6b, - 0x13, 0x8c, 0x2c, 0x4e, 0x6c, 0x6b, 0x5b, 0x47, 0x79, 0x07, 0x82, 0xea, 0x40, 0x94, 0xb6, 0x57, - 0xfc, 0xa1, 0x44, 0x28, 0xdc, 0x50, 0xee, 0x6e, 0x8c, 0xf8, 0x83, 0xe4, 0x8f, 0x78, 0x73, 0x20, - 0xa0, 0xc4, 0xe3, 0xe5, 0xee, 0x1d, 0xfe, 0xc6, 0xed, 0x1b, 0xd9, 0x8f, 0xed, 0xfe, 0x50, 0xa3, - 0x12, 0x2c, 0x77, 0xb3, 0x64, 0xcd, 0x8a, 0xe1, 0x92, 0xd6, 0x25, 0xa0, 0x7c, 0x2c, 0x2a, 0x4a, - 0x5c, 0xe4, 0xa4, 0xb0, 0xc0, 0x79, 0x9a, 0x98, 0xa5, 0xab, 0x7f, 0xa9, 0xca, 0x9b, 0xbd, 0xa4, - 0xc1, 0x37, 0x3d, 0x20, 0xd2, 0xa9, 0xe7, 0x0f, 0x2e, 0x34, 0xcd, 0xfc, 0x49, 0xf1, 0x21, 0xde, - 0xe5, 0x99, 0xa2, 0x97, 0x5c, 0xbf, 0x14, 0xf3, 0x9b, 0x0d, 0xbd, 0x10, 0x7d, 0x5a, 0x47, 0x61, - 0x9e, 0x11, 0x1c, 0x8b, 0xa1, 0xb0, 0xd4, 0x24, 0x36, 0x61, 0xc4, 0xda, 0xe1, 0xae, 0xe4, 0xe0, - 0x1b, 0x06, 0x3e, 0x6a, 0x78, 0x3d, 0x17, 0x2f, 0x7d, 0x1e, 0xbc, 0x4f, 0xe6, 0xf4, 0xdc, 0xd9, - 0xf4, 0xbb, 0x9c, 0xb6, 0x9b, 0xea, 0xb8, 0xc6, 0xab, 0xb6, 0x2b, 0x0d, 0xd5, 0xb6, 0x80, 0x74, - 0x41, 0xde, 0x6b, 0xe8, 0xaa, 0xed, 0x6c, 0xc6, 0x78, 0x86, 0x82, 0x8b, 0x3b, 0xd0, 0xb5, 0x59, - 0x96, 0x27, 0x66, 0x12, 0x59, 0x12, 0x4f, 0xee, 0x25, 0x21, 0x44, 0x37, 0xae, 0xfe, 0x81, 0x00, - 0x6f, 0x0a, 0x48, 0xb4, 0xf6, 0x20, 0x3e, 0x84, 0xf2, 0x1a, 0x23, 0x0d, 0x7c, 0x9c, 0x6f, 0xfc, - 0x5b, 0x9a, 0xae, 0xdd, 0x7c, 0x53, 0xeb, 0x3c, 0x98, 0x39, 0x87, 0x4f, 0xee, 0x5a, 0xff, 0x0d, - 0x1f, 0x2e, 0x15, 0x1f, 0x45, 0x45, 0x89, 0x50, 0x93, 0x12, 0x4f, 0xf8, 0x9b, 0xa2, 0x64, 0x5d, - 0xf2, 0xa0, 0x89, 0x51, 0x2a, 0x15, 0x71, 0x88, 0xd1, 0x4b, 0x45, 0xd9, 0xfc, 0x6e, 0x9e, 0x68, - 0xd0, 0x34, 0x5c, 0xd4, 0x42, 0x6b, 0xb8, 0x28, 0xf7, 0x2f, 0x64, 0xdf, 0xfa, 0x72, 0xb7, 0x29, - 0x6a, 0x94, 0x67, 0x40, 0x80, 0x98, 0x2f, 0x8e, 0x22, 0x54, 0x5c, 0x81, 0x0a, 0x88, 0x61, 0x81, - 0x0a, 0x16, 0x08, 0x56, 0x41, 0x4a, 0xcc, 0x81, 0x9e, 0x58, 0x74, 0x44, 0x52, 0x25, 0xfe, 0x12, - 0x4d, 0x06, 0xc6, 0x8f, 0x53, 0x56, 0xb0, 0xe0, 0x9d, 0xff, 0x62, 0xad, 0x92, 0xf0, 0x87, 0x1a, - 0xe9, 0x49, 0x94, 0xb6, 0xcb, 0xe2, 0x77, 0x56, 0xec, 0xd9, 0x5b, 0x80, 0x44, 0x6b, 0xdb, 0x6f, - 0x26, 0xe2, 0x5e, 0x95, 0xcd, 0x89, 0x8e, 0x0c, 0x8a, 0x3f, 0xd1, 0x15, 0x41, 0x07, 0xee, 0xac, - 0x23, 0xdd, 0xca, 0xac, 0x90, 0x7b, 0xf0, 0x0e, 0x9f, 0x6e, 0x18, 0x25, 0x40, 0x43, 0x6e, 0x9b, - 0x67, 0x7c, 0x54, 0x57, 0xf9, 0x6a, 0xe1, 0xbb, 0xc6, 0x13, 0x76, 0x2f, 0xd3, 0xda, 0x3e, 0xd1, - 0xb0, 0x7b, 0xdd, 0x47, 0xd2, 0x47, 0xcf, 0xd8, 0x84, 0xdd, 0xdb, 0x82, 0xf2, 0xf1, 0x70, 0xc9, - 0x89, 0x6d, 0x8a, 0x34, 0xcb, 0x8e, 0x95, 0x40, 0xeb, 0x26, 0x60, 0xd2, 0xbd, 0x74, 0x23, 0x1b, - 0x78, 0x2f, 0x3d, 0xbc, 0xcf, 0xfa, 0xae, 0x93, 0x3c, 0x42, 0xc4, 0x80, 0x24, 0xaa, 0x0d, 0x3b, - 0x3e, 0x14, 0xf2, 0x51, 0x6d, 0xd8, 0xf1, 0xa1, 0x98, 0x3f, 0x30, 0x70, 0x47, 0x85, 0x65, 0xe6, - 0x60, 0x70, 0x74, 0x23, 0xa2, 0x02, 0xaa, 0x98, 0x3f, 0xb0, 0x70, 0x22, 0xc9, 0xac, 0x27, 0xa3, - 0xaf, 0x10, 0xac, 0xcf, 0x73, 0x94, 0x5e, 0x1b, 0x9b, 0x95, 0xb3, 0x3b, 0xf1, 0x75, 0x5c, 0xb9, - 0x9d, 0x42, 0x65, 0x37, 0xad, 0x71, 0xea, 0x53, 0xf3, 0x72, 0xb5, 0xff, 0x8a, 0xc2, 0xe4, 0x17, - 0xd9, 0xc2, 0xe4, 0x5e, 0x3b, 0xca, 0xa3, 0x1f, 0x9c, 0x88, 0x2c, 0xb9, 0xe6, 0x42, 0x33, 0x2d, - 0x4d, 0xc5, 0x8a, 0x2c, 0xd5, 0x6f, 0xb6, 0x2a, 0x8b, 0x3a, 0x27, 0x17, 0xb2, 0xc8, 0x7f, 0x3a, - 0xe7, 0x3e, 0x6a, 0x39, 0x65, 0x00, 0xf1, 0xea, 0xa7, 0x8c, 0x62, 0x87, 0x68, 0x7f, 0x5f, 0x5f, - 0x7c, 0x7f, 0xbb, 0x41, 0xff, 0x1c, 0xa4, 0x80, 0xe7, 0xef, 0xf2, 0xd0, 0x3d, 0x35, 0x8d, 0x8a, - 0x3f, 0x5c, 0xbb, 0xed, 0xe7, 0xa1, 0x78, 0x22, 0x12, 0xdb, 0x85, 0xd7, 0x96, 0x29, 0xce, 0x6d, - 0x02, 0x2a, 0xc4, 0xc4, 0xc0, 0x49, 0xe1, 0x1d, 0xaa, 0xbc, 0xd6, 0xab, 0x17, 0x4a, 0xcf, 0xd0, - 0x30, 0x38, 0x34, 0x83, 0x50, 0xfa, 0xed, 0x7e, 0xad, 0xf3, 0x60, 0x72, 0xb8, 0x1d, 0x42, 0x1f, - 0x61, 0xac, 0x96, 0xf3, 0x46, 0x9f, 0x74, 0x5f, 0x67, 0xe6, 0xdc, 0x25, 0xbe, 0x0d, 0xa4, 0x15, - 0xca, 0x07, 0x93, 0x9c, 0x0e, 0xda, 0x18, 0x69, 0xf0, 0xe9, 0x1f, 0x11, 0x57, 0xf2, 0x9a, 0x87, - 0x8b, 0x58, 0xc4, 0x08, 0x8f, 0x73, 0x9a, 0xc7, 0xf4, 0x1c, 0x3a, 0xc7, 0xa3, 0x86, 0xce, 0x01, - 0xe6, 0x39, 0x82, 0x1f, 0x5d, 0x27, 0x98, 0xee, 0xa4, 0x6d, 0x54, 0x0d, 0x0a, 0xaa, 0xfc, 0xb1, - 0x80, 0xae, 0x0a, 0x5e, 0x67, 0x1c, 0x49, 0x6f, 0x0a, 0x10, 0xd3, 0x24, 0x75, 0xea, 0x5c, 0x72, - 0xf8, 0x3a, 0xa4, 0xc2, 0x85, 0x09, 0x6a, 0x43, 0x6f, 0xc2, 0x1f, 0xe5, 0x6e, 0x1a, 0x5b, 0x9d, - 0xa4, 0x6a, 0x85, 0xb7, 0x46, 0xf4, 0x73, 0xfd, 0x9f, 0xa4, 0x7b, 0xda, 0xe0, 0x74, 0x50, 0xee, - 0x86, 0xc6, 0x99, 0xae, 0xd7, 0xb5, 0xb7, 0x3f, 0x4e, 0x0e, 0x1e, 0xd4, 0xda, 0xf7, 0x64, 0xfa, - 0x07, 0x21, 0xd5, 0xf9, 0x32, 0xed, 0xc6, 0xc7, 0x5f, 0xb4, 0xee, 0x4d, 0x0e, 0x1e, 0xd5, 0x2b, - 0xe8, 0xa7, 0x7a, 0x5b, 0x33, 0xb7, 0x8e, 0x2c, 0xc7, 0x3d, 0xf6, 0x76, 0xe0, 0xa3, 0x0a, 0xf9, - 0xa2, 0x67, 0x58, 0x40, 0xa5, 0x76, 0x63, 0xbe, 0x23, 0xc4, 0x9a, 0xe7, 0x8c, 0x0b, 0x4d, 0x35, - 0x5d, 0x14, 0x89, 0xcf, 0xa1, 0xe9, 0x71, 0xbe, 0x40, 0x67, 0x68, 0x12, 0x93, 0x33, 0xbb, 0x4e, - 0x9a, 0xa2, 0x5f, 0x24, 0xd5, 0xd5, 0xfa, 0xb2, 0x6b, 0xc5, 0xcd, 0x68, 0xa6, 0xa9, 0x88, 0x63, - 0x77, 0xa2, 0x15, 0x5b, 0x6b, 0xa5, 0xe9, 0xc6, 0xcd, 0x14, 0xbd, 0x44, 0xb1, 0xc0, 0x88, 0x35, - 0x76, 0x76, 0x75, 0x32, 0x3e, 0x93, 0x5d, 0xdd, 0xe8, 0xca, 0x2e, 0xf3, 0x18, 0x56, 0x35, 0x90, - 0xdb, 0x6b, 0x9e, 0x3e, 0xd7, 0x86, 0x9a, 0xd6, 0x8f, 0x09, 0xe8, 0xae, 0xf5, 0x91, 0xa0, 0xa2, - 0x6b, 0x4f, 0x34, 0xf2, 0xff, 0x13, 0x28, 0x1f, 0x9f, 0x20, 0xc8, 0x4d, 0xb1, 0xcd, 0xd1, 0xcc, - 0xa6, 0x09, 0x71, 0xbc, 0x27, 0x8d, 0x44, 0x19, 0x4d, 0xa6, 0x87, 0x12, 0x2a, 0x9b, 0xc7, 0xdd, - 0x9e, 0xb5, 0xf3, 0x6c, 0x40, 0x77, 0x3b, 0xc0, 0x88, 0xa5, 0x10, 0x27, 0x8f, 0x7b, 0x8d, 0xa2, - 0xff, 0xe6, 0xc3, 0xd2, 0xba, 0x4c, 0x61, 0x69, 0x3d, 0xff, 0xa1, 0x00, 0xcd, 0xa8, 0x8d, 0xf9, - 0x43, 0x24, 0x72, 0x00, 0x93, 0x4b, 0xaf, 0xa1, 0x42, 0x1a, 0x7b, 0x81, 0xde, 0x89, 0x57, 0x6f, - 0x55, 0xe5, 0x5f, 0x7b, 0xf5, 0x42, 0xa9, 0x9e, 0x8f, 0xb7, 0x51, 0x57, 0x6f, 0x84, 0x5e, 0x54, - 0xbb, 0x68, 0x0d, 0x78, 0xa3, 0x81, 0xc7, 0xd4, 0x50, 0xd7, 0x68, 0x6b, 0x67, 0x72, 0xb0, 0xf5, - 0xf6, 0x48, 0x17, 0x24, 0xce, 0xb7, 0xc2, 0xf8, 0xf4, 0xbe, 0xc5, 0x2d, 0xd6, 0x9c, 0x8c, 0x8f, - 0x91, 0xec, 0x20, 0x86, 0x91, 0xf8, 0xde, 0x68, 0x24, 0x98, 0xb9, 0xb5, 0x27, 0x7d, 0x71, 0x38, - 0x2b, 0xa0, 0x85, 0x0e, 0x42, 0x2e, 0x20, 0xdd, 0x02, 0x6f, 0x1d, 0x8e, 0xa1, 0x02, 0x8c, 0x0f, - 0x7c, 0x3e, 0xc3, 0x33, 0xfa, 0xb5, 0x2a, 0xff, 0xca, 0x0b, 0x25, 0xfa, 0x74, 0xb8, 0x01, 0x99, - 0x26, 0x63, 0x9a, 0xe6, 0xb8, 0xa6, 0x03, 0x1d, 0x8b, 0xb3, 0x50, 0xc1, 0x76, 0x92, 0x72, 0x1c, - 0xef, 0x38, 0x85, 0x3e, 0xf8, 0x21, 0x2e, 0x41, 0x62, 0x43, 0xcc, 0x1f, 0x50, 0xea, 0x95, 0x58, - 0x28, 0x12, 0xdc, 0xa8, 0x04, 0x22, 0xe1, 0x60, 0x9c, 0xbe, 0x82, 0xb5, 0xa9, 0x11, 0x97, 0xa2, - 0xbb, 0x42, 0x0d, 0xe1, 0x48, 0x4c, 0x91, 0x1b, 0x1b, 0x6b, 0xfd, 0x4a, 0x53, 0x24, 0xbc, 0x51, - 0x49, 0xc4, 0xc9, 0x66, 0x54, 0xe8, 0xb3, 0xab, 0xc2, 0xeb, 0x8d, 0x8f, 0x3e, 0x91, 0x66, 0x70, - 0x6b, 0x9a, 0xea, 0x63, 0x3f, 0xc5, 0x32, 0x34, 0x3d, 0x48, 0xf2, 0x7a, 0xaf, 0x8d, 0x04, 0xfc, - 0x8d, 0x58, 0x68, 0xc1, 0x4d, 0x80, 0x2f, 0xbb, 0x18, 0xd3, 0x53, 0x5c, 0x69, 0x54, 0x02, 0x89, - 0x08, 0x8d, 0x31, 0xea, 0xd3, 0x7f, 0x13, 0xa7, 0x7a, 0x3c, 0x3e, 0x5a, 0x8d, 0xa8, 0x53, 0xbd, - 0x51, 0x44, 0xbe, 0x13, 0x8a, 0xfb, 0xb7, 0x35, 0x2a, 0xab, 0x5a, 0x42, 0x01, 0xc2, 0xb0, 0x53, - 0xe8, 0x77, 0xcc, 0xc5, 0xe2, 0xcf, 0xd1, 0xc2, 0xf8, 0xce, 0x50, 0xf4, 0x17, 0xfe, 0x50, 0x62, - 0x75, 0x24, 0x06, 0x49, 0xc7, 0x37, 0xc1, 0x68, 0x19, 0x6a, 0x8a, 0xc9, 0x1c, 0xc6, 0x02, 0x13, - 0xe7, 0xa0, 0x49, 0xc1, 0xd8, 0x2e, 0x5f, 0x73, 0x18, 0x0c, 0xe2, 0x3e, 0xfa, 0xcb, 0xd3, 0xe6, - 0x42, 0x33, 0x39, 0x1a, 0xbf, 0xd3, 0xdc, 0x04, 0xb0, 0xea, 0x79, 0xdf, 0x38, 0x24, 0xc5, 0x58, - 0x1a, 0x67, 0xa7, 0x0b, 0x4d, 0xc3, 0xcd, 0x8c, 0x3c, 0x94, 0xe2, 0x53, 0xd9, 0x32, 0x03, 0x52, - 0x68, 0xe8, 0x85, 0x52, 0x31, 0x4f, 0xdb, 0x8c, 0xa9, 0x0c, 0xb9, 0xf2, 0x0a, 0x9a, 0xc2, 0x67, - 0xcf, 0x04, 0xa9, 0x56, 0x69, 0x37, 0x56, 0xe3, 0xa3, 0x4b, 0xb8, 0x3c, 0x98, 0xf0, 0x62, 0x0a, - 0xee, 0x46, 0xf9, 0x44, 0x9a, 0x34, 0x24, 0x4e, 0xea, 0xda, 0xa5, 0xcc, 0xc5, 0x77, 0xd9, 0xdd, - 0x28, 0x07, 0x50, 0xfa, 0x14, 0x9a, 0x91, 0xdd, 0x8d, 0xcd, 0x33, 0xaa, 0x59, 0xfc, 0x33, 0xaa, - 0x22, 0xee, 0x99, 0x94, 0xe7, 0x1f, 0x08, 0x68, 0x1e, 0x24, 0x4a, 0x35, 0x0f, 0x4e, 0xb7, 0x69, - 0x6e, 0xb4, 0x3e, 0xbf, 0x7b, 0x58, 0x95, 0x1f, 0xe2, 0xa5, 0xd0, 0x02, 0x9a, 0xd7, 0x78, 0xfc, - 0x22, 0x68, 0x3d, 0x13, 0x41, 0x0e, 0x26, 0x2f, 0xf3, 0x58, 0xe8, 0x03, 0x59, 0x10, 0x51, 0xc5, - 0x7c, 0x98, 0x0d, 0x2a, 0x5e, 0x3c, 0x7f, 0x70, 0xa1, 0xf9, 0x0e, 0xb3, 0xf8, 0x23, 0x25, 0x72, - 0x76, 0x1d, 0x90, 0x1b, 0x2d, 0xd2, 0x1c, 0x7e, 0xe9, 0x0c, 0xba, 0xb2, 0x7a, 0x0e, 0xa4, 0x04, - 0x54, 0x84, 0x3b, 0x59, 0xeb, 0xdf, 0xa6, 0x34, 0x7e, 0x6d, 0x76, 0xf9, 0x0d, 0x9a, 0xd4, 0x88, - 0x3b, 0x62, 0x04, 0x70, 0xbf, 0xdd, 0x84, 0xc9, 0xa7, 0x96, 0x90, 0xff, 0x53, 0xfe, 0x80, 0x37, - 0xc7, 0xd0, 0x52, 0x67, 0x8d, 0xb3, 0xfb, 0xd3, 0x7d, 0x9f, 0xb1, 0x2b, 0x5e, 0xa8, 0x2b, 0x7d, - 0x1c, 0x4d, 0xe1, 0xda, 0x4d, 0x88, 0x21, 0x6e, 0x08, 0xe8, 0x6e, 0x03, 0x67, 0xd0, 0x0b, 0xe3, - 0x85, 0x3a, 0x46, 0xb6, 0x82, 0x7d, 0xa8, 0x31, 0xbd, 0xc5, 0x98, 0x14, 0x6b, 0x66, 0x2b, 0xd7, - 0x37, 0xc3, 0x56, 0x9e, 0xbf, 0x75, 0xa1, 0x12, 0xeb, 0xd8, 0xff, 0x58, 0x39, 0xa0, 0x46, 0x95, - 0x9f, 0x41, 0x4f, 0x79, 0x1d, 0x31, 0x22, 0xcd, 0xe4, 0x11, 0x4c, 0x28, 0xc7, 0x4a, 0xf7, 0x6f, - 0x53, 0xba, 0xdf, 0xe4, 0x0f, 0x85, 0x13, 0x5f, 0x9b, 0xee, 0xd7, 0xa3, 0x49, 0x09, 0xdc, 0x11, - 0xa3, 0xfb, 0xd9, 0x56, 0x9b, 0x44, 0x28, 0x9c, 0xa0, 0x74, 0x0e, 0x90, 0x3a, 0x9d, 0x5f, 0x3d, - 0xa7, 0x07, 0xac, 0xf2, 0xd1, 0xba, 0x2c, 0x62, 0x25, 0x8d, 0x27, 0x44, 0xac, 0xf0, 0xb9, 0xef, - 0x87, 0x58, 0xff, 0x99, 0x89, 0x58, 0xd9, 0xd8, 0xff, 0x58, 0x89, 0x95, 0xe6, 0x66, 0x72, 0xc4, - 0x88, 0x24, 0xf2, 0x08, 0x86, 0xe5, 0xb7, 0x52, 0xeb, 0xd3, 0x68, 0xea, 0xcf, 0x15, 0x7f, 0x63, - 0x62, 0x07, 0x25, 0x02, 0x96, 0xa5, 0xd6, 0x5c, 0x2a, 0x95, 0x68, 0x7b, 0x2e, 0x68, 0x43, 0x9f, - 0xa6, 0xde, 0x6d, 0x4d, 0x9d, 0xb9, 0x90, 0x3a, 0x74, 0x41, 0xeb, 0x7e, 0x97, 0xe6, 0xf9, 0xd9, - 0xe7, 0x42, 0xd3, 0x18, 0xec, 0xf7, 0xb0, 0x14, 0xab, 0x51, 0x91, 0xfe, 0x92, 0x80, 0x9e, 0x6b, - 0x49, 0xc8, 0x0a, 0xa3, 0x54, 0x2a, 0xe1, 0x17, 0xa4, 0x2c, 0x11, 0x6b, 0x56, 0x2a, 0x89, 0x8f, - 0xce, 0x62, 0x9f, 0x01, 0xc4, 0xde, 0xf8, 0x64, 0x4d, 0xc5, 0x76, 0xde, 0x0e, 0x9e, 0x72, 0x07, - 0x05, 0xb8, 0xfe, 0x66, 0x29, 0x5c, 0x37, 0x06, 0x76, 0x28, 0x4d, 0xba, 0xbd, 0x6a, 0x49, 0xb6, - 0xff, 0x27, 0xf1, 0x9e, 0xd3, 0xfd, 0x3f, 0x27, 0x25, 0x87, 0x8e, 0x90, 0x80, 0x1f, 0x2c, 0xa2, - 0x00, 0x1d, 0x8f, 0x73, 0x8f, 0xd2, 0x02, 0xfa, 0x12, 0x1d, 0xe2, 0x39, 0x5f, 0x3a, 0x67, 0x84, - 0x4f, 0x85, 0x85, 0xb9, 0x6c, 0x4e, 0x1f, 0xfc, 0xb5, 0x86, 0x93, 0xe3, 0x3e, 0xcf, 0x64, 0xbe, - 0x86, 0xf7, 0x52, 0xcb, 0x55, 0x79, 0x29, 0x5a, 0xe2, 0x75, 0xfc, 0x3a, 0x73, 0x5b, 0xe4, 0x87, - 0xee, 0xf9, 0xb3, 0x3c, 0x54, 0xfa, 0x7c, 0xb3, 0x12, 0xdb, 0x55, 0xaf, 0xc4, 0x9a, 0xaa, 0x77, - 0xc9, 0xe4, 0x84, 0x53, 0x57, 0xeb, 0x53, 0x7e, 0x47, 0x8e, 0x54, 0x8f, 0x21, 0x44, 0xdd, 0x89, - 0xb6, 0xb2, 0xd8, 0x4a, 0xd4, 0x0b, 0xce, 0x28, 0x96, 0x0a, 0xad, 0x69, 0x73, 0x82, 0xb8, 0x25, - 0x65, 0x36, 0xdc, 0x92, 0xf7, 0x9f, 0x33, 0x8a, 0xed, 0xe2, 0x41, 0x04, 0xc5, 0x65, 0x74, 0xd2, - 0xdc, 0x63, 0x1f, 0x98, 0xb4, 0xa8, 0x1d, 0xb9, 0x89, 0x67, 0xfc, 0xfe, 0xd0, 0xe8, 0x89, 0x8f, - 0x4d, 0x57, 0x99, 0x4f, 0xa1, 0x29, 0x09, 0x1a, 0x2f, 0x17, 0x7f, 0x2d, 0xdf, 0x68, 0xc9, 0x97, - 0x4b, 0x53, 0x52, 0x97, 0xce, 0xa5, 0x4e, 0xdd, 0x1a, 0x7d, 0x7b, 0x5f, 0x5d, 0xad, 0x0f, 0xb1, - 0x9a, 0xba, 0xa0, 0xf8, 0x04, 0x42, 0xd4, 0xc3, 0x16, 0x37, 0x2f, 0x30, 0x1c, 0x7e, 0xb9, 0x62, - 0xf2, 0x8a, 0x02, 0x82, 0x8b, 0xf1, 0xaf, 0x28, 0x70, 0xe3, 0x42, 0x30, 0x53, 0x46, 0x62, 0xd4, - 0xdc, 0x4a, 0x3c, 0x41, 0xf4, 0x42, 0xee, 0xaa, 0x86, 0x85, 0x3b, 0xd3, 0xeb, 0x58, 0x3c, 0xb2, - 0x1c, 0x6b, 0x20, 0x2d, 0x80, 0x8c, 0xfc, 0x40, 0x5f, 0xe9, 0x9e, 0xb6, 0xe4, 0xe0, 0x1b, 0xc9, - 0xc1, 0x03, 0xa9, 0xe3, 0x34, 0x13, 0x84, 0xe7, 0xa8, 0xcb, 0x69, 0x09, 0x09, 0xcd, 0x3d, 0x8e, - 0x0a, 0xfd, 0xb4, 0x88, 0x2e, 0x20, 0x41, 0x8c, 0x5e, 0x28, 0x4d, 0x83, 0xfe, 0xd9, 0x6f, 0x9f, - 0x5e, 0x23, 0xee, 0x40, 0x85, 0x51, 0x25, 0xd6, 0xb4, 0x35, 0x90, 0x78, 0x95, 0xc6, 0x75, 0xf0, - 0x66, 0x4b, 0x50, 0xe7, 0x71, 0xd3, 0xe4, 0x38, 0xac, 0x03, 0x49, 0xe4, 0xa7, 0xc1, 0x6c, 0xf5, - 0xb8, 0xb6, 0x26, 0xf1, 0x6a, 0xd5, 0xf3, 0xaa, 0xbc, 0x1e, 0xad, 0xf5, 0xe6, 0x98, 0x07, 0xf3, - 0x9e, 0x85, 0x58, 0x76, 0x7c, 0x5f, 0x9f, 0x0b, 0xfa, 0x88, 0x3f, 0x17, 0xf4, 0xef, 0x79, 0x8e, - 0x08, 0xa8, 0x00, 0xf7, 0x14, 0x17, 0x1f, 0x41, 0x05, 0xb8, 0x94, 0x6d, 0xb0, 0x96, 0x90, 0x81, - 0x04, 0x0a, 0xfe, 0x4f, 0xd4, 0x50, 0x1f, 0x80, 0x97, 0xd6, 0x23, 0x64, 0x14, 0xda, 0xe8, 0xa6, - 0xe5, 0xe6, 0x98, 0x17, 0x73, 0x96, 0x34, 0x44, 0x22, 0x0d, 0x8d, 0xca, 0x92, 0x68, 0x2c, 0x92, - 0x88, 0x6c, 0x6b, 0xde, 0xbe, 0x64, 0x0b, 0xae, 0xe5, 0x75, 0xd6, 0x23, 0x02, 0x9a, 0x6b, 0x3b, - 0xc5, 0xaf, 0x28, 0xc2, 0xab, 0xe9, 0xf6, 0x06, 0x03, 0x98, 0x6d, 0x3b, 0x31, 0x9b, 0x0d, 0x8d, - 0x7f, 0xb5, 0xe2, 0x51, 0x5d, 0x08, 0xd5, 0x44, 0x9a, 0x9a, 0x22, 0x61, 0x3c, 0x8c, 0x1f, 0xfa, - 0x86, 0x5e, 0x6b, 0xda, 0xd0, 0xef, 0xb6, 0xa0, 0x7c, 0x63, 0x22, 0xd6, 0x1c, 0x48, 0x8c, 0xb5, - 0x89, 0xb3, 0x94, 0xd7, 0xc6, 0xbc, 0xa5, 0xe2, 0xd1, 0xd6, 0x9e, 0xf4, 0x51, 0xea, 0x90, 0xed, - 0x79, 0xd7, 0x85, 0xa6, 0x41, 0x25, 0xdd, 0x09, 0x7e, 0xf0, 0x88, 0x59, 0x63, 0x42, 0x4c, 0xa9, - 0x05, 0x31, 0x78, 0x1e, 0x84, 0x1e, 0xc7, 0xc2, 0xcd, 0x62, 0x55, 0x7e, 0x00, 0x2d, 0xf2, 0x66, - 0x4d, 0x5f, 0x12, 0x01, 0x3f, 0xbc, 0xdb, 0xba, 0x67, 0x2d, 0x22, 0x8f, 0x73, 0xab, 0x9f, 0xa3, - 0xe9, 0xf5, 0x40, 0x95, 0xa1, 0x31, 0x48, 0x6c, 0xaa, 0x58, 0x42, 0xf5, 0xe4, 0xd0, 0x11, 0x08, - 0xc9, 0x6b, 0xda, 0x39, 0x4f, 0xe6, 0xd3, 0xc8, 0x08, 0x35, 0x9b, 0x22, 0xd1, 0x48, 0x63, 0xa4, - 0x61, 0x17, 0x13, 0x61, 0x37, 0x05, 0xab, 0x6d, 0xe3, 0xb4, 0xa0, 0xca, 0xad, 0x02, 0xaf, 0xd9, - 0xc6, 0xd9, 0x66, 0x52, 0x0e, 0x0e, 0x5c, 0xa9, 0x03, 0x9d, 0xda, 0xa1, 0x61, 0x9a, 0x12, 0x73, - 0xe0, 0x86, 0x36, 0x74, 0x94, 0x08, 0xcf, 0x1e, 0xed, 0x8d, 0x73, 0xa9, 0x03, 0x6f, 0xa6, 0x3a, - 0x8f, 0x7c, 0xd1, 0xba, 0x17, 0x5c, 0x82, 0x53, 0x27, 0xce, 0xa6, 0x8e, 0x75, 0xb0, 0xe6, 0xa9, - 0x13, 0xd7, 0x93, 0x23, 0x3d, 0xb8, 0x75, 0xf7, 0x71, 0x70, 0xcd, 0x22, 0x29, 0x8c, 0x6c, 0xbb, - 0xf8, 0xb2, 0xfa, 0xee, 0xd8, 0xec, 0x19, 0x42, 0x49, 0x50, 0x9a, 0xfe, 0x9b, 0x17, 0x97, 0x56, - 0x3c, 0xee, 0xaf, 0xd8, 0x2d, 0x57, 0xbc, 0x50, 0xf1, 0xd2, 0x43, 0x8b, 0x78, 0x2b, 0x0a, 0x16, - 0x45, 0x90, 0x55, 0x09, 0x28, 0xe1, 0x35, 0x55, 0x7e, 0x95, 0x65, 0x55, 0x8a, 0x04, 0x9a, 0x82, - 0xdb, 0x58, 0x66, 0xa5, 0xb2, 0xd4, 0x99, 0xc3, 0xc9, 0xa1, 0xb7, 0xc1, 0x61, 0x39, 0x39, 0x78, - 0x00, 0x12, 0x42, 0xb0, 0x6c, 0x3e, 0xd7, 0x93, 0xc3, 0xc7, 0x19, 0x64, 0xba, 0xa7, 0x0d, 0x46, - 0xa0, 0x67, 0x96, 0xa4, 0xe2, 0xb1, 0xa7, 0x2d, 0xf5, 0xd6, 0x00, 0x9d, 0x34, 0x89, 0x21, 0x05, - 0x2d, 0xb4, 0x23, 0x6f, 0x01, 0x3c, 0x4b, 0xc8, 0xb4, 0x03, 0x4d, 0xd9, 0x1e, 0x6a, 0x24, 0xcf, - 0x31, 0x13, 0x0a, 0x3c, 0x57, 0xb4, 0x23, 0x9b, 0xea, 0x48, 0xa4, 0x11, 0xc8, 0x86, 0x3c, 0x73, - 0xe7, 0xdb, 0x48, 0x25, 0xe0, 0xb5, 0xab, 0x5d, 0xed, 0xce, 0x1c, 0xbd, 0x49, 0x76, 0xe5, 0x8f, - 0x52, 0xbd, 0x43, 0xa9, 0xab, 0x67, 0x7d, 0x3c, 0x58, 0x55, 0xb5, 0x2a, 0x3f, 0x8d, 0x56, 0x7a, - 0xed, 0xd7, 0x56, 0xf7, 0x76, 0x24, 0xa3, 0x4c, 0x0e, 0x0e, 0xe3, 0x1e, 0x2e, 0x9d, 0xd3, 0x4e, - 0x9d, 0x80, 0xe1, 0x52, 0xda, 0x78, 0xbf, 0x00, 0xcd, 0x5b, 0xa3, 0x24, 0xaa, 0x77, 0x6e, 0x8c, - 0x44, 0xe3, 0x2c, 0x34, 0x3e, 0xd0, 0x26, 0xdb, 0xe5, 0xd0, 0xb6, 0xe6, 0x78, 0x28, 0xac, 0xc4, - 0xe3, 0x3a, 0x89, 0x80, 0xba, 0x61, 0x14, 0x4b, 0x85, 0x0c, 0x7b, 0x3e, 0xae, 0x54, 0xfc, 0x0d, - 0xb7, 0x7f, 0xbb, 0x8c, 0x27, 0x3b, 0xc6, 0xfe, 0xbd, 0x3c, 0x33, 0x70, 0x01, 0xb6, 0x1d, 0xad, - 0xf7, 0x12, 0x38, 0xf9, 0xb0, 0xe1, 0x1e, 0x48, 0xf5, 0x76, 0xc2, 0x5e, 0x84, 0x11, 0x4f, 0xb4, - 0x0b, 0x76, 0x3d, 0xc0, 0x9a, 0x8b, 0xbd, 0x02, 0x9a, 0xc6, 0x74, 0x8d, 0x8d, 0x44, 0x2d, 0xa3, - 0xaa, 0x4d, 0x42, 0x95, 0x7f, 0xe9, 0xcd, 0xaa, 0x92, 0x56, 0x43, 0x2f, 0xa9, 0x53, 0x17, 0x52, - 0x43, 0x87, 0xcb, 0xdd, 0x6c, 0x9c, 0xa9, 0x8e, 0xe3, 0x99, 0xd6, 0xf6, 0x00, 0xe1, 0x49, 0xc8, - 0x74, 0x01, 0x4a, 0x57, 0xea, 0x93, 0x3d, 0xe9, 0x4b, 0x07, 0x52, 0x1d, 0xc7, 0xf1, 0x5a, 0x90, - 0x10, 0x67, 0x50, 0x02, 0xb7, 0xa8, 0x85, 0xac, 0xb9, 0x6f, 0x12, 0x34, 0xf5, 0xfd, 0xcc, 0x97, - 0xf5, 0x41, 0xf1, 0xbf, 0x08, 0xa8, 0x20, 0x1e, 0x88, 0xe8, 0xa1, 0xe7, 0xfe, 0xb5, 0xa0, 0xca, - 0x23, 0x82, 0x17, 0xca, 0xa4, 0x8f, 0x84, 0x6d, 0x3b, 0xb7, 0x6e, 0x0b, 0xed, 0xde, 0x1a, 0x0a, - 0xba, 0x53, 0xef, 0xb6, 0xa6, 0x3f, 0xc6, 0x14, 0x96, 0xbc, 0xd9, 0x8b, 0x45, 0xc1, 0x99, 0x33, - 0x4b, 0x0c, 0xcf, 0x6f, 0x4c, 0xc6, 0x18, 0xb0, 0x3c, 0xd5, 0x77, 0x3e, 0x75, 0xe2, 0xba, 0x0e, - 0x9b, 0x7a, 0x6b, 0x20, 0x3d, 0x7c, 0x04, 0xa2, 0xb3, 0xba, 0x6b, 0xd6, 0xd5, 0x56, 0xbb, 0x01, - 0x77, 0xee, 0xba, 0x5a, 0x77, 0x72, 0x70, 0xc8, 0x6d, 0x74, 0xaf, 0xe7, 0x5f, 0x2c, 0xc7, 0x38, - 0x6e, 0x1d, 0xc1, 0xb5, 0x54, 0x9f, 0x74, 0xa7, 0x4e, 0x5c, 0xd7, 0x3a, 0x4e, 0x42, 0xa7, 0x00, - 0x94, 0xa3, 0x3d, 0x61, 0x4a, 0x5f, 0x21, 0x1b, 0x91, 0x6f, 0x32, 0xed, 0xc5, 0xf7, 0x33, 0x1f, - 0xcc, 0xaa, 0xea, 0x45, 0x55, 0xfe, 0x25, 0xda, 0xe2, 0xcd, 0x49, 0x52, 0xba, 0x93, 0x33, 0xb7, - 0xaa, 0x40, 0x8d, 0x20, 0xad, 0x3f, 0x17, 0x38, 0x22, 0xfa, 0x5c, 0xd0, 0xd7, 0xdb, 0x73, 0xc3, - 0x85, 0xe6, 0x3b, 0x74, 0xfc, 0x3d, 0x9c, 0xd4, 0x58, 0x1c, 0x81, 0x3c, 0xfb, 0xe0, 0x48, 0x6c, - 0x7c, 0xe4, 0x7d, 0x2b, 0x1f, 0x2a, 0xd9, 0x34, 0x6d, 0x8b, 0xd6, 0x50, 0xb5, 0x59, 0x95, 0x7d, - 0xa8, 0xde, 0x9b, 0x7b, 0xa2, 0xb6, 0x28, 0x24, 0x7d, 0x31, 0x14, 0xda, 0x58, 0x2f, 0x8b, 0xf9, - 0x21, 0x89, 0x1e, 0x54, 0xcc, 0xe8, 0x95, 0xbb, 0x27, 0x34, 0x95, 0x89, 0x0b, 0x90, 0xa1, 0xcb, - 0xeb, 0xa9, 0x2f, 0x8d, 0x12, 0x5c, 0xcf, 0xc9, 0x06, 0xe2, 0xdb, 0x6d, 0x12, 0x00, 0x1e, 0x54, - 0xcc, 0x7e, 0x19, 0xaf, 0xe9, 0x7c, 0xa6, 0x32, 0xb1, 0x04, 0x4d, 0x26, 0x4e, 0x12, 0x11, 0x96, - 0x0d, 0x93, 0xfd, 0x14, 0xe7, 0xa0, 0x49, 0x4a, 0x30, 0xa4, 0x2b, 0xff, 0x3e, 0xfa, 0xcb, 0x1c, - 0xe4, 0x69, 0x72, 0x56, 0xa2, 0x4b, 0x4f, 0xd2, 0x4e, 0xa0, 0xf1, 0xd1, 0xf4, 0xbe, 0x86, 0x40, - 0x7b, 0xdc, 0x8a, 0x0f, 0xda, 0xd4, 0x28, 0x96, 0x0a, 0x61, 0x51, 0x4c, 0x07, 0x21, 0xb3, 0x2c, - 0xcc, 0xfb, 0x6e, 0x64, 0x61, 0xfe, 0x0f, 0x52, 0x16, 0x16, 0xfc, 0x24, 0x0b, 0xf9, 0x28, 0x8a, - 0x66, 0x46, 0x26, 0x4a, 0xd1, 0xb8, 0x64, 0xe1, 0xbf, 0xb0, 0x93, 0x85, 0xdf, 0x5b, 0x84, 0xc5, - 0xdf, 0xea, 0xb2, 0x50, 0xb0, 0x75, 0x16, 0xa6, 0xe3, 0x03, 0x4f, 0x31, 0x22, 0x11, 0xc9, 0xbb, - 0x3d, 0x90, 0x88, 0x0f, 0xc2, 0xe4, 0xa1, 0xcf, 0x74, 0x4f, 0x9b, 0xd6, 0x7e, 0x49, 0xbb, 0xda, - 0x4a, 0x71, 0x61, 0x15, 0x90, 0x14, 0xad, 0xb9, 0x67, 0xcf, 0xb4, 0x1f, 0x8a, 0x57, 0x4b, 0x8f, - 0x4e, 0x62, 0xb2, 0x09, 0x89, 0xd6, 0xc1, 0x8a, 0x6e, 0xc3, 0x0a, 0xb2, 0x39, 0xd6, 0xc8, 0x02, - 0x7c, 0x72, 0x45, 0xe2, 0xc3, 0x68, 0x12, 0x39, 0x8c, 0x32, 0xb3, 0xf6, 0x7c, 0x9b, 0x70, 0x07, - 0x24, 0xee, 0x14, 0x9c, 0x5c, 0x29, 0xb0, 0x67, 0x2b, 0x9a, 0x6a, 0xaa, 0xb0, 0x39, 0x0b, 0xdb, - 0x05, 0xdb, 0x9e, 0x85, 0x0a, 0x42, 0xe1, 0xa0, 0xf2, 0x2a, 0x15, 0xb9, 0xf0, 0x03, 0x43, 0x06, - 0x95, 0x78, 0x80, 0x4a, 0x59, 0xf2, 0xb7, 0x27, 0x23, 0x10, 0x32, 0xa9, 0x0b, 0x87, 0x95, 0x18, - 0x9b, 0x18, 0xf9, 0x52, 0xfc, 0xeb, 0x06, 0x17, 0x7d, 0xd4, 0xa2, 0xdc, 0x81, 0xff, 0x9e, 0x2e, - 0xd0, 0x8a, 0x69, 0xe0, 0x54, 0x22, 0xd3, 0x38, 0xc3, 0x0c, 0x8d, 0x48, 0x9c, 0x7b, 0x58, 0xd2, - 0x52, 0xba, 0x7e, 0x24, 0xfc, 0x7e, 0xe6, 0xd6, 0xe1, 0xf4, 0xf0, 0xc7, 0xc4, 0xf7, 0xa2, 0x3f, - 0x35, 0xf8, 0x51, 0xea, 0xcc, 0x9b, 0x8c, 0x5f, 0xde, 0x1a, 0xdd, 0xdf, 0x4d, 0x35, 0xd9, 0x7f, - 0xec, 0x42, 0x0b, 0x9c, 0xfa, 0xfc, 0x1e, 0x58, 0x62, 0x8b, 0x49, 0x3d, 0x98, 0xef, 0xc4, 0x12, - 0x70, 0x04, 0xb0, 0xd1, 0x0f, 0x60, 0x6a, 0x56, 0xf2, 0x57, 0x54, 0x79, 0x1b, 0x7a, 0xd9, 0x3b, - 0xc6, 0x54, 0xa5, 0x8a, 0xf1, 0xe3, 0x4f, 0x6b, 0x1d, 0xb1, 0x32, 0xc2, 0x2e, 0x34, 0xd5, 0xd4, - 0xb3, 0x6d, 0xe4, 0x37, 0x46, 0x71, 0x2e, 0x83, 0xe2, 0x30, 0x6d, 0xc6, 0x94, 0xed, 0x0a, 0x0b, - 0xfa, 0x06, 0x3f, 0x70, 0x69, 0x22, 0xe6, 0x0f, 0xb3, 0xd8, 0xef, 0xf0, 0xc3, 0xb8, 0x83, 0x2c, - 0xe0, 0xee, 0x20, 0x3d, 0x7f, 0x5b, 0x80, 0xe6, 0xd4, 0x2a, 0xdb, 0x9a, 0x1b, 0x28, 0x7b, 0x93, - 0x77, 0x02, 0x40, 0xac, 0xcf, 0xd8, 0xec, 0xdd, 0x6e, 0xc7, 0xbd, 0x9b, 0x19, 0x05, 0xf9, 0x2d, - 0xfc, 0x19, 0x9b, 0x2d, 0xdc, 0xed, 0xb8, 0x85, 0xeb, 0x3d, 0x70, 0x3b, 0xf9, 0x16, 0xcb, 0x4e, - 0x5e, 0xa5, 0xca, 0x4b, 0x39, 0xc2, 0x5f, 0xa4, 0x6f, 0xd7, 0xa9, 0xce, 0x8b, 0x99, 0x73, 0x5d, - 0x99, 0x81, 0x0b, 0xd0, 0x5f, 0xba, 0xa7, 0x2d, 0x96, 0x78, 0x15, 0x18, 0xc2, 0x62, 0xb0, 0xfc, - 0xa1, 0xef, 0xe0, 0x1d, 0x02, 0x2a, 0x0c, 0x50, 0x59, 0x45, 0x63, 0xf3, 0xad, 0xb0, 0x24, 0x72, - 0xb4, 0x5d, 0x35, 0x5d, 0xf6, 0xc1, 0x15, 0x36, 0x3c, 0x26, 0x64, 0x5d, 0x49, 0x0f, 0xf2, 0x24, - 0x4a, 0x5d, 0xcf, 0x8d, 0x3d, 0x80, 0xd0, 0x27, 0x91, 0xdb, 0x3e, 0xbd, 0x49, 0xe9, 0x13, 0x86, - 0xd4, 0x9c, 0xf0, 0xed, 0x76, 0x55, 0x5c, 0x95, 0xa3, 0x28, 0xec, 0x75, 0xa0, 0x30, 0x69, 0x51, - 0xe6, 0xca, 0xeb, 0x99, 0x81, 0x63, 0xd6, 0x41, 0x99, 0xdf, 0x08, 0x9a, 0x76, 0x65, 0x8e, 0x3a, - 0xb8, 0x2d, 0xfa, 0x73, 0x41, 0x1f, 0xb1, 0xe7, 0x9f, 0xba, 0xd0, 0xdd, 0x96, 0x0f, 0x7e, 0x0f, - 0x42, 0x69, 0x87, 0x69, 0x9f, 0xbe, 0x6f, 0x8c, 0xf5, 0x23, 0x1b, 0x35, 0x79, 0x91, 0x0c, 0xa2, - 0xc9, 0x19, 0x37, 0xdc, 0x9e, 0x4a, 0xc5, 0xd4, 0x6f, 0x54, 0xf9, 0x45, 0xf4, 0x2b, 0xaf, 0xd3, - 0xac, 0xbf, 0xb6, 0x7c, 0x7a, 0x1a, 0xdd, 0x65, 0x33, 0x5a, 0xb1, 0x8c, 0x3e, 0xb5, 0x10, 0x9c, - 0x9f, 0x5a, 0x80, 0x07, 0xb4, 0xe7, 0xf6, 0x14, 0x34, 0x9d, 0x98, 0xd0, 0xd6, 0x45, 0x82, 0xcd, - 0x8d, 0xca, 0xea, 0x46, 0x7f, 0x83, 0xb8, 0x39, 0xfb, 0x16, 0xe9, 0x09, 0x55, 0x7e, 0xcc, 0xb8, - 0x45, 0xaa, 0xa8, 0xae, 0xd9, 0x08, 0x49, 0x0d, 0xf4, 0x74, 0xb3, 0xc9, 0xa1, 0x23, 0x7a, 0xd6, - 0x98, 0xcc, 0x81, 0xab, 0xa9, 0xe3, 0xfb, 0xf5, 0x6c, 0x61, 0xc6, 0x65, 0x93, 0xdf, 0x88, 0x8e, - 0x0c, 0x2b, 0xb6, 0x46, 0x95, 0x6b, 0xbd, 0xac, 0x4c, 0x7a, 0x5c, 0xef, 0x04, 0x5e, 0x65, 0x97, - 0x69, 0xef, 0xed, 0xdd, 0xf4, 0xdc, 0xaa, 0x2a, 0xf7, 0xb2, 0x25, 0xd2, 0xd2, 0x25, 0x8f, 0x94, - 0x2f, 0x5b, 0xb2, 0xec, 0xb1, 0x25, 0x2b, 0xf0, 0x3f, 0x2b, 0x96, 0x2c, 0xaf, 0x48, 0xec, 0x7c, - 0x2c, 0x8e, 0xff, 0x7e, 0x64, 0xc9, 0xf2, 0xc5, 0x7a, 0x98, 0x65, 0xb1, 0x5d, 0x40, 0x85, 0x4d, - 0x64, 0x22, 0xfa, 0x4b, 0x1a, 0x92, 0xfe, 0x46, 0x2f, 0x94, 0x5e, 0x48, 0x0f, 0xb7, 0x25, 0x87, - 0xaf, 0xc3, 0xed, 0x4e, 0xd9, 0x73, 0xcd, 0xdb, 0x14, 0xb9, 0xbe, 0x6e, 0xa3, 0x12, 0x6b, 0x51, - 0x62, 0xb7, 0x47, 0xba, 0xf0, 0xef, 0x9a, 0x48, 0x38, 0x11, 0x8b, 0x34, 0x36, 0x92, 0x82, 0x55, - 0x89, 0x40, 0x90, 0x96, 0x6f, 0x0c, 0xec, 0x50, 0x70, 0x27, 0xb8, 0x78, 0x67, 0xf3, 0x36, 0xa5, - 0x51, 0x49, 0x7c, 0xd1, 0xba, 0x27, 0x06, 0xc1, 0xa4, 0xd3, 0x7d, 0x9d, 0x8b, 0x7d, 0xfa, 0x57, - 0xc4, 0x15, 0xa8, 0x70, 0x7b, 0xa3, 0xbf, 0x81, 0x8b, 0x9d, 0x42, 0x94, 0x09, 0xbd, 0x50, 0x2a, - 0x02, 0x0e, 0xd2, 0x0e, 0x1f, 0xf4, 0xe9, 0x85, 0x58, 0x97, 0xc0, 0x7f, 0xd7, 0xe2, 0xbd, 0x84, - 0x0b, 0xb4, 0xa5, 0x17, 0x4a, 0xc5, 0xd0, 0x8a, 0x7a, 0xf1, 0xea, 0xe5, 0xe2, 0x6a, 0x54, 0x1c, - 0x54, 0xb6, 0xfb, 0x9b, 0x1b, 0x41, 0x7d, 0xa2, 0xb7, 0x44, 0x1e, 0x55, 0x5e, 0xe8, 0x35, 0x55, - 0x48, 0xd3, 0xa1, 0x03, 0x38, 0x48, 0x68, 0xad, 0x23, 0x3e, 0x53, 0xb5, 0x58, 0x85, 0x26, 0x29, - 0x61, 0x72, 0xe5, 0x0a, 0x51, 0x15, 0x48, 0x0f, 0xb4, 0x48, 0x9a, 0x4d, 0xad, 0x71, 0x87, 0x49, - 0xb2, 0xdf, 0x81, 0x0b, 0x54, 0x1e, 0xd1, 0x6a, 0xf1, 0x51, 0xe3, 0x00, 0x5b, 0x68, 0xdc, 0x02, - 0xb1, 0x32, 0x69, 0x3a, 0x8b, 0xa8, 0xfd, 0xb6, 0x36, 0x3c, 0x94, 0x69, 0x6d, 0x37, 0xce, 0xb7, - 0x8f, 0xa2, 0xc9, 0xcd, 0xe4, 0xae, 0x9b, 0x25, 0x6e, 0x87, 0x86, 0xb4, 0x8c, 0x35, 0xa4, 0x97, - 0xde, 0xb8, 0x21, 0xad, 0x11, 0xab, 0x50, 0x11, 0xe9, 0x83, 0xf8, 0xd9, 0x23, 0xe3, 0x4e, 0xcd, - 0x28, 0x95, 0x8a, 0xe1, 0x7b, 0xf4, 0x19, 0x82, 0x51, 0x21, 0xae, 0x44, 0x08, 0xba, 0x21, 0x8d, - 0xa7, 0x70, 0x8f, 0x18, 0x8c, 0x62, 0xa9, 0x18, 0x3e, 0xca, 0x1e, 0x31, 0x18, 0x35, 0x62, 0x02, - 0x56, 0x8a, 0x8b, 0x58, 0x40, 0x1e, 0x63, 0xea, 0x85, 0x52, 0x5d, 0xea, 0xec, 0xfe, 0xcc, 0xc0, - 0x3e, 0xc0, 0x11, 0x4d, 0xb6, 0x14, 0x0a, 0x27, 0x96, 0x4b, 0x95, 0xdb, 0x22, 0x91, 0xc6, 0xca, - 0x78, 0x22, 0x16, 0x0a, 0x37, 0x54, 0x06, 0x9b, 0xc1, 0x33, 0xa0, 0xb2, 0xc9, 0x1f, 0xa5, 0x65, - 0xf1, 0x74, 0x5f, 0xa7, 0x76, 0x66, 0x28, 0x7d, 0xae, 0x15, 0x5a, 0x2d, 0xf6, 0xe9, 0x9d, 0x8a, - 0x3e, 0x34, 0x15, 0xff, 0x4d, 0xd6, 0x8a, 0x44, 0x2a, 0x98, 0x4a, 0xfc, 0x76, 0xc9, 0x9b, 0x29, - 0x73, 0x8d, 0x54, 0x42, 0xe9, 0x8b, 0x84, 0x2e, 0xc1, 0x1b, 0x49, 0xeb, 0x08, 0x3d, 0x2b, 0x9b, - 0x01, 0xc5, 0x5f, 0x61, 0x3d, 0xa5, 0x41, 0x79, 0x95, 0x44, 0x3d, 0x98, 0x22, 0x95, 0x66, 0x8b, - 0x0a, 0xb2, 0x63, 0xf8, 0x30, 0x04, 0x78, 0xaa, 0x03, 0xb4, 0x34, 0x97, 0x52, 0x62, 0x6f, 0x67, - 0xea, 0x58, 0x47, 0xaa, 0xf5, 0x62, 0xea, 0xec, 0xb9, 0xd1, 0x0f, 0xba, 0x32, 0x17, 0xdb, 0xb4, - 0x8e, 0x93, 0x3e, 0x80, 0x11, 0x23, 0xa8, 0x20, 0x46, 0x62, 0x1a, 0x4e, 0xb7, 0x0f, 0xd7, 0xb7, - 0xbe, 0xb9, 0x69, 0x9b, 0x02, 0xb1, 0x0b, 0xe1, 0x81, 0x34, 0x80, 0x4b, 0x4b, 0x33, 0x07, 0x28, - 0x71, 0x25, 0x07, 0x87, 0xf0, 0x24, 0x5a, 0x47, 0x0c, 0xe1, 0x02, 0x59, 0xb6, 0xe1, 0x08, 0x43, - 0x9e, 0x2d, 0x60, 0x2a, 0x86, 0x86, 0xe2, 0x17, 0x82, 0x39, 0xfb, 0x0e, 0x84, 0x4a, 0xf8, 0x33, - 0x38, 0x63, 0xf3, 0x35, 0xd2, 0x65, 0x41, 0xbb, 0xf9, 0x26, 0xe3, 0xd6, 0x95, 0x94, 0x87, 0x49, - 0x8a, 0x64, 0x4c, 0xd8, 0x24, 0x31, 0x7e, 0xfa, 0xe8, 0x99, 0xd4, 0xb1, 0x8e, 0x2f, 0x5a, 0xf7, - 0x52, 0xad, 0xbf, 0x5e, 0x1f, 0x03, 0xd7, 0x51, 0x95, 0x3b, 0x14, 0x6d, 0x59, 0x51, 0x19, 0x8a, - 0xb6, 0x3c, 0x52, 0x19, 0x6c, 0xf6, 0x37, 0xba, 0x61, 0x7c, 0x20, 0xc0, 0x74, 0xe9, 0xc8, 0xa7, - 0xd5, 0xc2, 0x1d, 0x92, 0x58, 0x12, 0x20, 0x20, 0x5f, 0x2c, 0x7f, 0x09, 0x62, 0x4a, 0xe8, 0xc9, - 0x6f, 0xa1, 0x07, 0xfd, 0x41, 0x0b, 0xee, 0xdf, 0x94, 0x40, 0x88, 0x05, 0xd5, 0xcb, 0x96, 0xda, - 0xd2, 0x03, 0x90, 0xba, 0x2e, 0xdd, 0x7f, 0x2e, 0x7d, 0x78, 0x1f, 0xc4, 0x28, 0x25, 0x92, 0x17, - 0x0f, 0x00, 0x64, 0x1e, 0x3c, 0x03, 0xff, 0xc2, 0x05, 0xc4, 0xcb, 0x5c, 0xe4, 0x75, 0x41, 0x45, - 0x5d, 0xe4, 0x75, 0x71, 0x54, 0xca, 0x89, 0x23, 0x97, 0x51, 0x47, 0x24, 0x8e, 0x27, 0x4b, 0xe2, - 0x80, 0x96, 0x6b, 0x96, 0x26, 0x92, 0x2e, 0x4d, 0xf2, 0xc7, 0x32, 0xfe, 0xeb, 0x52, 0xa4, 0x94, - 0x63, 0xac, 0x02, 0xe3, 0x9b, 0x84, 0xfc, 0x17, 0x65, 0x93, 0xff, 0x24, 0x12, 0x9c, 0x2e, 0x8b, - 0xa0, 0x97, 0x32, 0x82, 0x9e, 0x3c, 0x16, 0x41, 0x33, 0x3a, 0x5d, 0xc6, 0xe8, 0xb4, 0x70, 0x4c, - 0x3a, 0x65, 0x94, 0x96, 0x95, 0xe6, 0xa9, 0xc8, 0x92, 0xe6, 0xc9, 0x53, 0x8b, 0x90, 0xf1, 0x25, - 0x71, 0x1e, 0x2a, 0x6a, 0xf1, 0x37, 0x86, 0x82, 0x44, 0x3c, 0x02, 0x9e, 0x8d, 0x82, 0x1c, 0x6f, - 0x11, 0x96, 0xa1, 0x29, 0xdc, 0xd7, 0xb1, 0x82, 0xd7, 0x14, 0x0a, 0x93, 0x0e, 0x0a, 0x7c, 0xf8, - 0x4f, 0x52, 0xe2, 0x7f, 0x95, 0x46, 0x68, 0xc6, 0x7f, 0x7a, 0x52, 0xf9, 0x68, 0x5e, 0x0d, 0x79, - 0x6e, 0x95, 0x45, 0x20, 0xec, 0xf0, 0x70, 0xe7, 0xee, 0xee, 0x7b, 0xad, 0xbb, 0xfb, 0x76, 0xf2, - 0x0a, 0x43, 0xdf, 0xdd, 0xeb, 0xbf, 0xc9, 0xdd, 0x1d, 0x72, 0x7b, 0xd3, 0xf3, 0x89, 0xbe, 0xb5, - 0x6f, 0x05, 0x0a, 0xa5, 0x09, 0x7c, 0x6d, 0x43, 0x95, 0x33, 0xee, 0xaa, 0x5e, 0x4c, 0x3c, 0x14, - 0x18, 0xb8, 0x24, 0xf2, 0x7c, 0x08, 0xe2, 0xf8, 0xcb, 0xea, 0x02, 0x55, 0x70, 0x15, 0x0a, 0x3e, - 0x1d, 0x4a, 0x7c, 0x86, 0x3b, 0x58, 0x71, 0xd1, 0x60, 0x8d, 0x83, 0xd5, 0x6c, 0x73, 0x37, 0x6c, - 0x43, 0x35, 0x4c, 0x0b, 0x41, 0x55, 0xf6, 0xa3, 0xad, 0xde, 0x9c, 0x64, 0x20, 0xcd, 0x86, 0x96, - 0x78, 0x59, 0xb8, 0xee, 0x3e, 0x17, 0xd8, 0x82, 0x7e, 0x2e, 0x30, 0xbc, 0x7f, 0x2e, 0xe8, 0xb3, - 0xe7, 0x4d, 0x6f, 0x9a, 0x80, 0xe6, 0x3b, 0x7c, 0xe1, 0xbb, 0x57, 0xe9, 0x59, 0x6c, 0xcc, 0xdc, - 0x23, 0x92, 0xee, 0xb5, 0x9d, 0x74, 0xee, 0xd8, 0x98, 0xff, 0x2e, 0x9f, 0x39, 0xc6, 0xff, 0xe8, - 0x18, 0xea, 0x35, 0x0b, 0x3f, 0x6d, 0xfd, 0x96, 0xf9, 0xe9, 0x87, 0xcb, 0x48, 0x86, 0x82, 0x69, - 0x65, 0xa4, 0x5c, 0xcb, 0x2f, 0xcd, 0x86, 0x96, 0x5f, 0x9d, 0x91, 0xfe, 0x20, 0xb0, 0x37, 0x0b, - 0x3f, 0x04, 0x46, 0xf2, 0xa9, 0xf2, 0x06, 0xb4, 0xce, 0x9b, 0x7b, 0x44, 0xd2, 0x5c, 0xdb, 0x49, - 0x3b, 0xf9, 0x50, 0xfe, 0x93, 0x7c, 0x34, 0x0f, 0xde, 0x27, 0xfd, 0xc4, 0x42, 0xdf, 0x24, 0x0b, - 0x6d, 0x40, 0xc5, 0x4c, 0x5b, 0xd3, 0xd9, 0x88, 0x3e, 0x05, 0x37, 0x55, 0x48, 0x25, 0x26, 0x86, - 0xe1, 0x9f, 0xe5, 0x99, 0xe0, 0x26, 0xbc, 0xf7, 0x9c, 0x1d, 0x3d, 0x79, 0xde, 0x9e, 0x65, 0x72, - 0x2d, 0x37, 0xde, 0x7b, 0x70, 0xcb, 0xaf, 0xc7, 0x32, 0x0e, 0x5f, 0xf8, 0x1e, 0x59, 0x26, 0xe7, - 0x88, 0xa4, 0xb9, 0xb6, 0x93, 0x76, 0x62, 0x99, 0xbf, 0xca, 0xe7, 0x32, 0xf1, 0xff, 0xc4, 0x30, - 0x3f, 0x5e, 0x86, 0xd9, 0xa6, 0xca, 0x5b, 0xd1, 0x4b, 0xde, 0x1c, 0x8b, 0x2d, 0xcd, 0xd6, 0xbd, - 0xda, 0xbe, 0x22, 0xbb, 0x0c, 0xb8, 0xb8, 0xcc, 0x7a, 0xdf, 0x2f, 0xb3, 0x88, 0x3e, 0xd3, 0x85, - 0xd0, 0x42, 0xdb, 0x34, 0x3f, 0xc6, 0x10, 0xcd, 0x51, 0x71, 0x39, 0x67, 0x42, 0xdb, 0xbc, 0xda, - 0x39, 0xe6, 0xc8, 0xb9, 0x06, 0x8e, 0x87, 0xfd, 0xfe, 0xe0, 0x22, 0xee, 0x13, 0xab, 0x5e, 0x4d, - 0x28, 0xb1, 0xb0, 0xbf, 0x71, 0x7d, 0x24, 0xa8, 0x6c, 0x24, 0x2f, 0xe6, 0x19, 0x03, 0xbe, 0x84, - 0xa6, 0x84, 0x23, 0x41, 0xc5, 0x1c, 0x1a, 0xe0, 0x6b, 0x31, 0x21, 0xdf, 0x9f, 0xb8, 0xc2, 0x72, - 0xad, 0x58, 0x62, 0xeb, 0xf3, 0x9d, 0x1c, 0x1a, 0xe2, 0xee, 0x4e, 0x5e, 0x40, 0x85, 0xa1, 0x30, - 0x8c, 0x98, 0x3a, 0x76, 0x3e, 0xa5, 0xca, 0x4f, 0x78, 0xf5, 0x42, 0xa9, 0x92, 0x06, 0x16, 0x26, - 0xcf, 0xb7, 0x53, 0x1d, 0xc7, 0xb5, 0xf3, 0xc7, 0xd3, 0x37, 0x8f, 0x64, 0xda, 0x7a, 0x52, 0xbd, - 0x97, 0x99, 0x9f, 0x1f, 0x5f, 0xe6, 0xd3, 0x9b, 0xb2, 0x9c, 0x65, 0x39, 0xb1, 0xc2, 0x90, 0x9c, - 0xbe, 0x7c, 0x39, 0x39, 0xd8, 0x99, 0x3a, 0x7e, 0x03, 0x7a, 0x61, 0xf4, 0xca, 0xcf, 0xd0, 0xf3, - 0x37, 0x79, 0xe4, 0x4a, 0xd6, 0xae, 0xaf, 0x3b, 0xe3, 0xe9, 0xcf, 0x0a, 0xce, 0x21, 0x96, 0xa5, - 0xdb, 0x20, 0x74, 0x3a, 0x7b, 0x9b, 0x3f, 0xae, 0x3c, 0xb2, 0x22, 0x3d, 0x72, 0x3c, 0x7d, 0x16, - 0x2f, 0x3a, 0x45, 0x25, 0xa9, 0xc4, 0x67, 0xd8, 0xe9, 0xaf, 0x28, 0xdb, 0xb6, 0xf2, 0x8f, 0x84, - 0x0b, 0xec, 0x33, 0xcd, 0xff, 0x42, 0xd9, 0xc6, 0xbd, 0xd4, 0xdc, 0x22, 0x41, 0xfc, 0xed, 0xec, - 0xd6, 0xd2, 0xbd, 0xd4, 0x63, 0xdd, 0x9c, 0x10, 0x0c, 0xac, 0x56, 0x70, 0xff, 0xe6, 0x9b, 0xf6, - 0x8a, 0xa9, 0x2b, 0x7d, 0xc3, 0xca, 0x89, 0x7f, 0x87, 0xc5, 0x74, 0xe2, 0x98, 0x76, 0x01, 0x15, - 0xad, 0xf3, 0x47, 0xc1, 0x3f, 0x5a, 0x5c, 0xa9, 0x3b, 0x02, 0x08, 0xf6, 0xef, 0x3a, 0x75, 0x50, - 0x70, 0x62, 0xa7, 0x8e, 0xf1, 0xb4, 0x51, 0xe9, 0xe3, 0x68, 0x0a, 0x57, 0x3c, 0xa1, 0x67, 0x9b, - 0x7f, 0x95, 0x07, 0x8e, 0x4f, 0xfe, 0x44, 0x60, 0x07, 0x24, 0xae, 0xdd, 0xa8, 0x24, 0x12, 0xa1, - 0xb0, 0xbe, 0x75, 0xfa, 0x51, 0x11, 0x71, 0x4c, 0xe1, 0x42, 0xcc, 0xd4, 0xa8, 0xf2, 0x33, 0x5e, - 0xa3, 0x54, 0x5a, 0x0e, 0x4f, 0x58, 0xc0, 0xc0, 0x48, 0xad, 0xb7, 0xdb, 0x42, 0xbb, 0x2b, 0xb7, - 0x85, 0x76, 0x6f, 0x8d, 0x2b, 0x89, 0xc5, 0x96, 0xb0, 0x33, 0xdb, 0x42, 0xbb, 0x7d, 0x46, 0x7b, - 0xf1, 0x65, 0x34, 0x99, 0xfc, 0xd0, 0xf3, 0x79, 0x90, 0x8c, 0x48, 0xac, 0x4c, 0x7a, 0x8c, 0xef, - 0xbe, 0xae, 0xb6, 0x8c, 0x5d, 0xd4, 0x56, 0xc2, 0x1f, 0xe4, 0xf9, 0x88, 0xfd, 0x37, 0x58, 0x17, - 0xe2, 0x3b, 0x02, 0x42, 0x20, 0xe9, 0xc9, 0x3e, 0x06, 0x01, 0x1c, 0xf6, 0x08, 0xaa, 0xfc, 0xa7, - 0x5e, 0xae, 0x5c, 0x8a, 0x1a, 0x7f, 0xc3, 0x62, 0x8e, 0xb6, 0x1f, 0x4c, 0xdf, 0xec, 0xc7, 0x54, - 0x42, 0x5c, 0xa8, 0xb4, 0x53, 0x27, 0xf4, 0xe0, 0x0e, 0xc9, 0xc1, 0x83, 0xc9, 0x91, 0xb3, 0x60, - 0x7e, 0xa4, 0xb7, 0x52, 0x24, 0xf5, 0x35, 0x80, 0x95, 0x65, 0x8d, 0xc6, 0x1d, 0x8a, 0x6e, 0x65, - 0xc1, 0x0f, 0xb6, 0xee, 0x88, 0xc4, 0x13, 0x5b, 0x1b, 0x43, 0xf1, 0xc4, 0x62, 0x1f, 0xf7, 0x75, - 0xf6, 0xd8, 0x29, 0xe7, 0x72, 0xb0, 0x38, 0xfc, 0xfa, 0xc0, 0x20, 0xb6, 0x1d, 0x75, 0x66, 0x18, - 0xa1, 0xee, 0x3d, 0x36, 0xad, 0xbf, 0xa2, 0x90, 0x58, 0xc1, 0x47, 0x1c, 0xc1, 0x9c, 0x0e, 0x31, - 0x8f, 0x68, 0x99, 0x54, 0x4c, 0x53, 0x61, 0x75, 0x1c, 0xd6, 0xde, 0x38, 0xa3, 0x07, 0x19, 0x11, - 0x1f, 0x45, 0x85, 0x4a, 0x2c, 0x16, 0x89, 0xad, 0x8b, 0x37, 0xf0, 0x49, 0xc6, 0xf4, 0x42, 0xa9, - 0xd8, 0x24, 0x56, 0xf4, 0x72, 0xf1, 0x11, 0x54, 0x14, 0x83, 0x89, 0xd6, 0x05, 0xf9, 0x9b, 0x20, - 0xa3, 0x54, 0x2a, 0x84, 0xb9, 0xd6, 0xd5, 0xfa, 0x8c, 0x42, 0xfd, 0x19, 0x42, 0xc1, 0x44, 0x9f, - 0x21, 0x98, 0x9e, 0x5e, 0xd4, 0xa0, 0xa2, 0x8d, 0x84, 0x60, 0xc2, 0xdb, 0x23, 0xe2, 0x3c, 0x0b, - 0xdd, 0xf3, 0x24, 0x5b, 0x92, 0x45, 0xb2, 0x3a, 0xa9, 0x79, 0xde, 0xcb, 0x47, 0xf7, 0xe0, 0x35, - 0x08, 0xed, 0x66, 0xae, 0xd5, 0x3f, 0x8f, 0x18, 0x7e, 0xd1, 0x3f, 0x0a, 0x6e, 0x0a, 0xa1, 0x42, - 0x7f, 0x63, 0x23, 0x41, 0x15, 0x95, 0xff, 0x24, 0x97, 0xbb, 0x5e, 0x28, 0x3d, 0x45, 0x33, 0x07, - 0x71, 0x6c, 0x61, 0x9a, 0x14, 0x73, 0x96, 0x27, 0xd8, 0x6f, 0xbb, 0x3d, 0xd2, 0xa5, 0xbb, 0xea, - 0x91, 0x27, 0x89, 0x3e, 0xbd, 0x27, 0xf1, 0xb8, 0x40, 0x11, 0xc6, 0xd9, 0x3d, 0x2c, 0x2f, 0x72, - 0xf5, 0x45, 0xab, 0x7e, 0x49, 0x95, 0x5f, 0xf0, 0x1a, 0x0d, 0xa4, 0x75, 0x99, 0xf7, 0xf6, 0xd0, - 0x51, 0x70, 0x1f, 0xc4, 0x9b, 0x0c, 0x37, 0x9c, 0xd4, 0xb1, 0x2b, 0xe9, 0xe1, 0xb6, 0x32, 0xeb, - 0x8c, 0x8d, 0xf0, 0xb2, 0xe0, 0xda, 0xef, 0x33, 0x7a, 0xfe, 0x66, 0x98, 0xb5, 0xd4, 0x8e, 0x50, - 0x7e, 0xdc, 0x9c, 0xba, 0xc6, 0xc4, 0xa9, 0x13, 0x7b, 0x17, 0x63, 0x62, 0xd6, 0xd5, 0xa8, 0x10, - 0x6f, 0xc2, 0x2c, 0xd2, 0x4c, 0x64, 0x1b, 0x3c, 0x74, 0x64, 0xd7, 0x32, 0xec, 0xb7, 0xb8, 0x00, - 0xa1, 0x10, 0xf1, 0xa7, 0x08, 0x30, 0x8e, 0xc8, 0xf7, 0x71, 0x25, 0x9e, 0x7f, 0x35, 0x09, 0xdd, - 0xbd, 0x46, 0x49, 0xb0, 0x35, 0xc0, 0x7d, 0xc6, 0x7f, 0x54, 0xdc, 0xba, 0x15, 0xde, 0xde, 0xeb, - 0x1b, 0x9f, 0x8d, 0xe1, 0x90, 0x21, 0x92, 0x1a, 0x0e, 0x19, 0xb8, 0x24, 0xd2, 0x47, 0x1f, 0xf0, - 0x38, 0x9d, 0xb0, 0x89, 0x61, 0x38, 0x64, 0x50, 0x78, 0x73, 0x9d, 0x1a, 0x57, 0xfc, 0xb1, 0xc0, - 0x0e, 0x7c, 0xd2, 0x54, 0xc2, 0x09, 0x4a, 0x0f, 0x7f, 0xa2, 0xca, 0xbb, 0xbc, 0xe6, 0x1a, 0x69, - 0x47, 0xea, 0xd2, 0xb9, 0xf4, 0xb5, 0x37, 0x52, 0x87, 0x7b, 0xd3, 0x1f, 0xbf, 0x03, 0xec, 0x70, - 0x7b, 0xa4, 0x83, 0x46, 0x5f, 0x3b, 0xdc, 0x95, 0x3a, 0x71, 0x5d, 0x1b, 0xb8, 0x01, 0xcf, 0x4e, - 0xea, 0xea, 0x2b, 0xe1, 0x0f, 0xed, 0xf0, 0xc1, 0x4a, 0x3e, 0x9d, 0x7a, 0xa5, 0xf1, 0x5e, 0x89, - 0x9c, 0x34, 0x33, 0xb7, 0xde, 0xce, 0x9c, 0xeb, 0xe2, 0x3b, 0xbe, 0x3d, 0xd2, 0xe9, 0x33, 0x7f, - 0x58, 0xec, 0x12, 0x50, 0x81, 0xbf, 0x31, 0xd4, 0xa2, 0x50, 0xca, 0x9b, 0x6b, 0xa1, 0xbc, 0xba, - 0x70, 0x62, 0xb9, 0x04, 0xa4, 0xf7, 0x2b, 0x55, 0xde, 0xe2, 0x05, 0x70, 0x69, 0x1d, 0x84, 0xcc, - 0x87, 0xe8, 0x71, 0xb7, 0x47, 0x7a, 0x48, 0xe9, 0xed, 0x91, 0x9e, 0xa5, 0xc9, 0xc1, 0x21, 0xb9, - 0x41, 0x09, 0x27, 0xb4, 0x91, 0xbd, 0xda, 0xe0, 0xe0, 0xed, 0x91, 0xae, 0x65, 0xac, 0x04, 0x72, - 0xe7, 0xeb, 0x3a, 0x82, 0xd6, 0x71, 0x32, 0x39, 0x78, 0x90, 0x46, 0xde, 0x87, 0x5e, 0xc5, 0x35, - 0xa8, 0x80, 0xc4, 0xbf, 0x23, 0xbe, 0x07, 0xf9, 0xd5, 0xcb, 0x54, 0x79, 0x89, 0x17, 0x4a, 0xa4, - 0xfb, 0xe1, 0xc4, 0x96, 0xf9, 0xe4, 0x53, 0xed, 0xe2, 0x81, 0xe4, 0x4d, 0x2c, 0x3a, 0xf4, 0xae, - 0x74, 0x39, 0xb9, 0xd4, 0x07, 0xd0, 0xe2, 0x4b, 0xa8, 0x30, 0xea, 0x6f, 0x50, 0x36, 0x86, 0x76, - 0x83, 0x17, 0x42, 0x41, 0xb5, 0xac, 0xca, 0x4f, 0x79, 0xf5, 0x42, 0x49, 0x82, 0x97, 0x53, 0xd0, - 0x29, 0x84, 0x7a, 0xbc, 0x3d, 0xd2, 0x95, 0xea, 0x6d, 0xd5, 0xce, 0x5f, 0x7c, 0x78, 0xe9, 0x52, - 0x6b, 0xd7, 0xd2, 0x52, 0x9f, 0xde, 0xba, 0x0a, 0x1f, 0xd1, 0xd0, 0x23, 0x5e, 0x27, 0x0e, 0xd1, - 0xb3, 0x6b, 0x82, 0x74, 0xed, 0x69, 0xa3, 0x2b, 0x06, 0x19, 0x68, 0xfe, 0xc2, 0x45, 0xde, 0x5e, - 0x67, 0x35, 0xfc, 0x71, 0xcb, 0xb7, 0xe7, 0x4d, 0xf2, 0x6d, 0x51, 0x36, 0xa7, 0x65, 0xa3, 0xc3, - 0x21, 0xd0, 0xa7, 0x49, 0xd2, 0x75, 0x09, 0x68, 0x96, 0x5d, 0x3b, 0xac, 0xd5, 0x03, 0x11, 0x41, - 0xce, 0x6a, 0x4a, 0x11, 0xa5, 0x1c, 0x45, 0xd0, 0x54, 0xb4, 0xec, 0x37, 0x71, 0xa8, 0x8c, 0x24, - 0xe8, 0x71, 0x37, 0xdf, 0x07, 0x3f, 0xc4, 0xf2, 0xdc, 0xa9, 0x84, 0xf1, 0xb6, 0x44, 0x82, 0x13, - 0xc2, 0x70, 0xfe, 0x46, 0x40, 0x85, 0xac, 0x48, 0x9c, 0x83, 0x26, 0x61, 0x6d, 0x96, 0xca, 0xdd, - 0x7c, 0x1f, 0xfd, 0x25, 0x4e, 0x43, 0xae, 0x50, 0x94, 0xaa, 0x46, 0xae, 0x50, 0x54, 0x14, 0x51, - 0x7e, 0x28, 0xda, 0xf2, 0x08, 0xbd, 0xf8, 0x26, 0x7f, 0xe3, 0x81, 0x62, 0x68, 0xee, 0x8d, 0x87, - 0xfe, 0x1b, 0x0f, 0xd4, 0xe0, 0xd6, 0xa9, 0x8c, 0x6b, 0xe6, 0xa0, 0x49, 0x11, 0x78, 0x13, 0x42, - 0xdf, 0x76, 0xc0, 0x2f, 0xf1, 0x09, 0x54, 0x44, 0xac, 0x08, 0x72, 0x4c, 0xf1, 0xd3, 0x8b, 0xec, - 0xf9, 0x76, 0xb3, 0xa8, 0x61, 0x40, 0x3e, 0x03, 0xde, 0xb3, 0x1c, 0x4d, 0x35, 0xd5, 0x91, 0xb1, - 0xc3, 0x7c, 0xa6, 0xfa, 0x5c, 0xa1, 0xa0, 0x9d, 0x2f, 0xb5, 0xe7, 0x8b, 0x49, 0xc4, 0x6d, 0x98, - 0xdf, 0xb9, 0xeb, 0x82, 0xf1, 0x9f, 0x36, 0x8f, 0x9f, 0x36, 0x8f, 0x3b, 0x69, 0xf3, 0xf8, 0xa5, - 0x65, 0xf3, 0x20, 0x8e, 0x45, 0xc6, 0xe6, 0x51, 0x61, 0xbb, 0x79, 0xf0, 0xdd, 0x51, 0x00, 0xa2, - 0xe3, 0x73, 0xfb, 0x06, 0x0d, 0xcb, 0x32, 0x06, 0x8f, 0x48, 0xf3, 0x6d, 0xb7, 0x8f, 0xba, 0x5a, - 0xba, 0x81, 0x7c, 0xee, 0x42, 0x0b, 0x1d, 0x7b, 0xf8, 0x71, 0xef, 0x23, 0xbf, 0x34, 0xed, 0x23, - 0x0f, 0xe5, 0xd8, 0x47, 0x78, 0xac, 0x8c, 0x67, 0x3b, 0xe9, 0x11, 0xd0, 0xdc, 0x1c, 0xcd, 0xbf, - 0xb1, 0x5d, 0x65, 0xb9, 0x69, 0x57, 0x59, 0x68, 0x27, 0x8f, 0xeb, 0x6a, 0xe3, 0x4c, 0x7a, 0xd0, - 0xc1, 0x6d, 0x44, 0xd3, 0xb3, 0x2a, 0x1c, 0xb7, 0x98, 0x32, 0x94, 0xdf, 0xa4, 0xe8, 0xc1, 0x16, - 0x2c, 0x4e, 0xbb, 0xeb, 0x14, 0xdc, 0x29, 0x86, 0xf0, 0xfc, 0x1a, 0xe5, 0xe3, 0x5f, 0xe2, 0x7c, - 0x84, 0x88, 0x5c, 0xdb, 0x9a, 0xb0, 0x3d, 0xd3, 0xdf, 0x83, 0x0a, 0xa1, 0x3a, 0x94, 0x7d, 0xa8, - 0x17, 0x4b, 0x51, 0x91, 0xfe, 0x98, 0x8b, 0xee, 0x61, 0x93, 0xb7, 0xed, 0xac, 0x0e, 0xed, 0xae, - 0x0b, 0x7a, 0x5a, 0xf3, 0xd0, 0x9c, 0x35, 0x4a, 0x02, 0x0f, 0x3b, 0x0e, 0xaf, 0x7f, 0x7e, 0x5c, - 0x5b, 0xc0, 0xaf, 0x60, 0x9b, 0xe6, 0xb6, 0x80, 0xb1, 0xd6, 0x12, 0xfc, 0x4a, 0xf5, 0x56, 0xd2, - 0x54, 0x58, 0xb1, 0x38, 0x7b, 0x7e, 0xc8, 0x2a, 0x58, 0x7a, 0x3e, 0x07, 0xf4, 0x49, 0x0f, 0x42, - 0xe0, 0x66, 0x26, 0x14, 0xe2, 0xf4, 0x24, 0xdf, 0x3b, 0xa4, 0x9d, 0xbc, 0x94, 0x19, 0x78, 0x2f, - 0xf5, 0x7a, 0x3b, 0x0d, 0xb9, 0x72, 0xcb, 0x45, 0xce, 0x70, 0xe6, 0x3e, 0x7e, 0xdc, 0xf2, 0x61, - 0x9d, 0x2e, 0x1f, 0x6c, 0x63, 0xa8, 0x30, 0x05, 0xed, 0x17, 0xa1, 0xc4, 0x0e, 0x4c, 0xfb, 0x63, - 0x09, 0x85, 0xff, 0x57, 0x40, 0x33, 0xb2, 0xdb, 0xfc, 0x08, 0x94, 0x3b, 0x5d, 0x48, 0x14, 0x8e, - 0x29, 0x24, 0x86, 0xf2, 0xc9, 0x61, 0x85, 0xd8, 0x92, 0x48, 0x77, 0x3b, 0x94, 0xc0, 0xce, 0x1f, - 0x15, 0x23, 0x6f, 0xd6, 0x53, 0xb6, 0x81, 0xfd, 0x7b, 0xa5, 0x2a, 0x57, 0xe9, 0x29, 0xdb, 0x96, - 0xd6, 0xd5, 0xb7, 0xac, 0x00, 0x2d, 0x4d, 0x8f, 0x86, 0x3e, 0x70, 0x43, 0x57, 0x96, 0x78, 0x35, - 0x49, 0xeb, 0xba, 0x31, 0xda, 0x7e, 0x50, 0xcf, 0xe1, 0xf6, 0x22, 0x2a, 0xc4, 0x2b, 0xce, 0x5d, - 0x10, 0x93, 0x9c, 0x79, 0x7a, 0x21, 0xe9, 0xfa, 0x91, 0x09, 0x75, 0xad, 0xb7, 0x15, 0x1b, 0xd0, - 0xe4, 0x9d, 0xca, 0x2e, 0xd2, 0x77, 0x01, 0xe9, 0x9b, 0x58, 0x1a, 0x59, 0x99, 0xf4, 0xb4, 0xd6, - 0x7e, 0x6d, 0xf4, 0x68, 0xbf, 0xd6, 0x77, 0x82, 0xf5, 0x9f, 0xb9, 0xf8, 0x6e, 0xea, 0xf4, 0x61, - 0x6d, 0xff, 0x90, 0x71, 0x18, 0x3d, 0x7c, 0xb0, 0x12, 0x08, 0x37, 0xdd, 0xd7, 0xa9, 0xc3, 0xb3, - 0x1b, 0x2d, 0xda, 0x53, 0x15, 0x56, 0x7c, 0xd0, 0xa3, 0x5e, 0x47, 0x12, 0x90, 0xe6, 0x42, 0xe2, - 0x29, 0xfb, 0x93, 0xee, 0x0d, 0x17, 0x31, 0xfa, 0x66, 0xb7, 0xfc, 0x71, 0x8b, 0xa0, 0x55, 0x26, - 0x11, 0xe4, 0x78, 0x6c, 0x1c, 0x4b, 0xf4, 0xfc, 0x95, 0x80, 0x8a, 0xd7, 0x47, 0x12, 0xa1, 0xed, - 0xbb, 0x6a, 0x22, 0xe1, 0xed, 0xa1, 0x06, 0x71, 0x2d, 0x9a, 0x14, 0x27, 0xfe, 0x0b, 0x94, 0xd3, - 0x56, 0xa8, 0xf2, 0x32, 0x2f, 0x2d, 0x92, 0x1e, 0x04, 0x57, 0xed, 0xd1, 0xd6, 0x9e, 0xf4, 0x99, - 0x0b, 0xa0, 0xd2, 0x43, 0x9a, 0x42, 0x28, 0x4f, 0xf7, 0xb4, 0x01, 0xa0, 0x8f, 0x36, 0x10, 0x1f, - 0x42, 0x93, 0xf0, 0x67, 0x98, 0xed, 0xaf, 0xfa, 0x2e, 0x55, 0x9e, 0xe1, 0xa5, 0x45, 0x12, 0xfd, - 0xd7, 0x47, 0xff, 0x15, 0x9f, 0x46, 0x53, 0xfc, 0x04, 0x9b, 0x9b, 0x22, 0x3b, 0x95, 0x30, 0x1f, - 0xf2, 0x8c, 0x2f, 0x97, 0xf8, 0x1f, 0x3e, 0xfe, 0x87, 0xe7, 0xa0, 0x0b, 0x21, 0x98, 0x0c, 0xd1, - 0x5d, 0x56, 0xea, 0x3e, 0xdd, 0x02, 0x59, 0x48, 0xc8, 0x53, 0x43, 0x5f, 0x88, 0x94, 0xd0, 0x24, - 0x1c, 0xf0, 0x4e, 0x64, 0xa4, 0x55, 0x3b, 0x3c, 0x00, 0xd3, 0xd2, 0xdd, 0xbb, 0x9f, 0x44, 0x05, - 0x89, 0x50, 0xa2, 0x91, 0x5d, 0xd0, 0x92, 0xfc, 0x8c, 0x50, 0x22, 0x95, 0x02, 0x28, 0xf9, 0xa1, - 0x1d, 0xbc, 0x96, 0x1c, 0x3a, 0xa0, 0x3b, 0x81, 0xf8, 0x00, 0x44, 0xdc, 0x23, 0xa0, 0xc9, 0x01, - 0x7a, 0xa8, 0xca, 0x33, 0x72, 0xb7, 0xb2, 0x32, 0xe9, 0x57, 0xd0, 0x05, 0x1c, 0xa4, 0xe0, 0xe9, - 0x54, 0xb9, 0x1b, 0xb6, 0x5c, 0xb8, 0x23, 0x1d, 0xed, 0x6d, 0x4d, 0x5d, 0xdd, 0x0b, 0x4f, 0xab, - 0x00, 0xbd, 0x00, 0xfb, 0x45, 0xeb, 0x5e, 0xdd, 0xff, 0x1e, 0x1f, 0x07, 0x08, 0xfe, 0xe9, 0x71, - 0xe0, 0xd2, 0xb9, 0x74, 0x67, 0x87, 0x8f, 0x7d, 0xc3, 0xd3, 0x3f, 0x0d, 0x4d, 0x03, 0x7c, 0xb0, - 0x77, 0xa1, 0xe2, 0xf3, 0x68, 0x46, 0xd8, 0x54, 0xa2, 0xfb, 0x03, 0x10, 0xec, 0x58, 0x2a, 0xa5, - 0x69, 0x30, 0x4e, 0xe8, 0xba, 0xae, 0xd6, 0x67, 0x81, 0xd0, 0x43, 0xd4, 0xb9, 0x2c, 0x21, 0xea, - 0xf8, 0xa6, 0xa6, 0x10, 0x75, 0xbf, 0xe5, 0xc3, 0x41, 0x00, 0x76, 0xd6, 0xaa, 0x72, 0x1d, 0x9f, - 0xea, 0xf3, 0x49, 0xbe, 0x71, 0xaa, 0xb3, 0x15, 0xe2, 0xf7, 0xe8, 0x4f, 0xf9, 0x6f, 0x8f, 0x74, - 0x65, 0x06, 0x2e, 0xc0, 0xdf, 0xc9, 0xc1, 0xa1, 0xcc, 0x9b, 0xa7, 0x46, 0x3f, 0x1a, 0xd4, 0x6b, - 0xf9, 0xbc, 0x9f, 0xe7, 0x04, 0x84, 0xe8, 0x98, 0x77, 0xe9, 0x71, 0x5d, 0x5a, 0x05, 0x55, 0xfe, - 0xbd, 0x97, 0x2b, 0x97, 0x22, 0x94, 0xa8, 0xed, 0x53, 0x75, 0x6c, 0xdb, 0xb9, 0xb5, 0x29, 0x12, - 0x0e, 0x25, 0x22, 0xb1, 0xad, 0x4a, 0x8b, 0x12, 0x4e, 0x7c, 0xd1, 0xca, 0x17, 0x35, 0x29, 0x89, - 0x58, 0x28, 0x10, 0x5f, 0xe2, 0x4e, 0xf5, 0x7e, 0x90, 0x3a, 0x75, 0x41, 0xbb, 0xb2, 0x0f, 0x5a, - 0xc5, 0x12, 0xaf, 0x7e, 0xd1, 0xba, 0x47, 0x69, 0xf2, 0x87, 0x1a, 0xbf, 0x68, 0xdd, 0xd3, 0x12, - 0x09, 0x05, 0x94, 0x74, 0x5f, 0x67, 0xea, 0xf8, 0x0d, 0x6d, 0xa4, 0xdb, 0xc7, 0x7d, 0x5c, 0x7c, - 0x94, 0x3e, 0xca, 0x05, 0xaf, 0x1c, 0xfa, 0xb2, 0x58, 0x89, 0x07, 0xa4, 0x12, 0x1d, 0x0b, 0xa9, - 0x53, 0xb7, 0x4c, 0xb9, 0x86, 0xe1, 0xe5, 0xee, 0xa3, 0x3a, 0x89, 0x93, 0x70, 0xf2, 0x34, 0x06, - 0x2b, 0x25, 0x71, 0x31, 0x07, 0x71, 0x1f, 0x12, 0xd0, 0xa4, 0x00, 0xe1, 0x78, 0xba, 0xab, 0xcf, - 0xb3, 0x5a, 0x16, 0x0c, 0xa9, 0x00, 0x2f, 0x86, 0x68, 0x03, 0xe9, 0x39, 0x9e, 0xff, 0xe1, 0x7a, - 0x45, 0x27, 0x44, 0x5d, 0x10, 0xd0, 0x81, 0x93, 0xb9, 0x42, 0xe4, 0x26, 0x80, 0xd4, 0x01, 0xa0, - 0x33, 0x1f, 0xed, 0x54, 0xdc, 0x81, 0xa6, 0x06, 0xa8, 0x3b, 0x34, 0x19, 0x06, 0x55, 0x1a, 0x4a, - 0xed, 0x87, 0x45, 0x44, 0x1b, 0xe1, 0x48, 0x73, 0x2b, 0x49, 0x04, 0xa7, 0x69, 0xf0, 0x28, 0xa0, - 0x73, 0x36, 0x83, 0xe0, 0x2f, 0x05, 0xa9, 0xf3, 0x1b, 0x7c, 0xa9, 0x68, 0x9c, 0x5f, 0x32, 0xb5, - 0xc2, 0x5f, 0x3a, 0x3b, 0x7a, 0xf2, 0xbc, 0xf9, 0x4b, 0x26, 0x10, 0xf1, 0x77, 0x68, 0x3a, 0x7c, - 0x7a, 0x3d, 0xf3, 0x25, 0x21, 0x4f, 0xbf, 0x72, 0x7f, 0x8b, 0x38, 0x78, 0x65, 0xb7, 0x93, 0x66, - 0xb3, 0x78, 0xba, 0x67, 0x53, 0xc7, 0xaf, 0x68, 0xef, 0x9c, 0xa6, 0x1f, 0xcc, 0x86, 0xc3, 0x9f, - 0x84, 0x31, 0x18, 0x9f, 0x9c, 0x32, 0xce, 0x4f, 0x66, 0xb5, 0xe3, 0x3e, 0x49, 0x67, 0x4a, 0x3f, - 0x99, 0x05, 0x87, 0x3f, 0xd9, 0xac, 0xc7, 0x7f, 0x85, 0x4f, 0x16, 0x8f, 0xf3, 0x93, 0x59, 0xed, - 0xf8, 0x59, 0x12, 0x97, 0x5d, 0xf6, 0xc9, 0x2c, 0x38, 0xf1, 0xf7, 0x68, 0x26, 0x49, 0x56, 0xbd, - 0x31, 0xe0, 0x6f, 0x54, 0x36, 0x34, 0x27, 0x70, 0x0d, 0xc9, 0x1a, 0x90, 0xfb, 0xa3, 0xcb, 0x55, - 0x79, 0xa9, 0xd7, 0xda, 0x52, 0x9a, 0x6b, 0x7c, 0xb6, 0xf3, 0x7d, 0xad, 0xff, 0x06, 0xfc, 0xa4, - 0x1f, 0xb7, 0xc2, 0x8b, 0xaf, 0xa1, 0x19, 0x46, 0x61, 0x1d, 0xc9, 0x4b, 0xe0, 0xf4, 0x24, 0x6d, - 0x42, 0x5f, 0x4f, 0x8f, 0x58, 0xbe, 0x6e, 0xf9, 0x90, 0xd8, 0x2a, 0x60, 0x8d, 0x21, 0xa0, 0x84, - 0x5a, 0x94, 0x58, 0x9c, 0x66, 0xee, 0xdd, 0xa6, 0xca, 0x5b, 0xbd, 0x46, 0xa9, 0xe4, 0xa3, 0xdc, - 0x77, 0xe8, 0x42, 0xea, 0xe8, 0xf5, 0x4c, 0x6b, 0x7b, 0xb9, 0xd6, 0x3d, 0x90, 0xea, 0xda, 0xaf, - 0xf5, 0xf7, 0xdc, 0x1e, 0x79, 0x3b, 0x73, 0xe0, 0x42, 0xea, 0xc4, 0x59, 0xf8, 0x59, 0xee, 0xd6, - 0xba, 0x07, 0xe8, 0x16, 0x42, 0x08, 0xb9, 0x92, 0x5b, 0x74, 0xf2, 0x1a, 0x51, 0xf7, 0x34, 0x37, - 0xba, 0xe7, 0xe3, 0xff, 0xcc, 0x30, 0xc7, 0xff, 0x29, 0x31, 0xde, 0x47, 0xce, 0x84, 0x1a, 0xf6, - 0x00, 0x72, 0x81, 0x29, 0x13, 0x93, 0x08, 0x71, 0x89, 0xb8, 0x84, 0x6b, 0x0b, 0x4c, 0x8f, 0x1c, - 0xef, 0x82, 0x7a, 0xa3, 0xa4, 0x2a, 0xa0, 0xca, 0x2f, 0xa3, 0xdf, 0x78, 0xb3, 0xf6, 0x33, 0x69, - 0x2d, 0xbf, 0x4d, 0x94, 0xbb, 0x93, 0x83, 0xc3, 0x99, 0xf7, 0xf6, 0xc0, 0xe3, 0x32, 0x6d, 0xe0, - 0x06, 0xec, 0xa4, 0xa0, 0xe3, 0x02, 0x60, 0x19, 0x4c, 0xf3, 0x8b, 0xd6, 0x3d, 0x06, 0xd6, 0xfb, - 0x3a, 0x41, 0x17, 0x58, 0xec, 0xf9, 0xbb, 0xa9, 0x68, 0x6e, 0x0d, 0xe5, 0x28, 0xfe, 0x33, 0xec, - 0x24, 0xb2, 0x9d, 0xdf, 0xb7, 0x04, 0x96, 0x76, 0xd8, 0xcb, 0xef, 0x5b, 0xf3, 0x4d, 0x12, 0x9b, - 0x85, 0x94, 0x66, 0x41, 0x61, 0xbf, 0xac, 0x2e, 0x89, 0xcd, 0x99, 0x21, 0x94, 0xb4, 0xce, 0xb0, - 0x89, 0x91, 0x67, 0xec, 0x59, 0x8f, 0x99, 0xb6, 0xd4, 0x45, 0x76, 0x5b, 0x6a, 0xea, 0xd4, 0x2d, - 0x2e, 0x5e, 0xf7, 0x0c, 0x81, 0xee, 0xac, 0x6c, 0x27, 0xc9, 0x9b, 0xe8, 0x4e, 0xf2, 0xd7, 0x76, - 0xdb, 0xe4, 0x87, 0xdf, 0xfb, 0x36, 0xf9, 0x65, 0x75, 0x59, 0xec, 0x01, 0xdf, 0x8c, 0xec, 0x8e, - 0x7d, 0xa2, 0xb5, 0x5f, 0xd3, 0x8e, 0xba, 0x51, 0xdf, 0x18, 0x0b, 0xc6, 0x0c, 0xe6, 0x37, 0xee, - 0x4d, 0xd3, 0xb2, 0x47, 0x4d, 0xfa, 0xce, 0xf6, 0xa8, 0xc9, 0xdf, 0xe1, 0x1e, 0x55, 0xf8, 0xdd, - 0xef, 0x51, 0x45, 0xdf, 0xfd, 0x1e, 0x85, 0xbe, 0x8f, 0x3d, 0x6a, 0xca, 0xf7, 0xba, 0x47, 0x15, - 0x7f, 0x57, 0x7b, 0x14, 0xa7, 0x5d, 0x4e, 0xfd, 0x41, 0x68, 0x97, 0xe6, 0x4d, 0x73, 0xda, 0xf7, - 0xbc, 0x69, 0x4e, 0x37, 0x6d, 0x9a, 0x55, 0x2f, 0xab, 0xf2, 0x4b, 0xe8, 0x45, 0x6f, 0xae, 0x9d, - 0x47, 0x97, 0x19, 0x9c, 0x10, 0xff, 0x5c, 0x30, 0x76, 0x8c, 0xcf, 0x05, 0x22, 0xfe, 0x3f, 0x17, - 0x38, 0x19, 0xf8, 0xb9, 0xc0, 0xbe, 0xe0, 0x19, 0x74, 0xb1, 0x77, 0xb6, 0xd9, 0xbd, 0xdf, 0x19, - 0xee, 0xcb, 0xbb, 0xac, 0x7e, 0xc8, 0xf9, 0xe3, 0xf4, 0x43, 0x26, 0x19, 0xf5, 0x2d, 0x7e, 0xc8, - 0x25, 0x56, 0x3f, 0x64, 0x7b, 0xf7, 0x63, 0xcf, 0x1b, 0x2e, 0x34, 0xb7, 0x96, 0x4a, 0x13, 0x3b, - 0x95, 0xa0, 0xc6, 0xaa, 0x12, 0x40, 0xde, 0x67, 0x43, 0x25, 0x98, 0x9d, 0xa5, 0x06, 0x50, 0x84, - 0x70, 0xfb, 0xbd, 0xdd, 0xa9, 0xdc, 0xf5, 0xb5, 0x4e, 0xe5, 0x55, 0x1b, 0x55, 0xb9, 0x1e, 0xad, - 0xf7, 0xe6, 0x1a, 0xbb, 0xbe, 0x3d, 0x70, 0x7d, 0x99, 0x89, 0x6a, 0x5a, 0x38, 0x12, 0x54, 0x8c, - 0x4e, 0x09, 0x1d, 0xd9, 0x77, 0xf8, 0x13, 0x1d, 0x8d, 0x41, 0x47, 0x7f, 0xef, 0x82, 0xd4, 0x0c, - 0xf6, 0x54, 0xf4, 0x88, 0x95, 0x8a, 0xc0, 0x0a, 0x68, 0x50, 0x91, 0x4d, 0x62, 0x81, 0x6f, 0x85, - 0x70, 0xfa, 0x05, 0x55, 0xfe, 0x40, 0x40, 0x17, 0x05, 0xaf, 0xf3, 0x78, 0xa5, 0x3f, 0xa5, 0xbe, - 0x95, 0x9c, 0x38, 0x02, 0x23, 0xe5, 0xed, 0x91, 0x2e, 0xed, 0xbd, 0xbd, 0xa9, 0xd3, 0xbd, 0xda, - 0xb9, 0x0f, 0xb5, 0x7d, 0x27, 0x93, 0x43, 0xfb, 0x30, 0x4a, 0xce, 0xee, 0x87, 0x38, 0x15, 0xb8, - 0xb6, 0xe3, 0x24, 0x49, 0x13, 0xd9, 0x01, 0xe5, 0x34, 0x60, 0x0a, 0xe9, 0xcd, 0x68, 0xdb, 0x7e, - 0x09, 0xec, 0x5b, 0xe4, 0xfe, 0x7d, 0x88, 0x85, 0x7c, 0xbe, 0x34, 0xba, 0xbf, 0x9b, 0x05, 0x01, - 0xe4, 0xa2, 0x87, 0xfe, 0xef, 0x2e, 0x78, 0x7d, 0x76, 0x67, 0x92, 0xe4, 0xf3, 0xa6, 0x8b, 0xda, - 0x05, 0xf6, 0xfb, 0x24, 0x9b, 0x94, 0xe9, 0x85, 0x91, 0xe9, 0x28, 0x00, 0x97, 0x7b, 0xf0, 0xc2, - 0x68, 0xad, 0x2a, 0xd7, 0xa1, 0x35, 0xde, 0x1c, 0x48, 0x61, 0xf9, 0x03, 0x4c, 0xeb, 0xe7, 0xf4, - 0xba, 0xa8, 0x80, 0xb8, 0x01, 0xd4, 0xc7, 0x22, 0x2d, 0xa1, 0xa0, 0x12, 0x63, 0xd9, 0x34, 0x36, - 0xe3, 0x4a, 0x46, 0xbe, 0xbf, 0x23, 0x99, 0x31, 0x48, 0xbd, 0x4e, 0xbf, 0xcf, 0xab, 0xf2, 0x7a, - 0x2f, 0x57, 0x2c, 0x3d, 0x43, 0x73, 0x6d, 0x5c, 0x3d, 0xcb, 0x0a, 0x6f, 0x8f, 0x74, 0xc1, 0x01, - 0x82, 0xba, 0xe9, 0xef, 0x6a, 0x0e, 0x27, 0x42, 0x95, 0x71, 0xa5, 0x71, 0x7b, 0x65, 0x20, 0x56, - 0xb9, 0x2d, 0x10, 0xdf, 0xca, 0x52, 0x51, 0x6f, 0x8d, 0x46, 0x22, 0x8d, 0x3e, 0xae, 0x37, 0xb1, - 0x0a, 0xa3, 0xba, 0xc1, 0x78, 0xfc, 0x07, 0xe1, 0x7f, 0xa0, 0x48, 0x9a, 0x9d, 0xea, 0x1d, 0xd2, - 0x4e, 0x1f, 0xc0, 0x6c, 0xd9, 0x7b, 0x29, 0xdd, 0xd3, 0xa6, 0xf5, 0x5e, 0xd1, 0xce, 0x9c, 0xf1, - 0xd1, 0x6a, 0x71, 0x25, 0x2a, 0x66, 0x3e, 0xa8, 0xe4, 0xb0, 0x93, 0x67, 0x44, 0x85, 0x35, 0x55, - 0x48, 0x93, 0xa0, 0x1f, 0x9f, 0xa9, 0x54, 0x7c, 0x5d, 0x40, 0x05, 0x24, 0x16, 0x0e, 0x15, 0x1e, - 0xf3, 0x2c, 0x67, 0x8b, 0xcd, 0x9c, 0x47, 0xca, 0x06, 0x55, 0xae, 0xf1, 0x02, 0xbc, 0x54, 0x05, - 0x81, 0xc1, 0xd3, 0x87, 0xf6, 0x97, 0xbb, 0x75, 0x6c, 0xe8, 0x65, 0xda, 0x95, 0xee, 0xe4, 0xd0, - 0xa1, 0x74, 0x5f, 0x67, 0x72, 0xe8, 0x10, 0x81, 0xd7, 0x5d, 0xa5, 0x53, 0x57, 0xcf, 0x7e, 0x59, - 0x3d, 0xc9, 0x9b, 0x5f, 0x12, 0x2c, 0xfb, 0x99, 0x0f, 0xfa, 0x12, 0x4f, 0x0a, 0x7c, 0xda, 0x99, - 0x82, 0x71, 0x8c, 0x04, 0xfc, 0xb3, 0x8d, 0xa4, 0x34, 0xeb, 0xe0, 0xcb, 0xc9, 0xc1, 0x0f, 0x52, - 0xc7, 0xae, 0x70, 0x03, 0xd2, 0xba, 0x07, 0xd2, 0x47, 0x31, 0xda, 0x28, 0x16, 0x8f, 0x5d, 0xc1, - 0xab, 0xc4, 0x0d, 0x4e, 0xef, 0x82, 0x1f, 0x20, 0x9f, 0xc9, 0x06, 0x9f, 0x1b, 0x2f, 0x0a, 0xe8, - 0xbc, 0xe0, 0x1d, 0x8b, 0x74, 0xa4, 0x66, 0x53, 0x1e, 0x96, 0xab, 0x67, 0x21, 0xb2, 0x3c, 0x7c, - 0x99, 0x44, 0x94, 0x05, 0xbd, 0x8f, 0x44, 0x86, 0x7d, 0xc0, 0xcd, 0xee, 0xa4, 0x89, 0x39, 0x1c, - 0xe2, 0x15, 0x11, 0xe7, 0x1c, 0x6d, 0xff, 0x50, 0xfa, 0xf2, 0x7b, 0xda, 0xe1, 0x0e, 0x70, 0xf6, - 0xe1, 0xc7, 0x65, 0x84, 0xaa, 0xe7, 0xba, 0x32, 0x09, 0x90, 0xbd, 0x79, 0xc8, 0xed, 0x3c, 0xcc, - 0x3b, 0x31, 0xd5, 0xb9, 0xe3, 0x1b, 0x0c, 0x48, 0x59, 0x4f, 0xe4, 0xc7, 0xbd, 0x14, 0xc7, 0xcc, - 0xcd, 0x9e, 0x46, 0x2e, 0x26, 0x48, 0x4a, 0xbd, 0xde, 0xae, 0xed, 0xfb, 0x84, 0x8a, 0x13, 0xfa, - 0x4a, 0x7a, 0x4c, 0x14, 0x49, 0x5e, 0x53, 0x36, 0xa0, 0xab, 0x67, 0x6d, 0x3b, 0x75, 0x12, 0x33, - 0xff, 0x30, 0x1f, 0x15, 0x57, 0xb3, 0x00, 0x7d, 0xf4, 0x09, 0x88, 0x9e, 0x40, 0x87, 0xb9, 0x8b, - 0x18, 0x19, 0x75, 0xdc, 0x68, 0x0a, 0xfd, 0x61, 0xa4, 0x27, 0xf6, 0xf1, 0x45, 0x1c, 0x44, 0x0d, - 0x5e, 0xb7, 0x3c, 0x13, 0x04, 0x2e, 0x12, 0x3d, 0xa8, 0x98, 0xfe, 0xdc, 0x1c, 0xc7, 0xc7, 0x02, - 0x1a, 0xea, 0x9a, 0x2f, 0x13, 0x67, 0x41, 0xb2, 0x82, 0x20, 0x0b, 0x77, 0x49, 0x7e, 0x60, 0x5d, - 0x7e, 0x5b, 0x68, 0x37, 0x77, 0x5d, 0xce, 0x7e, 0x8a, 0xa5, 0xa8, 0x70, 0x5b, 0x68, 0x37, 0xf4, - 0x07, 0x71, 0xae, 0xf5, 0xdf, 0x78, 0x46, 0x7a, 0x62, 0x1f, 0x88, 0x3b, 0xc6, 0x67, 0xfa, 0x71, - 0xa3, 0x29, 0xf4, 0x07, 0xe9, 0x97, 0x86, 0xe9, 0xe1, 0x8a, 0xc4, 0x45, 0x68, 0x2a, 0xfd, 0xe9, - 0x03, 0xc9, 0x07, 0x89, 0x5b, 0xcd, 0x85, 0x78, 0x56, 0xb4, 0x00, 0x46, 0x31, 0x05, 0x66, 0xc5, - 0x97, 0xe1, 0xf1, 0x93, 0x33, 0x5b, 0x5d, 0x10, 0x22, 0x82, 0xf9, 0xd8, 0x4f, 0x3c, 0xc6, 0x06, - 0x3d, 0xe9, 0xf3, 0x54, 0x18, 0xa3, 0x5e, 0x80, 0xfb, 0x36, 0x09, 0xce, 0x69, 0xd0, 0xb7, 0x49, - 0x3a, 0xce, 0x42, 0x05, 0xbb, 0x23, 0x61, 0x85, 0x9a, 0x26, 0x7d, 0xf0, 0x83, 0x98, 0xff, 0x22, - 0xe1, 0x78, 0x73, 0x13, 0x99, 0xfc, 0x0c, 0x6a, 0xfe, 0xd3, 0x4b, 0xc4, 0x39, 0x68, 0x12, 0x16, - 0xf1, 0x75, 0x41, 0x6a, 0x37, 0xa4, 0xbf, 0x70, 0x3b, 0xf2, 0x79, 0x98, 0x0b, 0x35, 0x1b, 0x1a, - 0x25, 0xe2, 0x0c, 0x94, 0xd7, 0x1c, 0x6b, 0xa4, 0xf6, 0x42, 0xfc, 0xa7, 0x74, 0xf5, 0xb4, 0x0b, - 0x4d, 0xa3, 0xd6, 0x8d, 0x75, 0xb0, 0x8b, 0x8a, 0x7f, 0x2d, 0xa0, 0xa9, 0x35, 0x26, 0x03, 0x8b, - 0x45, 0xe1, 0x33, 0x55, 0xfb, 0x94, 0xdf, 0x95, 0xde, 0x3b, 0x06, 0x44, 0x3c, 0xea, 0x69, 0x51, - 0xe5, 0xf5, 0xe2, 0x54, 0x38, 0x99, 0xd1, 0xf2, 0xd2, 0x95, 0xa6, 0x9f, 0xb7, 0x47, 0xba, 0xe0, - 0x88, 0x08, 0x06, 0x33, 0xad, 0x7d, 0x04, 0x1f, 0x9e, 0xf7, 0x1c, 0x1d, 0xdd, 0xfb, 0x1e, 0x4d, - 0x4b, 0xa1, 0x76, 0xa5, 0x0f, 0x5c, 0x4e, 0x7f, 0x78, 0x00, 0x7e, 0xee, 0xfd, 0xe7, 0xc9, 0x37, - 0x5d, 0x0b, 0x3d, 0xa5, 0x95, 0xe6, 0x6f, 0x57, 0xb6, 0x2c, 0x63, 0x25, 0x55, 0x82, 0x57, 0x6c, - 0x75, 0xa1, 0x39, 0x3e, 0x25, 0x11, 0xdb, 0x65, 0x1a, 0xd2, 0x26, 0x7f, 0x7c, 0xa7, 0x68, 0x79, - 0xbb, 0x68, 0x85, 0xc3, 0x93, 0x7b, 0x60, 0x3c, 0x60, 0xf1, 0xa8, 0xe7, 0xb8, 0xa0, 0xca, 0xbf, - 0x16, 0xef, 0x19, 0xdd, 0x7f, 0x30, 0x33, 0x70, 0xcc, 0x34, 0x33, 0x88, 0x22, 0x59, 0xfa, 0xf4, - 0xa8, 0xda, 0x81, 0x25, 0x2c, 0x67, 0xd1, 0xd2, 0xce, 0x5f, 0xcd, 0x7c, 0x7c, 0x01, 0xd2, 0x76, - 0xe0, 0xf9, 0xef, 0x3f, 0x98, 0x3a, 0x7e, 0x25, 0x39, 0x78, 0x40, 0xeb, 0x3e, 0xc2, 0x83, 0x41, - 0x07, 0x64, 0xc2, 0xcb, 0x3c, 0xe5, 0xce, 0x13, 0xae, 0x7c, 0x4d, 0x0f, 0x60, 0xfc, 0xfb, 0xca, - 0x18, 0x1e, 0x26, 0x46, 0xc1, 0x5f, 0x09, 0x68, 0x16, 0xb9, 0xe7, 0x27, 0x8e, 0x27, 0xf4, 0xa1, - 0x3d, 0x3e, 0xe9, 0x5b, 0xbc, 0x53, 0x8c, 0x3a, 0x3c, 0xf1, 0x05, 0xb9, 0xaa, 0xe3, 0x51, 0x4f, - 0x5c, 0x95, 0xab, 0xc5, 0x7b, 0x76, 0xea, 0x85, 0xb0, 0x17, 0xa6, 0x5a, 0x2f, 0xa6, 0xde, 0x6d, - 0x4d, 0x7d, 0x72, 0xa0, 0xf4, 0x7e, 0xa3, 0x2a, 0x73, 0xeb, 0x74, 0xea, 0xd0, 0x05, 0x3a, 0x67, - 0x33, 0x18, 0x99, 0x55, 0x59, 0xe9, 0x7d, 0xb6, 0xb3, 0x8a, 0x34, 0x07, 0x2b, 0x8d, 0x5e, 0xf0, - 0x64, 0xf6, 0xba, 0xd0, 0x5c, 0xbb, 0xc9, 0xd4, 0x44, 0xc2, 0x61, 0x25, 0x90, 0x10, 0x17, 0x39, - 0x0f, 0x9a, 0x82, 0xe0, 0xa9, 0xdd, 0x3f, 0x0e, 0xa8, 0x78, 0xd4, 0x73, 0x4c, 0x50, 0xe5, 0x67, - 0x45, 0x37, 0x37, 0xc5, 0x7d, 0xed, 0x95, 0xf4, 0x1d, 0x75, 0xff, 0xad, 0xd1, 0x13, 0xfd, 0xe9, - 0x37, 0xae, 0xa7, 0x5a, 0xf7, 0x94, 0x3e, 0xc0, 0xcd, 0x94, 0x94, 0xd3, 0x99, 0xea, 0xd0, 0x00, - 0x47, 0xa6, 0x5a, 0x2d, 0x3e, 0xe3, 0x34, 0xd5, 0x38, 0x5e, 0x3f, 0xf2, 0xc6, 0xfc, 0xf7, 0x0c, - 0x24, 0x6e, 0x5a, 0xd2, 0x00, 0x9d, 0xe4, 0x7f, 0x14, 0xd0, 0xd4, 0xba, 0xa6, 0x68, 0x24, 0x96, - 0x70, 0xe4, 0x51, 0x53, 0xb5, 0x2d, 0x8f, 0x66, 0x41, 0xc4, 0xa3, 0x9e, 0x37, 0x05, 0x55, 0x0e, - 0x8a, 0xf7, 0x68, 0x03, 0x23, 0x5a, 0x3b, 0x0d, 0xd6, 0x6f, 0xa6, 0xe0, 0x35, 0x7c, 0x15, 0xcc, - 0xb1, 0x8c, 0xfa, 0xc9, 0x9c, 0xef, 0x49, 0x0e, 0x1d, 0x61, 0x39, 0x73, 0x30, 0x90, 0xf6, 0xc6, - 0x99, 0xcc, 0xeb, 0x37, 0xab, 0xdc, 0x2c, 0xb8, 0x36, 0xb7, 0x8e, 0x8b, 0x09, 0x22, 0x1e, 0xf0, - 0xdc, 0x9b, 0x83, 0x92, 0x43, 0x64, 0x74, 0x78, 0xc5, 0xf7, 0xb9, 0xd0, 0x54, 0x16, 0xb4, 0xc6, - 0x61, 0xb2, 0xa6, 0x6a, 0xdb, 0xc9, 0x66, 0x41, 0xc4, 0xa3, 0x9e, 0x01, 0x41, 0x95, 0x5f, 0x13, - 0xa7, 0x82, 0xfd, 0x89, 0x49, 0xa4, 0xdf, 0x9a, 0x7e, 0x82, 0xae, 0x01, 0xd7, 0xe7, 0x90, 0x4c, - 0x30, 0x39, 0xdc, 0x0e, 0x17, 0x26, 0x34, 0x4c, 0x0e, 0x03, 0x20, 0x8e, 0xc6, 0x3d, 0x99, 0x8b, - 0xef, 0x69, 0xdd, 0x47, 0x92, 0xc3, 0xc3, 0xc9, 0x9b, 0xc7, 0xa8, 0x28, 0x23, 0x41, 0xfb, 0xb0, - 0x8a, 0xb5, 0xff, 0x03, 0xed, 0x8d, 0x4b, 0x5a, 0xd7, 0x71, 0xed, 0x8d, 0x4b, 0xc9, 0x9b, 0xbd, - 0x5f, 0xb4, 0xee, 0x25, 0x38, 0x78, 0xa8, 0xf4, 0x81, 0xf1, 0x71, 0x33, 0x46, 0x44, 0x97, 0x0b, - 0xcd, 0x94, 0x83, 0x41, 0xe2, 0x00, 0xbb, 0x29, 0xc2, 0x90, 0x61, 0xf1, 0x71, 0x64, 0x20, 0x54, - 0x6b, 0x2c, 0x75, 0x3b, 0x03, 0x80, 0x32, 0xe2, 0xb9, 0x26, 0xa8, 0xf2, 0x6e, 0x51, 0x4c, 0x0e, - 0xbe, 0x91, 0x3a, 0x7d, 0x1d, 0x06, 0x0e, 0x56, 0xba, 0xd2, 0x20, 0x58, 0xf1, 0xea, 0xea, 0xf1, - 0xf1, 0x63, 0xf8, 0x24, 0x5d, 0xdf, 0x77, 0x4e, 0x6b, 0x6f, 0x9c, 0x05, 0x88, 0xb2, 0xe4, 0xd0, - 0x91, 0x9a, 0x2d, 0xeb, 0x68, 0x4e, 0x51, 0xb5, 0xab, 0xae, 0xb6, 0xc6, 0x78, 0x57, 0x4e, 0x0a, - 0x17, 0x93, 0xe4, 0xf1, 0x14, 0x37, 0xe9, 0xb7, 0x07, 0xb5, 0xf6, 0x6b, 0x3a, 0x32, 0x20, 0x48, - 0x33, 0xc1, 0xc4, 0x52, 0xcf, 0x43, 0xe3, 0x94, 0x6b, 0xe1, 0x48, 0x50, 0xc1, 0xe8, 0xf8, 0x3f, - 0x04, 0x34, 0xa7, 0x56, 0xb7, 0x5d, 0xc7, 0x57, 0xc7, 0x22, 0x4d, 0x0c, 0x27, 0x1e, 0x6b, 0xe4, - 0x5f, 0x1d, 0x8e, 0xa1, 0xe5, 0xbe, 0x9c, 0x30, 0x14, 0x33, 0xfb, 0x05, 0x55, 0x7e, 0x1e, 0x63, - 0xe6, 0x40, 0x36, 0x66, 0x9e, 0x60, 0x98, 0xc1, 0xe7, 0xa5, 0x53, 0xad, 0x60, 0xea, 0x05, 0x08, - 0x3c, 0x40, 0xe6, 0x3f, 0x96, 0x1c, 0x3a, 0x82, 0xb7, 0x2d, 0x33, 0x4a, 0xc8, 0x84, 0x2b, 0xbc, - 0x13, 0x99, 0xb0, 0x38, 0xe8, 0x42, 0x73, 0xc9, 0xfb, 0x4d, 0x87, 0x29, 0x2f, 0xc9, 0x9e, 0x0e, - 0x07, 0x4c, 0x61, 0x4c, 0xd3, 0xaf, 0x1c, 0x37, 0x3c, 0x45, 0xc5, 0xa7, 0x82, 0x2a, 0xbf, 0x22, - 0x96, 0xa4, 0x3a, 0x6f, 0x8c, 0xee, 0xef, 0xb6, 0x41, 0xc8, 0x8b, 0x4e, 0x35, 0x65, 0x5a, 0x57, - 0x7b, 0xea, 0xc0, 0x65, 0x1a, 0xb8, 0xa0, 0xf3, 0x00, 0xe6, 0x00, 0xc8, 0x44, 0x78, 0xfa, 0x3a, - 0x40, 0x7c, 0xd1, 0xba, 0xa7, 0x46, 0xd6, 0xff, 0xcc, 0x42, 0x56, 0xba, 0xaf, 0x13, 0xe4, 0xc5, - 0xa3, 0xde, 0x87, 0x9d, 0x11, 0x16, 0xb7, 0x60, 0x2c, 0x5e, 0x59, 0x51, 0xb9, 0x0d, 0xcf, 0x49, - 0xfc, 0x3f, 0x05, 0x74, 0xd7, 0x1a, 0x85, 0x49, 0xba, 0xf8, 0x3a, 0x25, 0xe1, 0x27, 0x3e, 0x4f, - 0x5e, 0x1b, 0x5f, 0xf5, 0x6c, 0x20, 0x86, 0xae, 0x87, 0xc6, 0x05, 0x4b, 0x51, 0xf5, 0x27, 0xaa, - 0xbc, 0x56, 0x5c, 0x44, 0x4d, 0x31, 0xe7, 0x7b, 0xb4, 0xe3, 0xa7, 0xa8, 0x34, 0xe8, 0x69, 0xd3, - 0xda, 0x5f, 0xe7, 0xe3, 0x9c, 0x94, 0x1a, 0x50, 0xc9, 0xc1, 0x0f, 0x9c, 0xa0, 0xc8, 0xf4, 0x1f, - 0xf4, 0x78, 0x72, 0x4d, 0xbf, 0xa2, 0xb2, 0x49, 0x49, 0xf8, 0x31, 0x5f, 0x1c, 0x73, 0x41, 0x76, - 0x35, 0xb2, 0x7c, 0x75, 0x61, 0x46, 0x20, 0x8b, 0xb3, 0x67, 0x60, 0x85, 0x61, 0x93, 0xf5, 0x8e, - 0x07, 0x94, 0xce, 0xf5, 0xa2, 0xa0, 0xca, 0xbf, 0x13, 0x3d, 0x30, 0x0d, 0x26, 0x37, 0x07, 0x0f, - 0xd0, 0xb7, 0xd4, 0x5c, 0xaa, 0xe1, 0xd2, 0xe7, 0xa8, 0x1d, 0x05, 0x34, 0x1a, 0x3b, 0x10, 0xdd, - 0xa8, 0x95, 0x3a, 0x73, 0x18, 0x0e, 0xa7, 0xba, 0xeb, 0x96, 0xd6, 0x71, 0x52, 0xbb, 0x75, 0x33, - 0x7d, 0xec, 0x42, 0x66, 0xe0, 0x82, 0xd6, 0x3a, 0x02, 0x1c, 0x24, 0x4e, 0x88, 0x83, 0xde, 0x77, - 0xa1, 0x59, 0x78, 0x22, 0xeb, 0xfc, 0x04, 0x63, 0x06, 0x66, 0x1e, 0xb2, 0x9b, 0x6e, 0x36, 0x14, - 0xc3, 0x4d, 0xf9, 0xf8, 0x80, 0x29, 0x76, 0x3e, 0x11, 0x54, 0xf9, 0xf7, 0x62, 0x99, 0x3d, 0x76, - 0x9a, 0x48, 0x2b, 0x13, 0x8e, 0x9e, 0xb7, 0xc5, 0x91, 0x15, 0x70, 0x82, 0x98, 0xaa, 0x14, 0x2b, - 0xc6, 0x89, 0x29, 0xf8, 0x94, 0xf8, 0xa1, 0x80, 0xa6, 0x9a, 0x64, 0x81, 0x75, 0xcf, 0x35, 0x55, - 0xdb, 0xee, 0xb9, 0x59, 0x10, 0xf1, 0xa8, 0x67, 0xb3, 0x2a, 0x2f, 0xc2, 0x87, 0x80, 0xb3, 0xa3, - 0x27, 0xcf, 0xb3, 0x2d, 0xf7, 0x2e, 0xf8, 0x99, 0xee, 0xbc, 0xa1, 0xf5, 0xf7, 0xd0, 0x42, 0xd0, - 0x09, 0xbd, 0xe3, 0xdc, 0x1b, 0xc5, 0x6b, 0x02, 0x42, 0x06, 0x3f, 0x5a, 0xd5, 0x5a, 0xa3, 0xce, - 0x56, 0xad, 0xe5, 0xab, 0xe3, 0x51, 0xcf, 0x76, 0x55, 0x7e, 0x58, 0x9c, 0x6a, 0x5a, 0x32, 0xc6, - 0xa6, 0x20, 0xf3, 0x6b, 0xd8, 0x97, 0xf5, 0x70, 0x2c, 0x1c, 0x9b, 0x96, 0x89, 0xe3, 0x1d, 0xf5, - 0x7e, 0xca, 0xa7, 0xf5, 0xf4, 0x98, 0x4d, 0x47, 0x7f, 0xbf, 0x1d, 0x81, 0x99, 0x61, 0x6c, 0x4f, - 0x25, 0x76, 0x60, 0xf1, 0xa8, 0xe7, 0x9c, 0xa0, 0xca, 0xdb, 0xc5, 0xfb, 0xe9, 0xf8, 0xcf, 0x1c, - 0xc6, 0x62, 0x86, 0x7a, 0x02, 0x1e, 0x48, 0xf7, 0xb4, 0x51, 0x50, 0x4a, 0x7e, 0x2b, 0x29, 0xf9, - 0x71, 0x00, 0x74, 0xcb, 0x27, 0xf5, 0x30, 0xcd, 0xec, 0xf8, 0x03, 0xcc, 0xd6, 0x0e, 0x52, 0x5a, - 0x12, 0x97, 0xda, 0xcc, 0x9f, 0xda, 0x09, 0xe2, 0x95, 0xaf, 0xe9, 0xa6, 0x24, 0x43, 0xc5, 0x15, - 0xdf, 0x75, 0xa1, 0x29, 0x10, 0xe2, 0x09, 0x50, 0xb0, 0xc0, 0x6e, 0x6e, 0xdc, 0xdc, 0x17, 0xe6, - 0xac, 0x8f, 0x47, 0x3d, 0x9f, 0x0b, 0xaa, 0x7c, 0x59, 0x10, 0xef, 0x32, 0x2d, 0x22, 0x9d, 0xe3, - 0x51, 0x01, 0x0c, 0x63, 0x14, 0x23, 0x84, 0x79, 0xc0, 0x63, 0xda, 0x04, 0xc7, 0x73, 0xd8, 0xe8, - 0xb9, 0x1b, 0x00, 0x07, 0x09, 0x95, 0xb2, 0xf8, 0x2c, 0xd5, 0x77, 0x1e, 0x6a, 0xbf, 0x68, 0xdd, - 0x4b, 0x9b, 0x40, 0x7c, 0x15, 0x52, 0x38, 0xfa, 0xfa, 0x4d, 0xbe, 0x09, 0x9f, 0x72, 0x11, 0xc0, - 0xb8, 0xc3, 0xec, 0x3c, 0x31, 0xc7, 0x61, 0x56, 0xfc, 0x57, 0x02, 0x9a, 0x49, 0x26, 0x4a, 0x52, - 0x58, 0x30, 0x5c, 0x2d, 0xb2, 0xc5, 0x05, 0x0f, 0x62, 0x7b, 0xde, 0xb1, 0x81, 0x82, 0x43, 0xfa, - 0xb3, 0xe2, 0x3d, 0xec, 0x0e, 0xe1, 0xb2, 0xd6, 0x7e, 0xd5, 0x8c, 0xbb, 0x0a, 0xbe, 0x8a, 0x9d, - 0xe6, 0xde, 0xe0, 0x7f, 0xc2, 0xed, 0x0e, 0xdc, 0xeb, 0x90, 0x39, 0xdd, 0x27, 0xda, 0x69, 0xf9, - 0xf1, 0x1d, 0xfe, 0x98, 0x12, 0xd4, 0x09, 0xe0, 0x7f, 0x09, 0x48, 0x94, 0x83, 0xc1, 0x8d, 0xcd, - 0xdb, 0xc2, 0x4a, 0xc2, 0x50, 0x6d, 0xef, 0xb7, 0xd1, 0x5c, 0xb3, 0x60, 0x6c, 0x59, 0xc1, 0x0e, - 0x2c, 0x1e, 0xf5, 0xbc, 0x25, 0xa8, 0xf2, 0x8b, 0x62, 0x09, 0x1d, 0xe8, 0xa7, 0xc3, 0xda, 0x1b, - 0x67, 0xb5, 0xbe, 0xc3, 0xf8, 0x2c, 0x47, 0xac, 0x70, 0xa5, 0x4f, 0x3b, 0xd5, 0x94, 0xbb, 0x33, - 0xed, 0x9f, 0x65, 0xfa, 0x07, 0x92, 0x43, 0x47, 0xb6, 0xd4, 0xd7, 0x54, 0xd4, 0xac, 0xaf, 0x4b, - 0x5d, 0x3a, 0xa7, 0x8d, 0x10, 0x5d, 0x87, 0x03, 0x26, 0xf3, 0x5d, 0xe1, 0xa9, 0x1c, 0xaf, 0x96, - 0x12, 0x27, 0x63, 0x8c, 0xe3, 0x3d, 0xfb, 0x2f, 0x5d, 0x68, 0xde, 0xc6, 0x57, 0x42, 0x89, 0xc0, - 0x0e, 0x3a, 0xe0, 0xcd, 0xe1, 0xa0, 0x12, 0x6b, 0xf4, 0xef, 0x5a, 0x0f, 0xa1, 0xa7, 0x45, 0x8b, - 0xba, 0x96, 0x0b, 0x1a, 0x23, 0x65, 0xe9, 0xc4, 0x1a, 0xc4, 0xa3, 0x9e, 0x3f, 0x27, 0xa7, 0x80, - 0xb9, 0x5a, 0xc7, 0xfe, 0xd4, 0xc1, 0x77, 0x74, 0x55, 0x04, 0x62, 0x9c, 0xc3, 0x7c, 0x4b, 0x5f, - 0x84, 0x4a, 0xb0, 0x29, 0xeb, 0xe7, 0xbd, 0x2c, 0x28, 0x7a, 0x41, 0xd1, 0x4c, 0x3f, 0xe1, 0xe6, - 0xeb, 0xca, 0x74, 0x44, 0x02, 0x54, 0x4b, 0x34, 0x50, 0x11, 0x08, 0x87, 0x74, 0x1d, 0xef, 0x29, - 0xcf, 0xe3, 0xe3, 0xd6, 0xf1, 0x60, 0xe8, 0xf1, 0x4a, 0xf6, 0x21, 0x8c, 0xc7, 0xbf, 0x15, 0xd0, - 0x2c, 0xb0, 0xcc, 0x6c, 0x09, 0xc5, 0x12, 0xcd, 0xfe, 0x46, 0x46, 0x4a, 0x0f, 0xda, 0x5b, 0xa8, - 0xcc, 0x50, 0x18, 0x6f, 0x65, 0xe3, 0x03, 0x8c, 0x47, 0x3d, 0x8a, 0x2a, 0x3f, 0x29, 0x52, 0x5f, - 0x83, 0xcc, 0xc9, 0x9e, 0xd4, 0x81, 0x33, 0x80, 0x8e, 0xd2, 0x07, 0xac, 0x65, 0xe5, 0xc9, 0xcf, - 0x4e, 0xa5, 0x3a, 0xdf, 0x4a, 0x0e, 0x1d, 0xda, 0x11, 0x89, 0x27, 0x38, 0x96, 0x77, 0x7b, 0xe6, - 0xda, 0x4c, 0xb8, 0x85, 0x33, 0x60, 0xfd, 0xa5, 0x80, 0x66, 0xc1, 0x4e, 0x3a, 0xd6, 0x94, 0xec, - 0xa0, 0x6c, 0xa7, 0x64, 0x0f, 0x18, 0x8f, 0x7a, 0x5e, 0x50, 0xe5, 0x32, 0x91, 0xde, 0x74, 0x9b, - 0xa6, 0x64, 0x53, 0x46, 0x86, 0xbf, 0xd8, 0xfb, 0x60, 0x8e, 0xe1, 0x9b, 0xb6, 0xbb, 0x7f, 0x2b, - 0xa0, 0x7b, 0xe0, 0x14, 0x6e, 0xfe, 0xf0, 0xf3, 0xcd, 0x91, 0x84, 0x5f, 0x2c, 0xb7, 0x3f, 0xb0, - 0xdb, 0x80, 0xe2, 0x19, 0x55, 0x4c, 0x00, 0x3a, 0x1e, 0xf5, 0x04, 0xf0, 0xb4, 0x68, 0xd2, 0x87, - 0xd1, 0xf6, 0x83, 0xa3, 0xef, 0x9c, 0x2a, 0x2d, 0xa1, 0x7e, 0x27, 0xdc, 0x84, 0xa0, 0x06, 0x36, - 0xb1, 0xd2, 0x8a, 0x71, 0x4e, 0xab, 0xf2, 0x77, 0xf8, 0x2b, 0x78, 0x9d, 0x2e, 0x09, 0x68, 0xf2, - 0x1a, 0x05, 0x1c, 0x8a, 0xec, 0x54, 0x0c, 0x5c, 0xc1, 0x94, 0xc8, 0x85, 0x8e, 0xf5, 0x54, 0x6f, - 0xfc, 0xb5, 0x2a, 0x2f, 0x15, 0x11, 0x48, 0x5b, 0x5c, 0x51, 0xea, 0xe1, 0x15, 0x10, 0x92, 0x18, - 0xab, 0xae, 0x3e, 0xdd, 0xd3, 0x06, 0x3a, 0x21, 0xa7, 0x7e, 0xd8, 0x8b, 0x5b, 0xac, 0xff, 0x56, - 0xbe, 0x16, 0x82, 0x66, 0xbf, 0x17, 0xff, 0x8b, 0x80, 0xa6, 0xd0, 0x2f, 0x42, 0xae, 0x4c, 0x87, - 0xe1, 0x70, 0x89, 0xfc, 0xac, 0xc7, 0x65, 0x13, 0x0c, 0x1d, 0x36, 0x96, 0xb0, 0x0d, 0xe2, 0x1c, - 0x63, 0xdc, 0xfc, 0xe3, 0xc7, 0xd2, 0x75, 0xb9, 0xe6, 0xc0, 0x43, 0x96, 0x67, 0xb9, 0xa6, 0xa6, - 0x0e, 0x5d, 0xd0, 0x3a, 0x0f, 0xa6, 0x3f, 0x1c, 0x00, 0x47, 0x27, 0xe8, 0x26, 0x87, 0xb6, 0x65, - 0x9e, 0x6e, 0x65, 0x08, 0xcf, 0xf1, 0x92, 0x80, 0xa6, 0xf9, 0x94, 0x40, 0x24, 0x16, 0xd4, 0xa7, - 0x6d, 0x63, 0xff, 0xe5, 0xeb, 0xd9, 0xcc, 0x4b, 0xad, 0xb9, 0xee, 0x58, 0xf2, 0x6f, 0xcf, 0x46, - 0x55, 0x5e, 0x22, 0x96, 0x68, 0x37, 0x8f, 0x69, 0xed, 0x17, 0xac, 0xf3, 0x28, 0x15, 0xf9, 0x1a, - 0x38, 0xd1, 0xc1, 0x46, 0xef, 0xb9, 0xdb, 0x61, 0xd8, 0x98, 0x92, 0xfe, 0x6f, 0x01, 0xa1, 0xcd, - 0xba, 0x87, 0x9c, 0xe8, 0x60, 0xcb, 0xe2, 0xe9, 0xc9, 0x93, 0x0b, 0x84, 0xae, 0xcd, 0x59, 0x62, - 0xef, 0x9a, 0x01, 0x74, 0x8f, 0x3f, 0x45, 0xc7, 0xd8, 0x90, 0x5d, 0xf2, 0x6d, 0xda, 0xbb, 0xe6, - 0x95, 0xe6, 0x9a, 0xf8, 0xbf, 0x76, 0xa1, 0xbb, 0x4c, 0x86, 0x3a, 0x08, 0xf7, 0x69, 0x3d, 0xa8, - 0xdb, 0x00, 0x39, 0x1e, 0xd4, 0x6d, 0x61, 0x29, 0x4e, 0x46, 0x41, 0x4f, 0x5c, 0x42, 0x45, 0x03, - 0x99, 0x02, 0x9c, 0x80, 0x34, 0xb5, 0x0b, 0x8f, 0x0a, 0xcf, 0xe4, 0xe6, 0xe5, 0xf4, 0xc5, 0x61, - 0x08, 0x96, 0x47, 0x51, 0xb6, 0x7b, 0x62, 0xf0, 0xe5, 0xee, 0xe4, 0xe0, 0x50, 0x72, 0x68, 0x1f, - 0xdc, 0x68, 0x68, 0x7d, 0x6f, 0x8d, 0xee, 0xef, 0x36, 0x9c, 0xf5, 0x46, 0x7a, 0xb4, 0xc3, 0x5d, - 0xa9, 0xbe, 0x0b, 0xd0, 0xa7, 0xbf, 0x39, 0x11, 0x89, 0x07, 0xfc, 0x8d, 0xa1, 0x70, 0xc3, 0x86, - 0x68, 0x22, 0x14, 0x09, 0xeb, 0xf1, 0xfc, 0x38, 0x26, 0x5f, 0x5e, 0xba, 0x64, 0xbc, 0xbb, 0x24, - 0x44, 0xed, 0xc3, 0xc8, 0xfd, 0x4f, 0x02, 0x12, 0x89, 0xe1, 0x1c, 0xe8, 0x9b, 0xed, 0x22, 0xd6, - 0xab, 0x1b, 0x06, 0x13, 0x77, 0xa4, 0x2e, 0x1e, 0x84, 0x62, 0xb2, 0x5b, 0x50, 0xe5, 0x97, 0xc5, - 0xfb, 0xe1, 0x82, 0xda, 0xa0, 0x25, 0xea, 0x20, 0xdc, 0xf7, 0x96, 0xd6, 0x7b, 0x69, 0x5b, 0x80, - 0x26, 0x5a, 0x2f, 0x7d, 0x34, 0xf5, 0x6e, 0x2b, 0x66, 0x62, 0x60, 0x0b, 0x3b, 0x90, 0xf2, 0xd1, - 0xb7, 0x3e, 0x4a, 0xf5, 0xbd, 0x93, 0x19, 0x18, 0xd0, 0xde, 0x3e, 0x9d, 0x3a, 0x7a, 0x9d, 0xb3, - 0x9b, 0xd9, 0x9b, 0x8d, 0x09, 0xcb, 0x1b, 0x97, 0xea, 0x82, 0x57, 0x1c, 0x14, 0x10, 0xaa, 0x89, - 0xc4, 0x82, 0x91, 0xb0, 0x3d, 0x17, 0x19, 0x75, 0xce, 0xf3, 0xe4, 0x40, 0xe8, 0x3c, 0x03, 0xaa, - 0xfc, 0xa8, 0x48, 0xdd, 0x5a, 0xb1, 0x1a, 0xd4, 0x3d, 0x90, 0xb9, 0xf2, 0xba, 0x36, 0xf4, 0x5e, - 0xaa, 0x75, 0x4f, 0xe9, 0x02, 0x2a, 0x01, 0xfa, 0x3f, 0xa3, 0xde, 0x95, 0xac, 0x92, 0xb3, 0xfe, - 0xdf, 0x57, 0xba, 0xc0, 0x69, 0xf4, 0x01, 0xf2, 0x35, 0x3c, 0xf4, 0x21, 0x01, 0x15, 0x6f, 0x0e, - 0x73, 0x83, 0xb7, 0x08, 0x5f, 0xbe, 0x96, 0x0d, 0x7f, 0x51, 0x6e, 0x20, 0x3a, 0x81, 0xad, 0xaa, - 0xbc, 0x4c, 0x14, 0xa9, 0x2d, 0x81, 0x1f, 0xfd, 0x5c, 0x7e, 0xf4, 0x76, 0x43, 0xbf, 0xbf, 0xd4, - 0xed, 0x34, 0xf4, 0xe6, 0xb0, 0x69, 0xf0, 0x45, 0xb5, 0x31, 0x7f, 0x08, 0x46, 0x6e, 0x35, 0x1b, - 0xb0, 0x2a, 0x36, 0xec, 0x7b, 0x73, 0x40, 0xd0, 0x31, 0xef, 0x50, 0xe5, 0x95, 0xa2, 0x17, 0xc6, - 0x17, 0x8d, 0x04, 0x33, 0xb7, 0xf6, 0xa4, 0x2f, 0x0e, 0x97, 0x6b, 0x57, 0xf6, 0xb1, 0x75, 0x78, - 0x23, 0xdd, 0xd3, 0xe6, 0xae, 0x8f, 0x04, 0xdd, 0xa3, 0xef, 0x5f, 0x1d, 0x6d, 0x3d, 0x5c, 0x3a, - 0x3d, 0x0b, 0x96, 0x8c, 0xdf, 0xe3, 0x99, 0xef, 0x34, 0xfe, 0x20, 0xfe, 0x24, 0x1e, 0xfc, 0xb0, - 0x80, 0x66, 0x18, 0xb2, 0x73, 0xad, 0x7f, 0x9b, 0xd2, 0x18, 0xb7, 0x2a, 0x5a, 0xd9, 0x10, 0x6c, - 0x2a, 0x65, 0x63, 0x03, 0xd2, 0x19, 0x6d, 0x22, 0x8a, 0x16, 0xd5, 0x41, 0x80, 0x0d, 0xce, 0xee, - 0x4f, 0xf7, 0x7d, 0x56, 0x6a, 0x53, 0x36, 0x16, 0xdd, 0x34, 0x92, 0xae, 0xf1, 0xe8, 0xff, 0xa9, - 0x80, 0x66, 0x1b, 0x9f, 0xe4, 0x3c, 0xea, 0x9c, 0xd4, 0xab, 0x2c, 0x30, 0x36, 0x8f, 0x8a, 0x71, - 0x42, 0xd3, 0xc9, 0xfc, 0xca, 0x3a, 0x99, 0x6b, 0x97, 0x32, 0x17, 0xdf, 0x2d, 0xb5, 0x29, 0xcb, - 0x71, 0xdb, 0x07, 0x2c, 0xcc, 0x45, 0xb3, 0xb5, 0xac, 0xc7, 0x26, 0x7f, 0x28, 0x9c, 0xc8, 0xb9, - 0x1e, 0x00, 0x31, 0x8e, 0xf5, 0x60, 0x80, 0xce, 0xeb, 0x71, 0xf5, 0x5c, 0x7a, 0xef, 0x8d, 0x52, - 0x9b, 0xb2, 0xb1, 0xd6, 0x23, 0x41, 0xba, 0xc6, 0xa3, 0xff, 0x9f, 0x10, 0x0f, 0x8b, 0x8a, 0xda, - 0x9a, 0x98, 0x12, 0x54, 0xc2, 0x89, 0x90, 0xbf, 0xd1, 0x3a, 0x03, 0x3b, 0x28, 0x5b, 0xd5, 0xdd, - 0x1e, 0x30, 0x1e, 0xf5, 0x1c, 0x11, 0x54, 0x79, 0x8b, 0x38, 0xdf, 0x64, 0xf1, 0x30, 0x40, 0x40, - 0x2b, 0x29, 0x7d, 0x98, 0x9a, 0x3e, 0xba, 0x0f, 0x27, 0x3f, 0x7b, 0x3b, 0xdd, 0xd3, 0x06, 0xd1, - 0xd7, 0x9f, 0x53, 0x76, 0xe5, 0x6c, 0x96, 0xc3, 0xae, 0x43, 0x4b, 0x02, 0x7a, 0x8b, 0xca, 0xd7, - 0xe2, 0xac, 0xcf, 0xdf, 0x8b, 0xff, 0x59, 0x40, 0x77, 0x9b, 0xb6, 0x5f, 0x0e, 0x05, 0xb9, 0xf7, - 0x74, 0x33, 0x16, 0x1e, 0x1a, 0x37, 0x6c, 0x3c, 0xea, 0xf9, 0x13, 0x55, 0x7e, 0x4a, 0x9c, 0x6f, - 0xba, 0xc7, 0xb3, 0xe0, 0x61, 0x3e, 0xe8, 0xa0, 0x0e, 0x40, 0x64, 0xbe, 0x0f, 0x97, 0x4e, 0x78, - 0xbe, 0x78, 0xc9, 0xff, 0x83, 0x80, 0xee, 0x36, 0xd9, 0x3d, 0x73, 0x4d, 0xd9, 0x01, 0xd0, 0x76, - 0xca, 0x8e, 0xb0, 0xf1, 0xa8, 0xa7, 0x49, 0x95, 0x25, 0xf1, 0x6e, 0x93, 0x59, 0xd5, 0x80, 0x28, - 0x75, 0xaa, 0x80, 0x65, 0xf5, 0x4e, 0x7c, 0x59, 0xff, 0x93, 0x80, 0x66, 0x73, 0x16, 0x37, 0x6e, - 0x86, 0x65, 0x39, 0x0c, 0x73, 0xe6, 0xf9, 0x2d, 0x1e, 0x27, 0x64, 0x3c, 0xea, 0xf9, 0xff, 0xa9, - 0x72, 0xbd, 0x23, 0x61, 0x53, 0xc3, 0x54, 0xa5, 0xd5, 0xa6, 0x97, 0xb3, 0x01, 0x68, 0x12, 0xe2, - 0xa2, 0xf1, 0xcc, 0x5d, 0xfc, 0x1b, 0x01, 0xcd, 0xae, 0x0b, 0x87, 0x12, 0xab, 0x95, 0xa0, 0x02, - 0x79, 0xfd, 0x98, 0xf2, 0x64, 0x99, 0xaf, 0x2d, 0x98, 0xed, 0x7c, 0x1d, 0x20, 0xe3, 0x51, 0xbc, - 0x43, 0x2f, 0x15, 0xe7, 0x68, 0x1d, 0xa7, 0xb4, 0x8b, 0x07, 0xb4, 0xae, 0xe3, 0xe0, 0x01, 0xc3, - 0x0c, 0xd1, 0x0e, 0xe5, 0x39, 0x34, 0xa3, 0x50, 0x38, 0x94, 0xd8, 0xae, 0xdb, 0xda, 0x88, 0x9a, - 0x2d, 0xa0, 0xbb, 0xe4, 0x60, 0x90, 0x7e, 0x5d, 0x09, 0xb2, 0xd9, 0xd8, 0xd9, 0xd1, 0xb2, 0x81, - 0xf0, 0x5c, 0x1e, 0x1c, 0x17, 0x5c, 0x3c, 0xea, 0x89, 0x11, 0x56, 0xd4, 0xae, 0xec, 0x63, 0x56, - 0xc4, 0x37, 0xce, 0xe2, 0xd3, 0x90, 0x69, 0x42, 0xb9, 0xab, 0xe1, 0x92, 0xdc, 0x63, 0x77, 0xc8, - 0xf3, 0x07, 0x83, 0xdb, 0xd9, 0x47, 0xb9, 0xc9, 0x5d, 0x16, 0xd0, 0x14, 0x2e, 0x57, 0x94, 0xf5, - 0x6c, 0xcb, 0x55, 0x3a, 0x9e, 0x6d, 0x4d, 0x30, 0xc6, 0x16, 0xb1, 0x44, 0x9c, 0xae, 0xe7, 0x99, - 0x02, 0x47, 0xe0, 0xd2, 0xb9, 0x59, 0x05, 0x34, 0x4b, 0x9f, 0xa1, 0xab, 0xcf, 0xf7, 0x94, 0x38, - 0xb9, 0x7b, 0xe0, 0xe1, 0x5e, 0x11, 0xd0, 0x14, 0x2e, 0x23, 0x8f, 0xe8, 0x71, 0x12, 0x75, 0xb9, - 0x86, 0x6b, 0x82, 0xa1, 0xc3, 0xfd, 0x25, 0xde, 0xd1, 0xa6, 0xeb, 0xd9, 0x7c, 0xe8, 0x70, 0x67, - 0x67, 0x15, 0xf0, 0xf7, 0x8b, 0xa5, 0x1e, 0x47, 0x17, 0x1c, 0xdd, 0x2d, 0x05, 0x0f, 0xf9, 0x53, - 0x01, 0x4d, 0xe1, 0x32, 0xa2, 0x38, 0x5d, 0xb6, 0xe7, 0x1e, 0xb2, 0x09, 0xc6, 0x50, 0x4d, 0x25, - 0x71, 0x26, 0x93, 0x56, 0x91, 0xe6, 0x20, 0x1d, 0xf4, 0x7c, 0xfe, 0x86, 0x28, 0x60, 0x54, 0x70, - 0x83, 0x5f, 0xe4, 0x1d, 0xc7, 0xe0, 0xc5, 0x0f, 0x04, 0x54, 0x48, 0x36, 0x50, 0x3c, 0xec, 0x85, - 0xb6, 0x5b, 0x2b, 0x37, 0x66, 0xb7, 0x33, 0x00, 0x1d, 0xf0, 0x8b, 0x98, 0x24, 0xa6, 0x30, 0x41, - 0x13, 0x69, 0x0e, 0x96, 0x2e, 0xe4, 0x4d, 0x1c, 0xf4, 0xbb, 0xd6, 0xc1, 0x8a, 0xe3, 0x19, 0xec, - 0x19, 0x17, 0x2a, 0xd2, 0xf3, 0x5e, 0x58, 0xf5, 0x68, 0xbd, 0xca, 0x51, 0x8f, 0xe6, 0x20, 0xe8, - 0x78, 0xff, 0x5a, 0x50, 0xe5, 0x4b, 0x82, 0x38, 0x93, 0x1b, 0x31, 0x95, 0x9f, 0x6a, 0x8e, 0x4b, - 0x11, 0x1d, 0xea, 0xfb, 0xb8, 0x12, 0x29, 0x15, 0x1d, 0xd9, 0x07, 0x9f, 0xf0, 0xa6, 0x71, 0x9c, - 0xba, 0xa5, 0xbe, 0xc6, 0x6a, 0xd2, 0x31, 0xd7, 0x33, 0x5c, 0x3d, 0x30, 0x16, 0x18, 0x45, 0xd8, - 0x2f, 0xf0, 0x02, 0x8b, 0x3a, 0x8b, 0x6f, 0xa9, 0xaf, 0xa1, 0x16, 0x80, 0x12, 0xbe, 0xcc, 0xc2, - 0xf3, 0xf6, 0x46, 0x5d, 0x32, 0xe8, 0x96, 0x68, 0x00, 0xf3, 0xd0, 0x67, 0x02, 0x9a, 0xc6, 0x71, - 0xad, 0xed, 0xd0, 0xcd, 0xf5, 0x8e, 0x43, 0xcf, 0x06, 0xa3, 0x43, 0x7f, 0x49, 0x95, 0x3d, 0xcc, - 0xe6, 0x99, 0x1c, 0x3a, 0xd2, 0x12, 0x0d, 0x30, 0x5d, 0x16, 0x7e, 0x71, 0xc3, 0xb5, 0xb7, 0x76, - 0xb2, 0xe1, 0x72, 0x3e, 0x69, 0xaf, 0xb5, 0x44, 0x03, 0x54, 0x08, 0xfc, 0x8d, 0x80, 0xa6, 0x71, - 0x3c, 0x6c, 0x3b, 0x01, 0x73, 0xbd, 0xe3, 0x04, 0xb2, 0xc1, 0xe8, 0x04, 0x1a, 0x55, 0x79, 0x85, - 0x38, 0x9b, 0x93, 0x06, 0x6e, 0x7d, 0xd4, 0xa5, 0x73, 0x2d, 0x12, 0xc1, 0x6d, 0x9e, 0x52, 0xa5, - 0x77, 0x62, 0x53, 0x12, 0xaf, 0xb9, 0x50, 0xb1, 0xce, 0x30, 0x78, 0x36, 0xf7, 0x39, 0xb2, 0x13, - 0x37, 0x97, 0x45, 0xb9, 0x81, 0xe8, 0x4c, 0xfe, 0x5e, 0x50, 0xe5, 0x2b, 0x82, 0x38, 0x9b, 0x63, - 0x3b, 0xf7, 0x96, 0xfa, 0x1a, 0xca, 0x7a, 0xc7, 0x73, 0xb3, 0x9e, 0x01, 0xf9, 0x7d, 0xb0, 0xdf, - 0x7c, 0x31, 0x17, 0x25, 0x8b, 0x5f, 0x08, 0x68, 0x06, 0x27, 0x66, 0x1a, 0xc8, 0x59, 0xf3, 0xc1, - 0x1c, 0x82, 0xa8, 0x81, 0x3f, 0x66, 0x96, 0x8d, 0x0d, 0x68, 0x38, 0xd4, 0xd4, 0x89, 0x25, 0x3c, - 0xfe, 0xe0, 0x75, 0x8a, 0x7e, 0x2d, 0x49, 0x30, 0x48, 0x17, 0x55, 0x0f, 0xe6, 0xaf, 0x5d, 0x3d, - 0xcd, 0x12, 0xe5, 0xc2, 0xa3, 0x16, 0x8e, 0x40, 0xbc, 0x62, 0x99, 0xd3, 0xc4, 0xa0, 0x6b, 0x4e, - 0x12, 0xff, 0x39, 0xb8, 0x17, 0x6c, 0xa9, 0xaf, 0xa9, 0x09, 0x05, 0x6d, 0x2c, 0x66, 0x46, 0x9d, - 0xa3, 0x25, 0x89, 0x07, 0x31, 0xe8, 0xfb, 0x69, 0x71, 0x16, 0xcc, 0xa9, 0x25, 0x1a, 0x70, 0x07, - 0x42, 0x41, 0x76, 0xcd, 0x4a, 0xc3, 0x09, 0x12, 0xd2, 0xe4, 0x67, 0xd3, 0x12, 0x0d, 0xa4, 0x7b, - 0xda, 0x30, 0xe0, 0x98, 0xbb, 0x49, 0x4b, 0x34, 0x80, 0xe1, 0x74, 0xfa, 0xfe, 0x27, 0x02, 0x9a, - 0x5e, 0x93, 0xf5, 0xb6, 0xdc, 0x41, 0x0a, 0xea, 0x00, 0x6c, 0x36, 0x0f, 0x8e, 0x09, 0x47, 0xa7, - 0xf4, 0x5b, 0x55, 0x7e, 0x86, 0xa9, 0x48, 0xd4, 0x79, 0x6b, 0xb8, 0xad, 0xb4, 0x22, 0xab, 0x00, - 0xee, 0x54, 0x6f, 0x8f, 0x74, 0x51, 0xfb, 0xfe, 0xc8, 0x8d, 0x54, 0xeb, 0xc5, 0xe4, 0xc8, 0x60, - 0x7a, 0xe4, 0x7d, 0x66, 0x26, 0xbe, 0xd7, 0x33, 0xcf, 0xe1, 0x74, 0x4d, 0xdc, 0xd9, 0xb1, 0x00, - 0xfa, 0x0b, 0x01, 0x4d, 0xdf, 0x9c, 0xf5, 0x8c, 0xfc, 0x01, 0xe7, 0xf3, 0x7e, 0xee, 0x09, 0x59, - 0xe0, 0xe8, 0x84, 0x5e, 0xe6, 0x94, 0x28, 0xbd, 0x96, 0x29, 0x51, 0x7a, 0x01, 0x2f, 0x77, 0x4a, - 0xbd, 0xb9, 0x06, 0x5e, 0xf9, 0x1a, 0x97, 0x29, 0x89, 0xc8, 0xd1, 0xbf, 0x70, 0xa1, 0xe9, 0xb5, - 0x59, 0x0f, 0xf0, 0x1f, 0x70, 0xf6, 0x4c, 0xcc, 0x3d, 0x0d, 0x0b, 0x1c, 0x9d, 0xc6, 0x1f, 0x04, - 0x55, 0x7e, 0x5f, 0xc0, 0x2b, 0x83, 0xa5, 0xa6, 0x31, 0x91, 0x63, 0x02, 0x2f, 0x47, 0xf5, 0x72, - 0x2c, 0x35, 0x6e, 0xbe, 0xa9, 0xff, 0x4c, 0xf5, 0x76, 0xa6, 0x8f, 0x9d, 0xd4, 0xfa, 0xde, 0x4a, - 0xf7, 0xb4, 0xe1, 0xc2, 0xd4, 0x89, 0xeb, 0x70, 0x03, 0xa0, 0xb5, 0xef, 0xc9, 0xf4, 0x0f, 0xa6, - 0xdf, 0xfe, 0x38, 0x75, 0xe8, 0x02, 0x74, 0xa4, 0xcb, 0x9b, 0xcc, 0x7b, 0x7b, 0xa0, 0x24, 0xd5, - 0xdb, 0xb9, 0x9e, 0xda, 0xc5, 0xd9, 0xfa, 0x93, 0xfb, 0x85, 0x4f, 0xa9, 0x9d, 0x71, 0x64, 0x48, - 0xeb, 0xb8, 0x4e, 0x41, 0x99, 0xc8, 0x22, 0x98, 0x2c, 0xf7, 0x4e, 0x00, 0x93, 0xe2, 0x9f, 0x09, - 0xa8, 0x98, 0x5e, 0x48, 0x01, 0x0e, 0x9d, 0xae, 0xab, 0x4c, 0x08, 0x5c, 0x94, 0x1b, 0x88, 0x62, - 0x4f, 0xc1, 0xe7, 0xb1, 0xe9, 0xc6, 0x9d, 0x16, 0xe0, 0x6e, 0x3e, 0xaf, 0xe9, 0xad, 0x37, 0xc6, - 0xc2, 0x11, 0x43, 0xb9, 0x38, 0x91, 0x29, 0xfc, 0x27, 0x01, 0xdc, 0xd3, 0x38, 0xe7, 0x4b, 0x98, - 0xca, 0x43, 0x39, 0x8e, 0xca, 0x96, 0x29, 0x95, 0x8f, 0x0f, 0x98, 0x4e, 0x6d, 0xb7, 0x2a, 0xaf, - 0x14, 0x17, 0xf0, 0x3e, 0x67, 0x74, 0x8d, 0x09, 0x18, 0x95, 0x46, 0x34, 0x5d, 0x14, 0xef, 0xd2, - 0x49, 0x5e, 0xef, 0xeb, 0xe7, 0xe8, 0x15, 0xa2, 0x34, 0x11, 0xc7, 0x4c, 0x32, 0xf9, 0xb8, 0xf8, - 0xa9, 0x0b, 0x4d, 0x65, 0x7e, 0x85, 0x30, 0xd1, 0x45, 0x4e, 0x6e, 0x87, 0xa6, 0x19, 0xde, 0x3f, - 0x06, 0x14, 0x9d, 0xda, 0xbf, 0x32, 0x6d, 0xba, 0xd9, 0x73, 0x72, 0xde, 0x74, 0xb3, 0x20, 0xbf, - 0x8f, 0x4d, 0x77, 0x81, 0x98, 0x53, 0xfa, 0x89, 0xff, 0x55, 0x40, 0x33, 0xd6, 0x45, 0x5a, 0x14, - 0xea, 0x08, 0x0e, 0xc8, 0xb3, 0x08, 0x83, 0x6c, 0x08, 0xc7, 0x5d, 0xd7, 0x0a, 0x48, 0x51, 0xd8, - 0x25, 0xa8, 0xf2, 0x06, 0x76, 0xd9, 0x91, 0xbe, 0x38, 0x6c, 0xdc, 0x64, 0x5e, 0x3d, 0x5b, 0xfa, - 0x88, 0x76, 0x65, 0x1f, 0xf5, 0x00, 0xfa, 0xf4, 0x23, 0x2c, 0x22, 0x74, 0x0e, 0xe7, 0x00, 0xb1, - 0xb4, 0x27, 0x01, 0x85, 0xd2, 0x43, 0xd7, 0xd2, 0xfd, 0xe7, 0x18, 0x6f, 0xdb, 0xfb, 0xc8, 0x38, - 0x30, 0x86, 0x7e, 0x3b, 0x78, 0xc4, 0x85, 0x66, 0xf9, 0x94, 0x26, 0x36, 0xda, 0xd5, 0xb1, 0x48, - 0x93, 0x03, 0x83, 0xd8, 0x41, 0x39, 0x32, 0x88, 0x3d, 0x30, 0x45, 0xc1, 0x29, 0x72, 0xad, 0x35, - 0x5b, 0x9f, 0x4d, 0xfa, 0xe2, 0xf0, 0xe8, 0x49, 0xe6, 0xf1, 0xbc, 0xc6, 0xec, 0x02, 0x9e, 0x1c, - 0x3e, 0xa4, 0xc3, 0x25, 0x07, 0xfb, 0x00, 0x94, 0x84, 0xe3, 0xd8, 0x97, 0x7a, 0x6b, 0x20, 0x33, - 0x40, 0x71, 0x92, 0x1c, 0x3e, 0x98, 0x6e, 0xbb, 0xae, 0xf5, 0x5e, 0x62, 0x4e, 0x9e, 0x7d, 0x80, - 0x13, 0xef, 0x57, 0xc1, 0xc9, 0x97, 0x79, 0x68, 0x66, 0x4d, 0xa3, 0xe2, 0x0f, 0x53, 0xef, 0x5c, - 0x40, 0x88, 0xd5, 0x87, 0x25, 0x1b, 0x84, 0x61, 0x63, 0xf1, 0x38, 0x20, 0xd9, 0x0d, 0x5f, 0x9e, - 0x2a, 0xff, 0xb5, 0x4b, 0x9c, 0xcb, 0x5f, 0xc8, 0xd1, 0x99, 0xb2, 0xa5, 0x2f, 0xbd, 0xec, 0x1a, - 0x27, 0x4a, 0x6e, 0x9c, 0x49, 0x0e, 0x1f, 0xd2, 0x11, 0xa0, 0x97, 0x6b, 0x37, 0xae, 0xa7, 0x06, - 0xdb, 0xd3, 0x87, 0xf7, 0x81, 0x8e, 0xc0, 0x7f, 0xea, 0x8b, 0xd6, 0xbd, 0xc6, 0xad, 0xf4, 0xe0, - 0x90, 0x36, 0xb2, 0x37, 0xd5, 0x47, 0x7f, 0xe2, 0x86, 0x37, 0xdf, 0xd4, 0x6b, 0x21, 0x2e, 0x3d, - 0xcd, 0x29, 0x09, 0x7b, 0xd5, 0x70, 0x7b, 0xe6, 0xf5, 0x9b, 0xe9, 0x73, 0xfd, 0x98, 0xe7, 0x48, - 0xff, 0xf0, 0x9e, 0x05, 0x20, 0x41, 0x3d, 0x81, 0x2d, 0x2d, 0xf3, 0xfa, 0xcd, 0xe4, 0xad, 0x53, - 0x99, 0x01, 0x16, 0xf1, 0x8a, 0x00, 0x6b, 0x9f, 0x7e, 0x94, 0x1e, 0xee, 0xd6, 0xfa, 0xbb, 0x52, - 0x1d, 0x87, 0x75, 0x79, 0x00, 0x91, 0x54, 0xa0, 0xcf, 0xcc, 0xad, 0xb7, 0xb5, 0xa1, 0xf7, 0x6e, - 0x8f, 0x74, 0xd1, 0xf0, 0x2a, 0xad, 0x3d, 0x99, 0x5b, 0xfb, 0xe9, 0xd3, 0xd3, 0x9e, 0xb6, 0x4d, - 0xfe, 0xf8, 0x4e, 0xe0, 0x82, 0xcc, 0xc0, 0x7b, 0xe9, 0xe1, 0x7d, 0xc0, 0xf5, 0x8c, 0x17, 0x1e, - 0xf7, 0xae, 0x98, 0xc0, 0xba, 0x93, 0x32, 0xb6, 0xf8, 0x97, 0xf3, 0xd1, 0x5d, 0x96, 0xf5, 0xda, - 0x22, 0x59, 0xed, 0xcc, 0x36, 0x40, 0x8e, 0xd7, 0xe5, 0xb6, 0xb0, 0x94, 0x04, 0x86, 0xf3, 0x54, - 0xf9, 0xbf, 0xbb, 0xc4, 0x67, 0x73, 0x90, 0x80, 0x1e, 0x7e, 0xe6, 0x77, 0xcd, 0x4a, 0x6c, 0x17, - 0xcd, 0xc0, 0x4d, 0x68, 0x02, 0x70, 0x03, 0x18, 0xfd, 0x89, 0x62, 0xbe, 0x06, 0xc5, 0x3c, 0x62, - 0x43, 0x31, 0xd2, 0xd8, 0x14, 0x23, 0xfe, 0x4b, 0x7a, 0x58, 0x33, 0x89, 0x8a, 0x71, 0xe9, 0x49, - 0x65, 0x39, 0xde, 0x03, 0x98, 0x85, 0x44, 0x5c, 0x95, 0x1f, 0x17, 0x67, 0xc0, 0x78, 0xf1, 0x47, - 0xe9, 0x76, 0x4b, 0xdd, 0x8f, 0xb5, 0xab, 0xa7, 0x93, 0x43, 0x87, 0x74, 0x49, 0x88, 0xe5, 0x29, - 0xa8, 0x1b, 0x9c, 0x32, 0xb1, 0x4c, 0x9c, 0xa8, 0x1c, 0x14, 0xff, 0xbd, 0x60, 0x7a, 0xf0, 0xc0, - 0xd8, 0x60, 0xf1, 0x58, 0xa3, 0x36, 0xb8, 0xc0, 0x3b, 0x1e, 0xd0, 0x6f, 0x75, 0x8a, 0xd2, 0x18, - 0x53, 0xcc, 0x43, 0x73, 0xe0, 0x90, 0x42, 0xca, 0x6b, 0x95, 0x78, 0x28, 0xa6, 0x10, 0x4f, 0x25, - 0xd1, 0xe1, 0xb2, 0x36, 0x1b, 0x8e, 0x4d, 0x75, 0xc9, 0x78, 0xc1, 0xe9, 0x74, 0x53, 0x2e, 0x55, - 0x3e, 0xe7, 0x12, 0xef, 0x86, 0x33, 0x0f, 0x07, 0x41, 0x4d, 0x31, 0xed, 0xae, 0xec, 0xd3, 0xd0, - 0x60, 0x9f, 0x05, 0x8a, 0xba, 0x14, 0x81, 0xf9, 0x69, 0xa4, 0x47, 0x1b, 0x18, 0xc9, 0xec, 0xff, - 0x58, 0x6f, 0x41, 0xa9, 0x5f, 0x0f, 0x42, 0x30, 0x72, 0x4c, 0x6b, 0xbf, 0x40, 0x83, 0xe7, 0x13, - 0x2e, 0xd0, 0xef, 0x3c, 0xb4, 0x1b, 0xd7, 0xe1, 0x92, 0x80, 0x45, 0x26, 0x34, 0x38, 0x1c, 0xce, - 0x13, 0xe9, 0x9e, 0xb6, 0xa0, 0xf1, 0x71, 0xad, 0xfb, 0x83, 0xcc, 0xeb, 0x37, 0x53, 0x03, 0x47, - 0xb5, 0x9b, 0x6f, 0x6a, 0x9d, 0x07, 0x33, 0x17, 0x89, 0x2b, 0xcd, 0xf9, 0x8b, 0x3a, 0xe7, 0xa6, - 0x06, 0x8e, 0x26, 0x6f, 0x1c, 0xd0, 0x3a, 0x0f, 0x6a, 0x57, 0xba, 0x6f, 0x8f, 0xbc, 0x6d, 0x9c, - 0x5d, 0xf6, 0x77, 0x6b, 0x57, 0xba, 0xf9, 0x25, 0x84, 0xb6, 0x99, 0x81, 0x4f, 0x41, 0xba, 0x59, - 0xa4, 0x24, 0x59, 0xd8, 0x27, 0x3c, 0x8f, 0x4c, 0x80, 0x76, 0xe9, 0x40, 0x99, 0x34, 0x1f, 0x72, - 0xd9, 0x2d, 0x31, 0x49, 0x5b, 0x31, 0x8e, 0x25, 0xc6, 0x70, 0x13, 0x58, 0x62, 0x00, 0xa7, 0x4b, - 0xfc, 0x67, 0x82, 0x2a, 0xff, 0x49, 0xd6, 0x0a, 0x63, 0x00, 0xba, 0xc2, 0x7e, 0xeb, 0x02, 0x73, - 0x5e, 0x4a, 0x00, 0x94, 0xee, 0x69, 0xe3, 0x1a, 0xea, 0xfe, 0x6e, 0x04, 0xd1, 0xc3, 0x58, 0xec, - 0xbf, 0x35, 0x90, 0xbc, 0xd5, 0x9f, 0xea, 0x7b, 0x97, 0x3e, 0x6b, 0x1a, 0x3c, 0x98, 0x1c, 0x6c, - 0xcd, 0xec, 0xff, 0x18, 0xe2, 0x1c, 0x7c, 0x75, 0xe4, 0xc5, 0x43, 0xbb, 0x09, 0xf2, 0x3e, 0x76, - 0x31, 0xcf, 0x07, 0x02, 0xb1, 0x2e, 0x14, 0x5e, 0xe7, 0x7f, 0x95, 0xe0, 0xae, 0x3c, 0x07, 0x32, - 0x0c, 0xb0, 0x31, 0x3c, 0x1f, 0x2c, 0xd0, 0x14, 0x73, 0x37, 0x89, 0x4f, 0xdd, 0x5c, 0x40, 0x50, - 0x53, 0x28, 0x8c, 0x2b, 0x2b, 0x9b, 0x00, 0x88, 0x62, 0xef, 0xd7, 0xe3, 0xc3, 0x1e, 0xa4, 0x39, - 0xc3, 0xff, 0xbf, 0xd2, 0x3d, 0x7a, 0xf2, 0xf0, 0xe8, 0x3b, 0xa7, 0x78, 0xdc, 0x69, 0x07, 0xbb, - 0x33, 0x57, 0x5e, 0xd7, 0xce, 0xf7, 0xe8, 0x38, 0x00, 0x6e, 0x01, 0x0d, 0xc2, 0x33, 0x11, 0x0d, - 0x62, 0x5b, 0xa4, 0x39, 0xac, 0xa3, 0xad, 0xc3, 0x4c, 0x73, 0x72, 0x7c, 0x53, 0xa8, 0x49, 0xf1, - 0xf9, 0xc3, 0x0d, 0xb9, 0x69, 0x8e, 0x83, 0x1b, 0x0f, 0xcd, 0x99, 0xc0, 0x29, 0xe6, 0x0e, 0x09, - 0xf0, 0x46, 0xce, 0xe4, 0x5d, 0x71, 0x56, 0xeb, 0xef, 0x49, 0x9d, 0xb8, 0x9e, 0xea, 0x7c, 0x1f, - 0x9e, 0x53, 0xa6, 0xfb, 0x8e, 0xa7, 0x8f, 0x5d, 0x28, 0x1d, 0x17, 0xd4, 0x57, 0x40, 0x45, 0x22, - 0xd4, 0xa4, 0xc4, 0xf0, 0xa8, 0x88, 0xa7, 0x89, 0x8b, 0xe4, 0xc9, 0xb2, 0xa6, 0x4d, 0xae, 0xde, - 0xc5, 0x72, 0x77, 0x97, 0xdb, 0xec, 0x95, 0x8e, 0x29, 0xb3, 0xad, 0xa4, 0x94, 0x33, 0x29, 0xb3, - 0x67, 0x58, 0x50, 0xe5, 0x3f, 0x15, 0x2b, 0x68, 0x84, 0x17, 0x4e, 0xf2, 0x64, 0x3d, 0x87, 0x84, - 0x47, 0xba, 0x90, 0xb2, 0xb9, 0x74, 0x9d, 0xe1, 0x6f, 0x07, 0xa6, 0x1a, 0x62, 0x26, 0x4c, 0x0e, - 0x1d, 0xb1, 0xb6, 0x63, 0xb9, 0xc0, 0xb3, 0x1e, 0xef, 0x24, 0x94, 0x70, 0x40, 0x09, 0x83, 0xd5, - 0x35, 0xc7, 0x61, 0xde, 0x38, 0xb7, 0x67, 0xe1, 0x30, 0x4e, 0x66, 0x21, 0x1e, 0x76, 0xa1, 0x79, - 0x9b, 0x62, 0xfe, 0x70, 0x5c, 0xa7, 0xf3, 0x4d, 0x91, 0xf5, 0x5c, 0x3c, 0x34, 0x71, 0x79, 0x36, - 0x36, 0x72, 0x41, 0x33, 0x14, 0xae, 0x98, 0x58, 0x23, 0x8a, 0xc9, 0x36, 0x41, 0x95, 0x57, 0x8b, - 0x0b, 0x74, 0x72, 0xc9, 0xdc, 0xbc, 0x4c, 0xde, 0x2c, 0x50, 0x0b, 0x24, 0xbd, 0x54, 0x5c, 0x94, - 0xa3, 0x3e, 0xdd, 0xd9, 0xc1, 0x79, 0xbe, 0x3c, 0xec, 0x59, 0x3e, 0x11, 0xa2, 0x62, 0x33, 0x3e, - 0xe6, 0x42, 0x25, 0xab, 0x48, 0x2c, 0x54, 0x7d, 0xc0, 0x72, 0x73, 0x22, 0x42, 0x42, 0x3f, 0x5a, - 0x9f, 0x73, 0x38, 0x41, 0x32, 0x54, 0x2c, 0x1d, 0x7f, 0x03, 0x8a, 0x86, 0x63, 0xc0, 0x61, 0x10, - 0x9c, 0xd5, 0x98, 0x2c, 0x10, 0x03, 0xf1, 0xce, 0xd5, 0x39, 0xa8, 0xd4, 0x04, 0x45, 0x37, 0x3c, - 0x02, 0x02, 0x66, 0x59, 0x78, 0xca, 0x4f, 0x90, 0xf1, 0x8c, 0xe7, 0x89, 0x09, 0x20, 0x83, 0x49, - 0x3a, 0xa5, 0x12, 0xa2, 0xc2, 0x62, 0x46, 0x3b, 0xe9, 0x42, 0xf7, 0xd4, 0x86, 0xe2, 0x0e, 0x88, - 0xb1, 0xcc, 0xd3, 0x11, 0x94, 0x61, 0x66, 0xd9, 0x04, 0x5a, 0x50, 0xd4, 0x1c, 0xa7, 0xa8, 0x69, - 0xbf, 0x36, 0x7a, 0xa2, 0x6f, 0x4c, 0xd4, 0x70, 0x50, 0x39, 0x51, 0x23, 0x7b, 0x9e, 0xfc, 0x4a, - 0xa8, 0x09, 0xc2, 0x78, 0x31, 0x6e, 0xde, 0x85, 0x3c, 0x94, 0xb6, 0xa1, 0x83, 0xac, 0x34, 0x33, - 0x46, 0xb8, 0x28, 0x2b, 0xcd, 0x8c, 0x15, 0x95, 0xc8, 0xf3, 0x2e, 0x31, 0x77, 0x94, 0xf0, 0x61, - 0xa6, 0xf8, 0x78, 0x44, 0xa5, 0xf4, 0x36, 0x82, 0x85, 0x16, 0x03, 0x71, 0x03, 0x77, 0x2b, 0x34, - 0xfe, 0x55, 0xc7, 0xf1, 0x4c, 0x6b, 0xbb, 0xae, 0xca, 0x41, 0x63, 0x3d, 0xb6, 0x11, 0xb7, 0xdb, - 0x57, 0x89, 0x8f, 0xd9, 0x3f, 0x13, 0x24, 0x1d, 0xc3, 0x3b, 0x41, 0x1a, 0xbe, 0xec, 0xf7, 0x95, - 0x7a, 0x64, 0xb3, 0x66, 0x82, 0x88, 0x7e, 0x01, 0x21, 0xb8, 0x82, 0x20, 0x61, 0x5c, 0x1c, 0x82, - 0xcf, 0xe0, 0x3a, 0x67, 0xcf, 0x5e, 0x0e, 0xc4, 0xf0, 0x62, 0x5c, 0x21, 0x16, 0xd3, 0x7b, 0x5d, - 0x08, 0x77, 0xb1, 0x88, 0xc6, 0x60, 0x39, 0x76, 0x2b, 0x75, 0xe2, 0xfa, 0xe8, 0x89, 0x8f, 0x33, - 0xb7, 0x0e, 0x67, 0xce, 0x75, 0xa5, 0x7b, 0xda, 0xb4, 0xc3, 0x87, 0xb4, 0xee, 0x2b, 0x5c, 0x54, - 0x16, 0x7b, 0x87, 0xfe, 0x84, 0x3f, 0xbe, 0x13, 0x2f, 0xeb, 0xeb, 0x2e, 0x54, 0x44, 0x82, 0xc6, - 0x90, 0xf1, 0xba, 0x6d, 0xe3, 0xc9, 0xf0, 0xc3, 0xbd, 0x37, 0x07, 0x04, 0x1d, 0xed, 0x15, 0xa2, - 0xb3, 0xcd, 0xa0, 0xc1, 0x66, 0x48, 0x14, 0x19, 0x5c, 0x5f, 0xba, 0x83, 0xc6, 0x98, 0x21, 0x25, - 0x18, 0xf1, 0x64, 0x8c, 0xe5, 0x6e, 0x1a, 0xd7, 0x9b, 0x80, 0x43, 0x04, 0xef, 0x25, 0x6e, 0xf8, - 0x95, 0x1c, 0x6e, 0x1f, 0x3d, 0x79, 0x38, 0x39, 0x74, 0x08, 0xda, 0x40, 0x83, 0xe4, 0xe0, 0xd1, - 0xe4, 0xf0, 0x21, 0x50, 0x9b, 0xa1, 0x3c, 0x9e, 0x50, 0xa2, 0x58, 0x4a, 0x5c, 0x3c, 0x90, 0xfa, - 0xff, 0xb8, 0xbb, 0xba, 0xd8, 0x28, 0xae, 0x7b, 0x7f, 0x67, 0xa3, 0x1b, 0x45, 0x23, 0xdd, 0xc0, - 0x3d, 0x84, 0x00, 0x93, 0x5c, 0xe3, 0xec, 0xbd, 0x97, 0x0f, 0x07, 0x58, 0x20, 0x84, 0x70, 0x51, - 0xb8, 0xc9, 0x18, 0x27, 0xc6, 0x31, 0x49, 0x1c, 0xcc, 0xe5, 0xa6, 0xbc, 0xad, 0x77, 0x27, 0xf6, - 0xc6, 0xf6, 0xce, 0x76, 0x67, 0x6c, 0xea, 0x58, 0xae, 0x42, 0xc1, 0x10, 0x63, 0x3e, 0xd7, 0x10, - 0x4a, 0x4a, 0x12, 0x5c, 0xc5, 0xc1, 0x25, 0x89, 0x21, 0x09, 0x81, 0xcd, 0x52, 0xa0, 0x79, 0xe8, - 0x43, 0xd4, 0x28, 0x55, 0x2a, 0x35, 0x52, 0xdb, 0x87, 0xaa, 0xed, 0xce, 0x7a, 0xdd, 0x87, 0xf4, - 0x21, 0xaa, 0x54, 0x45, 0x4d, 0x55, 0xcd, 0xf9, 0x9f, 0x33, 0x73, 0x66, 0xe7, 0x9c, 0x99, 0x5d, - 0x83, 0x42, 0xd5, 0x17, 0xbc, 0xcc, 0xf9, 0xcd, 0xee, 0xf9, 0xfd, 0xe6, 0x7c, 0xcd, 0x39, 0xff, - 0x8f, 0x91, 0xb3, 0xe5, 0xf1, 0x83, 0x01, 0xe1, 0x2b, 0x6c, 0xda, 0xb1, 0x41, 0xfb, 0x5f, 0x4f, - 0x18, 0x9a, 0x7c, 0x44, 0xbe, 0xa3, 0xbd, 0x3b, 0x95, 0xc1, 0x22, 0xf8, 0xac, 0x2f, 0x68, 0x89, - 0xd0, 0xfa, 0xc2, 0x05, 0x10, 0x09, 0xca, 0x52, 0x4e, 0xbd, 0x28, 0xa1, 0xbb, 0xcb, 0x97, 0xdf, - 0x2f, 0x5f, 0xdf, 0xcf, 0xd6, 0x15, 0x2b, 0x71, 0x4a, 0x0a, 0x94, 0x02, 0xee, 0xa2, 0x52, 0xb0, - 0xff, 0xb3, 0xe7, 0x46, 0xfc, 0x81, 0xfd, 0x4a, 0x56, 0x96, 0x62, 0x7e, 0xb4, 0x98, 0x7f, 0xb1, - 0xf4, 0xce, 0x04, 0xab, 0xc7, 0x8a, 0x7a, 0x02, 0xf9, 0x70, 0x74, 0xe6, 0xe4, 0xc5, 0xd2, 0xe9, - 0x91, 0xe9, 0x1f, 0xe4, 0x8b, 0x85, 0x5c, 0xf1, 0xda, 0xab, 0xe5, 0x0f, 0x5e, 0x2e, 0xe6, 0x0f, - 0x59, 0x57, 0x0a, 0xe5, 0xa9, 0x29, 0xf8, 0x1d, 0x38, 0x81, 0x54, 0xfe, 0x3b, 0x54, 0x3b, 0xa3, - 0x3b, 0x85, 0x0f, 0xbb, 0xc6, 0x1d, 0x8f, 0x10, 0x7e, 0x8b, 0x77, 0xcb, 0x42, 0x3c, 0x42, 0x3c, - 0x02, 0x6e, 0xcd, 0xa9, 0x75, 0x48, 0x86, 0xc5, 0x15, 0x96, 0x6c, 0xae, 0xfb, 0x99, 0x39, 0xc6, - 0xe0, 0xdb, 0x7d, 0x7b, 0x2a, 0x6a, 0xd7, 0xf1, 0x35, 0x49, 0x96, 0xe1, 0x00, 0x8a, 0x5f, 0x47, - 0xb7, 0x4c, 0x58, 0x47, 0x16, 0x42, 0xea, 0xd8, 0x82, 0xeb, 0x08, 0x07, 0x44, 0x50, 0x47, 0xf6, - 0xc8, 0xca, 0xbe, 0x02, 0xb6, 0xdd, 0x0d, 0xa1, 0x75, 0x44, 0xaf, 0x82, 0x83, 0x16, 0xae, 0x1d, - 0xcf, 0x41, 0x8b, 0xad, 0xda, 0x62, 0x61, 0x39, 0xa9, 0xd7, 0x33, 0x39, 0x75, 0x09, 0x75, 0xd0, - 0xc2, 0xf5, 0x5a, 0xc8, 0x9e, 0x07, 0x6d, 0xc7, 0x3f, 0xc9, 0x68, 0x18, 0x45, 0xe1, 0xf5, 0x3b, - 0x15, 0x91, 0xef, 0xd8, 0x9a, 0x32, 0x4c, 0x7e, 0xff, 0xa0, 0x25, 0xc2, 0xfe, 0xe1, 0x02, 0x48, - 0x15, 0x3f, 0x96, 0x72, 0xea, 0x9b, 0x12, 0xdd, 0xaa, 0xb0, 0x8b, 0xc8, 0x56, 0xc5, 0x31, 0xe1, - 0xe1, 0x87, 0x0b, 0xba, 0x15, 0xe7, 0x1e, 0x8b, 0x90, 0x68, 0x10, 0xb5, 0xd7, 0x97, 0x0b, 0x60, - 0xcc, 0xa6, 0xb3, 0xb9, 0xe3, 0x20, 0xe3, 0x8f, 0x7c, 0x22, 0x00, 0x0a, 0x23, 0x9f, 0x08, 0xf1, - 0x44, 0xc8, 0x31, 0x29, 0xa7, 0xc6, 0x51, 0x9d, 0x27, 0xa4, 0x97, 0x0f, 0xad, 0x3c, 0x12, 0x5c, - 0xee, 0x9c, 0x77, 0x93, 0x1f, 0x5f, 0xe9, 0x2c, 0x00, 0xb2, 0xe0, 0x0b, 0x04, 0xfe, 0x94, 0x51, - 0x9e, 0x49, 0x2a, 0xf3, 0xc2, 0xa8, 0xe3, 0x2f, 0xb3, 0xfb, 0x5b, 0x31, 0x42, 0x8d, 0xab, 0xab, - 0x90, 0x44, 0x00, 0x14, 0x4a, 0x22, 0xc4, 0x13, 0x49, 0xa6, 0xc1, 0x92, 0x6c, 0x83, 0xc7, 0x82, - 0xda, 0x07, 0x5f, 0x51, 0xef, 0xd9, 0x80, 0xc5, 0x41, 0x69, 0xe1, 0x0e, 0xa5, 0xc7, 0x77, 0xa7, - 0x51, 0xa1, 0x56, 0x31, 0xff, 0x62, 0x31, 0x7f, 0x4e, 0xf4, 0xd5, 0x10, 0xa9, 0x12, 0x30, 0xd0, - 0x84, 0x6c, 0x81, 0x2f, 0xfe, 0xd0, 0xfa, 0xf1, 0x09, 0xe8, 0x76, 0xc5, 0x7c, 0xc1, 0x39, 0x77, - 0x0c, 0x30, 0xe8, 0xf6, 0x49, 0x5b, 0x19, 0x74, 0xe9, 0xd7, 0xb7, 0xc9, 0xf7, 0x12, 0x35, 0x0c, - 0xf8, 0xe9, 0x26, 0xad, 0x3f, 0x95, 0xd0, 0xe8, 0x42, 0xca, 0xff, 0x66, 0x13, 0x84, 0x16, 0xbe, - 0xd9, 0x04, 0xdf, 0x44, 0x54, 0xff, 0x34, 0x92, 0x53, 0xbf, 0x92, 0xd0, 0x60, 0xb0, 0x76, 0xce, - 0xa2, 0xcb, 0x59, 0x86, 0x39, 0x5b, 0x09, 0x56, 0xe1, 0x38, 0x34, 0xc2, 0xf2, 0xfe, 0x73, 0xd3, - 0x67, 0x8e, 0x17, 0x0b, 0xc7, 0x8a, 0xd7, 0xae, 0x17, 0x0b, 0x87, 0x8b, 0x85, 0xb3, 0xd6, 0xd8, - 0xee, 0xf2, 0xd4, 0x05, 0xeb, 0xfa, 0x3e, 0xfb, 0x05, 0xf3, 0xed, 0x71, 0x08, 0xf1, 0xe5, 0xff, - 0x2a, 0xe5, 0x56, 0xfe, 0x38, 0x7e, 0x8e, 0x4f, 0x28, 0x8f, 0xd5, 0xfa, 0x1c, 0x79, 0xeb, 0x4a, - 0xfc, 0x70, 0xf7, 0x47, 0xa8, 0xb5, 0x7e, 0x15, 0x7d, 0x48, 0x00, 0x14, 0xf6, 0x21, 0x21, 0x9e, - 0x3c, 0xcd, 0x03, 0xf8, 0x78, 0xb5, 0xce, 0x63, 0x9d, 0xef, 0x1f, 0x56, 0x56, 0x12, 0xe3, 0x08, - 0x38, 0x43, 0xa1, 0x67, 0xf4, 0x22, 0x78, 0x80, 0x4d, 0x7f, 0xa0, 0x42, 0xb6, 0x12, 0x77, 0x35, - 0x6b, 0xa6, 0x5f, 0x06, 0x5e, 0xe0, 0x23, 0xa1, 0x06, 0x2b, 0xaa, 0x03, 0x33, 0xe3, 0xea, 0xb3, - 0xd4, 0xfc, 0x40, 0x28, 0xc0, 0x7a, 0x76, 0x62, 0x75, 0x03, 0x0e, 0x88, 0x35, 0x60, 0x2d, 0x1b, - 0x51, 0xed, 0x4a, 0xfc, 0x39, 0x02, 0xde, 0x0d, 0x7e, 0x29, 0xb8, 0xb6, 0x15, 0x42, 0x2d, 0x56, - 0x56, 0x89, 0x26, 0x62, 0xfc, 0x4d, 0xca, 0xa9, 0x9f, 0x4a, 0x34, 0x6a, 0x94, 0x70, 0xd8, 0x83, - 0x19, 0x7c, 0x22, 0x2c, 0x86, 0x89, 0xe0, 0xc6, 0x5b, 0x31, 0xab, 0xf3, 0xbd, 0x2c, 0x7c, 0xcf, - 0x00, 0x1d, 0xe0, 0xcd, 0x67, 0xed, 0x66, 0xdc, 0xec, 0x33, 0xaa, 0x98, 0xcf, 0x00, 0x58, 0xfd, - 0x7c, 0x46, 0xf1, 0x44, 0xfd, 0x43, 0x52, 0x4e, 0xdd, 0x82, 0xa2, 0xb0, 0x0d, 0x12, 0x83, 0x57, - 0x7e, 0x62, 0xdd, 0x80, 0xcd, 0xd3, 0xdc, 0xfd, 0x80, 0x2a, 0x30, 0x98, 0xf6, 0xc3, 0xca, 0x43, - 0x35, 0x0f, 0x53, 0x06, 0xae, 0x94, 0x3d, 0x30, 0x1d, 0x88, 0xc8, 0xf3, 0xdb, 0x07, 0xd2, 0x89, - 0x2a, 0x1a, 0x21, 0x17, 0x26, 0x6c, 0x84, 0x02, 0x34, 0xd3, 0x23, 0xdb, 0xd0, 0x92, 0xcd, 0x2a, - 0xe1, 0x35, 0xf5, 0xda, 0xcc, 0xa9, 0x61, 0x38, 0xc4, 0x05, 0x27, 0xe5, 0xf2, 0xfe, 0xf7, 0xa7, - 0xa7, 0xc6, 0x4b, 0x87, 0xcf, 0x4e, 0xbf, 0x75, 0x5e, 0xa9, 0x12, 0x07, 0xef, 0xfb, 0xca, 0x83, - 0xb5, 0xcb, 0x31, 0x90, 0xc6, 0xc6, 0xd2, 0x5f, 0x4a, 0x32, 0x72, 0x4d, 0x0e, 0x9d, 0x2d, 0xc5, - 0xe5, 0x62, 0xb3, 0xc4, 0xca, 0x8d, 0xc4, 0x86, 0x6a, 0xa0, 0x44, 0x83, 0x61, 0x29, 0xa7, 0x36, - 0xa2, 0x85, 0x6c, 0xf8, 0x55, 0x76, 0x63, 0x90, 0x46, 0xf7, 0xf0, 0x97, 0x2c, 0x83, 0x40, 0x48, - 0x10, 0x24, 0x1a, 0xc2, 0x99, 0x6c, 0x8c, 0x3e, 0x58, 0x6d, 0x30, 0xa4, 0xb4, 0x9e, 0xd4, 0xe8, - 0xde, 0x21, 0x6e, 0x02, 0x7f, 0x95, 0x64, 0xc4, 0xf8, 0x2b, 0x0a, 0x59, 0xfb, 0x31, 0x42, 0xd6, - 0x3c, 0x28, 0xb3, 0x1f, 0xbf, 0x11, 0xd5, 0x11, 0xc7, 0x76, 0x4c, 0x84, 0xe5, 0x46, 0xcd, 0xde, - 0x3d, 0x3b, 0xf1, 0x4c, 0x09, 0x66, 0xdb, 0xaa, 0x3c, 0x3e, 0x2b, 0xb6, 0xb0, 0x33, 0xe6, 0xa6, - 0x55, 0x18, 0xa2, 0x0f, 0xdd, 0xb5, 0x67, 0x14, 0xd3, 0xf7, 0x63, 0x84, 0xf4, 0x79, 0x50, 0xe6, - 0xa1, 0xaf, 0xb3, 0x1f, 0xfa, 0x19, 0xc7, 0xbc, 0x87, 0x75, 0xdb, 0x50, 0x16, 0xb2, 0x6f, 0x9d, - 0x2c, 0x7d, 0x4c, 0x7c, 0x4b, 0xc3, 0x4d, 0x22, 0x8e, 0xbe, 0x8a, 0xb8, 0x67, 0xf4, 0x0e, 0xe7, - 0xa5, 0xa2, 0xd3, 0xe9, 0x4a, 0xc6, 0xcb, 0xc2, 0x81, 0x84, 0x6f, 0x2e, 0x92, 0x53, 0x3f, 0x73, - 0x66, 0x1b, 0x36, 0xde, 0x17, 0x4b, 0x8e, 0xcc, 0x36, 0x93, 0xc2, 0xd9, 0x86, 0x55, 0xea, 0x1b, - 0x9b, 0x61, 0x9c, 0xda, 0xb2, 0x01, 0x04, 0x99, 0xa7, 0xf1, 0x10, 0x9a, 0x5d, 0xa7, 0xb3, 0x7b, - 0xdc, 0x1c, 0x62, 0xfe, 0xe0, 0x68, 0xbf, 0x44, 0x60, 0x1f, 0x51, 0x29, 0xfd, 0xd2, 0x50, 0x1c, - 0x51, 0xfe, 0x24, 0x3e, 0x9d, 0x68, 0xf0, 0x0b, 0x6f, 0x0d, 0x5f, 0x2e, 0x5e, 0x1d, 0xf3, 0x9f, - 0x41, 0x28, 0x0b, 0xd9, 0x33, 0x21, 0xdf, 0xe9, 0xc4, 0x16, 0x74, 0xb3, 0xda, 0xde, 0x17, 0x4e, - 0xec, 0xa4, 0x8a, 0x3c, 0xb8, 0xf7, 0x8b, 0x46, 0x4f, 0x4e, 0xb6, 0x13, 0xff, 0x12, 0x30, 0x28, - 0x97, 0x52, 0x74, 0x30, 0xa7, 0xae, 0x47, 0x95, 0xf9, 0x9a, 0xec, 0x51, 0xb6, 0xde, 0x7f, 0x8d, - 0x33, 0xbe, 0x3e, 0x1c, 0x7d, 0xa8, 0x7a, 0xf2, 0x76, 0x05, 0x3c, 0x23, 0xec, 0xd7, 0x4e, 0x64, - 0xa5, 0x30, 0xc2, 0x01, 0x89, 0x81, 0xfc, 0x84, 0x83, 0x92, 0xfe, 0x44, 0x47, 0xd8, 0x81, 0x86, - 0x4d, 0x29, 0xc2, 0x1b, 0x68, 0x58, 0xf6, 0x98, 0xef, 0xd6, 0x86, 0x27, 0x66, 0xc9, 0xd7, 0x7e, - 0xdc, 0xde, 0xe4, 0x35, 0x43, 0xe8, 0x7b, 0xb7, 0x51, 0xbb, 0x19, 0x0f, 0x7b, 0x81, 0xdd, 0x0c, - 0x8f, 0x7b, 0x43, 0x35, 0x50, 0xc2, 0xfc, 0xf8, 0x3f, 0xf1, 0x90, 0xf3, 0x3f, 0x68, 0xb6, 0xed, - 0x10, 0xfd, 0xd2, 0x59, 0xdc, 0xe0, 0x33, 0x58, 0x35, 0x91, 0xd0, 0xfb, 0xd2, 0xa6, 0x68, 0x71, - 0xc3, 0x62, 0x42, 0x16, 0x37, 0x5e, 0xa8, 0x1b, 0x49, 0x63, 0x15, 0x9a, 0xef, 0x38, 0xaf, 0x95, - 0x2f, 0xbe, 0x69, 0x1d, 0xb9, 0x4c, 0x9a, 0x1e, 0xff, 0x72, 0x60, 0xd0, 0xf9, 0x8a, 0x98, 0xe5, - 0x71, 0xf8, 0x35, 0xdc, 0xb9, 0x7e, 0xe3, 0x2c, 0x5f, 0x82, 0x79, 0xf9, 0x31, 0x21, 0xcb, 0x17, - 0x2e, 0xaf, 0xb4, 0xd7, 0xdb, 0x15, 0x08, 0x30, 0xde, 0xae, 0x3e, 0x46, 0x9b, 0x94, 0x0d, 0xb5, - 0x30, 0x8a, 0x0d, 0x92, 0x4f, 0x64, 0x75, 0x72, 0x3c, 0x22, 0xcf, 0x7b, 0x32, 0xd5, 0x99, 0xad, - 0xa4, 0xe7, 0xab, 0x33, 0x07, 0x24, 0x34, 0xbd, 0xe4, 0x62, 0x99, 0x93, 0xb9, 0x14, 0x9a, 0x03, - 0xe1, 0x4c, 0x5c, 0x86, 0x3b, 0xe0, 0x82, 0x75, 0xe0, 0x8c, 0x75, 0x7e, 0x5f, 0x05, 0x4f, 0x1a, - 0x99, 0xfd, 0xd0, 0x89, 0x62, 0xfe, 0x1c, 0x14, 0x00, 0xfa, 0x0f, 0x2f, 0xee, 0xb6, 0xde, 0x78, - 0x05, 0xae, 0xd8, 0x9f, 0x87, 0x27, 0x67, 0xf6, 0x4c, 0xb2, 0x00, 0x18, 0x5c, 0xd7, 0x28, 0x35, - 0x3f, 0xf4, 0x3f, 0x3a, 0x8b, 0xb6, 0xe0, 0x87, 0xee, 0xc7, 0x84, 0x2c, 0xda, 0xb8, 0x9a, 0x0c, - 0xd9, 0x4b, 0xd6, 0x85, 0xac, 0x87, 0xa0, 0xa7, 0x3d, 0xd7, 0xf9, 0x9d, 0x04, 0x7d, 0xcd, 0x60, - 0x63, 0xc3, 0xac, 0x9b, 0x01, 0xfa, 0x3c, 0xc2, 0x38, 0xbf, 0x51, 0xaa, 0x62, 0xe7, 0xb7, 0x0a, - 0xa2, 0xcb, 0xc2, 0x81, 0x84, 0xe6, 0x17, 0x52, 0x4e, 0xbd, 0x24, 0x79, 0xdd, 0xdf, 0x80, 0x08, - 0x19, 0x2c, 0x4f, 0x85, 0x78, 0x10, 0xb2, 0xe0, 0x6f, 0x6c, 0x07, 0x00, 0x7e, 0x14, 0x8b, 0xbc, - 0x0a, 0xd5, 0xd4, 0x90, 0xd0, 0x97, 0x11, 0xf9, 0xee, 0x4a, 0x35, 0xb6, 0xeb, 0x6d, 0x5a, 0xb6, - 0x57, 0xe4, 0x0b, 0xe3, 0xe2, 0x6c, 0x54, 0x88, 0x2f, 0x4c, 0x25, 0x98, 0xc8, 0xfc, 0xb5, 0x94, - 0x53, 0x3f, 0x97, 0xd0, 0x06, 0x91, 0xcc, 0xde, 0x84, 0xc9, 0x10, 0xe1, 0x94, 0xec, 0x4c, 0xe2, - 0x3b, 0xfe, 0xe1, 0x1f, 0x03, 0xdf, 0x97, 0xd3, 0x51, 0xdd, 0x92, 0x64, 0xb4, 0x43, 0xcb, 0xa6, - 0x9e, 0x1b, 0x08, 0xee, 0xbb, 0x7e, 0x8c, 0xb0, 0xef, 0xf2, 0xa0, 0x44, 0xed, 0xef, 0xe0, 0x65, - 0x10, 0xc4, 0x01, 0x73, 0xc6, 0x2d, 0x27, 0x33, 0x88, 0x22, 0x2c, 0x09, 0x30, 0x15, 0x14, 0xf7, - 0x5a, 0x4f, 0x5c, 0xb0, 0x12, 0xac, 0xf2, 0xdb, 0xb5, 0x6c, 0x7f, 0x2a, 0xa1, 0x6d, 0xd3, 0x7b, - 0x34, 0x83, 0xbb, 0xca, 0x67, 0x01, 0x41, 0xab, 0x7c, 0x2f, 0x8e, 0xd0, 0xdb, 0x8d, 0x57, 0xf9, - 0xf7, 0xc1, 0x93, 0x88, 0xef, 0x32, 0xa0, 0x05, 0x18, 0x00, 0xad, 0xcf, 0xea, 0x3d, 0xd4, 0x6c, - 0x38, 0x1c, 0x12, 0x18, 0x7d, 0xa7, 0x82, 0x31, 0xb9, 0x3b, 0x8b, 0x49, 0xfd, 0x4e, 0x92, 0xff, - 0xbd, 0x59, 0x33, 0xa9, 0xa5, 0x47, 0x33, 0xb8, 0x5d, 0xf1, 0x22, 0x0a, 0x79, 0x21, 0x42, 0xdf, - 0x10, 0x0e, 0x92, 0xd0, 0xdd, 0x65, 0x8f, 0xc4, 0xf7, 0x00, 0x15, 0x6a, 0xac, 0x51, 0x0f, 0xf6, - 0x62, 0xd4, 0x89, 0x2c, 0xa0, 0x30, 0xd0, 0x89, 0xac, 0x82, 0x21, 0xfd, 0x02, 0xe2, 0x44, 0xf6, - 0x09, 0x3c, 0x4c, 0x8f, 0xff, 0xf1, 0x12, 0x71, 0xdc, 0x06, 0x8f, 0xfb, 0xf1, 0xd2, 0x50, 0x9c, - 0xbb, 0x68, 0x5a, 0x8b, 0x16, 0x00, 0x01, 0x5c, 0x11, 0xb0, 0x78, 0x21, 0xcc, 0x44, 0x05, 0x81, - 0x21, 0xea, 0x7d, 0xac, 0xa0, 0xea, 0x65, 0x9a, 0xa9, 0xc0, 0xa9, 0xc5, 0x4e, 0x9c, 0x11, 0xaa, - 0x21, 0xb8, 0xaa, 0x18, 0x14, 0x9c, 0xa9, 0xa0, 0x12, 0xeb, 0x76, 0xc3, 0x26, 0x54, 0xef, 0x67, - 0x80, 0xbb, 0x9b, 0x75, 0xb0, 0x40, 0x38, 0x86, 0x22, 0xc0, 0x1a, 0x04, 0x2d, 0xaf, 0x86, 0x2c, - 0x24, 0xb9, 0xfa, 0x42, 0x62, 0x06, 0x79, 0xa8, 0x1a, 0x8d, 0x43, 0xb3, 0x32, 0xc4, 0x2f, 0xbc, - 0x22, 0x22, 0xff, 0xaa, 0x6a, 0xe1, 0x84, 0x73, 0x1f, 0x04, 0x88, 0xaa, 0x64, 0xc4, 0x06, 0x3a, - 0x57, 0x82, 0x8b, 0x6b, 0x99, 0xd5, 0x9c, 0x18, 0xd7, 0x9f, 0x49, 0xe0, 0xef, 0x08, 0xe1, 0x01, - 0x32, 0x09, 0x03, 0x05, 0x44, 0x0f, 0xc8, 0x24, 0x8c, 0x40, 0x7f, 0x47, 0x06, 0xe5, 0xba, 0x25, - 0x3c, 0x8a, 0xea, 0x60, 0xab, 0xa0, 0x58, 0x38, 0xc6, 0x9a, 0x66, 0xf5, 0x67, 0x12, 0x84, 0x56, - 0x48, 0x79, 0x98, 0x67, 0x3c, 0xcb, 0xab, 0xdf, 0x66, 0xf0, 0xb5, 0x24, 0x2f, 0x84, 0x64, 0x4c, - 0xa9, 0x64, 0x76, 0xb3, 0x9e, 0x7e, 0xae, 0x27, 0x95, 0x30, 0x1f, 0xcf, 0xea, 0xbd, 0x3b, 0x32, - 0x09, 0xbf, 0xbd, 0x9a, 0x08, 0x29, 0xb4, 0x57, 0x13, 0xdf, 0x40, 0x48, 0x7f, 0x37, 0xa7, 0xae, - 0x47, 0x8b, 0x48, 0x40, 0x8b, 0xfc, 0x28, 0x76, 0xa1, 0xdf, 0xf7, 0xde, 0xf4, 0xb9, 0xdd, 0x24, - 0x03, 0x95, 0xb8, 0x08, 0x53, 0x7d, 0x04, 0x6d, 0xaa, 0x96, 0x2a, 0x38, 0xd2, 0x27, 0x87, 0x62, - 0xf6, 0x17, 0x25, 0x48, 0x75, 0xd0, 0x6f, 0xd9, 0xf8, 0x07, 0x10, 0x72, 0x3c, 0x28, 0xfe, 0x01, - 0x41, 0x84, 0x2f, 0x01, 0x1d, 0xa0, 0xdb, 0x4d, 0x1b, 0xa9, 0x2b, 0xab, 0xfd, 0xb4, 0x70, 0xb8, - 0x71, 0xf2, 0x4c, 0x97, 0x07, 0x06, 0x0b, 0x00, 0x28, 0xb3, 0xe2, 0xad, 0x72, 0x44, 0x22, 0xb1, - 0xc9, 0xd1, 0xb4, 0x24, 0x2f, 0x70, 0xab, 0xa5, 0x25, 0xfa, 0xb2, 0x29, 0x73, 0x80, 0x4c, 0x25, - 0xe2, 0x8e, 0xe7, 0x05, 0x0a, 0x4f, 0x65, 0x84, 0x78, 0x42, 0xbb, 0x1b, 0xbf, 0xad, 0x12, 0xc7, - 0x9a, 0xa9, 0x11, 0x6b, 0x78, 0x72, 0xfa, 0xca, 0x5e, 0x42, 0x9b, 0x7f, 0xb9, 0x96, 0xa9, 0xc4, - 0x20, 0x3f, 0x4a, 0xa6, 0x92, 0x9f, 0x48, 0x10, 0x01, 0xa4, 0x55, 0x1b, 0xc8, 0xc4, 0x53, 0x59, - 0x83, 0x1f, 0x01, 0xa4, 0x55, 0x1b, 0x68, 0xb3, 0x4b, 0x03, 0x23, 0x80, 0xb8, 0x20, 0xd7, 0x85, - 0xdc, 0x25, 0x72, 0x7e, 0xdf, 0x4c, 0x6e, 0x02, 0xe7, 0x81, 0xf3, 0x10, 0xf1, 0x5e, 0xae, 0x65, - 0x88, 0xe9, 0xa6, 0x35, 0xfe, 0x13, 0x3b, 0xa6, 0xb6, 0x30, 0x89, 0x06, 0x0d, 0x24, 0x5e, 0x0b, - 0xb3, 0xb8, 0xc0, 0xb3, 0x4b, 0x0e, 0xda, 0x6d, 0x9e, 0x0f, 0x53, 0x3b, 0x23, 0x1c, 0x21, 0x00, - 0xdb, 0x82, 0x2a, 0xcb, 0xa0, 0x65, 0x42, 0xd6, 0x51, 0x36, 0x28, 0x9b, 0x8b, 0x61, 0xc8, 0x3e, - 0x80, 0xd6, 0x54, 0x43, 0x96, 0xe6, 0x4f, 0x34, 0x31, 0xad, 0x89, 0x88, 0xac, 0x34, 0x6b, 0x24, - 0xff, 0x4a, 0x7b, 0x5f, 0x67, 0xa7, 0x66, 0x98, 0x5a, 0xf2, 0xc9, 0x78, 0xa2, 0x2b, 0x65, 0x4f, - 0x32, 0x6b, 0x38, 0x73, 0xa1, 0x00, 0x4b, 0xa9, 0xaf, 0xad, 0xe5, 0x16, 0xc2, 0xff, 0x75, 0xe9, - 0x66, 0x08, 0xb0, 0x13, 0x3d, 0x5b, 0xc3, 0x5a, 0x21, 0x36, 0x08, 0x1f, 0x9c, 0x19, 0xa6, 0x47, - 0xeb, 0xd7, 0x7a, 0x8c, 0xd8, 0x20, 0xfe, 0x5b, 0xa9, 0xd3, 0xcf, 0x69, 0xee, 0x08, 0xfb, 0x5b, - 0x48, 0x96, 0x10, 0x03, 0x89, 0x07, 0x20, 0x0a, 0x11, 0xae, 0x05, 0x39, 0x48, 0x4f, 0x5b, 0x77, - 0x26, 0x1a, 0xd8, 0x3a, 0xa3, 0x6d, 0x9d, 0x7b, 0xb9, 0x96, 0xb6, 0x4e, 0xf7, 0xd4, 0xd0, 0x5f, - 0xd8, 0xa1, 0xf7, 0x69, 0xa3, 0xa5, 0x37, 0xde, 0xa9, 0x05, 0x0c, 0xbd, 0x04, 0x11, 0x3e, 0xf4, - 0x3a, 0x40, 0x42, 0xe7, 0xa8, 0x94, 0x53, 0x77, 0xd2, 0xfc, 0x46, 0xf8, 0xb9, 0x61, 0xdb, 0x50, - 0x88, 0x44, 0x3e, 0x73, 0xe2, 0xb4, 0xb5, 0xe7, 0x08, 0x21, 0xb7, 0x2e, 0xf0, 0x69, 0x0b, 0xee, - 0xaa, 0x65, 0x4c, 0xd6, 0x8d, 0x14, 0x66, 0x39, 0x43, 0xfc, 0x1d, 0x3d, 0x1d, 0xd2, 0x40, 0xcb, - 0x43, 0x3b, 0xad, 0x11, 0xb8, 0x6f, 0x5b, 0x09, 0x75, 0x63, 0xef, 0x34, 0xb1, 0x6d, 0x9b, 0xb0, - 0x5d, 0x2d, 0x62, 0x6b, 0x1d, 0xdd, 0x5b, 0xcc, 0x9f, 0x03, 0x1f, 0x14, 0x36, 0x65, 0x51, 0x60, - 0x22, 0x22, 0x41, 0x27, 0x37, 0xd0, 0xef, 0x99, 0x15, 0x31, 0xdd, 0x0a, 0x18, 0xc8, 0x68, 0xe2, - 0x15, 0x31, 0x03, 0x0a, 0x5d, 0x11, 0x7b, 0xb0, 0x84, 0x6e, 0x36, 0xa7, 0x6e, 0xa0, 0x43, 0xb5, - 0xf3, 0xfa, 0x09, 0x19, 0x49, 0x95, 0xc5, 0xc0, 0x59, 0x6d, 0x6d, 0x6f, 0xe5, 0x02, 0x02, 0x1c, - 0x58, 0x45, 0x2f, 0xa7, 0x76, 0xf7, 0xb4, 0x1f, 0xe8, 0x22, 0x5a, 0xa7, 0xc6, 0x78, 0x3a, 0xb9, - 0x2b, 0x95, 0x34, 0xbb, 0xda, 0xe2, 0x89, 0xee, 0x78, 0xa7, 0x66, 0xa0, 0xd5, 0xa2, 0xea, 0xfb, - 0xa0, 0x42, 0x97, 0x88, 0x80, 0x3b, 0x08, 0xed, 0x4e, 0x78, 0x1f, 0xa7, 0xac, 0xac, 0xe1, 0x77, - 0x8b, 0x85, 0xb7, 0xac, 0xfc, 0x9b, 0xd6, 0xd4, 0x55, 0xeb, 0xe0, 0xb0, 0x22, 0x2c, 0xa9, 0x65, - 0xc9, 0xd8, 0xb1, 0x2b, 0x83, 0x0f, 0xd9, 0xee, 0x72, 0x17, 0xe8, 0x7d, 0x69, 0x33, 0xd5, 0x0b, - 0xd1, 0xf8, 0xc5, 0x5b, 0x3b, 0x0c, 0x2a, 0x7c, 0x6b, 0xc7, 0x03, 0x26, 0xe4, 0x5e, 0x92, 0x72, - 0xea, 0x53, 0xe8, 0x5e, 0xb7, 0x0d, 0xdb, 0x4d, 0x13, 0xdb, 0xf2, 0x97, 0x4e, 0x5e, 0x22, 0xed, - 0x79, 0x55, 0x50, 0xef, 0xf5, 0xe3, 0x6b, 0x79, 0xd4, 0x59, 0xa8, 0x12, 0x4e, 0x43, 0xf0, 0x31, - 0x19, 0x88, 0x9f, 0xce, 0x90, 0xc8, 0x9f, 0x5b, 0xf5, 0x4e, 0xc1, 0x40, 0xec, 0x81, 0x04, 0x0e, - 0xc4, 0x15, 0x48, 0x37, 0x9c, 0xa2, 0xf3, 0x48, 0x61, 0xf8, 0x29, 0x9d, 0x9c, 0xb0, 0xae, 0x9f, - 0x24, 0x84, 0x85, 0x25, 0x01, 0x06, 0xcb, 0x3a, 0xfd, 0xa1, 0x1e, 0xbb, 0xd6, 0x9f, 0x91, 0x21, - 0x78, 0x7b, 0xdc, 0xe8, 0x6e, 0x37, 0xb5, 0x0c, 0xa6, 0xb2, 0x54, 0x64, 0x97, 0x4c, 0x11, 0x81, - 0x43, 0xb0, 0x17, 0xc8, 0x86, 0x95, 0x22, 0x66, 0x62, 0xd4, 0x0d, 0x7f, 0x62, 0xe6, 0xdc, 0x1b, - 0x1e, 0x3a, 0x21, 0xe5, 0x10, 0x56, 0x0a, 0x2d, 0x16, 0x18, 0x18, 0x1b, 0xa6, 0x96, 0xc1, 0x9c, - 0x3e, 0x92, 0xe4, 0x39, 0xae, 0x25, 0x75, 0x42, 0xcf, 0x26, 0x39, 0x1b, 0x0a, 0x15, 0x00, 0xe1, - 0x86, 0x82, 0x0f, 0xe7, 0xc6, 0xe6, 0x73, 0x3b, 0x1b, 0xae, 0x70, 0x79, 0xea, 0x82, 0x75, 0xf5, - 0x84, 0xf7, 0xc9, 0xf8, 0x4b, 0x20, 0xb8, 0x20, 0xaa, 0x13, 0x90, 0xc8, 0x92, 0xfa, 0xee, 0x89, - 0xc8, 0x08, 0x3b, 0x28, 0x37, 0x75, 0x6c, 0x49, 0x19, 0xa6, 0x9e, 0x1d, 0xc0, 0xe9, 0x0e, 0xf9, - 0xb1, 0x3e, 0x3c, 0x18, 0xf1, 0x91, 0x12, 0x07, 0xca, 0xf8, 0x99, 0x69, 0xe8, 0x7e, 0x12, 0xf8, - 0xe0, 0xf0, 0x3e, 0xeb, 0xc8, 0x7b, 0x50, 0xf3, 0x18, 0x34, 0x2d, 0x20, 0x00, 0xcf, 0x02, 0x3e, - 0x2b, 0xeb, 0xc9, 0x46, 0x29, 0x76, 0xaa, 0x81, 0xbe, 0x56, 0x0f, 0x9e, 0x43, 0xf5, 0xa5, 0xc3, - 0x39, 0xab, 0x70, 0x04, 0x76, 0xee, 0xe1, 0xcb, 0xd2, 0xa5, 0x57, 0xc7, 0x99, 0xd4, 0x19, 0x4b, - 0x1b, 0x78, 0x6e, 0x13, 0xc9, 0x8e, 0x64, 0xdc, 0x8c, 0x1b, 0xb1, 0x41, 0xfb, 0x8f, 0x3d, 0x9e, - 0x0f, 0xa1, 0x9f, 0x91, 0x59, 0x92, 0x6e, 0x59, 0xb5, 0x27, 0xba, 0xb4, 0xde, 0x38, 0x7f, 0x96, - 0xf4, 0x62, 0xa8, 0x0a, 0x75, 0xfc, 0xc4, 0x1f, 0xe4, 0x86, 0x8c, 0xdd, 0x2e, 0x9d, 0xc7, 0x48, - 0x76, 0x82, 0x27, 0xc7, 0x9d, 0x35, 0x9d, 0x22, 0x2c, 0x09, 0x98, 0xf3, 0xe9, 0xf6, 0x96, 0x81, - 0x2b, 0xc2, 0xc4, 0xa0, 0xfb, 0xc4, 0xbb, 0x99, 0x47, 0xc8, 0x04, 0x6d, 0xe6, 0x79, 0xb9, 0x04, - 0x25, 0x31, 0xf9, 0xb6, 0x80, 0x07, 0xb5, 0x3f, 0x10, 0x95, 0x04, 0xbc, 0x6c, 0x89, 0x78, 0xc4, - 0x06, 0xd3, 0xf1, 0x5e, 0x6d, 0x08, 0xbd, 0x1c, 0x91, 0xe7, 0x3d, 0xd3, 0xa7, 0x65, 0x07, 0xda, - 0xb4, 0x6c, 0x6f, 0xe3, 0x80, 0x9a, 0xb0, 0x07, 0x95, 0x96, 0x26, 0xff, 0xb4, 0xce, 0x01, 0x09, - 0xa7, 0x75, 0x2e, 0x96, 0xb4, 0xd2, 0x09, 0x29, 0xa7, 0xf6, 0xa0, 0x75, 0xa5, 0x33, 0xe3, 0x33, - 0xe7, 0x0e, 0x82, 0x7d, 0x31, 0x6c, 0xe1, 0xaf, 0xb0, 0xae, 0x8e, 0x95, 0x4e, 0x9e, 0x81, 0xff, - 0x94, 0x4e, 0x5e, 0xa2, 0x51, 0x40, 0xc8, 0x95, 0xff, 0xdb, 0xb6, 0x55, 0x99, 0xd5, 0x5d, 0x01, - 0x49, 0x6d, 0x33, 0x5a, 0xb6, 0xd7, 0x88, 0xc5, 0x71, 0x15, 0xf1, 0x91, 0x12, 0xd4, 0x75, 0x88, - 0x86, 0x2f, 0xb6, 0x1b, 0x58, 0x63, 0xab, 0x20, 0xb8, 0x2e, 0x53, 0x58, 0x6d, 0x3b, 0xfd, 0x16, - 0xf3, 0xf6, 0x69, 0xcf, 0xe0, 0x07, 0x0b, 0xee, 0xee, 0x25, 0xff, 0x72, 0xc0, 0x14, 0x90, 0xd6, - 0x93, 0x5a, 0x6f, 0x3c, 0x4d, 0x42, 0xb0, 0xfe, 0x42, 0x92, 0xef, 0xc4, 0x53, 0xef, 0xe6, 0xed, - 0x7a, 0x46, 0xef, 0xd1, 0x3b, 0x07, 0xf8, 0xf9, 0x0b, 0xdd, 0xf2, 0x6a, 0x1a, 0xe4, 0x10, 0x3b, - 0xe0, 0x63, 0xcf, 0xc1, 0x62, 0xfe, 0x4a, 0xe9, 0x74, 0x01, 0x12, 0xa1, 0x94, 0x46, 0xc7, 0x4a, - 0x23, 0xc7, 0x94, 0x90, 0xf2, 0xf0, 0xc8, 0x64, 0xde, 0xcc, 0xda, 0x89, 0x98, 0x49, 0x19, 0x4c, - 0x46, 0xe4, 0xf9, 0xcd, 0x9a, 0xd9, 0xd8, 0xdd, 0xae, 0x67, 0x0c, 0x6a, 0xc7, 0x60, 0xb3, 0xe0, - 0x7a, 0x80, 0xfb, 0x61, 0x41, 0x1e, 0xe0, 0x3c, 0x34, 0x69, 0xa2, 0xef, 0x4a, 0x39, 0xb5, 0x17, - 0x2d, 0x25, 0xd3, 0xf2, 0x99, 0xfd, 0xd6, 0xfe, 0x7d, 0xe5, 0xeb, 0x47, 0xa7, 0xaf, 0x5c, 0x84, - 0xe1, 0x14, 0x12, 0xc1, 0x38, 0x56, 0x0f, 0x4a, 0x23, 0x00, 0x49, 0xab, 0x3c, 0x3d, 0x02, 0x2d, - 0xcf, 0xf1, 0xb5, 0x2c, 0xe6, 0x47, 0x43, 0xbf, 0x03, 0x0e, 0x53, 0x10, 0x2f, 0xe5, 0x5a, 0x47, - 0xb7, 0xa1, 0x67, 0x8c, 0x58, 0x47, 0x9f, 0x61, 0xbf, 0xe9, 0x1a, 0xb1, 0x41, 0xfa, 0x89, 0xf5, - 0x71, 0x36, 0xd0, 0x07, 0x3c, 0xa9, 0xf0, 0x72, 0x2e, 0x5c, 0x2a, 0x76, 0x3d, 0xb7, 0xb2, 0x4a, - 0x34, 0x91, 0xea, 0xda, 0xad, 0x91, 0x8a, 0x6f, 0x6b, 0x55, 0x9d, 0x54, 0xb1, 0x41, 0x93, 0x31, - 0xbd, 0x39, 0x1b, 0x91, 0xef, 0x6e, 0xd6, 0x4c, 0x9c, 0x04, 0x8b, 0x32, 0xdc, 0x11, 0xef, 0xe9, - 0xd3, 0x0c, 0xc4, 0x93, 0x82, 0x83, 0x13, 0xee, 0x7e, 0x8b, 0xe0, 0x44, 0xba, 0x77, 0x70, 0x96, - 0x3f, 0x62, 0x85, 0xd3, 0xb8, 0xb9, 0xdd, 0xfa, 0xf0, 0x7d, 0xeb, 0xc8, 0x05, 0x6b, 0xdf, 0x30, - 0x44, 0x4f, 0x21, 0x9c, 0x8f, 0x7c, 0x7f, 0x66, 0xff, 0x11, 0x65, 0x5b, 0x35, 0xa8, 0x15, 0xe4, - 0x40, 0x34, 0xff, 0x5e, 0xe9, 0xf5, 0x31, 0x90, 0xd8, 0x46, 0xf8, 0x04, 0x05, 0xf3, 0xe0, 0x80, - 0xf7, 0x05, 0xa2, 0x23, 0x95, 0xa9, 0x1f, 0xe4, 0xf8, 0xa9, 0x24, 0xcf, 0x69, 0xd2, 0x3a, 0xfa, - 0x3a, 0x49, 0x73, 0x88, 0x1b, 0xdd, 0xbc, 0x00, 0x99, 0x1e, 0x40, 0x40, 0x80, 0xcc, 0x0a, 0x1c, - 0x11, 0x25, 0x8e, 0x67, 0xc0, 0xf2, 0x85, 0x3d, 0xe5, 0xf3, 0x27, 0xfc, 0x35, 0x57, 0x84, 0x25, - 0x10, 0x80, 0x35, 0xba, 0x58, 0xcc, 0x26, 0x69, 0xff, 0xa2, 0x3d, 0xb0, 0x8f, 0x91, 0x9e, 0x12, - 0x37, 0x13, 0x5d, 0x9b, 0xfb, 0x0c, 0x53, 0xef, 0x6d, 0xd7, 0x4c, 0x33, 0x95, 0xee, 0xe4, 0xf7, - 0x14, 0x1f, 0x2c, 0xb0, 0xa7, 0x70, 0xd0, 0x84, 0xd9, 0x69, 0x09, 0x9f, 0xf0, 0xc0, 0xbe, 0x4b, - 0x4b, 0x9b, 0xfd, 0x6e, 0x33, 0xfa, 0x23, 0xeb, 0xd4, 0x24, 0xf8, 0x9c, 0xcd, 0x8c, 0x93, 0xdc, - 0x71, 0x4a, 0x28, 0x02, 0x53, 0x7d, 0x3a, 0xca, 0xb3, 0x3f, 0xdb, 0xa5, 0x75, 0xc4, 0x12, 0xec, - 0xaf, 0x1b, 0x31, 0x23, 0xa1, 0x67, 0xb4, 0xd8, 0x20, 0xfe, 0x83, 0x97, 0x63, 0xe4, 0x73, 0x4b, - 0x72, 0x08, 0x92, 0x72, 0x37, 0x6b, 0x38, 0xb7, 0xff, 0xf9, 0x88, 0x8c, 0x6c, 0x02, 0xa9, 0x17, - 0xe8, 0xfc, 0xb0, 0x45, 0x37, 0x38, 0x87, 0xce, 0x7e, 0x8c, 0x70, 0xa9, 0xca, 0x83, 0x12, 0x31, - 0x3e, 0x92, 0x72, 0x6a, 0x1a, 0x3d, 0x48, 0x36, 0xa1, 0x70, 0xdf, 0xb7, 0x9b, 0x2a, 0x9e, 0x2f, - 0x4a, 0x67, 0x8e, 0xf9, 0x82, 0x63, 0x10, 0x08, 0x36, 0x38, 0x54, 0x66, 0x77, 0x1b, 0xb8, 0x2c, - 0x45, 0x1f, 0x13, 0xc8, 0x16, 0xa4, 0x13, 0x9d, 0x8f, 0x62, 0x5d, 0xba, 0x61, 0x6e, 0xd6, 0xfb, - 0xd2, 0x26, 0x09, 0x11, 0x30, 0xb7, 0x59, 0x33, 0x29, 0x3f, 0x1c, 0x83, 0x88, 0x9b, 0x4f, 0xc6, - 0x83, 0x10, 0xbe, 0x74, 0xf9, 0x81, 0x4c, 0x3c, 0x92, 0xe7, 0x10, 0x22, 0x27, 0x0a, 0x98, 0x2b, - 0x4c, 0xb2, 0x4a, 0x1b, 0x7b, 0x0d, 0x0f, 0xa2, 0xf6, 0xe5, 0x40, 0x15, 0xa8, 0x85, 0xeb, 0xa5, - 0xe2, 0x15, 0x12, 0x47, 0x14, 0x96, 0xfb, 0x30, 0x61, 0x83, 0x69, 0x63, 0xb4, 0xf9, 0x46, 0x35, - 0x32, 0x20, 0xef, 0x3b, 0x8e, 0xaf, 0x1e, 0x91, 0x17, 0x30, 0xd4, 0xec, 0x56, 0xd0, 0x92, 0x34, - 0x40, 0xac, 0x55, 0x01, 0x1a, 0xb0, 0x40, 0xe1, 0xb1, 0x85, 0x10, 0xcf, 0x34, 0xb3, 0xe7, 0xd1, - 0x5d, 0x7e, 0xe9, 0x5a, 0x9a, 0x94, 0x6d, 0x5c, 0xf1, 0x5a, 0x9a, 0x6e, 0x54, 0xbe, 0xa7, 0xa2, - 0x2d, 0x37, 0x2a, 0x5f, 0x2a, 0xc9, 0x08, 0x38, 0x1c, 0xc1, 0x07, 0xeb, 0x36, 0x3f, 0xa3, 0x49, - 0x33, 0xe3, 0xa9, 0x1e, 0xfe, 0xc1, 0x3a, 0x0b, 0x08, 0x3a, 0x58, 0xf7, 0xe2, 0x98, 0x94, 0x84, - 0xdb, 0x10, 0x89, 0x76, 0x4d, 0x95, 0x30, 0x88, 0x42, 0x10, 0xff, 0x8b, 0xcd, 0xa6, 0x58, 0x2d, - 0x10, 0x0b, 0xf2, 0x58, 0xf4, 0xd1, 0x59, 0x08, 0x02, 0xcd, 0x28, 0x09, 0xf5, 0x24, 0xf1, 0x99, - 0xed, 0xf7, 0xae, 0x76, 0x1b, 0x60, 0x73, 0xc0, 0x47, 0x92, 0xdc, 0xf7, 0x2e, 0x2f, 0x24, 0xc8, - 0x88, 0xa2, 0x12, 0x49, 0xd4, 0xf8, 0x95, 0x94, 0x53, 0x0f, 0x49, 0x68, 0x2d, 0xb0, 0x6c, 0x69, - 0x8b, 0xb5, 0xb4, 0xf5, 0xaf, 0x8f, 0x01, 0x5b, 0xeb, 0xe8, 0xa1, 0xe9, 0x77, 0x46, 0x80, 0x1e, - 0x1d, 0x87, 0xf0, 0x75, 0x58, 0xe0, 0xfc, 0x3f, 0x91, 0x02, 0xa7, 0xf7, 0x76, 0x16, 0x35, 0xf5, - 0x64, 0xc1, 0x33, 0x32, 0x6a, 0x1d, 0x98, 0x2c, 0x5f, 0x1b, 0xb3, 0x86, 0x27, 0xa6, 0x5f, 0xd9, - 0x5b, 0xdd, 0x17, 0x33, 0x4a, 0x36, 0x46, 0x37, 0xcd, 0x52, 0xc9, 0x58, 0xc2, 0x26, 0x68, 0xcb, - 0xb8, 0x37, 0x22, 0xcf, 0x67, 0xcc, 0x52, 0x21, 0x0d, 0xe3, 0xe3, 0x3d, 0x71, 0xce, 0xec, 0xc7, - 0x85, 0x09, 0x67, 0x3f, 0x01, 0x9a, 0x71, 0xeb, 0x52, 0xd1, 0x7c, 0xc8, 0xc2, 0x59, 0x2c, 0x1c, - 0x9b, 0xbe, 0xb2, 0xb7, 0x78, 0xe5, 0x12, 0xac, 0x44, 0x94, 0x65, 0xce, 0x65, 0x9a, 0xa8, 0x03, - 0xbb, 0x18, 0x4e, 0x8f, 0xbc, 0x54, 0x3a, 0xfd, 0x36, 0x74, 0x2d, 0x66, 0xcd, 0xb2, 0x39, 0xfa, - 0xbf, 0x55, 0x9d, 0x15, 0x6b, 0x59, 0x03, 0x5e, 0xeb, 0xc8, 0x27, 0x9a, 0x82, 0x11, 0xb7, 0xa6, - 0x51, 0x27, 0x4c, 0x59, 0xa8, 0x0c, 0x5c, 0x58, 0x48, 0x98, 0x32, 0x91, 0x0c, 0xc7, 0xa5, 0x9c, - 0xba, 0x09, 0xb9, 0xd6, 0xb0, 0x1e, 0x19, 0xfe, 0xcb, 0x4d, 0x09, 0xc3, 0xf0, 0x9f, 0x7e, 0x65, - 0x2f, 0x8b, 0x82, 0x31, 0x46, 0x69, 0xb9, 0x31, 0x09, 0x62, 0x83, 0xf0, 0x81, 0xbc, 0xeb, 0xbe, - 0x14, 0x91, 0xe7, 0x33, 0xe6, 0x9d, 0x41, 0x6a, 0x70, 0x61, 0x42, 0x35, 0x04, 0x68, 0xa2, 0xc6, - 0x31, 0x50, 0x03, 0xf6, 0x98, 0x7c, 0x6a, 0x38, 0x97, 0xc3, 0xd4, 0x68, 0x6d, 0xb8, 0x79, 0x6a, - 0xd8, 0xc3, 0xed, 0x3c, 0x67, 0x0b, 0x9b, 0x11, 0x42, 0x7c, 0x50, 0xe3, 0x97, 0xe1, 0xfe, 0xaa, - 0xb0, 0x4c, 0x93, 0x78, 0x94, 0xd9, 0x14, 0xf0, 0x88, 0xb0, 0x54, 0x64, 0xc8, 0x58, 0x01, 0x04, - 0x1d, 0xd0, 0x4d, 0xd4, 0x61, 0x5c, 0x92, 0x6f, 0xdf, 0xa2, 0xc5, 0x7b, 0xcc, 0x2e, 0xf4, 0x1f, - 0x95, 0x74, 0xe0, 0xba, 0x70, 0xd3, 0x83, 0x16, 0xbb, 0xf9, 0x8f, 0xd6, 0xa1, 0x85, 0xa5, 0xd3, - 0x87, 0xec, 0x57, 0x8f, 0xdd, 0x13, 0x56, 0xe1, 0x32, 0x98, 0x14, 0x42, 0x38, 0x02, 0x45, 0x58, - 0x82, 0x39, 0xdd, 0x83, 0x16, 0x71, 0x38, 0x75, 0xe1, 0x5f, 0x68, 0x3c, 0x2a, 0xe5, 0xd4, 0x83, - 0x12, 0xaa, 0x97, 0x17, 0x10, 0xcb, 0xa2, 0xfa, 0x27, 0x01, 0x53, 0xaf, 0xb6, 0xb5, 0xd4, 0x37, - 0xe9, 0x89, 0xb5, 0xff, 0xba, 0x7a, 0xd5, 0x9a, 0x55, 0xab, 0xa3, 0x72, 0xac, 0x23, 0x61, 0xc4, - 0x33, 0xa9, 0x58, 0xff, 0xba, 0x06, 0x29, 0xb2, 0x76, 0x6e, 0x3c, 0x93, 0xe9, 0x49, 0x25, 0xf0, - 0xfe, 0x79, 0xec, 0x79, 0x43, 0x4f, 0x6f, 0xf4, 0x5d, 0xd9, 0xf9, 0x9f, 0xf2, 0x7d, 0xb2, 0xac, - 0x66, 0x52, 0xad, 0xda, 0x80, 0xda, 0x67, 0x76, 0xa1, 0x79, 0x77, 0x44, 0x94, 0x7f, 0xb3, 0x3f, - 0xe9, 0xd9, 0xd4, 0x0b, 0x18, 0x57, 0x1f, 0xe9, 0x98, 0x2b, 0xdf, 0xe9, 0x01, 0xfd, 0x4b, 0xc7, - 0xed, 0x99, 0xac, 0x6e, 0xea, 0x0f, 0xfc, 0x3d, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x15, 0xd9, 0xd5, - 0xf3, 0x87, 0x04, 0x00, + 0xa7, 0x35, 0xbb, 0xe3, 0x53, 0x06, 0x87, 0x75, 0x17, 0x10, 0xdf, 0x76, 0x4d, 0xc0, 0x26, 0x97, + 0x5b, 0x12, 0x44, 0x3b, 0xc4, 0x09, 0xa2, 0x9c, 0x6e, 0x49, 0xcf, 0xdc, 0xb0, 0x5b, 0x92, 0xcb, + 0x1d, 0xc9, 0xcb, 0xb7, 0x67, 0xfa, 0x9d, 0xee, 0xdb, 0x33, 0xe3, 0x87, 0xfb, 0xf6, 0xbc, 0x8c, + 0xc6, 0x6d, 0xd2, 0xc2, 0x11, 0x93, 0x0e, 0x98, 0x49, 0x05, 0x3a, 0x0f, 0x49, 0xb4, 0x4c, 0x2e, + 0xb2, 0xed, 0x30, 0x97, 0x79, 0x8d, 0xf1, 0xe6, 0xb4, 0xa9, 0x43, 0x7e, 0x30, 0xeb, 0x0e, 0x95, + 0x1f, 0xb4, 0x0a, 0x28, 0xcf, 0x1f, 0xd6, 0xfc, 0x99, 0xf2, 0x7f, 0x41, 0x72, 0xa4, 0xb0, 0xe6, + 0x07, 0x47, 0x38, 0xdc, 0x56, 0x7e, 0x95, 0x7c, 0xff, 0xe0, 0xb7, 0x46, 0xfc, 0x14, 0xf8, 0x33, + 0x99, 0x67, 0x7c, 0xf4, 0x28, 0xcc, 0xb3, 0x90, 0x84, 0xf4, 0xa2, 0x79, 0xe8, 0x4a, 0x7d, 0x46, + 0xdb, 0x21, 0x50, 0x68, 0x10, 0xe4, 0x46, 0xdb, 0xfb, 0x96, 0x96, 0xa8, 0x78, 0xc8, 0xdb, 0xa7, + 0xe6, 0x19, 0x14, 0x74, 0xe5, 0xa2, 0x80, 0xbe, 0x15, 0x24, 0x17, 0xb1, 0x2e, 0x2f, 0x82, 0x0f, + 0x31, 0x2e, 0xfe, 0x09, 0x74, 0x37, 0x4c, 0xf0, 0x08, 0xa7, 0x56, 0x5e, 0x51, 0x47, 0x34, 0xff, + 0x18, 0xeb, 0x67, 0x51, 0xca, 0xfc, 0x68, 0xba, 0x98, 0x7f, 0x9d, 0x83, 0xa6, 0x39, 0x96, 0x7d, + 0xe7, 0x8b, 0xbb, 0xeb, 0x1c, 0xe2, 0x6e, 0x8f, 0x44, 0x78, 0x2d, 0xf5, 0x51, 0x08, 0xbd, 0x0c, + 0xe2, 0xee, 0xb9, 0x30, 0x8e, 0xed, 0xb2, 0xe8, 0x1d, 0x20, 0x78, 0x26, 0xd9, 0x47, 0xa8, 0x33, + 0x83, 0x6b, 0x37, 0xe4, 0x99, 0x0e, 0xac, 0x38, 0x8a, 0x38, 0xe0, 0x7f, 0xc9, 0x45, 0xb3, 0x21, + 0xe0, 0xb6, 0xdb, 0xdc, 0xf1, 0xc7, 0x32, 0xf8, 0x4e, 0x10, 0x53, 0x14, 0x98, 0x17, 0xbf, 0x50, + 0x20, 0x47, 0x05, 0xe8, 0x94, 0x1c, 0x95, 0xf2, 0x09, 0xc1, 0x6e, 0x57, 0x72, 0x35, 0xb6, 0x85, + 0xc5, 0xf6, 0x25, 0x7c, 0xbe, 0x89, 0x83, 0x07, 0x5b, 0x21, 0x4f, 0x18, 0x99, 0x68, 0x11, 0xb9, + 0xd4, 0xc9, 0xf6, 0x18, 0xc4, 0xd3, 0xe1, 0x89, 0xac, 0xc4, 0x40, 0x67, 0x62, 0xa8, 0x27, 0x7d, + 0xfa, 0x94, 0xd1, 0xb5, 0x27, 0x31, 0x38, 0x98, 0x18, 0xde, 0x67, 0xc5, 0x5e, 0xc5, 0xbc, 0x93, + 0x39, 0x07, 0xcd, 0xbf, 0x4b, 0xb1, 0xd1, 0xee, 0x40, 0x64, 0x79, 0x28, 0x5c, 0xaf, 0x35, 0x18, + 0xdd, 0x38, 0xbd, 0x64, 0x67, 0x97, 0xd1, 0xdd, 0x61, 0x5c, 0x3c, 0x99, 0x18, 0xee, 0xbd, 0x1a, + 0xdb, 0xa2, 0x3a, 0x96, 0x2d, 0xbe, 0xe4, 0xf2, 0xad, 0xc0, 0xdc, 0xa0, 0x65, 0x55, 0x3d, 0x13, + 0xd6, 0x4b, 0xde, 0x09, 0x0f, 0x0b, 0xeb, 0x17, 0x74, 0xe5, 0x59, 0xf4, 0x8c, 0x94, 0xe9, 0x80, + 0x68, 0x62, 0x34, 0x5e, 0x17, 0x6b, 0x13, 0x01, 0xc6, 0xf3, 0x50, 0x91, 0x77, 0xdf, 0x3b, 0xff, + 0xda, 0xac, 0x1b, 0x9b, 0x96, 0x08, 0x47, 0x6b, 0x81, 0x6b, 0x33, 0x8f, 0x5c, 0x9b, 0x8b, 0x7f, + 0x82, 0x6d, 0xf1, 0xd6, 0x15, 0xfd, 0x66, 0x0c, 0xba, 0x22, 0x2c, 0xde, 0xc9, 0x37, 0x9b, 0x45, + 0x64, 0x89, 0xdf, 0x63, 0x3e, 0x46, 0x2f, 0x55, 0x1c, 0x75, 0x30, 0xc5, 0xd1, 0x9d, 0xe4, 0xe6, + 0x94, 0xf1, 0xdc, 0xed, 0x50, 0x97, 0xc5, 0x25, 0xe4, 0x3f, 0xe6, 0xa0, 0xfb, 0x41, 0x23, 0x6f, + 0x1f, 0x04, 0x2b, 0x43, 0x7f, 0x4c, 0xf4, 0xb0, 0x8a, 0x2a, 0x94, 0x73, 0xc6, 0xa4, 0x50, 0xc6, + 0xf1, 0x20, 0x89, 0x42, 0x79, 0x82, 0x5b, 0x89, 0x2c, 0x96, 0x5b, 0x31, 0xc7, 0x73, 0xa9, 0x7c, + 0xe7, 0x01, 0x2b, 0xe6, 0xb8, 0xc8, 0x2e, 0x9e, 0xb1, 0xe7, 0x20, 0x95, 0xf0, 0x50, 0xea, 0x86, + 0x34, 0xa2, 0x39, 0x0a, 0xb3, 0xee, 0x87, 0x5c, 0x44, 0x92, 0x06, 0x71, 0x7a, 0xb6, 0x91, 0xd6, + 0xce, 0x91, 0xcf, 0x0e, 0xdb, 0x6d, 0x19, 0x60, 0x59, 0xc5, 0xed, 0xb9, 0xe8, 0x81, 0x2c, 0xc3, + 0xdd, 0xf9, 0x17, 0xb4, 0xde, 0x76, 0x41, 0x47, 0x3b, 0x25, 0xec, 0x22, 0x03, 0xf7, 0x74, 0x01, + 0x0c, 0x07, 0xbb, 0x65, 0x74, 0xef, 0x4e, 0xf5, 0x6c, 0xe3, 0xed, 0x00, 0x20, 0xce, 0x03, 0x79, + 0xe7, 0x88, 0x8f, 0x49, 0xf6, 0x9d, 0x92, 0x17, 0xb9, 0x77, 0xde, 0x31, 0xe2, 0xc8, 0x67, 0x87, + 0xb3, 0x80, 0x7a, 0x5f, 0x21, 0x9a, 0x0a, 0xf7, 0xe5, 0x16, 0xbc, 0x7e, 0xe7, 0x72, 0x50, 0x21, + 0x7d, 0x48, 0xc8, 0xbb, 0xb7, 0x37, 0x47, 0x57, 0xba, 0x73, 0x24, 0x56, 0x2c, 0x6f, 0xcd, 0xa1, + 0xce, 0x43, 0x71, 0xa3, 0xed, 0x02, 0x5c, 0x58, 0x7b, 0x9a, 0xa4, 0xab, 0xb1, 0x2d, 0x7c, 0x65, + 0x62, 0xa8, 0x27, 0x31, 0x10, 0x33, 0x2e, 0x5d, 0xb0, 0x3d, 0x81, 0xe4, 0x2c, 0x08, 0x23, 0x4c, + 0x45, 0xd2, 0x4c, 0xce, 0x0a, 0xb2, 0x64, 0x16, 0xb3, 0x3c, 0x79, 0xee, 0x18, 0x98, 0xd4, 0xf1, + 0x03, 0x1b, 0x7b, 0xce, 0x24, 0x7b, 0x8f, 0xa6, 0xbf, 0xdb, 0x3a, 0xb2, 0xef, 0xf2, 0xb5, 0xa1, + 0x8e, 0xe4, 0x40, 0x6b, 0xaa, 0x7b, 0x3b, 0xbc, 0x79, 0xe6, 0x03, 0x7a, 0xf9, 0x53, 0x93, 0xd6, + 0xd8, 0x77, 0xd9, 0xe8, 0xde, 0x6d, 0x74, 0x7d, 0x43, 0xe2, 0xee, 0x63, 0x33, 0x3d, 0x73, 0xb9, + 0x1c, 0xf6, 0x85, 0x07, 0x37, 0xf5, 0xd5, 0x2e, 0xa3, 0x6d, 0x30, 0xfd, 0xd9, 0x57, 0xe6, 0x38, + 0x5f, 0xc4, 0xc1, 0x5d, 0xdf, 0xfc, 0xd4, 0x13, 0xdb, 0xb0, 0x0b, 0x38, 0x46, 0xdb, 0x38, 0x9e, + 0xaa, 0xf9, 0xa0, 0xb2, 0xfd, 0x10, 0x8f, 0x0a, 0x48, 0xa4, 0x51, 0x3d, 0xe0, 0xa0, 0xb0, 0xdc, + 0x02, 0xee, 0x73, 0x48, 0x57, 0x1a, 0x25, 0x8f, 0x6a, 0x79, 0x1d, 0x01, 0x05, 0x1c, 0x16, 0x04, + 0x06, 0x37, 0x59, 0xc0, 0xbe, 0xfd, 0xa9, 0x7d, 0x27, 0xcb, 0x7c, 0x51, 0x1a, 0xed, 0x7f, 0xe1, + 0xc8, 0xde, 0x58, 0xb2, 0x7f, 0x33, 0x34, 0x2b, 0xf1, 0x85, 0xb5, 0xa8, 0x3f, 0x10, 0x5c, 0x98, + 0x18, 0x6c, 0x4d, 0x9d, 0x1e, 0x1c, 0x39, 0x74, 0xa2, 0x14, 0xd2, 0x30, 0x91, 0x6a, 0x9c, 0x6b, + 0xdb, 0x3d, 0x97, 0x17, 0x4d, 0x93, 0xf7, 0x13, 0xa7, 0x69, 0xf2, 0x6f, 0x84, 0xa6, 0x11, 0xdb, + 0x04, 0x34, 0xbd, 0xc1, 0x7e, 0xd7, 0xea, 0x43, 0x61, 0x48, 0x5d, 0x52, 0x08, 0x6c, 0x97, 0x57, + 0xbd, 0xfc, 0x1c, 0x40, 0xb1, 0xb1, 0xe7, 0x20, 0x8c, 0x5a, 0xea, 0x83, 0xfd, 0x22, 0x9b, 0xc5, + 0x76, 0x8a, 0xf7, 0x17, 0x32, 0xe2, 0x9f, 0xc0, 0x36, 0xa9, 0x5e, 0x43, 0xd2, 0x70, 0xb9, 0xae, + 0xab, 0x3f, 0x2a, 0x5d, 0xf5, 0x75, 0x1e, 0x9a, 0xe6, 0xe8, 0x74, 0x8f, 0xa0, 0xfa, 0xa9, 0x12, + 0x54, 0x2f, 0xe9, 0xca, 0xf3, 0xe8, 0x59, 0xc9, 0x7d, 0xe0, 0x63, 0xa6, 0xa4, 0x2e, 0x4b, 0x68, + 0x2a, 0xcd, 0xc6, 0xcd, 0x9e, 0x17, 0x6f, 0xf3, 0x94, 0x52, 0xfe, 0x79, 0x79, 0x70, 0x14, 0xcd, + 0x98, 0x25, 0xe1, 0xe0, 0x33, 0xc4, 0x78, 0x68, 0xb4, 0xe6, 0x65, 0xd7, 0x68, 0xd9, 0xf5, 0x58, + 0x51, 0x97, 0x13, 0xd8, 0xeb, 0x37, 0xdf, 0x09, 0x8c, 0x2c, 0xdc, 0x52, 0x48, 0x3d, 0xed, 0xf0, + 0x02, 0x7b, 0x70, 0x14, 0x85, 0x14, 0x53, 0x3c, 0xd5, 0xd9, 0x7d, 0xbd, 0x9e, 0xbf, 0x41, 0x5f, + 0x2f, 0xb2, 0x20, 0xe2, 0xec, 0xf5, 0x82, 0x5b, 0x9b, 0xe5, 0xcb, 0xec, 0xec, 0x45, 0x4f, 0xc1, + 0xd2, 0x58, 0x55, 0x79, 0x68, 0xac, 0x1e, 0x1e, 0x45, 0x63, 0x45, 0x46, 0xe1, 0xf5, 0x53, 0x6f, + 0x7a, 0xe9, 0xa7, 0x9e, 0xb9, 0x61, 0xfd, 0x94, 0x5d, 0x0f, 0xf5, 0xba, 0x87, 0x1e, 0x6a, 0x99, + 0xae, 0x3c, 0x69, 0xd3, 0x43, 0x3d, 0xea, 0xd0, 0x43, 0xbd, 0xb9, 0x71, 0x59, 0xa4, 0xd4, 0x87, + 0x15, 0x4f, 0x6f, 0xf3, 0x6a, 0x29, 0x9b, 0x0e, 0x6a, 0xe3, 0xf5, 0xea, 0xa0, 0xee, 0x05, 0x12, + 0xbe, 0x2b, 0x02, 0x09, 0x3b, 0x71, 0xd8, 0x6d, 0x50, 0x7a, 0x71, 0xcc, 0xdc, 0xe4, 0x1b, 0x64, + 0xe6, 0xc4, 0x7f, 0x6a, 0x65, 0x4a, 0x01, 0x1d, 0x52, 0xbf, 0xa0, 0x2b, 0xef, 0xb2, 0xe0, 0xfe, + 0x6f, 0x91, 0xb5, 0xb3, 0x54, 0x29, 0x38, 0x63, 0x28, 0xfc, 0xac, 0x50, 0xab, 0x94, 0x35, 0xd5, + 0x35, 0x2b, 0xae, 0x0d, 0x75, 0x90, 0xac, 0x28, 0xd7, 0x86, 0x3a, 0x2a, 0xab, 0x56, 0x56, 0x91, + 0xc2, 0xe5, 0xca, 0xca, 0xb5, 0x6a, 0xd5, 0xb5, 0xa1, 0x0e, 0x96, 0x6e, 0x4e, 0x59, 0x53, 0xbd, + 0xba, 0x86, 0x36, 0xaa, 0xaa, 0xfc, 0xbe, 0xbc, 0x22, 0xac, 0xa8, 0x85, 0x74, 0x1c, 0x2b, 0xb9, + 0x4a, 0x21, 0x1d, 0xc5, 0xca, 0xae, 0x32, 0xd9, 0x3e, 0x88, 0x3a, 0x8e, 0x8c, 0xa1, 0xfe, 0x05, + 0x4b, 0x36, 0x30, 0xa6, 0xb8, 0xc4, 0xae, 0x63, 0xfb, 0x19, 0xc4, 0x25, 0x76, 0x7d, 0xf3, 0x5d, + 0x17, 0x97, 0x78, 0x2d, 0x2a, 0x84, 0xf8, 0x9b, 0x2c, 0x30, 0x31, 0x46, 0xfc, 0xac, 0x50, 0x96, + 0x9c, 0x91, 0x89, 0xcd, 0xb7, 0x11, 0xe7, 0xdf, 0x04, 0xc3, 0x1f, 0x3e, 0x50, 0x31, 0xeb, 0x25, + 0x7e, 0xeb, 0x15, 0xa9, 0xf8, 0x13, 0x41, 0x57, 0xba, 0xec, 0x4a, 0xd4, 0xd8, 0x4d, 0x57, 0xa2, + 0xde, 0xb6, 0xf8, 0xc4, 0x5e, 0x9e, 0x83, 0xb3, 0xee, 0x50, 0xcf, 0xc1, 0xd9, 0x3f, 0x31, 0xcf, + 0xc1, 0xa2, 0x9f, 0xae, 0xe7, 0xe0, 0x7d, 0x3f, 0x09, 0xcf, 0x41, 0x47, 0xdc, 0xdc, 0x39, 0x37, + 0x2f, 0x6e, 0xee, 0xb7, 0x02, 0x1a, 0xcf, 0x34, 0x95, 0x45, 0x73, 0xc7, 0xf8, 0x36, 0x79, 0x9a, + 0x20, 0x54, 0xfd, 0xe8, 0x26, 0x08, 0x6c, 0x06, 0xf1, 0x75, 0x2e, 0xf6, 0xea, 0xfd, 0xd4, 0x38, + 0xeb, 0x19, 0x2e, 0xf6, 0xea, 0xa2, 0xeb, 0x8a, 0xbd, 0xca, 0xc5, 0x5c, 0x75, 0x1b, 0x37, 0x3c, + 0x70, 0x4b, 0x8c, 0x1b, 0xfe, 0xe0, 0x8e, 0xb5, 0x3a, 0x6f, 0x54, 0x92, 0x1c, 0xbb, 0x4a, 0xb8, + 0xe2, 0xb0, 0xce, 0x1f, 0x35, 0x0e, 0xab, 0x3b, 0xfe, 0x6a, 0x83, 0xdd, 0x2e, 0xf2, 0x41, 0x12, + 0x93, 0xc9, 0x43, 0x0d, 0x1a, 0x08, 0x6e, 0x80, 0xc9, 0x6f, 0x52, 0x74, 0x56, 0xdf, 0x1d, 0x68, + 0xc1, 0xf1, 0x3e, 0x6f, 0xc1, 0x31, 0x7f, 0xd4, 0x63, 0xf8, 0x41, 0xd6, 0x1d, 0x51, 0x5b, 0x3a, + 0x29, 0x08, 0xf0, 0xbb, 0xc6, 0x24, 0xd3, 0xb9, 0x62, 0xb9, 0x82, 0x77, 0xc8, 0xe4, 0x73, 0x6a, + 0x97, 0x26, 0x8f, 0x0d, 0xe1, 0x78, 0x52, 0xf1, 0x85, 0xd1, 0x40, 0x93, 0xb6, 0xb8, 0x26, 0xf4, + 0xc1, 0xc2, 0x92, 0xc5, 0xcb, 0x43, 0xe1, 0x26, 0x7f, 0x14, 0x4a, 0xd4, 0xe5, 0x15, 0x8f, 0x3f, + 0xfe, 0xf8, 0x33, 0x25, 0x25, 0xb6, 0x24, 0x55, 0xe5, 0x96, 0x5d, 0xda, 0x43, 0x1c, 0x89, 0x4e, + 0xed, 0xd2, 0x44, 0x66, 0x97, 0xe6, 0x41, 0xa2, 0x53, 0xf3, 0xb4, 0x53, 0x02, 0x9a, 0x0c, 0xbb, + 0xca, 0x0e, 0x13, 0xe2, 0xf6, 0xfe, 0x51, 0x57, 0x7e, 0x27, 0x39, 0xaa, 0xe4, 0x80, 0x31, 0xfc, + 0x89, 0x63, 0x9f, 0x01, 0xd7, 0x25, 0x06, 0xe2, 0xf4, 0x6c, 0xb0, 0xe9, 0x48, 0xf6, 0x43, 0xb6, + 0x4c, 0xd5, 0x96, 0x80, 0x31, 0x09, 0x58, 0x93, 0xf3, 0x21, 0x6b, 0x55, 0xc7, 0xd4, 0x5e, 0xc1, + 0x71, 0x1f, 0xfe, 0xc9, 0x06, 0xc7, 0x7d, 0xcf, 0x0a, 0x22, 0xfb, 0xc8, 0xa8, 0x90, 0x8b, 0x23, + 0xd6, 0xb2, 0x00, 0xb3, 0x0b, 0xc6, 0x12, 0x60, 0x96, 0x05, 0x94, 0xbd, 0x17, 0xec, 0xf5, 0x7a, + 0xed, 0x7a, 0xfe, 0xa3, 0xa0, 0x2b, 0xff, 0x4e, 0x40, 0x7f, 0x2b, 0x48, 0x2e, 0x49, 0xa3, 0xfc, + 0xad, 0xe0, 0xe9, 0x73, 0x0d, 0x54, 0x43, 0xba, 0xff, 0x24, 0x38, 0x5c, 0x27, 0x06, 0x5b, 0xf9, + 0x2c, 0xd6, 0x44, 0x3b, 0xa7, 0x77, 0x24, 0x2e, 0x9f, 0x4d, 0xf6, 0x7d, 0xee, 0xad, 0x5e, 0x38, + 0xde, 0x61, 0x22, 0x22, 0x9c, 0x19, 0xf0, 0x6a, 0x6c, 0x0b, 0xf1, 0x01, 0x07, 0x87, 0x04, 0x9c, + 0x6a, 0x90, 0x89, 0x76, 0x53, 0x9f, 0x0e, 0x18, 0xad, 0xe7, 0x41, 0xf8, 0x87, 0x27, 0xbd, 0x98, + 0x3c, 0x76, 0x29, 0xd9, 0x79, 0x16, 0x1a, 0x93, 0x68, 0xf7, 0x34, 0x23, 0xa6, 0xdb, 0x01, 0xbc, + 0xf8, 0x9f, 0xe7, 0xa2, 0x69, 0x8e, 0xef, 0xba, 0xfb, 0x0c, 0x7f, 0x32, 0xd0, 0xf4, 0x6e, 0xc3, + 0x1f, 0xa6, 0x19, 0xf5, 0x90, 0xb6, 0xdf, 0xd6, 0x58, 0x6e, 0x65, 0x15, 0xba, 0xf2, 0x12, 0x7a, + 0x41, 0x72, 0x9f, 0x05, 0x55, 0x7e, 0xdb, 0x60, 0x2c, 0x83, 0x38, 0xfc, 0xdf, 0x09, 0x68, 0xa6, + 0xaa, 0x45, 0xc3, 0x1f, 0xb9, 0x32, 0xfb, 0x3d, 0xe5, 0x96, 0x89, 0x17, 0x65, 0x52, 0xb9, 0xf2, + 0x42, 0xef, 0xe7, 0x39, 0xad, 0x54, 0x0e, 0xb5, 0x85, 0xf6, 0x88, 0x5f, 0x98, 0x8e, 0xb5, 0x42, + 0x64, 0x1c, 0xa1, 0xa8, 0x81, 0x33, 0xb3, 0x79, 0x59, 0x57, 0xaa, 0x50, 0x85, 0xe4, 0xbd, 0x28, + 0x79, 0x1e, 0x64, 0xb9, 0x4c, 0x0c, 0xec, 0x32, 0xba, 0xf6, 0xb8, 0xe3, 0x26, 0xdb, 0xe0, 0xf4, + 0x8b, 0x5c, 0x34, 0xcb, 0x6b, 0x94, 0x3b, 0x1f, 0x58, 0x57, 0x8d, 0x0d, 0x58, 0xf1, 0x22, 0x00, + 0x58, 0x67, 0xc2, 0x83, 0xe4, 0xad, 0x14, 0x7a, 0x65, 0x0c, 0x4a, 0x21, 0x18, 0x0b, 0x7b, 0x64, + 0x5b, 0x63, 0xf1, 0x39, 0xb2, 0x41, 0xfd, 0x53, 0xb6, 0x56, 0x57, 0x54, 0x54, 0x2b, 0x65, 0xd8, + 0xd8, 0x2c, 0xe7, 0x93, 0xdd, 0xf2, 0x6d, 0x57, 0x0e, 0x9a, 0xb4, 0x42, 0x8b, 0x66, 0xd2, 0xf8, + 0xe7, 0xdc, 0x3c, 0x8d, 0x7f, 0x23, 0xb1, 0xb5, 0xc7, 0x8c, 0x10, 0x9c, 0x08, 0xa6, 0xf9, 0xad, + 0x52, 0xf9, 0x05, 0x37, 0x59, 0x60, 0x8b, 0xc1, 0xc5, 0xec, 0xe4, 0x77, 0x5b, 0x9a, 0x4d, 0xbc, + 0x65, 0x24, 0x30, 0xa2, 0x35, 0x54, 0xd9, 0x13, 0xba, 0xf2, 0x18, 0x5a, 0x22, 0xd9, 0xbf, 0x4d, + 0x16, 0xc1, 0x8d, 0x3d, 0x23, 0xe4, 0x9e, 0xca, 0x43, 0x93, 0xf9, 0x1e, 0x3f, 0x3b, 0x88, 0xd5, + 0x50, 0x3e, 0xe6, 0x9b, 0x32, 0xa1, 0xd3, 0x2a, 0x9e, 0xa9, 0x0a, 0xbe, 0x1b, 0x02, 0xa5, 0x05, + 0xf4, 0x91, 0xe7, 0x3b, 0x46, 0x36, 0x5a, 0x2f, 0x24, 0x06, 0xc9, 0xab, 0x47, 0x66, 0x81, 0x96, + 0xb7, 0x59, 0x97, 0xa9, 0xe8, 0xca, 0x0b, 0xe8, 0x39, 0xc9, 0x71, 0xd2, 0x0e, 0xe0, 0xc8, 0x7e, + 0x6d, 0x7e, 0x47, 0x88, 0x20, 0x6e, 0x2b, 0xc4, 0x0d, 0x68, 0x22, 0x55, 0xe4, 0x61, 0x29, 0x02, + 0xa0, 0x6e, 0xf3, 0xb1, 0x90, 0x6c, 0x15, 0x54, 0x74, 0x66, 0xc4, 0xf7, 0x19, 0xe7, 0xa8, 0x0c, + 0xaa, 0x67, 0x1b, 0xaf, 0x63, 0x5a, 0x18, 0xdd, 0xa8, 0x2d, 0xd9, 0xb8, 0x2c, 0xb2, 0x04, 0xeb, + 0x98, 0x4a, 0x54, 0x5b, 0xff, 0xe2, 0x1e, 0x01, 0x4d, 0xab, 0x78, 0x4f, 0xab, 0xdf, 0x88, 0x33, + 0xcb, 0x90, 0x88, 0x19, 0xe2, 0x8b, 0xa8, 0x30, 0x10, 0x0c, 0x6a, 0xe1, 0xea, 0xda, 0x48, 0x91, + 0x80, 0xc5, 0x83, 0x38, 0x76, 0x04, 0x2b, 0x94, 0x67, 0x00, 0x6f, 0x0e, 0x6e, 0xa0, 0x4c, 0x3e, + 0xc8, 0xea, 0xcb, 0x2a, 0x75, 0x45, 0x41, 0x2f, 0x4a, 0xee, 0xa1, 0xe5, 0x07, 0x93, 0x9f, 0xc7, + 0x92, 0x47, 0x4f, 0x06, 0x43, 0x0d, 0x1a, 0xb1, 0xc8, 0xc1, 0xa6, 0xd1, 0xeb, 0xeb, 0x89, 0xcc, + 0xf5, 0x8a, 0xc0, 0x46, 0x29, 0xbe, 0x90, 0x8b, 0x44, 0x7e, 0x84, 0x48, 0x73, 0x28, 0x18, 0xd1, + 0xee, 0xf4, 0x6b, 0xd4, 0xc8, 0xae, 0x91, 0x77, 0xf2, 0x48, 0xd7, 0x07, 0x2d, 0xae, 0xf4, 0x47, + 0xfd, 0x20, 0x9d, 0xc1, 0x29, 0xd2, 0xe1, 0x6e, 0x3d, 0x08, 0x83, 0xe3, 0x8d, 0xc2, 0x5b, 0x06, + 0xd3, 0x94, 0x6e, 0xd4, 0x3e, 0x4a, 0x1e, 0xec, 0xaf, 0xae, 0x85, 0x5b, 0x36, 0xa7, 0x0e, 0x8d, + 0x67, 0xdd, 0x3d, 0x08, 0xdc, 0xa5, 0x76, 0xda, 0x79, 0x8e, 0x97, 0x70, 0x4d, 0xc5, 0xeb, 0xe6, + 0x89, 0x5f, 0x62, 0x26, 0xeb, 0xb1, 0xf9, 0x74, 0xb7, 0x48, 0xe2, 0x29, 0xac, 0xc3, 0x71, 0x13, + 0x24, 0x57, 0x05, 0x84, 0xac, 0x91, 0xc5, 0x0a, 0x93, 0xcd, 0xa9, 0xfa, 0x30, 0x10, 0x81, 0xec, + 0xc7, 0x85, 0x24, 0x23, 0x20, 0x29, 0x93, 0xe7, 0x12, 0x41, 0x0f, 0x07, 0x0e, 0x54, 0x25, 0xd7, + 0xa7, 0xd2, 0x56, 0x62, 0xb9, 0xfb, 0x2d, 0xc1, 0x52, 0x0d, 0xee, 0x2d, 0x21, 0x50, 0x09, 0x5a, + 0x6d, 0x2f, 0xb2, 0x66, 0xa5, 0x5d, 0x97, 0x9f, 0x6b, 0xa5, 0xa5, 0xb7, 0xe9, 0xf2, 0x8b, 0xdc, + 0xe3, 0x78, 0xe8, 0xf5, 0x8b, 0xff, 0x5d, 0x0e, 0x9a, 0xbe, 0x36, 0x58, 0x11, 0x0a, 0x37, 0x84, + 0x82, 0xf0, 0xb5, 0x37, 0xe7, 0xf6, 0x88, 0x75, 0xee, 0x4f, 0x7d, 0x52, 0x57, 0x7e, 0xc1, 0x7f, + 0xea, 0x3c, 0x62, 0xa0, 0xc7, 0x16, 0x8a, 0x51, 0x15, 0xab, 0xc7, 0xe1, 0x41, 0x7c, 0x02, 0xff, + 0xed, 0x61, 0x9a, 0x54, 0x30, 0x17, 0x2f, 0xe9, 0x2d, 0x5d, 0xf9, 0x15, 0x4d, 0x2a, 0x58, 0x4b, + 0xd6, 0x83, 0xbf, 0x11, 0x56, 0x73, 0x6d, 0xa8, 0xc3, 0xd0, 0x3b, 0xbc, 0xd6, 0x99, 0x88, 0x77, + 0x8c, 0xc4, 0xda, 0x13, 0x03, 0x31, 0x93, 0x83, 0x19, 0x3a, 0x68, 0xb4, 0xb6, 0xb9, 0x7b, 0x93, + 0x8c, 0x84, 0xd4, 0x1e, 0xc8, 0x6b, 0x97, 0xe4, 0xb9, 0x20, 0x55, 0x25, 0x9d, 0xbb, 0xfa, 0xd3, + 0xdf, 0x6c, 0x35, 0xe2, 0xa7, 0x00, 0xa2, 0x8a, 0xaf, 0xe4, 0xa0, 0x19, 0xf6, 0x4e, 0x77, 0xc7, + 0xdd, 0xb7, 0x47, 0xe2, 0x79, 0xc8, 0xeb, 0xb6, 0xad, 0x6e, 0x26, 0x8a, 0xe2, 0x3a, 0xac, 0x71, + 0x24, 0xd9, 0xd7, 0xf1, 0x95, 0x27, 0x63, 0x12, 0x0a, 0x04, 0xec, 0x35, 0xab, 0x75, 0x65, 0x39, + 0xaa, 0x94, 0x3c, 0x77, 0x43, 0x9e, 0xcb, 0x43, 0x81, 0x63, 0x0f, 0xdd, 0xb7, 0xf2, 0xdf, 0xe6, + 0xa0, 0x69, 0xf7, 0xa0, 0x35, 0x33, 0xb4, 0x2e, 0xd3, 0x95, 0x27, 0xd1, 0xe3, 0x92, 0x7b, 0x8f, + 0xe4, 0x79, 0x3c, 0xac, 0x26, 0x06, 0x3a, 0x9d, 0xe0, 0xfa, 0x37, 0x39, 0x48, 0xbc, 0x07, 0xac, + 0xfe, 0xb2, 0x57, 0x74, 0x65, 0x05, 0xaa, 0x92, 0x3c, 0xf6, 0xc2, 0x0e, 0x02, 0xee, 0x2d, 0x74, + 0x43, 0x6b, 0x3c, 0x8f, 0x4a, 0x28, 0x78, 0x68, 0xad, 0x76, 0x41, 0xeb, 0xa2, 0x31, 0x40, 0xeb, + 0xf7, 0xe5, 0xe3, 0x74, 0x21, 0xaf, 0x50, 0x98, 0xda, 0xc0, 0xc1, 0xed, 0x25, 0xcb, 0x6a, 0x01, + 0x76, 0xfb, 0x98, 0xa0, 0x2b, 0xaf, 0x33, 0xab, 0x85, 0x1a, 0x7e, 0xc1, 0xb0, 0xc8, 0x85, 0x76, + 0xfb, 0x81, 0x25, 0xc4, 0xd4, 0x60, 0x09, 0xb5, 0x34, 0x58, 0xa2, 0x54, 0x56, 0x2e, 0x22, 0xc6, + 0x06, 0x4b, 0xd4, 0xaa, 0x55, 0xab, 0xd7, 0x55, 0xd1, 0x9f, 0x25, 0xdf, 0x97, 0x97, 0x87, 0x5f, + 0x72, 0x5b, 0x20, 0xb8, 0xad, 0x15, 0x26, 0x70, 0x83, 0xa8, 0x93, 0xed, 0xa3, 0x30, 0x33, 0x05, + 0x15, 0x4d, 0x60, 0xb9, 0xa8, 0x58, 0x10, 0xa3, 0xa5, 0xba, 0xb2, 0x48, 0xe2, 0xcb, 0x33, 0xdc, + 0x3b, 0xb3, 0x05, 0x84, 0xd6, 0xe1, 0x1b, 0x8b, 0x2b, 0xf9, 0x7b, 0x9c, 0x47, 0x9d, 0x17, 0xaf, + 0xe7, 0x1e, 0xf3, 0x17, 0x78, 0x99, 0x65, 0x57, 0x92, 0x4f, 0x4d, 0xe6, 0x66, 0x58, 0x76, 0x25, + 0xe3, 0xc9, 0x48, 0xb1, 0x56, 0x7a, 0xf9, 0x99, 0x6b, 0x40, 0xb9, 0xae, 0xbc, 0x88, 0x9e, 0x97, + 0xdc, 0x87, 0x2f, 0x3f, 0x00, 0x3e, 0x8a, 0x38, 0xae, 0x46, 0x2d, 0x0c, 0x80, 0x6f, 0x2e, 0xc0, + 0x20, 0x4f, 0x39, 0xfe, 0x5d, 0x0e, 0x12, 0xf9, 0xfe, 0x77, 0xc7, 0x85, 0xfc, 0xa5, 0xed, 0x42, + 0x7a, 0xd2, 0x6a, 0xe4, 0x1e, 0xe2, 0xd0, 0x2f, 0x70, 0x0f, 0xef, 0x87, 0x8d, 0x48, 0xb6, 0x75, + 0x1b, 0x3b, 0x8f, 0x1a, 0x7a, 0x87, 0x71, 0xe2, 0x5c, 0xfa, 0xdb, 0x93, 0xe4, 0x98, 0xc9, 0xbd, + 0xac, 0xd3, 0x95, 0x5a, 0x54, 0x23, 0x79, 0x6c, 0x89, 0xfc, 0x28, 0x2f, 0x66, 0x22, 0x2a, 0x54, + 0xbc, 0x36, 0xcb, 0xae, 0x02, 0x53, 0x64, 0xee, 0x0b, 0xfa, 0x02, 0xd0, 0x78, 0xb0, 0x22, 0xb1, + 0x08, 0x8d, 0x8b, 0xb4, 0xd4, 0xd7, 0x6b, 0x11, 0x72, 0x2f, 0x55, 0xfa, 0x53, 0x9c, 0x85, 0x0a, + 0xde, 0xf5, 0x07, 0x1a, 0xb1, 0x6d, 0xbe, 0x59, 0x41, 0x7e, 0x15, 0xff, 0x8b, 0x1c, 0x34, 0xc7, + 0x26, 0xf6, 0x5a, 0x85, 0xf5, 0x7a, 0xf4, 0xa6, 0x3f, 0xe7, 0x16, 0x5d, 0x61, 0xab, 0x4b, 0x0e, + 0x1c, 0x27, 0x33, 0x17, 0x77, 0xa2, 0x74, 0xb4, 0xc0, 0xef, 0x2d, 0x54, 0x00, 0x6a, 0x42, 0x42, + 0xf8, 0x3e, 0x90, 0x81, 0x9b, 0x85, 0x39, 0xcb, 0x1f, 0xd6, 0x95, 0x62, 0x89, 0xf4, 0xa0, 0xe9, + 0x76, 0x40, 0xdf, 0x08, 0xba, 0x47, 0x32, 0x01, 0x69, 0x21, 0x3e, 0xeb, 0x72, 0x44, 0x7b, 0x30, + 0x53, 0x7a, 0x0f, 0x0a, 0xde, 0x96, 0x70, 0x6c, 0x9d, 0xae, 0xd4, 0xa1, 0xd7, 0xa4, 0x2c, 0xdf, + 0x4e, 0xef, 0x59, 0xa6, 0x75, 0x38, 0xd2, 0xfe, 0xc0, 0xa2, 0x8a, 0xaf, 0xe5, 0xa0, 0xb9, 0x9e, + 0x63, 0xde, 0x1d, 0xc0, 0x6f, 0xb7, 0xa6, 0x1e, 0xe5, 0xbc, 0xf8, 0x50, 0x86, 0xcc, 0x31, 0x28, + 0x35, 0x7c, 0xd6, 0x76, 0x5a, 0x00, 0xfb, 0xbf, 0xd2, 0x95, 0x75, 0x68, 0x8d, 0x94, 0x6d, 0x6b, + 0xe4, 0x05, 0xd9, 0xf7, 0x3b, 0x93, 0xdc, 0xf5, 0x34, 0x96, 0xbb, 0xd6, 0x87, 0xc2, 0x0d, 0xe6, + 0x45, 0x30, 0x19, 0x77, 0x0a, 0xbc, 0x6b, 0x29, 0xf9, 0x22, 0x60, 0x26, 0x70, 0x86, 0xd7, 0x55, + 0x36, 0xb9, 0xa0, 0xb9, 0x94, 0xa8, 0x11, 0xc9, 0xd5, 0xeb, 0x3f, 0x95, 0xdc, 0xda, 0x4a, 0x1f, + 0xad, 0x42, 0x5d, 0xc8, 0x2f, 0x14, 0xa6, 0xa6, 0xc7, 0x39, 0xe8, 0x69, 0xef, 0x49, 0xe5, 0x69, + 0x10, 0xd1, 0xc7, 0x86, 0x12, 0xa1, 0x63, 0xb1, 0x21, 0x60, 0x61, 0x14, 0xff, 0x92, 0x3e, 0x8f, + 0xc6, 0x11, 0x74, 0x49, 0x6e, 0xd7, 0x43, 0xba, 0x72, 0x9f, 0x44, 0xcb, 0xe4, 0xc9, 0xf6, 0x77, + 0x14, 0x83, 0xf1, 0x87, 0x82, 0x4a, 0xeb, 0xc5, 0xd7, 0xd0, 0xb8, 0xc8, 0x7b, 0xa1, 0x0f, 0x6a, + 0x3f, 0xa0, 0x2e, 0x37, 0x58, 0xbf, 0x4d, 0xcb, 0xe4, 0x12, 0xd2, 0xbd, 0x7f, 0x7b, 0xea, 0xd8, + 0x66, 0xc2, 0xd9, 0x9d, 0xdb, 0x97, 0x3a, 0x11, 0x5f, 0x48, 0x75, 0x72, 0x9d, 0xf0, 0xbb, 0x44, + 0xa5, 0x7d, 0x78, 0x59, 0x0a, 0x8f, 0xf5, 0x7d, 0x24, 0xda, 0x12, 0x59, 0x09, 0x89, 0x1e, 0x49, + 0xb6, 0x0b, 0xc4, 0x6e, 0x74, 0x55, 0xc5, 0xff, 0x2a, 0x07, 0x4d, 0x61, 0xdd, 0xef, 0x0e, 0xb8, + 0x7f, 0xc5, 0x26, 0x2e, 0xf0, 0x86, 0x14, 0x4f, 0x91, 0x1b, 0x21, 0xa5, 0x78, 0x58, 0x27, 0x5e, + 0x75, 0xce, 0x2d, 0x90, 0xe7, 0xdb, 0x36, 0x6d, 0x4c, 0xe8, 0x9d, 0x4a, 0xa7, 0x8e, 0x09, 0x48, + 0x24, 0xc3, 0xf1, 0x00, 0xfe, 0xc3, 0xa0, 0x87, 0xa6, 0xda, 0xf2, 0x18, 0x59, 0x7e, 0x24, 0xdb, + 0x71, 0x9b, 0xb7, 0x83, 0xe2, 0x40, 0x76, 0xe8, 0xa9, 0x1c, 0x34, 0xdd, 0x36, 0xd0, 0xdd, 0x71, + 0xf0, 0x35, 0x36, 0x84, 0x57, 0xe4, 0x75, 0xf0, 0x58, 0x2c, 0x3a, 0xd6, 0xc3, 0xf7, 0xeb, 0xca, + 0xaf, 0xd1, 0x5b, 0x92, 0xd7, 0x56, 0xc8, 0x8b, 0x32, 0x6d, 0xe3, 0xf5, 0x01, 0x43, 0x2c, 0x07, + 0xde, 0x7c, 0x12, 0x4b, 0xee, 0x4d, 0x34, 0x91, 0x3a, 0x6e, 0x71, 0x52, 0x4a, 0x8c, 0x08, 0x6c, + 0x15, 0xf2, 0x82, 0x64, 0x6f, 0xdc, 0x38, 0xb2, 0x0b, 0xa6, 0x34, 0xfa, 0x0e, 0xa4, 0xbe, 0x3e, + 0x95, 0x18, 0xf8, 0x13, 0x33, 0x05, 0x26, 0xa6, 0x00, 0xb6, 0x3e, 0xe2, 0x2f, 0x50, 0x6e, 0x45, + 0xed, 0x5a, 0x7c, 0x12, 0x93, 0x60, 0x3b, 0xcd, 0xdf, 0xf2, 0x14, 0xf8, 0x86, 0x8a, 0xda, 0xb5, + 0xe4, 0xe3, 0xcd, 0x52, 0x71, 0x31, 0xca, 0x6d, 0xd2, 0x9a, 0xf0, 0xde, 0x4f, 0x82, 0xe8, 0xe0, + 0xe6, 0x6f, 0x8a, 0x55, 0x8d, 0xed, 0xad, 0x46, 0xdf, 0x41, 0xda, 0xbe, 0x49, 0x6b, 0x12, 0x97, + 0xa1, 0xdc, 0x15, 0xb5, 0x6b, 0xf1, 0xd6, 0x4f, 0x02, 0x7d, 0xa1, 0xf9, 0x5b, 0xbe, 0x1f, 0xda, + 0xaf, 0xa0, 0x83, 0xf3, 0x2b, 0x5c, 0xaa, 0x9a, 0x4d, 0x8a, 0x07, 0x27, 0xa0, 0x42, 0xba, 0xbd, + 0xe2, 0x1b, 0xa8, 0xd0, 0xc4, 0xaf, 0x35, 0x56, 0xf0, 0xea, 0x17, 0x74, 0xe5, 0x59, 0x89, 0x15, + 0xca, 0x4b, 0x78, 0x6e, 0xb3, 0xd4, 0x97, 0x3c, 0xda, 0x9d, 0x88, 0x7f, 0xca, 0xcc, 0x0a, 0x60, + 0xb7, 0xf9, 0x26, 0x2a, 0xeb, 0x2a, 0xbe, 0x0f, 0x63, 0xe3, 0x8d, 0xcd, 0xb1, 0xcc, 0x9a, 0x58, + 0xa1, 0xfc, 0x22, 0x61, 0x4d, 0x88, 0xf5, 0x3d, 0x49, 0xe0, 0x8d, 0x2d, 0x45, 0xc9, 0x90, 0x7a, + 0x47, 0x75, 0x65, 0x05, 0xfc, 0xbd, 0xb0, 0x62, 0xdd, 0xaa, 0x25, 0xd5, 0x95, 0x15, 0x25, 0xa5, + 0x46, 0x57, 0x3f, 0xd9, 0x6f, 0x36, 0x94, 0xb8, 0x0c, 0x15, 0x60, 0xa2, 0x9a, 0x72, 0x12, 0x18, + 0xe4, 0x48, 0x91, 0x3c, 0x9d, 0xc0, 0x5a, 0x7c, 0x0f, 0x3d, 0x9f, 0xea, 0x4a, 0x95, 0x54, 0x8a, + 0xcf, 0x58, 0x78, 0x80, 0x73, 0x33, 0x61, 0x78, 0x60, 0x1a, 0x8f, 0x07, 0x12, 0x03, 0x83, 0xd5, + 0xb5, 0xd6, 0x0b, 0xb2, 0x9c, 0x27, 0xf0, 0xf2, 0xa9, 0x61, 0xcb, 0xc3, 0x3c, 0x81, 0x57, 0xe4, + 0xe0, 0x34, 0x2a, 0xbc, 0x38, 0x8d, 0xc7, 0x50, 0xee, 0xba, 0xda, 0x0a, 0xe2, 0x54, 0x82, 0xa7, + 0x37, 0x7f, 0xcb, 0x33, 0x1d, 0x7d, 0xd7, 0xd5, 0x56, 0xf8, 0xaa, 0x2b, 0x55, 0xb3, 0x4e, 0x7c, + 0x93, 0xf9, 0xc6, 0x8c, 0xb3, 0x04, 0xeb, 0xd4, 0x37, 0xe6, 0x29, 0xbe, 0x23, 0xc4, 0x19, 0xb1, + 0xec, 0x21, 0x2f, 0x5d, 0x36, 0x2e, 0x9a, 0xd7, 0x25, 0x79, 0xf1, 0x9c, 0xd1, 0x7b, 0xde, 0x84, + 0x8f, 0x9d, 0xc7, 0x8c, 0x8b, 0x47, 0x52, 0x7d, 0xed, 0xcc, 0x7f, 0x66, 0x35, 0x2a, 0x6c, 0xd0, + 0x36, 0x05, 0xcc, 0x6d, 0x22, 0x0e, 0x26, 0x8f, 0xeb, 0xca, 0x52, 0x89, 0x15, 0xca, 0x0b, 0x2a, + 0x14, 0x96, 0x5c, 0x3e, 0x7d, 0xf6, 0x3b, 0xe3, 0xc4, 0x8e, 0xea, 0x4a, 0xa3, 0xeb, 0x22, 0x0e, + 0xc4, 0x62, 0xdd, 0x06, 0xd6, 0x5e, 0xfc, 0xd6, 0x62, 0x54, 0xc1, 0xa9, 0xe4, 0x53, 0x41, 0x57, + 0x0e, 0x08, 0x8c, 0x53, 0xed, 0x10, 0x78, 0x26, 0x95, 0xc4, 0x50, 0xb1, 0x33, 0x9a, 0x3e, 0x48, + 0xa6, 0x9c, 0x18, 0xe8, 0xb3, 0x0c, 0xed, 0x7d, 0x60, 0xc3, 0x99, 0x18, 0xe8, 0x2b, 0xf5, 0x81, + 0x21, 0xbc, 0x59, 0x48, 0xbc, 0x5f, 0xcd, 0x42, 0x8e, 0x11, 0x25, 0xfd, 0x81, 0xb7, 0xa0, 0xcd, + 0xb9, 0xca, 0x5d, 0xac, 0xb2, 0x84, 0xf1, 0xa8, 0x07, 0x05, 0x34, 0x99, 0x7e, 0x26, 0x89, 0x5b, + 0x89, 0x32, 0x33, 0x36, 0x24, 0x2d, 0x3e, 0xb6, 0xa6, 0x72, 0x74, 0xa3, 0x90, 0xce, 0xdb, 0xbd, + 0x33, 0x03, 0xb3, 0xe4, 0xc1, 0x7e, 0x40, 0x2e, 0x57, 0x63, 0x9b, 0x2b, 0x6a, 0xd7, 0x5e, 0x8d, + 0x6d, 0x5e, 0x55, 0xb5, 0xea, 0x6a, 0x6c, 0xf3, 0x8a, 0xda, 0xb5, 0xa9, 0xbe, 0x76, 0x72, 0xe7, + 0x1d, 0x03, 0x8a, 0x1d, 0x02, 0x2a, 0xfc, 0x38, 0x14, 0x04, 0xaf, 0xd2, 0x09, 0xde, 0xf8, 0xf7, + 0x0d, 0x52, 0x0f, 0x1e, 0x94, 0xac, 0xb9, 0xbc, 0x82, 0x49, 0xdb, 0x20, 0x47, 0xbe, 0x85, 0x29, + 0x70, 0xc8, 0x2e, 0xb3, 0x9d, 0x79, 0x7f, 0xaf, 0x0d, 0x75, 0xe0, 0x2e, 0x95, 0x0b, 0xfd, 0xcd, + 0x8b, 0x22, 0xef, 0x69, 0xc1, 0x8f, 0xdf, 0xd3, 0x82, 0x8b, 0x9e, 0xf0, 0x2d, 0xf1, 0x3d, 0xfe, + 0xf4, 0xd2, 0xa5, 0x4b, 0x9f, 0x28, 0x51, 0xd9, 0x90, 0x62, 0xab, 0x80, 0xf2, 0x31, 0x43, 0x8e, + 0x9d, 0x56, 0xb2, 0xa6, 0xad, 0xc6, 0xfb, 0x03, 0x8d, 0xe5, 0x97, 0x1d, 0x10, 0xce, 0x5a, 0xf9, + 0xaa, 0x2b, 0xed, 0xc0, 0xb4, 0x30, 0x31, 0xd8, 0x5a, 0xa1, 0x90, 0x85, 0x0f, 0xeb, 0x38, 0xb0, + 0xe1, 0x6e, 0xc6, 0xfb, 0x97, 0xa8, 0x30, 0xa0, 0xb8, 0x8d, 0x58, 0xe4, 0xd2, 0xac, 0xda, 0x38, + 0x0c, 0x9a, 0x47, 0xba, 0xc7, 0x1a, 0xae, 0x0d, 0xe4, 0xbd, 0xb6, 0x75, 0x63, 0x58, 0x8f, 0xea, + 0x5e, 0xf9, 0xbc, 0xdd, 0x5c, 0x40, 0x22, 0x0e, 0xf3, 0xf3, 0xdd, 0x29, 0xc5, 0xce, 0xd0, 0xac, + 0xfc, 0x32, 0xf1, 0xba, 0x71, 0xbd, 0x5e, 0x4e, 0x33, 0xc3, 0xfe, 0x4b, 0xc9, 0xdd, 0x27, 0x8d, + 0xf6, 0xce, 0xd4, 0x57, 0xfd, 0xc9, 0xb6, 0xfd, 0xc6, 0x89, 0xfd, 0x23, 0x5b, 0xcf, 0xa4, 0xce, + 0x0f, 0xa6, 0x06, 0x8f, 0x82, 0x6a, 0xac, 0xf8, 0x1f, 0x08, 0x68, 0xc6, 0xca, 0x40, 0x24, 0x6a, + 0x33, 0xa8, 0x54, 0xb5, 0xdf, 0x8a, 0x61, 0x34, 0xd1, 0x24, 0x43, 0xd7, 0x51, 0x7b, 0x4e, 0xc1, + 0x52, 0x2a, 0xdb, 0x2a, 0xe4, 0x67, 0x81, 0x6c, 0xdd, 0x44, 0xb6, 0x84, 0x99, 0x93, 0xbe, 0x17, + 0x8a, 0x44, 0x79, 0x0b, 0x42, 0x42, 0xe7, 0x1a, 0xad, 0x67, 0x46, 0xb6, 0x9e, 0xa1, 0xa4, 0xae, + 0x6d, 0x28, 0x1a, 0x17, 0xd4, 0x73, 0x41, 0x72, 0x11, 0xbc, 0xd8, 0xbc, 0x55, 0x28, 0xb0, 0x05, + 0xc5, 0xff, 0x21, 0x17, 0xcd, 0xf4, 0xe8, 0x72, 0xe7, 0xeb, 0x97, 0xed, 0x94, 0x6e, 0x46, 0xfd, + 0x32, 0xe4, 0x7f, 0xc0, 0xf4, 0x8e, 0xc8, 0xab, 0x95, 0x89, 0xb0, 0x16, 0x94, 0xcb, 0x31, 0x21, + 0x93, 0xda, 0x77, 0x5e, 0x76, 0xb5, 0x2f, 0xb1, 0xc3, 0x75, 0x2a, 0x7d, 0xe7, 0xf3, 0x4a, 0x5f, + 0x70, 0x44, 0x1c, 0x63, 0x98, 0x78, 0xef, 0xb3, 0x90, 0xe7, 0x65, 0x3a, 0xbf, 0x51, 0xb4, 0xc1, + 0xff, 0x1b, 0x39, 0xdd, 0x5a, 0x92, 0xc3, 0xc4, 0x02, 0xd1, 0xe7, 0x79, 0x17, 0x4a, 0xc1, 0x92, + 0x3a, 0x78, 0xbb, 0x50, 0xe6, 0x85, 0x73, 0x8a, 0x1a, 0x78, 0x0f, 0xca, 0x17, 0xd8, 0x9b, 0x07, + 0x67, 0xfd, 0xc8, 0xa8, 0x01, 0x4a, 0x61, 0x08, 0xfa, 0xac, 0xdd, 0x96, 0x54, 0x86, 0xbb, 0x05, + 0x4e, 0xd2, 0x02, 0x04, 0x06, 0xf6, 0xd2, 0xb0, 0x24, 0x2d, 0xf5, 0xcc, 0x10, 0x69, 0x61, 0x62, + 0xe8, 0x98, 0xd1, 0xb5, 0x25, 0x79, 0xe0, 0x02, 0x50, 0xc9, 0xe9, 0xfe, 0x93, 0x24, 0xfe, 0x16, + 0xb6, 0x83, 0xb3, 0x12, 0xcd, 0xe0, 0xe3, 0x24, 0x78, 0x08, 0xdb, 0xe0, 0x1d, 0x03, 0x77, 0x77, + 0xe8, 0xc6, 0x9f, 0x15, 0x34, 0x2a, 0xe1, 0x84, 0x37, 0x44, 0x38, 0xe9, 0x7d, 0x44, 0xf2, 0x02, + 0x62, 0x42, 0x82, 0x53, 0xd9, 0xc0, 0x59, 0x24, 0x06, 0x76, 0x59, 0x46, 0x0c, 0x70, 0x81, 0x77, + 0x14, 0xa0, 0x59, 0x5e, 0xfd, 0x7f, 0x5e, 0x37, 0x78, 0x48, 0x40, 0x53, 0x49, 0x7f, 0xcb, 0xa9, + 0xa1, 0x00, 0x0f, 0xfc, 0x9c, 0x73, 0x60, 0xef, 0xdd, 0xa2, 0xf3, 0x39, 0x3c, 0x1c, 0x54, 0x5d, + 0x59, 0x2d, 0xb9, 0x86, 0x96, 0x9f, 0xe5, 0x0d, 0x49, 0x6c, 0xe6, 0xfe, 0xa4, 0x29, 0xfe, 0xd6, + 0x6d, 0x89, 0x4b, 0xbb, 0xc0, 0x93, 0x12, 0x24, 0x28, 0x70, 0xa0, 0xaa, 0x6b, 0x38, 0x71, 0x8b, + 0x07, 0x02, 0x2a, 0x1c, 0xa3, 0xdd, 0xc9, 0xcd, 0x42, 0x41, 0x73, 0x7e, 0x8d, 0x66, 0x7a, 0xee, + 0x81, 0x87, 0x21, 0xc0, 0x12, 0xbb, 0x21, 0xc0, 0x7d, 0x9e, 0xd6, 0x38, 0x98, 0x67, 0xe4, 0xec, + 0x00, 0x7e, 0xad, 0x2b, 0x6f, 0xa2, 0x5f, 0x49, 0x19, 0xa0, 0x55, 0x7e, 0x14, 0x70, 0x9c, 0x03, + 0xdc, 0xaf, 0x03, 0xd9, 0x1d, 0x9c, 0x86, 0x26, 0x63, 0xf4, 0x69, 0x61, 0xb9, 0x15, 0x5e, 0xee, + 0xf6, 0x0f, 0x8f, 0x16, 0x40, 0x1a, 0x50, 0xd5, 0xed, 0x4f, 0xbd, 0xfa, 0x82, 0xc3, 0xe9, 0xfe, + 0x7a, 0x91, 0xec, 0x8f, 0x91, 0x67, 0xf5, 0x79, 0xb7, 0xeb, 0xfd, 0xf5, 0xbc, 0x1b, 0x95, 0x1e, + 0x9e, 0xf7, 0x0b, 0x46, 0xf1, 0xbc, 0x87, 0x41, 0x7e, 0x1c, 0xc7, 0xfb, 0xa8, 0x16, 0x89, 0xde, + 0x32, 0xc7, 0xfb, 0x9b, 0x9e, 0x2b, 0xf5, 0x9e, 0x73, 0xfd, 0x4d, 0x72, 0xae, 0xff, 0x27, 0x16, + 0x53, 0x0c, 0xc1, 0x9a, 0xcf, 0xde, 0x4a, 0x9f, 0xf3, 0xf2, 0xf0, 0x4b, 0xd9, 0x7d, 0xce, 0x0b, + 0x60, 0x90, 0xb1, 0xb8, 0x9c, 0x3f, 0x8b, 0x0a, 0x42, 0xef, 0xbe, 0x1b, 0xd1, 0xa2, 0xd8, 0x01, + 0x7f, 0x12, 0x48, 0x52, 0x49, 0x91, 0x3c, 0x85, 0x90, 0x91, 0x9b, 0xbb, 0x52, 0xa7, 0x07, 0x47, + 0x76, 0x74, 0x7d, 0x5f, 0x9e, 0x27, 0xe5, 0x2c, 0xfc, 0x0b, 0x95, 0xd4, 0x8b, 0xcf, 0xa1, 0xfc, + 0xc6, 0x40, 0x53, 0x20, 0x8a, 0x1d, 0xef, 0xb1, 0x28, 0x6b, 0xae, 0x04, 0x25, 0xcc, 0x06, 0x11, + 0xc7, 0x6e, 0x4b, 0xee, 0xfb, 0x06, 0xf7, 0xce, 0x97, 0x72, 0x8b, 0xd2, 0xe3, 0x54, 0x68, 0x62, + 0x27, 0xaf, 0xa6, 0xde, 0x7e, 0xf2, 0x4a, 0xac, 0xe2, 0x7c, 0xb4, 0xa7, 0xe1, 0xf5, 0x94, 0xe8, + 0xca, 0x83, 0x9c, 0x8f, 0xf6, 0x74, 0x92, 0x10, 0x23, 0x7d, 0x79, 0x47, 0x72, 0x90, 0x04, 0x8a, + 0xa1, 0xf8, 0xc6, 0xf2, 0xc9, 0xbe, 0x5d, 0x51, 0x8f, 0xfd, 0x6e, 0xc7, 0xc0, 0xe9, 0x96, 0x72, + 0xe4, 0xa6, 0x38, 0xff, 0xd9, 0x2c, 0xfa, 0x67, 0x8c, 0xdd, 0xa2, 0xbf, 0x5d, 0x40, 0xb9, 0xfe, + 0xc6, 0x46, 0x1c, 0x95, 0xb8, 0xb0, 0xfc, 0x03, 0x5d, 0x89, 0x4a, 0xe6, 0x6f, 0xb9, 0x89, 0x84, + 0x7b, 0x22, 0x94, 0x6b, 0x7b, 0xcc, 0x7c, 0x5d, 0xec, 0xf6, 0xbc, 0xa5, 0x46, 0x47, 0x6b, 0x72, + 0xd7, 0xd7, 0xe9, 0xcf, 0xbe, 0x4a, 0x0f, 0xf7, 0x3b, 0x02, 0x17, 0x3d, 0xeb, 0xc3, 0xeb, 0x64, + 0x03, 0x8c, 0x1c, 0x3e, 0x42, 0x20, 0x1c, 0xee, 0x9a, 0xd3, 0x34, 0xd8, 0x9c, 0xb3, 0xec, 0xb8, + 0xa0, 0x2b, 0x87, 0x05, 0xd4, 0x23, 0x48, 0x8e, 0xd7, 0x5f, 0xde, 0x21, 0x18, 0x6d, 0x5f, 0x98, + 0x60, 0x75, 0xf8, 0x78, 0x62, 0xf0, 0x02, 0x7f, 0xc8, 0x84, 0x9e, 0xa0, 0x5e, 0x36, 0x84, 0xf2, + 0xc0, 0xcd, 0x12, 0x03, 0x71, 0x25, 0xd8, 0x60, 0xb4, 0x9e, 0x4f, 0x9d, 0x1f, 0xb4, 0x82, 0x1d, + 0x1d, 0xed, 0x1e, 0x39, 0x7e, 0x89, 0x6f, 0x66, 0xc4, 0x86, 0x40, 0xdc, 0x60, 0xb6, 0x69, 0x3b, + 0x64, 0x5c, 0x1e, 0x4e, 0xed, 0x3b, 0x49, 0xa2, 0xa8, 0xed, 0x3d, 0x93, 0xec, 0x3b, 0xc1, 0x4f, + 0x5a, 0xfc, 0x77, 0xf9, 0x68, 0x8a, 0x6d, 0x71, 0x3f, 0x2f, 0xea, 0xfc, 0xcf, 0x99, 0xa9, 0xf3, + 0x27, 0xbd, 0xa8, 0xf3, 0x3b, 0x85, 0x2c, 0x8f, 0x65, 0x24, 0xcb, 0x6f, 0x95, 0x5c, 0xe0, 0x47, + 0x27, 0xca, 0x89, 0x73, 0x8d, 0x13, 0x3a, 0xa9, 0xc4, 0xe8, 0x3a, 0xc8, 0xef, 0x03, 0xb9, 0x9c, + 0x43, 0xb9, 0xd8, 0x2a, 0x20, 0x54, 0xef, 0x0f, 0x42, 0x54, 0xae, 0x06, 0x22, 0x01, 0xc3, 0x4f, + 0x3c, 0x57, 0x2c, 0xaf, 0xe1, 0xc7, 0xb7, 0xb6, 0x02, 0x52, 0xb0, 0x6d, 0x1d, 0x36, 0x4e, 0x1c, + 0x05, 0x0c, 0xb1, 0x90, 0xc6, 0xfc, 0x38, 0x06, 0x7b, 0x17, 0x0c, 0x35, 0x68, 0x96, 0x43, 0x77, + 0x7b, 0xa7, 0xd1, 0xba, 0x39, 0x7d, 0x76, 0x00, 0xda, 0x96, 0xa8, 0xdc, 0x0c, 0x2e, 0xdb, 0xf7, + 0x9c, 0x1f, 0xc9, 0xf6, 0x5d, 0x3c, 0x28, 0xa0, 0xf1, 0xfe, 0x96, 0x68, 0xa8, 0xae, 0xde, 0xdf, + 0xa8, 0x91, 0x6b, 0xf6, 0xb1, 0xae, 0x7c, 0x20, 0x59, 0xa5, 0x34, 0x61, 0x10, 0xf1, 0xae, 0xc4, + 0x2a, 0x16, 0x63, 0xe8, 0x52, 0x32, 0x76, 0x3a, 0x31, 0x34, 0x90, 0x1a, 0xfa, 0xa2, 0xd4, 0x67, + 0xf4, 0x9e, 0x31, 0xb9, 0x06, 0x57, 0x8d, 0xb9, 0x92, 0xf6, 0x4e, 0x93, 0xb9, 0x18, 0xd8, 0x45, + 0x15, 0x3f, 0xb0, 0x28, 0x32, 0xa2, 0xab, 0x87, 0x6a, 0x4d, 0x5b, 0x7c, 0x42, 0x40, 0x93, 0xed, + 0xf0, 0x29, 0xbe, 0x88, 0xf2, 0x9b, 0xb5, 0x70, 0x13, 0x35, 0x29, 0x28, 0xc9, 0x0e, 0xce, 0x8b, + 0x6b, 0xcd, 0xb6, 0x18, 0xee, 0x54, 0xe8, 0x37, 0xe7, 0x35, 0x84, 0xac, 0x42, 0x0f, 0x60, 0x5c, + 0x64, 0x07, 0xc6, 0x4c, 0x71, 0xb5, 0xf9, 0x9c, 0x9e, 0x6f, 0xa2, 0xa9, 0x4e, 0xe6, 0x56, 0x5c, + 0x61, 0xad, 0x33, 0x6b, 0x78, 0x6e, 0xfc, 0x6a, 0x41, 0x53, 0x79, 0x22, 0x4f, 0x34, 0x90, 0xf5, + 0x16, 0xef, 0x1e, 0x87, 0xee, 0x33, 0x61, 0x1c, 0xdb, 0x9f, 0x57, 0x73, 0xb2, 0x51, 0x62, 0xb6, + 0xea, 0x32, 0x0f, 0x9a, 0x9f, 0xd9, 0xb5, 0x88, 0xba, 0xa8, 0x71, 0x0f, 0xe2, 0x0f, 0x95, 0x87, + 0x31, 0x56, 0x2d, 0xf7, 0xe6, 0xb1, 0x6a, 0x2b, 0xed, 0x66, 0x7d, 0x79, 0xd4, 0x3e, 0xdd, 0x67, + 0x37, 0xeb, 0x9b, 0x06, 0x57, 0xaa, 0xc6, 0x2a, 0x62, 0x1c, 0x30, 0x6f, 0xd0, 0xb7, 0xdc, 0xa1, + 0x9e, 0x05, 0x9e, 0x12, 0x07, 0x7a, 0xb1, 0xab, 0x67, 0xa7, 0x80, 0x06, 0x85, 0x29, 0x66, 0x1d, + 0x9a, 0xd8, 0x2d, 0x16, 0xa9, 0x0d, 0xec, 0xe3, 0xfb, 0xba, 0xb2, 0x81, 0x51, 0xda, 0x6f, 0xf3, + 0xca, 0xa7, 0xeb, 0xa6, 0xb4, 0xab, 0x47, 0x21, 0xb5, 0x3d, 0xa8, 0xe4, 0x71, 0x3f, 0x80, 0x4a, + 0x2e, 0x1c, 0x3b, 0x95, 0xdc, 0xf6, 0x28, 0xa5, 0x92, 0x39, 0x53, 0x97, 0xf1, 0x37, 0xc9, 0xd4, + 0xe5, 0x4f, 0x82, 0xae, 0x9c, 0x15, 0xd0, 0x57, 0x82, 0x94, 0x19, 0xc4, 0x71, 0xd0, 0x28, 0x6f, + 0x62, 0x88, 0xcc, 0x78, 0x8b, 0x49, 0xa2, 0xbf, 0xcd, 0x45, 0x73, 0xbc, 0x56, 0x7b, 0xb7, 0x99, + 0x5b, 0xe4, 0x7a, 0x39, 0x91, 0x93, 0xaf, 0xc1, 0xe6, 0x36, 0x6e, 0x0a, 0x89, 0xdf, 0x70, 0x42, + 0x21, 0x35, 0xdd, 0xb8, 0xdf, 0x30, 0xbe, 0x82, 0x2e, 0x52, 0xc3, 0x8e, 0x04, 0x9d, 0xda, 0x06, + 0xa2, 0x14, 0xcb, 0x72, 0x00, 0x54, 0xe5, 0xe0, 0x01, 0x22, 0xd9, 0xc9, 0x80, 0xc4, 0x74, 0x34, + 0x81, 0xfb, 0x7c, 0xce, 0x1a, 0x40, 0xb8, 0x71, 0x6b, 0x80, 0x9c, 0xeb, 0xb4, 0x06, 0x70, 0xda, + 0x92, 0xe4, 0xfe, 0x08, 0xb6, 0x24, 0x79, 0xd7, 0x63, 0x4b, 0x92, 0x7f, 0x9d, 0xb6, 0x24, 0x05, + 0xd7, 0x6d, 0x4b, 0x22, 0x76, 0x59, 0x88, 0x15, 0xe4, 0x6a, 0x98, 0x2d, 0xa3, 0x88, 0xf5, 0x7d, + 0xb7, 0x56, 0xff, 0xda, 0x50, 0x1b, 0xb8, 0xf9, 0xf3, 0x74, 0x83, 0x71, 0xb6, 0x27, 0x71, 0xc9, + 0xe4, 0xd9, 0x20, 0xcd, 0x32, 0x41, 0xb4, 0x9c, 0x4e, 0xbf, 0xd4, 0x47, 0xf1, 0x70, 0xa9, 0xcf, + 0xc4, 0xb8, 0x55, 0x95, 0xa5, 0x3e, 0x87, 0x58, 0x82, 0x62, 0x59, 0x05, 0x15, 0x80, 0xd6, 0x9a, + 0x48, 0xe8, 0x20, 0x76, 0xad, 0x59, 0x24, 0xcf, 0x73, 0xe8, 0xbd, 0x9d, 0x3b, 0x4e, 0x3a, 0x8a, + 0xbf, 0xb7, 0xbf, 0x61, 0x20, 0x8d, 0x7b, 0x43, 0x57, 0x7e, 0x69, 0x7f, 0xc3, 0x6e, 0x9e, 0xf2, + 0xda, 0xf1, 0xe6, 0x71, 0x64, 0x01, 0xfa, 0xc1, 0x46, 0x25, 0x13, 0x6e, 0xc8, 0xa8, 0x64, 0xe2, + 0xcd, 0x37, 0x2a, 0xa9, 0x41, 0x05, 0xcd, 0xfe, 0x48, 0xe4, 0x83, 0x06, 0x22, 0xed, 0xc2, 0x01, + 0xa5, 0x48, 0x91, 0x5c, 0x42, 0x03, 0x72, 0x1f, 0x36, 0x4e, 0xef, 0x32, 0x3a, 0xf6, 0xc3, 0x53, + 0x44, 0x53, 0x59, 0x42, 0x88, 0xc0, 0xf4, 0xe9, 0xcf, 0x8d, 0xfe, 0xed, 0x2a, 0xe9, 0x22, 0xbe, + 0x8d, 0xf0, 0xa9, 0x12, 0x91, 0x53, 0xb5, 0xae, 0x2c, 0x97, 0xc8, 0x01, 0xca, 0xcf, 0x39, 0x0e, + 0x1a, 0x64, 0xe1, 0xdc, 0x81, 0x3c, 0xeb, 0xb3, 0xe2, 0x13, 0x62, 0xed, 0x3b, 0xd0, 0xde, 0x89, + 0xf8, 0xee, 0x0a, 0x45, 0xc5, 0xc3, 0x8a, 0x0a, 0x67, 0x03, 0x33, 0x85, 0x8a, 0xf0, 0x8b, 0x39, + 0x1b, 0x98, 0x59, 0xde, 0x36, 0x30, 0x9c, 0xd5, 0xcb, 0x6f, 0x58, 0xf0, 0xcc, 0xa9, 0x18, 0x63, + 0x3f, 0x9a, 0x05, 0x63, 0x67, 0xc9, 0xef, 0x4f, 0xf6, 0x1d, 0x67, 0xf6, 0xa7, 0x56, 0xdc, 0x24, + 0xf4, 0xe5, 0xcb, 0xa8, 0x20, 0xea, 0x0f, 0x04, 0xa3, 0x34, 0xce, 0xe3, 0x4c, 0xb7, 0x53, 0x7d, + 0x20, 0x18, 0x25, 0x6f, 0x0b, 0xb4, 0x94, 0x27, 0xda, 0x0c, 0xef, 0x48, 0xa9, 0xf8, 0x47, 0x34, + 0xa9, 0x25, 0x58, 0x57, 0xff, 0x9e, 0xd6, 0xd0, 0xd2, 0xe8, 0x5f, 0xdf, 0xa8, 0x61, 0x71, 0xd3, + 0xa4, 0xf2, 0xd7, 0x75, 0x65, 0xad, 0x64, 0xaf, 0x91, 0x2b, 0x79, 0xaf, 0x17, 0x26, 0x7e, 0x35, + 0x62, 0x43, 0x4b, 0x41, 0x3a, 0x6b, 0x74, 0x6d, 0x49, 0x0c, 0xec, 0x86, 0x46, 0xd7, 0x86, 0x3a, + 0x1e, 0xa3, 0x12, 0xdd, 0x4e, 0xbe, 0x42, 0xb5, 0x0f, 0x2a, 0x56, 0x72, 0x76, 0x68, 0xd3, 0x2d, + 0xa0, 0xb7, 0xec, 0xd0, 0xee, 0xb3, 0xd9, 0xa1, 0x6d, 0x5c, 0x16, 0xf1, 0x99, 0x55, 0x41, 0x7f, + 0x93, 0xc6, 0x59, 0x9c, 0xbd, 0x8a, 0xf2, 0xfd, 0x1b, 0xb4, 0x60, 0x14, 0x8b, 0x95, 0x26, 0x41, + 0xca, 0x5a, 0x28, 0xa1, 0x34, 0x8e, 0x62, 0xfe, 0xf0, 0xb1, 0xb5, 0x3f, 0x66, 0xf4, 0x9e, 0x49, + 0xc5, 0x2f, 0x5f, 0x1b, 0xea, 0x58, 0x6a, 0x2e, 0x10, 0xff, 0x50, 0xa1, 0x87, 0x58, 0x8c, 0x72, + 0x03, 0x0d, 0xf5, 0x24, 0x09, 0xd6, 0x54, 0x5d, 0x99, 0x24, 0x99, 0xbf, 0xe5, 0x82, 0x64, 0x6f, + 0x3c, 0xd9, 0x76, 0x59, 0x35, 0x7f, 0x88, 0x0f, 0xa3, 0xbc, 0xb0, 0xbf, 0x7e, 0x23, 0x49, 0x6e, + 0x35, 0x4d, 0x57, 0x26, 0x4b, 0xb8, 0x00, 0x5a, 0x1d, 0xb9, 0xa0, 0xe2, 0x5f, 0x62, 0x19, 0x9a, + 0x00, 0x50, 0x51, 0xd1, 0xe8, 0x8f, 0x40, 0x44, 0x3f, 0x22, 0xf4, 0xe2, 0xcb, 0x71, 0x27, 0xe3, + 0xc8, 0x2e, 0x95, 0x2f, 0x14, 0x5f, 0x40, 0xe3, 0xc9, 0x0b, 0xb3, 0xe9, 0x29, 0x1c, 0x3b, 0x8f, + 0x3c, 0x67, 0x56, 0xa9, 0x3c, 0x15, 0xbe, 0x2d, 0xd0, 0xbc, 0xe9, 0x29, 0x93, 0xd2, 0x3f, 0x1c, + 0x53, 0xad, 0x4a, 0xb1, 0x1a, 0x4d, 0x62, 0xe8, 0x05, 0x6f, 0xef, 0x7d, 0xd4, 0xda, 0xd5, 0x27, + 0xd9, 0x6b, 0xe8, 0x6b, 0x92, 0x3c, 0x77, 0x8c, 0xd8, 0xf2, 0xd9, 0xeb, 0xc5, 0x67, 0xd0, 0xf8, + 0xf5, 0x1b, 0x2b, 0x48, 0x56, 0xe0, 0x39, 0x78, 0x8b, 0xe7, 0xea, 0x4a, 0x91, 0x64, 0x95, 0xca, + 0x13, 0x58, 0x66, 0x2b, 0x13, 0x1b, 0xb1, 0x72, 0x31, 0x8a, 0x26, 0xf0, 0x74, 0xc6, 0xdc, 0x0c, + 0x9e, 0xc5, 0xdc, 0x85, 0xe0, 0x48, 0x07, 0xb8, 0x15, 0x10, 0x01, 0x8c, 0xa7, 0x37, 0xe8, 0xd5, + 0x38, 0x7f, 0x26, 0x7d, 0xfa, 0x73, 0x02, 0xd0, 0x7c, 0x03, 0x71, 0x39, 0x18, 0x49, 0xe1, 0xcf, + 0xbe, 0xdf, 0x72, 0x95, 0x65, 0x85, 0xf2, 0x5c, 0x9b, 0xb5, 0x21, 0xc5, 0x17, 0xd4, 0x92, 0x91, + 0x36, 0x13, 0xdf, 0x37, 0xef, 0x59, 0x64, 0x23, 0x0b, 0xcf, 0x86, 0x25, 0x41, 0xa4, 0x48, 0xae, + 0x72, 0x60, 0xd4, 0x64, 0xfb, 0x17, 0xc6, 0xd9, 0x4b, 0xd5, 0xb5, 0xa5, 0xcc, 0xbc, 0x6b, 0x44, + 0x6f, 0x33, 0xfa, 0x2f, 0x41, 0x2a, 0x0a, 0x32, 0x15, 0x26, 0xa7, 0x49, 0x6e, 0x04, 0x6c, 0x0e, + 0xa4, 0x92, 0xe1, 0x4c, 0x32, 0x02, 0xdc, 0x4b, 0x54, 0xcd, 0x1f, 0x09, 0x05, 0x71, 0x5c, 0x36, + 0x4a, 0x46, 0xf0, 0x15, 0xf2, 0x82, 0xc4, 0xc0, 0x4e, 0xb0, 0x5b, 0xa3, 0x56, 0xd1, 0x3b, 0x52, + 0x67, 0x76, 0x25, 0x06, 0xfa, 0xc0, 0x8c, 0xcd, 0xd8, 0x7d, 0xd4, 0xf8, 0xf4, 0x98, 0x6a, 0xeb, + 0xf3, 0x43, 0x82, 0x28, 0xbd, 0x80, 0xa6, 0x3a, 0x8f, 0xe4, 0xba, 0xc2, 0x11, 0x11, 0xdb, 0x78, + 0x9e, 0x4e, 0x93, 0x17, 0xf1, 0x66, 0x51, 0x8c, 0xc8, 0x00, 0x4c, 0xcc, 0x93, 0x7f, 0xb0, 0x5d, + 0xc5, 0xc7, 0x04, 0x34, 0xc7, 0x0a, 0x53, 0x10, 0x59, 0xa5, 0x45, 0xfd, 0x95, 0x7e, 0x9c, 0x68, + 0x05, 0x33, 0xd4, 0xe5, 0xa8, 0x90, 0xc0, 0x13, 0xf5, 0xac, 0x7b, 0xc4, 0x84, 0x4e, 0x56, 0xc8, + 0x54, 0xae, 0x2e, 0xe7, 0x04, 0xd6, 0x84, 0xfa, 0x8d, 0x67, 0x99, 0x46, 0x9e, 0x6b, 0x53, 0x03, + 0xb4, 0x6e, 0x05, 0x79, 0x1e, 0xac, 0xbe, 0xf8, 0x6a, 0x2e, 0x9a, 0xeb, 0xd9, 0xf7, 0x6e, 0xf3, + 0xdf, 0xca, 0xc6, 0x62, 0x98, 0x5f, 0x65, 0x8b, 0x51, 0xe4, 0xb9, 0x17, 0xb7, 0x93, 0xd7, 0x78, + 0x5b, 0x57, 0xde, 0x40, 0xaf, 0x4b, 0xd9, 0x8e, 0x82, 0xba, 0x14, 0x78, 0xae, 0x7d, 0x14, 0x7e, + 0xe3, 0x1f, 0x09, 0x8c, 0xdf, 0x30, 0x87, 0xe5, 0x55, 0x1a, 0x0d, 0x9e, 0x41, 0x8a, 0x1a, 0x98, + 0x28, 0x87, 0x93, 0xe0, 0x34, 0x88, 0x2b, 0xd1, 0xe4, 0x7a, 0xeb, 0x3a, 0xd4, 0xb4, 0x34, 0x11, + 0x63, 0x71, 0x8c, 0xea, 0x1c, 0x55, 0xf2, 0x14, 0x9e, 0x2d, 0x4a, 0xee, 0xfb, 0x46, 0x75, 0x34, + 0x28, 0x5b, 0xa2, 0x2b, 0xa5, 0x48, 0x92, 0xf8, 0x95, 0x65, 0x3d, 0x9a, 0xe2, 0x4f, 0x73, 0xd0, + 0x5c, 0x93, 0x1b, 0x83, 0x64, 0xe2, 0x37, 0x5f, 0x42, 0x55, 0x16, 0x17, 0x74, 0xe5, 0x82, 0x80, + 0xce, 0x0b, 0x52, 0xb6, 0x79, 0xe4, 0x4f, 0x32, 0x8a, 0x09, 0x20, 0x5c, 0xef, 0xed, 0x11, 0x16, + 0xfc, 0x1f, 0xb9, 0xe8, 0x7e, 0xef, 0x55, 0xff, 0x3c, 0xc5, 0x05, 0xb7, 0x37, 0xcc, 0x18, 0xf1, + 0x0d, 0xc9, 0x7a, 0x22, 0xf2, 0x02, 0xfe, 0x4a, 0x7b, 0xc0, 0x4e, 0xf6, 0x5b, 0xdd, 0x95, 0x83, + 0x66, 0x5b, 0x08, 0xa3, 0x22, 0xac, 0x35, 0x68, 0xc1, 0x68, 0xc0, 0xdf, 0xa8, 0x6a, 0xbf, 0x15, + 0xbf, 0x10, 0xd0, 0xf8, 0x88, 0x16, 0xde, 0xa4, 0x85, 0x5f, 0xa5, 0x0f, 0x5e, 0xf9, 0x4e, 0x41, + 0x57, 0xfe, 0x28, 0x59, 0xc5, 0xf2, 0x6f, 0x13, 0x03, 0x3b, 0x93, 0x3b, 0x09, 0x63, 0x91, 0xea, + 0xd9, 0x96, 0x1a, 0xdc, 0x96, 0x18, 0xbc, 0x90, 0xea, 0xd9, 0xb6, 0x51, 0xfb, 0xc8, 0x04, 0xb9, + 0xfe, 0x4b, 0x89, 0xf8, 0xee, 0x8d, 0x2d, 0xeb, 0xb5, 0x45, 0x98, 0xc2, 0x34, 0x81, 0xf8, 0x60, + 0x3f, 0xbb, 0x2d, 0xac, 0x05, 0x16, 0xf5, 0x2f, 0x6a, 0x08, 0x07, 0x36, 0x69, 0x61, 0x92, 0x2e, + 0x99, 0xfc, 0x82, 0x1e, 0xc9, 0xde, 0xf6, 0xea, 0x5a, 0x9a, 0xd0, 0x94, 0xdd, 0x3a, 0xb6, 0x0c, + 0xaa, 0x5e, 0xc9, 0xf4, 0x2d, 0xf2, 0xfd, 0xfc, 0x2e, 0x59, 0x55, 0x2c, 0x02, 0x14, 0x1b, 0xa9, + 0xf8, 0x5a, 0x0e, 0x2a, 0xf2, 0x1e, 0xe5, 0xce, 0xd7, 0x25, 0xbe, 0x6d, 0x73, 0x4e, 0x9a, 0x9f, + 0x01, 0xfc, 0xad, 0x6f, 0xf2, 0x78, 0xd0, 0x92, 0xe7, 0xcf, 0x18, 0xdb, 0x3b, 0x52, 0x3d, 0xdb, + 0xd2, 0xfd, 0x9b, 0x13, 0x97, 0x4e, 0xd9, 0x7c, 0x95, 0x48, 0x04, 0xb2, 0x8c, 0xdb, 0x93, 0x71, + 0x97, 0xb3, 0xc3, 0xe0, 0xbf, 0x1f, 0xe7, 0x70, 0x29, 0xbe, 0x6b, 0xc1, 0xd0, 0xfe, 0x7a, 0xe4, + 0xdc, 0x80, 0x7e, 0x63, 0x2d, 0x9a, 0x58, 0xdf, 0x18, 0xd0, 0x82, 0x51, 0xf0, 0x75, 0x25, 0x02, + 0xb5, 0xc7, 0x4c, 0xbe, 0xd0, 0x56, 0x21, 0xcf, 0x84, 0x0f, 0x36, 0x69, 0x6f, 0xec, 0xf3, 0x6a, + 0x74, 0x77, 0x1a, 0x7d, 0x07, 0xac, 0x31, 0x6d, 0xad, 0xc5, 0x75, 0x68, 0x12, 0x2c, 0x52, 0x69, + 0x68, 0x08, 0x6b, 0x91, 0x08, 0x51, 0x52, 0x2c, 0x35, 0x8f, 0xdf, 0x5e, 0xc3, 0x94, 0x28, 0x10, + 0xb5, 0x1f, 0xb3, 0x56, 0x2c, 0x73, 0xfa, 0x54, 0xd5, 0xde, 0x58, 0x5c, 0x81, 0x50, 0xbd, 0xbf, + 0x42, 0x0b, 0x47, 0x4d, 0x2a, 0x83, 0xa8, 0x2a, 0x1e, 0x35, 0x39, 0x79, 0xae, 0x98, 0x3a, 0x7c, + 0x57, 0x28, 0xf0, 0x1c, 0x93, 0x30, 0xb7, 0x3e, 0x95, 0x6b, 0x23, 0xd6, 0xa2, 0xf1, 0x2d, 0x11, + 0x2d, 0xbc, 0x26, 0xb4, 0x51, 0x0b, 0x12, 0x7d, 0x85, 0x6c, 0xb2, 0x2d, 0x56, 0xa9, 0x3c, 0x27, + 0x7d, 0xf6, 0xf2, 0xc8, 0x81, 0xb3, 0xcc, 0xe2, 0x23, 0x6a, 0x96, 0xda, 0x72, 0x1c, 0x4f, 0x55, + 0xad, 0xe6, 0x62, 0x0d, 0x9a, 0x44, 0xb6, 0xb5, 0x32, 0xd4, 0xe4, 0x0f, 0x50, 0xa7, 0x21, 0x1c, + 0x85, 0xd7, 0x5e, 0xc3, 0x68, 0xe4, 0xa3, 0x47, 0x8d, 0xee, 0x4e, 0x36, 0x96, 0xbd, 0x91, 0xb8, + 0x1a, 0x21, 0xd8, 0x52, 0x73, 0xcd, 0x44, 0xd0, 0xb6, 0x44, 0x57, 0x16, 0x48, 0x5c, 0xb1, 0x3c, + 0x0b, 0x46, 0xb2, 0x4a, 0xe0, 0x16, 0x71, 0x9f, 0xcc, 0x6a, 0xc4, 0x57, 0x4d, 0x58, 0x31, 0x7f, + 0x99, 0x60, 0x0d, 0x02, 0xb7, 0x45, 0xba, 0x52, 0x2c, 0x59, 0xa5, 0x34, 0xa2, 0x3f, 0x2b, 0x70, + 0x8c, 0x66, 0xb5, 0x2c, 0xdb, 0x27, 0xe8, 0xca, 0x1e, 0x01, 0xed, 0x16, 0xa4, 0x2c, 0x57, 0x89, + 0x46, 0x1d, 0xc8, 0x88, 0x05, 0x39, 0xff, 0x74, 0x1b, 0xfc, 0x5c, 0x11, 0xec, 0xe7, 0x7e, 0x45, + 0xe0, 0xce, 0xee, 0x8a, 0x60, 0xed, 0xfa, 0x15, 0xc1, 0xbe, 0x6b, 0xc5, 0xfb, 0x9d, 0xee, 0xed, + 0x77, 0x15, 0x42, 0x2d, 0x7b, 0x5d, 0x57, 0xd6, 0xa2, 0x3a, 0x29, 0xdb, 0x27, 0x64, 0xdc, 0xd4, + 0xec, 0x48, 0xaf, 0x27, 0x07, 0xcd, 0xb1, 0xa5, 0xd2, 0xba, 0x8b, 0x90, 0x5e, 0x8e, 0xfd, 0xed, + 0xad, 0xd5, 0x95, 0x55, 0xe8, 0x55, 0x29, 0xcb, 0xe7, 0xc8, 0xf3, 0x6d, 0x49, 0xe9, 0xbc, 0x9e, + 0x18, 0xdb, 0x1b, 0xdc, 0x9b, 0x83, 0xe6, 0x66, 0x1c, 0xed, 0xce, 0x87, 0x1a, 0x62, 0x80, 0x9d, + 0xed, 0x13, 0xe4, 0x62, 0x7e, 0x47, 0x9c, 0x57, 0x71, 0x14, 0xd8, 0xd9, 0x99, 0x8f, 0x8a, 0x38, + 0x3b, 0x12, 0x3b, 0xe4, 0x7c, 0xea, 0x01, 0x39, 0x7f, 0xd0, 0x95, 0x08, 0x0f, 0x38, 0xef, 0xf2, + 0x07, 0xc1, 0xc0, 0xc7, 0x09, 0x35, 0x18, 0x68, 0x32, 0x43, 0x8c, 0x0d, 0x60, 0xe0, 0x07, 0xdf, + 0xf8, 0x17, 0x81, 0x66, 0x66, 0x97, 0x6c, 0x3d, 0x90, 0xcf, 0xbb, 0x1f, 0xc8, 0x07, 0x33, 0x3f, + 0x90, 0xa4, 0xbb, 0xf5, 0x3c, 0x06, 0x29, 0x12, 0xe6, 0xf2, 0x5e, 0xd6, 0xe8, 0x4a, 0xa5, 0xc4, + 0x15, 0xcb, 0x4f, 0x19, 0x67, 0x3f, 0x4b, 0xb6, 0x5d, 0x4c, 0x7d, 0xd5, 0x6f, 0x3e, 0x8d, 0x43, + 0x5d, 0xd7, 0x86, 0x3a, 0xd8, 0xe7, 0x5c, 0x8d, 0x6d, 0xb6, 0x96, 0x7b, 0x35, 0xb6, 0x99, 0xfb, + 0x12, 0x66, 0x00, 0x6d, 0x0d, 0x25, 0xbe, 0x85, 0x26, 0xd4, 0x87, 0x82, 0x41, 0xad, 0x1e, 0x26, + 0x84, 0x57, 0xb3, 0x4c, 0x57, 0x96, 0x4a, 0x7c, 0xb9, 0x3c, 0x7f, 0xe4, 0x93, 0xef, 0x92, 0xbb, + 0x4f, 0xb2, 0xe9, 0x52, 0x9f, 0x7e, 0x9b, 0xde, 0xbc, 0x37, 0xd9, 0xb6, 0x3f, 0x1d, 0x6b, 0x1d, + 0xe9, 0x39, 0x3d, 0xb2, 0xf9, 0x13, 0xcb, 0xd8, 0xdd, 0xea, 0xc6, 0x69, 0xc7, 0xf3, 0x7f, 0x80, + 0x76, 0xbc, 0xe0, 0x06, 0x6c, 0x48, 0x29, 0xbd, 0x9c, 0x11, 0x8c, 0xa8, 0x97, 0x40, 0x96, 0x1b, + 0x4b, 0x18, 0xea, 0x2d, 0xb9, 0x60, 0xf0, 0x71, 0x57, 0x12, 0xcc, 0xf5, 0x36, 0x7e, 0x71, 0x0c, + 0x04, 0x73, 0xa9, 0xae, 0x94, 0x10, 0x82, 0x79, 0xfe, 0xa8, 0x7b, 0x63, 0x77, 0xf1, 0xcf, 0xbc, + 0x4b, 0x63, 0xde, 0xec, 0x8c, 0x18, 0x61, 0x0e, 0x2a, 0xaa, 0x0e, 0x06, 0xa2, 0xcb, 0x9d, 0x26, + 0xd7, 0xaa, 0xf6, 0xdb, 0xe2, 0xb9, 0xe8, 0xbe, 0x0c, 0x75, 0x91, 0xe6, 0xe2, 0x43, 0x39, 0x68, + 0x96, 0xd2, 0xd0, 0x40, 0x2a, 0xb5, 0x06, 0xce, 0xa7, 0xe3, 0x0d, 0x6f, 0x23, 0x72, 0xc1, 0xd2, + 0x54, 0x78, 0x1a, 0x91, 0x4f, 0xe6, 0x4d, 0xc6, 0xab, 0x2b, 0xbd, 0xed, 0xc0, 0x9f, 0x73, 0xa3, + 0x01, 0x57, 0x98, 0x20, 0xb0, 0x10, 0xf3, 0xb0, 0x8a, 0x2d, 0xd3, 0x74, 0x65, 0x3d, 0xfa, 0x8d, + 0x94, 0x61, 0xe1, 0xf2, 0x02, 0xe3, 0x9b, 0xed, 0x84, 0xa2, 0xdb, 0x79, 0xcc, 0x68, 0x3d, 0xe9, + 0xb0, 0x61, 0xa7, 0xd4, 0x8e, 0xd7, 0xc2, 0x6c, 0xb1, 0x80, 0x7b, 0x73, 0xd0, 0x6c, 0xcf, 0x29, + 0xee, 0xfc, 0x17, 0x68, 0xbd, 0xae, 0xbc, 0x83, 0xde, 0x96, 0x32, 0x2d, 0x5f, 0x96, 0xc6, 0xb2, + 0x45, 0xa3, 0xbc, 0x42, 0xff, 0x69, 0x3a, 0x12, 0x69, 0x18, 0xea, 0x50, 0x4b, 0x03, 0x15, 0xa0, + 0xbd, 0x83, 0xc6, 0x11, 0x6b, 0x6f, 0x02, 0x2a, 0x55, 0xba, 0xb2, 0x90, 0xc4, 0x78, 0xc6, 0xa6, + 0x00, 0x73, 0x13, 0xf1, 0x3d, 0xcc, 0x9f, 0x23, 0xbd, 0xeb, 0x5c, 0x72, 0xff, 0x0e, 0x66, 0x10, + 0xf0, 0x7d, 0xf9, 0xec, 0xf0, 0xcc, 0xa9, 0x39, 0x45, 0x33, 0x5c, 0xe1, 0xa4, 0x55, 0x3a, 0xaa, + 0xf8, 0x3c, 0xca, 0x0b, 0x5a, 0x4e, 0x46, 0x25, 0x38, 0xce, 0x86, 0x59, 0x20, 0xcf, 0x64, 0x03, + 0x27, 0x06, 0xfa, 0xcc, 0x51, 0x89, 0x9b, 0x11, 0x90, 0x2c, 0x2f, 0xa9, 0xb8, 0x95, 0xb8, 0x55, + 0x40, 0x85, 0x5a, 0x43, 0x20, 0x8a, 0x35, 0x7e, 0xb0, 0xa1, 0x1b, 0x74, 0xa5, 0x41, 0x62, 0x85, + 0xf2, 0xeb, 0xf0, 0xc8, 0xd5, 0xf9, 0xfd, 0x75, 0x26, 0x00, 0x1e, 0xfe, 0x8c, 0x29, 0x4e, 0x89, + 0x9d, 0x50, 0x57, 0x7f, 0x6a, 0x68, 0x7f, 0xfa, 0xbb, 0x3d, 0x90, 0x5b, 0x88, 0x98, 0x97, 0x63, + 0x87, 0x24, 0x6c, 0x88, 0xbe, 0x0d, 0x74, 0xfb, 0x2c, 0xe1, 0x33, 0x69, 0xdf, 0xbf, 0x47, 0x65, + 0x73, 0x88, 0x07, 0x05, 0x84, 0x42, 0x34, 0xff, 0x41, 0x84, 0xe0, 0x1f, 0xd9, 0x85, 0x7f, 0x5c, + 0xdb, 0xbb, 0x98, 0x25, 0x4d, 0x20, 0x1a, 0xa2, 0x4a, 0x5d, 0x51, 0x24, 0x6e, 0x28, 0xf9, 0x71, + 0x88, 0xc4, 0x92, 0x3c, 0xb6, 0xc3, 0xd8, 0xb1, 0x3d, 0x7d, 0xb9, 0x3b, 0x35, 0xf8, 0xad, 0x71, + 0xf6, 0x48, 0x6a, 0xf7, 0x37, 0x44, 0x4d, 0x73, 0x6e, 0x1f, 0xb8, 0x41, 0xc1, 0xeb, 0x04, 0x29, + 0xec, 0x54, 0x6e, 0x00, 0xf1, 0xcf, 0x02, 0x9a, 0x88, 0x2d, 0xe4, 0xe9, 0xe2, 0xf2, 0xf1, 0xe2, + 0x9e, 0x18, 0xc3, 0xe2, 0xaa, 0xb8, 0x6e, 0xb0, 0xbc, 0x37, 0x75, 0xe5, 0x75, 0xc9, 0x36, 0x9c, + 0xfc, 0x32, 0x9f, 0x4e, 0x8e, 0xe5, 0x42, 0x20, 0x0a, 0x90, 0x1d, 0x5f, 0xc2, 0xe6, 0x41, 0x2d, + 0x9f, 0x5d, 0x0e, 0x4c, 0x4f, 0x41, 0x7c, 0x06, 0xdb, 0xaf, 0xda, 0xc6, 0x15, 0xff, 0x1e, 0xa7, + 0xbe, 0x09, 0xb5, 0x34, 0x58, 0xc8, 0x95, 0x38, 0x17, 0xcf, 0xf1, 0x58, 0x3a, 0x45, 0xe8, 0x24, + 0x2a, 0x83, 0xb3, 0xa7, 0xbc, 0x55, 0x30, 0x4f, 0x3d, 0xbe, 0x87, 0xe5, 0x11, 0x61, 0x06, 0x1b, + 0xe9, 0x6f, 0x4f, 0x25, 0xdb, 0x2e, 0xf2, 0xe6, 0x21, 0x38, 0xdf, 0x14, 0x95, 0xb1, 0xd2, 0xa4, + 0xbd, 0x10, 0xf7, 0x80, 0x48, 0x5d, 0x87, 0x3f, 0x21, 0xb7, 0xef, 0x6a, 0x6c, 0x33, 0x71, 0xc9, + 0x4b, 0x0c, 0xec, 0x4a, 0xfe, 0xe9, 0x78, 0xb2, 0xb7, 0x1d, 0xa2, 0x54, 0x26, 0x0f, 0x5c, 0x48, + 0x0c, 0xf5, 0x80, 0x4e, 0xde, 0xfc, 0x66, 0xc8, 0xfe, 0xee, 0x5c, 0x96, 0xf8, 0x3b, 0x34, 0x31, + 0x14, 0x59, 0x85, 0x3f, 0x03, 0xbb, 0x64, 0x8d, 0xc3, 0x1f, 0x38, 0xcb, 0xf9, 0x81, 0xab, 0xeb, + 0x70, 0x10, 0x84, 0x17, 0x75, 0xe5, 0x39, 0xc9, 0xd6, 0x41, 0x2e, 0x65, 0x9f, 0xb5, 0x9a, 0x40, + 0x37, 0xfb, 0x30, 0x3e, 0x5f, 0x0a, 0xc1, 0x41, 0xb6, 0xbe, 0xa2, 0x2e, 0xa0, 0x69, 0x64, 0x22, + 0x6e, 0x09, 0x85, 0x19, 0xf6, 0x98, 0x34, 0xdc, 0x10, 0x2e, 0x37, 0x89, 0x0d, 0xc9, 0xdd, 0x53, + 0x5e, 0xca, 0xd6, 0xc2, 0x27, 0xd9, 0x83, 0x55, 0x99, 0xd0, 0x8a, 0x61, 0xc3, 0xb6, 0x1e, 0xf7, + 0x20, 0xe2, 0x2e, 0x01, 0x4d, 0x67, 0x2a, 0x5b, 0x6e, 0x59, 0x28, 0x73, 0x14, 0x04, 0x68, 0xba, + 0x21, 0x5c, 0xfe, 0xac, 0xae, 0x2c, 0x93, 0xbc, 0x7a, 0xcb, 0xf3, 0xd9, 0xd2, 0x6c, 0xe6, 0xc1, + 0xfc, 0x5a, 0xbc, 0xfa, 0x89, 0x2f, 0x59, 0x59, 0x7f, 0x26, 0x50, 0x03, 0xd5, 0x39, 0x56, 0xd6, + 0x9f, 0x29, 0xf4, 0x35, 0xff, 0xd4, 0x18, 0x8c, 0xb3, 0x34, 0x0c, 0x39, 0x45, 0x33, 0xac, 0x9c, + 0x3f, 0x2b, 0xd1, 0x24, 0x7c, 0xe8, 0xb5, 0xd4, 0x0d, 0x72, 0x22, 0x1d, 0xe7, 0x21, 0xc9, 0x5e, + 0x23, 0x8b, 0x90, 0xde, 0x0d, 0xae, 0x37, 0x10, 0x9f, 0xaa, 0xbd, 0x89, 0x18, 0x13, 0x50, 0x41, + 0x3d, 0x84, 0xf1, 0x00, 0x13, 0x94, 0xf7, 0x74, 0x45, 0x93, 0x48, 0x91, 0xfc, 0x26, 0x5c, 0x33, + 0xa3, 0xef, 0x40, 0xf2, 0xec, 0x9f, 0x4b, 0x7d, 0x89, 0xcb, 0x87, 0x8d, 0xbe, 0x83, 0x23, 0xb1, + 0x2d, 0x23, 0xad, 0x9d, 0x46, 0xf7, 0xb6, 0xd4, 0xe9, 0x4e, 0x3c, 0x98, 0x89, 0xd4, 0xb8, 0x20, + 0x1e, 0xa5, 0x24, 0xb4, 0x17, 0x24, 0xcb, 0xc1, 0x91, 0x24, 0x43, 0x2d, 0x0d, 0xbe, 0xf7, 0x23, + 0xa1, 0x60, 0xfa, 0xf4, 0xe7, 0xc9, 0x23, 0xdd, 0x04, 0x76, 0xc9, 0x24, 0xe2, 0x6b, 0xf6, 0xc4, + 0x57, 0x93, 0xa9, 0xe4, 0xa4, 0xd4, 0x9e, 0xda, 0xea, 0x01, 0x48, 0x67, 0x05, 0x89, 0x7a, 0xfa, + 0x4f, 0xa5, 0x06, 0xb7, 0x27, 0x06, 0x77, 0xa5, 0x06, 0x3b, 0xa9, 0x8e, 0x9b, 0xcf, 0x72, 0xb5, + 0xd2, 0xe6, 0x3a, 0x08, 0xa6, 0x2a, 0x98, 0x32, 0xe3, 0x5d, 0x07, 0xe7, 0x66, 0x31, 0x31, 0xb7, + 0xb9, 0x0b, 0x56, 0xa3, 0x02, 0x2d, 0x88, 0x9f, 0x83, 0xa9, 0x54, 0xda, 0xb6, 0x58, 0x22, 0x45, + 0xf2, 0x02, 0xf0, 0x2e, 0x4d, 0xb5, 0xb7, 0x11, 0x6b, 0x79, 0xf2, 0xdc, 0x1e, 0x22, 0x6e, 0x54, + 0x5d, 0xfd, 0xe9, 0xd3, 0x9b, 0x55, 0xd2, 0x5a, 0xfc, 0x03, 0x4b, 0x23, 0x87, 0x5d, 0x2f, 0xa6, + 0x79, 0xeb, 0x0a, 0x30, 0xce, 0xac, 0xb1, 0xda, 0x11, 0x97, 0x4a, 0xae, 0xa7, 0xfc, 0xa8, 0x37, + 0xf6, 0xc1, 0x56, 0xc9, 0xfc, 0x61, 0xa8, 0x7c, 0x2f, 0xf1, 0x7d, 0x54, 0x68, 0x6e, 0x3a, 0x9e, + 0x5b, 0xc4, 0x73, 0x3f, 0xe8, 0x39, 0x37, 0x04, 0x54, 0xb1, 0xc2, 0xf7, 0xb3, 0x5e, 0xf2, 0x3c, + 0xc7, 0xbc, 0x89, 0xf8, 0x1e, 0xdb, 0x74, 0xac, 0xa5, 0x79, 0xef, 0x26, 0x36, 0x37, 0xfa, 0xa3, + 0xef, 0x86, 0xc2, 0x4d, 0x78, 0xc2, 0xe9, 0x63, 0x7e, 0x26, 0x6a, 0xb9, 0x6e, 0xf0, 0x4c, 0xe0, + 0x2d, 0xb7, 0x0d, 0x27, 0xcf, 0xa3, 0xe9, 0x3b, 0x49, 0x4a, 0x26, 0x07, 0x14, 0xaa, 0xb6, 0xd6, + 0x73, 0xde, 0x40, 0x53, 0x1c, 0x2f, 0xe3, 0xcd, 0x4b, 0x49, 0xf4, 0x16, 0x9a, 0xe6, 0x7a, 0xd8, + 0x6e, 0xde, 0xe8, 0x2f, 0xa2, 0x69, 0xae, 0xfd, 0xb8, 0x2e, 0x23, 0x03, 0x12, 0x99, 0xd2, 0x83, + 0x16, 0x93, 0xa7, 0x01, 0xa2, 0x21, 0x77, 0x8a, 0x44, 0xdd, 0x23, 0x74, 0xd4, 0x15, 0x01, 0xd3, + 0x43, 0x57, 0x04, 0x1b, 0x8e, 0x37, 0xeb, 0x01, 0x11, 0x15, 0x7f, 0x2b, 0xa0, 0xe9, 0xb6, 0x31, + 0xef, 0x0a, 0x15, 0x60, 0xf1, 0x3f, 0x9a, 0x4e, 0x83, 0xc8, 0xda, 0xc8, 0xd2, 0x57, 0x9d, 0x64, + 0xe9, 0x63, 0x38, 0x9a, 0x3d, 0x29, 0x1b, 0x85, 0x28, 0x65, 0x79, 0xd9, 0x08, 0x09, 0xfa, 0x9c, + 0x8d, 0x04, 0x5d, 0x38, 0x3a, 0x09, 0x4a, 0x06, 0xb8, 0xfb, 0x28, 0x50, 0xf7, 0x4e, 0xde, 0x41, + 0x14, 0xa8, 0xc7, 0xe2, 0xee, 0x51, 0xa0, 0xf7, 0x28, 0xd0, 0x9f, 0x37, 0x05, 0xfa, 0xac, 0x15, + 0xc2, 0x7b, 0x02, 0x55, 0x40, 0x66, 0x08, 0xe1, 0x3d, 0x2e, 0x9c, 0x3f, 0x35, 0xc7, 0x96, 0x13, + 0xfe, 0x1e, 0xf1, 0x79, 0xab, 0x89, 0xcf, 0xb7, 0x1d, 0xc4, 0x67, 0x95, 0xae, 0x94, 0x33, 0xe2, + 0x73, 0xd9, 0x58, 0x88, 0xcf, 0x85, 0x60, 0xe2, 0x83, 0x3d, 0xc2, 0xdb, 0xf6, 0x63, 0xc7, 0xee, + 0x92, 0x7b, 0x04, 0x69, 0x66, 0x82, 0xd4, 0xe3, 0xd5, 0xb8, 0x47, 0x90, 0xde, 0x4c, 0x82, 0x94, + 0x64, 0x47, 0x9c, 0x01, 0x1b, 0x4d, 0x1e, 0x1b, 0x4a, 0x92, 0x92, 0xbc, 0xb7, 0xe0, 0x94, 0xed, + 0xa6, 0x49, 0x29, 0x26, 0x2a, 0xde, 0x91, 0x83, 0xa6, 0xdb, 0x4e, 0xea, 0xee, 0x30, 0x40, 0x7b, + 0xcd, 0x66, 0x81, 0x33, 0xd3, 0x13, 0xd8, 0x6d, 0x56, 0x37, 0x2c, 0xc9, 0x25, 0x64, 0xbb, 0xe3, + 0xc3, 0x2d, 0x82, 0xfa, 0xa0, 0xf8, 0x9f, 0x09, 0x48, 0xa4, 0x9a, 0x44, 0x8e, 0xa0, 0x7d, 0xdb, + 0x49, 0xd0, 0x56, 0x5c, 0x07, 0x41, 0x3b, 0xba, 0x94, 0xb5, 0x08, 0x8d, 0x0b, 0x44, 0x96, 0x87, + 0xc2, 0xf5, 0xb0, 0x6f, 0x85, 0x2a, 0xfd, 0x59, 0x56, 0xa6, 0x2b, 0x4f, 0xa3, 0x27, 0x25, 0x8f, + 0x35, 0xc9, 0x33, 0x49, 0x1c, 0x52, 0xfa, 0x1d, 0xce, 0xf3, 0xc5, 0xa7, 0x6a, 0xeb, 0xf7, 0x13, + 0x3d, 0x55, 0xe3, 0xe2, 0x9f, 0x58, 0xc8, 0x0d, 0xef, 0x53, 0xed, 0x15, 0x70, 0xcc, 0x73, 0xdb, + 0x91, 0xae, 0x72, 0x1e, 0xe9, 0xe3, 0xe6, 0xd2, 0xd8, 0x91, 0x4e, 0xe0, 0x02, 0x5d, 0x8d, 0xe1, + 0x08, 0xe9, 0x41, 0x39, 0xa7, 0xb1, 0x82, 0x54, 0x5e, 0x4c, 0x0c, 0x7f, 0xe2, 0x7d, 0x11, 0x8b, + 0xff, 0x2a, 0x07, 0x4d, 0xb5, 0xfa, 0xdd, 0x1d, 0xa7, 0xf4, 0xea, 0x58, 0x4e, 0x69, 0x8c, 0x79, + 0x10, 0xcb, 0x96, 0xeb, 0x4a, 0x05, 0x52, 0x24, 0xd7, 0x26, 0xc8, 0x33, 0x61, 0xf7, 0x2c, 0x18, + 0xcf, 0xae, 0x25, 0x49, 0xe5, 0xa1, 0xa9, 0xa0, 0xf8, 0xe3, 0x0e, 0xfa, 0x15, 0xe7, 0x41, 0x2f, + 0xbd, 0x8e, 0xbb, 0x9b, 0x17, 0x06, 0x79, 0x21, 0xb9, 0xa8, 0x4f, 0xd8, 0x78, 0x51, 0xdf, 0x68, + 0xbc, 0xe8, 0x1d, 0xc5, 0x83, 0x3e, 0x66, 0x49, 0x4b, 0x41, 0xb5, 0x8e, 0x33, 0x15, 0x31, 0x69, + 0xe9, 0x78, 0x26, 0x27, 0xb5, 0xc4, 0xa3, 0x8f, 0x39, 0x33, 0xd4, 0xcc, 0xce, 0x40, 0xde, 0x66, + 0x21, 0x6a, 0x0b, 0x7e, 0x00, 0x51, 0x5b, 0xb6, 0x5f, 0xd0, 0x15, 0x5d, 0x40, 0x5d, 0x82, 0xe4, + 0x3a, 0x57, 0xf9, 0x77, 0x4e, 0xd8, 0xa0, 0x86, 0xdb, 0x24, 0x4e, 0x3b, 0x8e, 0x1e, 0x90, 0x88, + 0x6f, 0x4f, 0x7d, 0x7a, 0xd6, 0xe4, 0x8e, 0x31, 0xe5, 0x0b, 0xfc, 0x59, 0x6a, 0x70, 0x9b, 0xd1, + 0xdd, 0x06, 0xe5, 0x64, 0x97, 0xf1, 0x50, 0x56, 0xdf, 0xd6, 0x33, 0xc0, 0xe1, 0x19, 0x6d, 0x87, + 0x12, 0x03, 0x71, 0x7a, 0x85, 0xcf, 0x8c, 0xec, 0xe8, 0x22, 0x6e, 0x18, 0xdf, 0xe5, 0xa0, 0x69, + 0xdc, 0x8a, 0xee, 0x8e, 0x3b, 0xfb, 0xb2, 0x4d, 0x01, 0x9f, 0xe1, 0xce, 0xf2, 0xa6, 0xda, 0x70, + 0x67, 0x8d, 0xb6, 0x6f, 0x4c, 0xcc, 0xca, 0x5f, 0xd8, 0x97, 0x74, 0xe5, 0x79, 0xf4, 0xac, 0xe4, + 0xde, 0x82, 0xb1, 0xde, 0xd8, 0xe2, 0xaf, 0xa7, 0xa3, 0x59, 0x20, 0xf0, 0x62, 0x2c, 0x1a, 0xbd, + 0xb0, 0xcb, 0xc8, 0x25, 0x13, 0x68, 0x20, 0xbd, 0xd9, 0xe4, 0x92, 0x11, 0xf7, 0x31, 0x7c, 0x7c, + 0x20, 0xea, 0x01, 0x53, 0xc9, 0xff, 0x4f, 0x20, 0x17, 0xed, 0x2f, 0xdd, 0x9a, 0x6e, 0xbf, 0xae, + 0xbc, 0xc0, 0x6b, 0xba, 0x1f, 0x63, 0x63, 0x24, 0xdb, 0x63, 0x2c, 0xfc, 0x32, 0x0b, 0xf5, 0x86, + 0x83, 0xac, 0x25, 0x06, 0xe2, 0xe6, 0x25, 0xb3, 0x65, 0xdd, 0xcd, 0x19, 0x53, 0xd6, 0xdd, 0xb7, + 0x99, 0x83, 0x6b, 0xae, 0xa5, 0x8e, 0xa5, 0x0e, 0xae, 0xf3, 0xdc, 0x53, 0x83, 0x27, 0x1b, 0x35, + 0xf7, 0x32, 0x5f, 0x19, 0xa1, 0xc8, 0xe7, 0x7e, 0x65, 0xa8, 0x8b, 0xeb, 0xbb, 0x68, 0x0a, 0xb0, + 0x1a, 0x4a, 0x4b, 0x34, 0x14, 0xc1, 0x31, 0x59, 0xf2, 0xf0, 0xe1, 0x3f, 0xa7, 0x2b, 0xcf, 0x48, + 0xce, 0x3a, 0xf9, 0x11, 0x82, 0x3c, 0x86, 0x62, 0x46, 0x77, 0x3f, 0xcf, 0xd8, 0x32, 0xa7, 0x4a, + 0x12, 0x41, 0xcb, 0xd1, 0x51, 0xdc, 0x84, 0x26, 0xd0, 0x40, 0x2b, 0x81, 0xe0, 0x86, 0x4c, 0x56, + 0xf8, 0x8a, 0xd5, 0x04, 0x22, 0x6f, 0x63, 0x23, 0x52, 0xbe, 0xa7, 0x5c, 0x64, 0xf3, 0xc2, 0x86, + 0x37, 0x10, 0x93, 0xf1, 0xdf, 0x97, 0xe7, 0xef, 0x14, 0x72, 0xa6, 0x0a, 0x2a, 0xdf, 0x5c, 0xdc, + 0x2b, 0xa0, 0xc9, 0x8d, 0xfe, 0x96, 0x60, 0xfd, 0x7b, 0x2c, 0xbe, 0x76, 0x81, 0x77, 0xe6, 0xb5, + 0x95, 0xb8, 0x15, 0x70, 0x32, 0x2d, 0x60, 0x57, 0x50, 0xbe, 0x42, 0x57, 0x9e, 0x93, 0x1c, 0xfd, + 0x65, 0x09, 0xe6, 0x4e, 0x1e, 0xb8, 0x00, 0xf8, 0x0d, 0x16, 0x01, 0xde, 0xc0, 0x8c, 0xa9, 0x00, + 0x50, 0x65, 0x6b, 0x72, 0x8c, 0x21, 0x6e, 0x62, 0x7e, 0xb6, 0xe3, 0xb2, 0xa9, 0x8e, 0x9d, 0x80, + 0x6c, 0x73, 0xb9, 0xc5, 0x7e, 0x81, 0xd4, 0xe5, 0xf6, 0x01, 0x93, 0x0a, 0xb5, 0x3b, 0x24, 0xe3, + 0x1a, 0x87, 0xf7, 0xed, 0x16, 0x81, 0xb9, 0xdf, 0x16, 0x5e, 0xd7, 0xc4, 0xd8, 0x2b, 0x97, 0x4c, + 0x0c, 0x6e, 0xd0, 0xc4, 0x37, 0xb7, 0xc4, 0x3d, 0x71, 0xaa, 0x67, 0x5b, 0xf2, 0xdc, 0x71, 0xe6, + 0x1e, 0xb7, 0xd0, 0x88, 0x1f, 0x35, 0x86, 0xb6, 0x96, 0x30, 0xc7, 0xdd, 0x77, 0x21, 0xd4, 0xc1, + 0xea, 0x3a, 0x62, 0x36, 0x8b, 0x03, 0xc4, 0x91, 0x22, 0x59, 0x61, 0xe3, 0x8d, 0xc4, 0xda, 0x81, + 0xf9, 0x86, 0x60, 0xe2, 0xab, 0xeb, 0xb0, 0xac, 0x6c, 0x4b, 0xaa, 0xf5, 0xb4, 0xc9, 0x50, 0x92, + 0x77, 0xa9, 0x0f, 0xb6, 0xdb, 0xdc, 0x77, 0xea, 0xd3, 0xab, 0x92, 0xa1, 0x78, 0x65, 0x1e, 0xba, + 0x31, 0x65, 0xde, 0x29, 0x81, 0x8b, 0x67, 0x6a, 0x8b, 0x1a, 0x69, 0x45, 0x34, 0xfd, 0x88, 0xed, + 0x15, 0x09, 0x5a, 0xfa, 0xdd, 0xe1, 0xf4, 0x9f, 0xf7, 0x03, 0xe1, 0x48, 0x1e, 0xa2, 0xfd, 0x97, + 0x92, 0xc7, 0xdb, 0x98, 0x88, 0x12, 0x7e, 0xc2, 0x8b, 0x91, 0x18, 0xd8, 0x0d, 0x62, 0x94, 0xab, + 0xb1, 0x2d, 0x2c, 0x26, 0x24, 0x2f, 0x07, 0x4c, 0x9f, 0xda, 0x0c, 0xe2, 0x3d, 0xb3, 0xe4, 0x72, + 0xeb, 0xc8, 0xf1, 0xc1, 0xe4, 0xc1, 0x7e, 0xe2, 0xa1, 0xca, 0x85, 0x40, 0x7d, 0x0f, 0xa1, 0xfa, + 0x50, 0x30, 0xd2, 0xd2, 0xc4, 0xc5, 0xdd, 0xc3, 0x42, 0x33, 0xae, 0x58, 0x7e, 0xda, 0xfa, 0x1b, + 0x82, 0xb6, 0x87, 0xb5, 0x48, 0xa8, 0x25, 0x5c, 0xaf, 0x81, 0xf8, 0x29, 0x0c, 0x96, 0xe8, 0xa9, + 0xbd, 0xe7, 0xd3, 0xfd, 0x17, 0xd3, 0x7f, 0xde, 0x96, 0x8c, 0x77, 0x83, 0xfc, 0x43, 0xe5, 0x06, + 0x11, 0xdf, 0x77, 0x44, 0xab, 0x9f, 0x3e, 0x86, 0x68, 0xf5, 0xd8, 0xda, 0xc8, 0x1e, 0xad, 0x7e, + 0xa6, 0x85, 0x78, 0xf1, 0x61, 0xc3, 0x47, 0xda, 0x63, 0xd2, 0x8b, 0x1f, 0xa2, 0xbc, 0xa8, 0x7f, + 0x43, 0xa4, 0x68, 0x06, 0x06, 0xd5, 0xa5, 0x63, 0x06, 0xd5, 0x0d, 0x04, 0x50, 0x65, 0x5d, 0x59, + 0x22, 0xe1, 0x21, 0xe4, 0x47, 0x3d, 0xc1, 0x14, 0xbe, 0xd2, 0xe6, 0xa7, 0x8e, 0x9b, 0x8b, 0x7f, + 0x16, 0x38, 0x17, 0x64, 0x2c, 0x28, 0x02, 0x9f, 0xea, 0xdd, 0x82, 0xae, 0xec, 0x14, 0x24, 0x7b, + 0x9d, 0xfc, 0x11, 0x73, 0x42, 0x26, 0x11, 0xb0, 0x82, 0xa1, 0x70, 0x93, 0xbf, 0x71, 0x89, 0xf6, + 0x61, 0x54, 0x0b, 0x07, 0xfd, 0x8d, 0x25, 0x57, 0x63, 0x5b, 0x92, 0x87, 0xce, 0x8e, 0xc4, 0x7a, + 0x78, 0xe4, 0x65, 0x79, 0x2e, 0xeb, 0x1d, 0xa9, 0xaf, 0xbf, 0x4e, 0x0c, 0xb4, 0x27, 0xf7, 0x5f, + 0xf2, 0x6c, 0x50, 0xea, 0x33, 0x3a, 0xcf, 0x57, 0xac, 0x5b, 0x45, 0x0a, 0xda, 0xf6, 0xb3, 0x0c, + 0x23, 0xaa, 0x7d, 0x25, 0x76, 0x77, 0xe7, 0x59, 0xd7, 0xe5, 0xee, 0x5c, 0x4d, 0xc8, 0x2c, 0x25, + 0xac, 0xf9, 0xb1, 0xf7, 0xf1, 0x6c, 0xce, 0xe9, 0xda, 0x56, 0x23, 0x4f, 0x61, 0x43, 0x50, 0xa7, + 0x6b, 0x5b, 0xbd, 0x89, 0x65, 0x48, 0x16, 0xf2, 0x22, 0xef, 0x28, 0x70, 0x78, 0xc1, 0x2c, 0x08, + 0x5a, 0xf9, 0x4a, 0x5d, 0xa9, 0xa6, 0x39, 0xc8, 0x5f, 0xb2, 0xb6, 0x05, 0x5f, 0x4c, 0x5c, 0x4a, + 0x85, 0x87, 0x0e, 0xf7, 0x64, 0x90, 0xe2, 0x24, 0x06, 0xbe, 0x34, 0x69, 0xbe, 0x8e, 0xfd, 0x46, + 0xd7, 0x96, 0xe4, 0xbe, 0x6f, 0x68, 0x8a, 0xf2, 0xf7, 0xd1, 0xe4, 0x50, 0xb0, 0x91, 0x64, 0xda, + 0xc7, 0x02, 0xa5, 0xfb, 0xf0, 0xc3, 0x86, 0x53, 0x27, 0x38, 0xaa, 0xe4, 0x45, 0xf6, 0xdf, 0x89, + 0xc1, 0x56, 0x48, 0xeb, 0x05, 0x2e, 0x0f, 0xa5, 0x89, 0x81, 0xce, 0x64, 0xfb, 0xe9, 0xf4, 0xf1, + 0x0e, 0x90, 0x28, 0xab, 0x8e, 0xee, 0x3f, 0xc4, 0x47, 0xf9, 0x19, 0x34, 0x81, 0xc3, 0xad, 0xd7, + 0xd5, 0xf5, 0x69, 0x34, 0x9e, 0xc1, 0xfa, 0x75, 0x49, 0x78, 0xb6, 0x08, 0xba, 0xf2, 0x97, 0xe8, + 0x0f, 0x52, 0x06, 0x72, 0x49, 0x9e, 0x49, 0x70, 0x22, 0xbd, 0xa2, 0x94, 0xbd, 0x24, 0x1a, 0x47, + 0x5b, 0x1e, 0x3c, 0xa0, 0x23, 0xae, 0x08, 0xfc, 0xab, 0x7b, 0x45, 0x70, 0xbc, 0x77, 0x96, 0x5a, + 0xf2, 0x8a, 0x40, 0xb0, 0x73, 0x71, 0x03, 0x9a, 0x6c, 0x07, 0x03, 0x71, 0x0e, 0x87, 0x6c, 0xe1, + 0x3b, 0x2c, 0x04, 0x37, 0x0b, 0x15, 0x34, 0x87, 0x42, 0x8d, 0x94, 0x08, 0x53, 0xc9, 0x2f, 0x71, + 0x1e, 0x42, 0x20, 0xda, 0xb5, 0xe2, 0xd7, 0xa8, 0x5c, 0x49, 0x71, 0x67, 0x2e, 0x9a, 0xed, 0xfa, + 0xca, 0xbb, 0x83, 0xb6, 0x7e, 0xdd, 0xc6, 0x0f, 0xff, 0x62, 0x54, 0xec, 0x07, 0x5f, 0x55, 0xe9, + 0x8f, 0xfa, 0x47, 0xc9, 0x18, 0x2b, 0x7e, 0x74, 0xe3, 0x6e, 0x91, 0x38, 0x39, 0xa9, 0xcb, 0x2d, + 0xb2, 0xc8, 0x16, 0xb0, 0x31, 0x8b, 0x4f, 0x64, 0xf1, 0x3f, 0x13, 0xd0, 0xdc, 0x2c, 0x2b, 0x17, + 0x5f, 0x47, 0xe3, 0x19, 0x46, 0x23, 0xc1, 0xec, 0xb2, 0x24, 0x66, 0xc1, 0x51, 0x47, 0xac, 0x0e, + 0x5c, 0x34, 0x08, 0x9a, 0x9c, 0x92, 0xd5, 0x89, 0xb5, 0xe6, 0x63, 0x12, 0xd9, 0x48, 0xa4, 0xa9, + 0x33, 0xdc, 0x61, 0x47, 0x22, 0x1b, 0x89, 0x0c, 0xc8, 0x6c, 0x26, 0xcf, 0xe5, 0xef, 0x00, 0x0e, + 0x2f, 0xb1, 0xdb, 0xe8, 0xfa, 0x06, 0xc2, 0x1f, 0xa8, 0xb8, 0x49, 0xf1, 0x7f, 0x17, 0xd1, 0x2c, + 0x2b, 0xb9, 0xa7, 0x8d, 0xe1, 0x58, 0x6e, 0x8f, 0xc7, 0x23, 0x58, 0x01, 0xbc, 0x6d, 0xf1, 0x78, + 0x26, 0xb0, 0x2b, 0x46, 0xcd, 0xe5, 0x67, 0xd8, 0x23, 0xeb, 0xdc, 0x76, 0xf6, 0x63, 0x31, 0xe1, + 0x9c, 0x80, 0xf9, 0x98, 0x93, 0x99, 0x73, 0x22, 0xfc, 0x52, 0x85, 0x23, 0x16, 0xfb, 0x2f, 0xae, + 0x83, 0x5d, 0x61, 0x4c, 0xc9, 0x16, 0xc1, 0xcd, 0x95, 0xe4, 0x13, 0x25, 0xa1, 0x33, 0xb0, 0x61, + 0x79, 0x28, 0xd4, 0xb8, 0xce, 0xc4, 0x6c, 0x37, 0x9b, 0x63, 0x09, 0xda, 0x39, 0x96, 0x82, 0x31, + 0x72, 0x2c, 0xd2, 0xd8, 0x39, 0x16, 0x3b, 0xa7, 0xd2, 0xe1, 0xe6, 0x54, 0xc6, 0x8d, 0x9d, 0x53, + 0x79, 0xf1, 0x07, 0x72, 0x2a, 0x2e, 0x0e, 0xc5, 0x49, 0xe7, 0x15, 0xfe, 0x88, 0x74, 0x9e, 0xc5, + 0x0d, 0x8d, 0xcf, 0x66, 0xc6, 0x70, 0xd3, 0xb9, 0xa1, 0x8f, 0x19, 0x33, 0x84, 0xae, 0x6b, 0x5e, + 0x9e, 0x19, 0xc2, 0x08, 0x91, 0x32, 0x43, 0xf3, 0x47, 0x65, 0x86, 0x18, 0x13, 0x44, 0x69, 0xdb, + 0x09, 0xde, 0xb4, 0x6d, 0xc6, 0x99, 0x7f, 0x38, 0x6d, 0x6b, 0xb1, 0x5f, 0x13, 0x7f, 0x6c, 0xf6, + 0x8b, 0x8a, 0xfa, 0x26, 0x71, 0xec, 0x17, 0x15, 0xf5, 0x11, 0xf6, 0x8b, 0xd3, 0x67, 0x33, 0xf6, + 0x8b, 0x4a, 0xfe, 0x6c, 0xec, 0xd7, 0xe4, 0xbb, 0x86, 0xfd, 0x9a, 0xf2, 0x23, 0xb2, 0x5f, 0x65, + 0x28, 0xaf, 0x41, 0x8b, 0xd4, 0x13, 0x6d, 0x33, 0xd1, 0x59, 0x68, 0x91, 0x7a, 0xaa, 0x89, 0xb2, + 0x30, 0x2c, 0xd6, 0x88, 0x33, 0x11, 0x9b, 0x16, 0xa9, 0x37, 0xdf, 0x56, 0x8b, 0x39, 0x98, 0x46, + 0xee, 0xb3, 0x13, 0x9f, 0xae, 0xad, 0x0e, 0x46, 0x1f, 0x97, 0x01, 0xa3, 0xe2, 0x38, 0x7c, 0x1c, + 0xeb, 0x30, 0x91, 0xd1, 0xfd, 0x3e, 0x3b, 0xef, 0xb0, 0xc1, 0xc9, 0x3b, 0x88, 0x19, 0x46, 0xaf, + 0x8b, 0x86, 0x03, 0xc1, 0x0d, 0x30, 0xfa, 0x8d, 0x70, 0x16, 0x84, 0xa8, 0x87, 0xdb, 0x41, 0xb4, + 0xc4, 0x76, 0xa2, 0xde, 0xaa, 0x02, 0xa2, 0xde, 0xfa, 0x9d, 0x18, 0x6c, 0x25, 0x59, 0xbb, 0xb3, + 0x10, 0xf5, 0x56, 0x73, 0xf1, 0x03, 0x34, 0x5e, 0x63, 0x51, 0xb8, 0x67, 0x78, 0x47, 0xe1, 0xce, + 0x70, 0x4d, 0x1d, 0x51, 0xb8, 0x71, 0x38, 0x18, 0x6b, 0x30, 0x16, 0x04, 0xea, 0xdc, 0x31, 0x62, + 0xc3, 0x64, 0x52, 0x2a, 0xac, 0xfa, 0x2e, 0xe3, 0x26, 0xe6, 0x3c, 0x87, 0x26, 0x8f, 0x1a, 0x73, + 0x3b, 0x33, 0x2f, 0xf2, 0x84, 0xae, 0x3c, 0x86, 0x96, 0x48, 0x19, 0x08, 0x29, 0x79, 0x26, 0x1c, + 0x19, 0x2b, 0x07, 0x56, 0xa4, 0x78, 0x47, 0x2e, 0x9a, 0xed, 0xea, 0x71, 0x77, 0x90, 0xf5, 0xaa, + 0x8d, 0xac, 0xcf, 0x42, 0xdc, 0xf2, 0xe9, 0xb6, 0x99, 0x9a, 0xd9, 0xc4, 0xad, 0x38, 0x6f, 0x20, + 0x2f, 0x3c, 0xbf, 0x9d, 0x04, 0xfd, 0xb6, 0x42, 0x34, 0x0b, 0x54, 0xc2, 0x2e, 0x22, 0xf8, 0x57, + 0x5e, 0x44, 0xf0, 0xd3, 0xa3, 0x10, 0xc1, 0x19, 0xf5, 0xa2, 0x36, 0xba, 0xf8, 0x1f, 0x0b, 0x0e, + 0xfd, 0x76, 0xf9, 0x97, 0x82, 0xae, 0x9c, 0x12, 0x24, 0x5a, 0x2a, 0xf7, 0x08, 0xc6, 0x50, 0xdc, + 0x68, 0xbb, 0x00, 0x7a, 0x5c, 0xc8, 0x14, 0x99, 0xdc, 0xf5, 0x75, 0x72, 0xa0, 0x35, 0xd5, 0xbd, + 0xdd, 0x92, 0xd7, 0x60, 0x7b, 0x2c, 0xf3, 0x8d, 0xee, 0x8d, 0x1b, 0x87, 0xce, 0x5c, 0x8d, 0x6d, + 0x81, 0xfc, 0x85, 0x80, 0x7f, 0xa1, 0x6f, 0x7a, 0xf8, 0x6b, 0xa3, 0xf5, 0x24, 0xd0, 0xff, 0xc4, + 0xeb, 0x77, 0xdf, 0x65, 0x60, 0x04, 0x8c, 0xfe, 0x4b, 0x46, 0xdb, 0x01, 0x2b, 0x9f, 0xcb, 0x50, + 0x0f, 0x1c, 0xb9, 0xc9, 0x4c, 0x90, 0xe7, 0x6d, 0xff, 0xa5, 0xc4, 0x77, 0x97, 0x53, 0xc7, 0xcf, + 0xa6, 0xcf, 0x9e, 0x48, 0x5f, 0xfe, 0xd4, 0x88, 0x9f, 0xba, 0x1a, 0xdb, 0xc2, 0x94, 0xf1, 0xe2, + 0x3f, 0x13, 0xd0, 0xcc, 0xb0, 0x86, 0xfd, 0x6b, 0xed, 0xf1, 0x65, 0x09, 0x3c, 0xe9, 0x82, 0xae, + 0xec, 0x16, 0x24, 0xef, 0x36, 0x72, 0x4b, 0xe2, 0xf2, 0xe1, 0xd4, 0xbe, 0x43, 0x24, 0x5e, 0x4c, + 0xef, 0x19, 0x9a, 0xf6, 0xa5, 0xef, 0xda, 0x50, 0x47, 0x62, 0xb0, 0x95, 0x2c, 0x9f, 0x7e, 0xab, + 0xc9, 0x0c, 0x9c, 0xfe, 0x9c, 0x95, 0x24, 0x06, 0x76, 0x5b, 0xcc, 0x0d, 0xa6, 0xc5, 0xcd, 0xaf, + 0x1f, 0xfe, 0x24, 0x31, 0xb0, 0x17, 0x8b, 0x3f, 0x3e, 0xe1, 0xf7, 0x2f, 0x79, 0xe0, 0x42, 0x6a, + 0xef, 0xd1, 0xe4, 0xbe, 0x36, 0x73, 0xf5, 0xde, 0xab, 0x11, 0x87, 0x05, 0x34, 0x6d, 0xa3, 0xa6, + 0x35, 0x93, 0x62, 0x08, 0x33, 0x49, 0xb4, 0x09, 0x44, 0x6e, 0xe6, 0xae, 0x97, 0x5b, 0xc8, 0x6a, + 0x06, 0x77, 0xd3, 0xf8, 0xdd, 0x83, 0x70, 0x5e, 0xe4, 0xa4, 0xf0, 0x41, 0x98, 0xdf, 0x33, 0xbc, + 0x3d, 0x31, 0xd0, 0x39, 0xb2, 0x37, 0x96, 0xec, 0xdf, 0x0c, 0x87, 0x65, 0x16, 0xe2, 0xef, 0x87, + 0x9f, 0x90, 0x58, 0x75, 0xac, 0xdf, 0xe0, 0x5e, 0x89, 0xf8, 0x3c, 0x97, 0x96, 0x25, 0xdf, 0x8a, + 0xfd, 0x61, 0xa5, 0x65, 0x19, 0xcf, 0xd2, 0xb2, 0x58, 0x7e, 0xf4, 0x56, 0x16, 0x15, 0xf2, 0x34, + 0xc1, 0x5d, 0x20, 0x99, 0x1b, 0xec, 0x4f, 0x93, 0x55, 0x05, 0x4f, 0x93, 0xf5, 0x9b, 0x1d, 0x56, + 0xb6, 0xa7, 0xc9, 0x6a, 0x5e, 0xd6, 0x25, 0xe8, 0xca, 0x2e, 0x01, 0xb5, 0x09, 0x52, 0x86, 0xbb, + 0x27, 0xaf, 0x85, 0xf1, 0x58, 0x79, 0xea, 0xd3, 0x01, 0xa3, 0xf5, 0xbc, 0x65, 0x73, 0x3a, 0xfc, + 0x89, 0x85, 0x52, 0x2f, 0x1f, 0x4c, 0xf6, 0xb6, 0x1b, 0x5d, 0xfd, 0xec, 0x32, 0x98, 0x55, 0xc9, + 0x03, 0x17, 0xb0, 0x6a, 0xd3, 0x1c, 0x05, 0xa2, 0xf3, 0x5d, 0x8d, 0x6d, 0xb9, 0x22, 0xf0, 0xb7, + 0xf0, 0x8a, 0xc0, 0xbe, 0x1e, 0xcb, 0x59, 0x5c, 0x4b, 0xf9, 0x49, 0xc8, 0x59, 0x32, 0x7c, 0xd5, + 0x1d, 0x2e, 0x67, 0x39, 0xc2, 0x42, 0x30, 0x78, 0xcb, 0x59, 0x1a, 0xae, 0x4b, 0xce, 0x82, 0xb9, + 0x78, 0x4e, 0xce, 0x62, 0x33, 0x90, 0x61, 0xcd, 0xdc, 0x32, 0x97, 0x83, 0xc2, 0x18, 0x84, 0x2e, + 0x41, 0x5d, 0xd9, 0x48, 0x84, 0x2e, 0xf5, 0x4e, 0xa8, 0xed, 0xd9, 0xc6, 0xcb, 0x5d, 0x60, 0x82, + 0xab, 0xb1, 0x2d, 0x24, 0x84, 0xaf, 0xe3, 0x7e, 0xe3, 0x34, 0x3a, 0x2c, 0xdd, 0x45, 0x62, 0xa8, + 0x27, 0x11, 0x3f, 0x9d, 0xda, 0x7b, 0xd4, 0xd1, 0x97, 0x08, 0x6f, 0xfe, 0x4a, 0x60, 0xf9, 0xeb, + 0x6d, 0x8f, 0xd6, 0x26, 0xaf, 0x47, 0x6b, 0x8d, 0xae, 0x3c, 0x6d, 0x7f, 0xb4, 0x16, 0xf2, 0xa1, + 0x93, 0x4d, 0xcc, 0xba, 0xe3, 0x4b, 0x63, 0x30, 0x5e, 0x5d, 0x09, 0x46, 0xf1, 0x2c, 0x71, 0xdd, + 0x98, 0x5f, 0xb4, 0xb2, 0xa7, 0x75, 0xe5, 0x09, 0x24, 0x4b, 0x5e, 0x6b, 0x92, 0xe7, 0x82, 0x06, + 0xdc, 0xb1, 0xd1, 0x84, 0x14, 0xfa, 0xd7, 0xb9, 0x68, 0x86, 0xbd, 0xd3, 0x4f, 0x98, 0x0e, 0x62, + 0x26, 0x3f, 0x4e, 0xa0, 0xbb, 0xdd, 0x17, 0xae, 0xec, 0x15, 0x5d, 0x59, 0x81, 0xaa, 0x24, 0xcf, + 0xa3, 0xb8, 0x5e, 0xa3, 0xa3, 0xcf, 0x73, 0x21, 0xc8, 0x21, 0x17, 0xef, 0xce, 0x06, 0xa3, 0x7f, + 0xe9, 0x0e, 0x72, 0x78, 0x6b, 0xa5, 0x82, 0x87, 0x04, 0x34, 0x11, 0xe4, 0x65, 0xcb, 0x03, 0x8d, + 0x26, 0xb5, 0x02, 0x34, 0x58, 0x8b, 0xae, 0x84, 0x25, 0x5b, 0x85, 0xbc, 0x9e, 0xff, 0x45, 0xcd, + 0x9c, 0x0f, 0x5c, 0x28, 0xf5, 0xa5, 0xbf, 0xfb, 0xc4, 0xd8, 0x11, 0x07, 0x98, 0x48, 0x76, 0xb4, + 0xa7, 0x5a, 0x4f, 0x67, 0x12, 0xd4, 0x25, 0x77, 0xeb, 0x46, 0xbc, 0x6b, 0x21, 0x54, 0x98, 0xa4, + 0x1a, 0xfe, 0x6d, 0xf4, 0x9e, 0x31, 0xba, 0x77, 0x8f, 0x1c, 0xfe, 0xac, 0x44, 0xb5, 0xcd, 0x58, + 0xb6, 0x41, 0x57, 0x1a, 0xd0, 0x7a, 0x29, 0xdb, 0x06, 0xca, 0x15, 0x24, 0xc4, 0x22, 0x77, 0xac, + 0xa9, 0x9e, 0x6d, 0x8c, 0xb6, 0x2e, 0xf5, 0x01, 0x3d, 0x07, 0xb6, 0xea, 0xdc, 0x2d, 0x35, 0x3a, + 0x77, 0x18, 0xf1, 0x2e, 0x38, 0xbd, 0xe2, 0x7f, 0x4f, 0x82, 0x2d, 0xba, 0x27, 0xb9, 0x3b, 0x2e, + 0xe0, 0x4a, 0x9b, 0xed, 0x4e, 0x96, 0x0b, 0x38, 0x16, 0xfb, 0x9d, 0xdb, 0x79, 0xf5, 0x5e, 0xd3, + 0x95, 0x1a, 0xb4, 0x52, 0xca, 0x7a, 0x18, 0x14, 0x87, 0xc2, 0x40, 0x96, 0xcc, 0xc8, 0x3b, 0x2e, + 0x47, 0xf1, 0xdf, 0xe4, 0x42, 0xca, 0x72, 0xd7, 0xd5, 0x5b, 0x6c, 0xb3, 0x24, 0x1a, 0x5d, 0x1e, + 0xfe, 0x8e, 0x5b, 0x80, 0xaf, 0xfc, 0xe0, 0xab, 0xca, 0x5f, 0xc5, 0x0a, 0x87, 0x7d, 0xd0, 0x0d, + 0x09, 0xdc, 0x57, 0xf2, 0xd9, 0x4a, 0x41, 0x70, 0x8f, 0x0f, 0x85, 0xcb, 0x56, 0xea, 0x31, 0x14, + 0x49, 0x3e, 0x4b, 0x5e, 0x7d, 0xd6, 0xb4, 0x6c, 0xaf, 0xa0, 0x2b, 0xdd, 0x02, 0xea, 0x14, 0x24, + 0xcf, 0x3d, 0x94, 0x5b, 0xe0, 0x28, 0xd8, 0x75, 0xbb, 0x45, 0x06, 0x76, 0xff, 0x3c, 0x07, 0x92, + 0x7c, 0xff, 0xbc, 0x2f, 0x6a, 0x59, 0xa5, 0xae, 0x28, 0xe8, 0x45, 0xc9, 0x7b, 0x2b, 0xe8, 0x4b, + 0xc5, 0x31, 0x07, 0xde, 0xc6, 0x76, 0xa9, 0xf1, 0x68, 0x8a, 0xd2, 0xd0, 0x80, 0x39, 0x28, 0x2b, + 0x74, 0x88, 0xeb, 0x59, 0x52, 0x74, 0x65, 0x1e, 0x0f, 0xeb, 0xd3, 0x20, 0xd2, 0x38, 0x83, 0x6f, + 0xfa, 0xec, 0x08, 0x63, 0x7a, 0x76, 0xaa, 0x51, 0xbe, 0x09, 0x34, 0x91, 0xa2, 0x1c, 0x1c, 0x2a, + 0xfb, 0x71, 0x5d, 0x79, 0x44, 0x82, 0x12, 0xf9, 0x01, 0xc7, 0xc0, 0x00, 0xad, 0xd5, 0xb5, 0x2c, + 0x02, 0xa2, 0x2e, 0xe4, 0x15, 0x0a, 0x45, 0x82, 0x0a, 0xed, 0xc5, 0x00, 0x9a, 0x16, 0x08, 0x06, + 0xa2, 0x2b, 0x43, 0x1b, 0x02, 0xc1, 0x5a, 0x7f, 0x24, 0xf2, 0x41, 0x28, 0xdc, 0x40, 0x6e, 0x10, + 0xf6, 0xe9, 0x72, 0xd7, 0xca, 0x0f, 0x8d, 0xec, 0xe8, 0x4c, 0x7f, 0xde, 0x6a, 0xb2, 0x91, 0x3d, + 0xdb, 0x88, 0xa4, 0x9d, 0xe4, 0x7c, 0x30, 0xba, 0xfa, 0x49, 0x42, 0x0e, 0x77, 0x3f, 0x31, 0xec, + 0x95, 0x5f, 0xaa, 0x56, 0x57, 0x56, 0xd9, 0x29, 0xca, 0x17, 0xe0, 0x0b, 0x08, 0x33, 0x8f, 0x61, + 0x1a, 0x52, 0x49, 0x40, 0x88, 0x17, 0x76, 0x22, 0xd7, 0x86, 0x3a, 0x48, 0x39, 0xbe, 0x2d, 0x70, + 0x15, 0xab, 0x2b, 0xed, 0xf2, 0x91, 0x2b, 0x82, 0xcb, 0xfa, 0x21, 0x1f, 0x83, 0xdb, 0x17, 0x82, + 0xae, 0x9c, 0x14, 0x5c, 0xf6, 0x0f, 0xba, 0x60, 0xb2, 0xa0, 0xe6, 0x68, 0x27, 0x1d, 0x91, 0xcd, + 0x89, 0x61, 0xf0, 0xc1, 0x7e, 0xac, 0x26, 0x33, 0x69, 0x6f, 0xaf, 0x86, 0xc0, 0x2d, 0x26, 0x86, + 0x7a, 0xe0, 0xc9, 0x24, 0x47, 0x06, 0xb8, 0x1b, 0x4b, 0x70, 0xa9, 0xa8, 0x1c, 0xc0, 0xcb, 0x31, + 0x87, 0x71, 0xe9, 0x02, 0x48, 0xd9, 0x13, 0x03, 0x71, 0x92, 0x49, 0xc5, 0x24, 0xd4, 0x1d, 0x8b, + 0xb4, 0x31, 0xe8, 0x05, 0x63, 0x63, 0xd0, 0x67, 0x70, 0x0c, 0xfa, 0x1a, 0x34, 0x99, 0xd7, 0x3a, + 0xb1, 0xbc, 0xca, 0xd8, 0xf9, 0xcb, 0x51, 0x25, 0xcf, 0x66, 0x88, 0x98, 0x30, 0x14, 0xc4, 0x70, + 0x5f, 0x75, 0x34, 0x14, 0xbb, 0x05, 0x34, 0x39, 0x10, 0xa9, 0x22, 0x96, 0x3e, 0xe6, 0x29, 0x61, + 0x55, 0x59, 0x21, 0x38, 0xcb, 0x3d, 0x44, 0x72, 0xd8, 0x1d, 0xec, 0x67, 0x16, 0x3e, 0x30, 0xde, + 0x42, 0x66, 0xc2, 0x53, 0x22, 0xbf, 0x90, 0x18, 0xd8, 0x99, 0x3c, 0x72, 0xc1, 0xd1, 0x62, 0xa4, + 0x37, 0x06, 0x3b, 0x62, 0x92, 0x4c, 0xa5, 0xbe, 0xc4, 0xc0, 0x5e, 0x50, 0x40, 0xc0, 0xc2, 0xb8, + 0xc3, 0x56, 0x1d, 0xf3, 0x8b, 0xed, 0x02, 0xca, 0x6f, 0x34, 0x41, 0x10, 0xdb, 0xd7, 0x4d, 0x90, + 0x1f, 0xf0, 0xc2, 0x18, 0x18, 0x46, 0xb1, 0xf5, 0xcd, 0x1a, 0x5d, 0x79, 0x4d, 0x82, 0x0e, 0xf2, + 0xcb, 0xb0, 0x14, 0xb2, 0x02, 0x0c, 0xef, 0xa0, 0xfe, 0x49, 0x1e, 0x20, 0x47, 0xc4, 0xe7, 0xdd, + 0x32, 0x8f, 0x9c, 0xba, 0x53, 0x19, 0x5d, 0xfd, 0x46, 0xeb, 0x90, 0x71, 0xf6, 0x92, 0x71, 0x62, + 0x5b, 0xaa, 0x7b, 0xbb, 0x0a, 0x03, 0x96, 0x5d, 0x16, 0x74, 0x65, 0x50, 0x40, 0x03, 0x82, 0xe4, + 0x44, 0x17, 0x72, 0xb7, 0x90, 0x1a, 0x3c, 0x94, 0xec, 0xd8, 0x61, 0x9c, 0xed, 0xb1, 0xae, 0x2d, + 0x4e, 0x9b, 0x02, 0x37, 0xe1, 0xda, 0x50, 0xc7, 0xb5, 0xa1, 0xcd, 0xc9, 0xf3, 0x67, 0x92, 0xdb, + 0xba, 0xcc, 0x3f, 0xe8, 0x05, 0x07, 0x71, 0x0f, 0x71, 0x93, 0x3d, 0xd8, 0x9f, 0x6e, 0xfd, 0x2e, + 0x7d, 0xb6, 0x3f, 0x11, 0xdf, 0x53, 0xbf, 0xa9, 0x89, 0x89, 0xe1, 0xf8, 0xa5, 0xc3, 0x2a, 0xd3, + 0x5b, 0x87, 0x89, 0x37, 0xdf, 0x57, 0x47, 0x12, 0x83, 0x17, 0xd3, 0x67, 0x8f, 0xa7, 0xbf, 0xbd, + 0x04, 0xe6, 0x5a, 0x6c, 0x4c, 0xbb, 0x69, 0x0b, 0x60, 0x8a, 0xe2, 0x9d, 0x79, 0x68, 0xaa, 0xb5, + 0xf4, 0xbb, 0xe3, 0xc5, 0x58, 0x65, 0xe3, 0xad, 0xbc, 0xd9, 0x6e, 0x1b, 0x5b, 0x05, 0x30, 0x7e, + 0x71, 0xd0, 0xd8, 0x79, 0x8c, 0x67, 0x97, 0x6f, 0x3f, 0x6d, 0xd7, 0x21, 0xe8, 0x4a, 0x9b, 0x80, + 0x5a, 0x05, 0xc9, 0x75, 0x08, 0x72, 0xbd, 0xf1, 0xd9, 0x11, 0x63, 0xe7, 0x31, 0x1e, 0xe1, 0xc3, + 0x6e, 0xe0, 0x13, 0x27, 0x96, 0x62, 0x46, 0x57, 0xe7, 0xc8, 0xa9, 0x36, 0x10, 0x7f, 0x99, 0x4c, + 0xfa, 0xce, 0x33, 0x46, 0xc7, 0x7e, 0xc8, 0x3b, 0x61, 0xbe, 0x8c, 0xdc, 0xc7, 0xe2, 0xd4, 0x40, + 0x97, 0x13, 0xf1, 0xdd, 0xc9, 0xa3, 0x27, 0x47, 0x0e, 0xb6, 0x42, 0xc2, 0x15, 0xf6, 0xf2, 0x01, + 0x67, 0xf6, 0x37, 0xf9, 0x68, 0x5e, 0xb9, 0x3f, 0x5a, 0xff, 0x9e, 0x2d, 0x36, 0xa4, 0xed, 0x15, + 0x7c, 0xcb, 0xfd, 0x0a, 0xbe, 0xe0, 0x8c, 0x8d, 0x86, 0x13, 0x48, 0x5d, 0xba, 0x91, 0x27, 0x70, + 0x35, 0x1a, 0x87, 0xd3, 0x7e, 0xd5, 0x46, 0x08, 0x20, 0xe1, 0x84, 0x31, 0xb4, 0x4c, 0x7e, 0x14, + 0x9e, 0x06, 0x18, 0x3f, 0xd5, 0xb3, 0xad, 0xba, 0x16, 0x28, 0xdc, 0x52, 0x70, 0x40, 0x79, 0xb4, + 0xf4, 0xd1, 0x91, 0x9e, 0xbd, 0xc6, 0x50, 0x4c, 0xa5, 0x3d, 0xc4, 0x20, 0x9a, 0xbc, 0x29, 0x10, + 0x8e, 0xb6, 0x00, 0xee, 0xa8, 0xae, 0x8c, 0x90, 0x57, 0x70, 0xb9, 0xae, 0x54, 0x48, 0x8e, 0x2a, + 0xf9, 0x31, 0xc7, 0xf0, 0xb6, 0xfc, 0x20, 0xde, 0x13, 0x39, 0x86, 0xb0, 0x21, 0xf1, 0xbc, 0xeb, + 0x47, 0xe2, 0xfd, 0x02, 0x42, 0x0d, 0x78, 0xef, 0x71, 0x44, 0xc7, 0x7c, 0xde, 0x2a, 0x93, 0xab, + 0x90, 0x7f, 0x4f, 0x64, 0x42, 0x34, 0xa4, 0x63, 0x58, 0x8b, 0xfa, 0x03, 0xc1, 0x85, 0x20, 0x5d, + 0xe6, 0x21, 0x06, 0x44, 0xcb, 0xc9, 0x83, 0xfd, 0x20, 0x4b, 0x4e, 0x0c, 0x0c, 0x26, 0x7b, 0xe3, + 0x25, 0xd7, 0x86, 0x3a, 0x4c, 0xa8, 0x0e, 0x04, 0xfd, 0x51, 0x6d, 0xa1, 0xd1, 0xf5, 0x25, 0x24, + 0x0e, 0x4d, 0x76, 0xb4, 0x8f, 0xec, 0xe8, 0x22, 0xa8, 0x83, 0x22, 0x8d, 0x12, 0xfe, 0x91, 0x54, + 0xab, 0xd6, 0x28, 0xd5, 0x35, 0x2a, 0xb7, 0x92, 0xb2, 0x23, 0x82, 0xae, 0xf4, 0x08, 0xe8, 0x80, + 0x20, 0x8d, 0x02, 0x39, 0xb2, 0x3f, 0xd9, 0x7e, 0xc9, 0x24, 0x57, 0x71, 0x82, 0x14, 0x72, 0x2b, + 0x30, 0x7a, 0x24, 0x4f, 0x06, 0x68, 0x30, 0x68, 0x92, 0xcc, 0x5d, 0xc6, 0xce, 0x33, 0x8e, 0x74, + 0x2a, 0x57, 0x63, 0x9b, 0x69, 0xce, 0xae, 0xab, 0xb1, 0xcd, 0x8e, 0xf7, 0x24, 0xd5, 0xd7, 0x5e, + 0xe2, 0x89, 0xe0, 0x2e, 0xe6, 0xa1, 0x07, 0x33, 0xae, 0xec, 0xee, 0xc0, 0x77, 0xbf, 0xb2, 0x51, + 0xc8, 0x2e, 0xac, 0x84, 0xbf, 0x0e, 0x7f, 0x50, 0x1d, 0xce, 0xb8, 0x66, 0xc7, 0x7d, 0x78, 0x40, + 0xaa, 0x13, 0x31, 0x37, 0x93, 0x0c, 0x7e, 0xdb, 0x71, 0x9f, 0x05, 0x39, 0xa3, 0x9d, 0x8f, 0xfc, + 0x2e, 0x0f, 0x3a, 0x99, 0x50, 0x21, 0xd9, 0xba, 0x4f, 0x07, 0x8c, 0xf8, 0x5e, 0xbe, 0x25, 0xc3, + 0x83, 0xd7, 0x86, 0x3a, 0x88, 0xa6, 0x8a, 0xdb, 0x0d, 0x42, 0xc1, 0xb4, 0x75, 0x1b, 0x3b, 0x8f, + 0x3a, 0xb0, 0xe1, 0xff, 0x20, 0xa0, 0xa9, 0xce, 0xbd, 0x15, 0x8b, 0x2c, 0x0c, 0x85, 0x33, 0xda, + 0x58, 0xa8, 0xa6, 0x08, 0x8d, 0x8b, 0xb4, 0xd4, 0xd7, 0x6b, 0x91, 0x08, 0xf5, 0x49, 0x25, 0x3f, + 0xcd, 0x1a, 0x0a, 0x2e, 0x60, 0xc2, 0xc9, 0x80, 0x61, 0x16, 0x4b, 0x63, 0x94, 0x07, 0x76, 0x9f, + 0x24, 0xe5, 0x90, 0xcf, 0x4e, 0x54, 0x63, 0x3c, 0x60, 0x27, 0x81, 0x17, 0x38, 0x2d, 0xb8, 0x31, + 0xc9, 0xe8, 0x30, 0x98, 0x2e, 0x3e, 0x3e, 0x9e, 0x7a, 0xe7, 0xde, 0x42, 0x24, 0x5e, 0x6b, 0xf1, + 0x31, 0x2c, 0x20, 0x2d, 0xe1, 0x63, 0xc6, 0x8a, 0xc0, 0xb1, 0xb5, 0xe0, 0x54, 0xc6, 0xce, 0x7c, + 0x61, 0x47, 0x8b, 0x80, 0xc2, 0xdb, 0x04, 0x5d, 0xd9, 0x66, 0x47, 0x8b, 0x9b, 0x1c, 0x68, 0x11, + 0xf0, 0x95, 0x0d, 0x2d, 0x66, 0x44, 0x88, 0x6b, 0xaa, 0xd4, 0x55, 0xd5, 0x35, 0xca, 0x9a, 0xaa, + 0x1f, 0x86, 0x10, 0xc5, 0x3f, 0x5a, 0xaa, 0x5b, 0x50, 0x0e, 0x36, 0xe8, 0x8a, 0xdf, 0x52, 0xdc, + 0xae, 0x4b, 0x0c, 0x74, 0xa6, 0xce, 0x1e, 0x27, 0x8f, 0xca, 0x89, 0x6d, 0x89, 0xf8, 0xee, 0xc4, + 0xe0, 0x60, 0x62, 0x78, 0x1f, 0x3c, 0xc8, 0x23, 0x5b, 0x87, 0x1d, 0x8a, 0x5d, 0xa2, 0x0c, 0xc0, + 0xb9, 0xf2, 0x8c, 0xb6, 0x1e, 0x66, 0x03, 0x75, 0x6d, 0xa8, 0xa3, 0x26, 0x14, 0x55, 0x35, 0x7f, + 0xc3, 0x47, 0xa9, 0xbe, 0x76, 0x4b, 0xe7, 0x7a, 0x03, 0x7a, 0x3e, 0xfe, 0x05, 0xfa, 0x93, 0x90, + 0x41, 0xd1, 0x47, 0x4c, 0x93, 0x9c, 0xaa, 0xbe, 0x08, 0x33, 0x2c, 0xa2, 0x1c, 0x14, 0xe3, 0x75, + 0x88, 0x30, 0x94, 0xd7, 0xd6, 0x12, 0x20, 0x59, 0x44, 0x90, 0x4a, 0xb2, 0x3d, 0x06, 0xf9, 0xa6, + 0x18, 0x17, 0x0f, 0xd4, 0x6c, 0x62, 0xa8, 0x27, 0x7d, 0xfa, 0x94, 0xd1, 0xb5, 0x07, 0xb6, 0x86, + 0x11, 0x36, 0xa0, 0x2f, 0x5c, 0xec, 0x54, 0x18, 0xfe, 0x48, 0xbc, 0xcf, 0xdb, 0xf6, 0x4b, 0x58, + 0x68, 0xb1, 0xcf, 0x36, 0xce, 0xb6, 0x84, 0xa0, 0x55, 0x17, 0x7f, 0x03, 0xf3, 0x30, 0x2d, 0xb4, + 0x93, 0x89, 0xf5, 0x60, 0xad, 0xc6, 0x5f, 0x3f, 0x6b, 0xb5, 0xeb, 0x26, 0xb2, 0x56, 0x65, 0x11, + 0x5d, 0x69, 0x46, 0x41, 0xc9, 0x03, 0x65, 0xc8, 0x95, 0x44, 0x8e, 0x8c, 0x6f, 0x2e, 0x40, 0x10, + 0x3e, 0xd8, 0xdd, 0xf0, 0x86, 0x33, 0xdd, 0x3c, 0xc1, 0xaa, 0xb8, 0x90, 0xca, 0x27, 0xd8, 0x56, + 0x7b, 0x3e, 0xd0, 0xdb, 0xf3, 0xa8, 0xd7, 0xfd, 0xcf, 0x80, 0x09, 0x81, 0xed, 0xb9, 0xb3, 0x98, + 0x90, 0x56, 0x41, 0x57, 0x36, 0x0b, 0xe8, 0x2f, 0x25, 0xaf, 0x63, 0x90, 0xdf, 0x18, 0xcb, 0xab, + 0x7b, 0x53, 0xde, 0xdb, 0x9d, 0xb9, 0x68, 0xf6, 0xaa, 0x10, 0x31, 0xbc, 0x58, 0x13, 0xb2, 0x09, + 0xa6, 0xd7, 0xb9, 0x5f, 0xac, 0x65, 0x99, 0x23, 0xb3, 0x9b, 0x6f, 0x55, 0xfe, 0x98, 0xde, 0xaa, + 0x3a, 0xbb, 0xcc, 0xed, 0x79, 0x5d, 0x59, 0x4c, 0xdf, 0xaa, 0x87, 0xcd, 0xff, 0x7c, 0xf4, 0x85, + 0xba, 0x36, 0xd4, 0x91, 0xec, 0x8d, 0x19, 0x27, 0x4e, 0x03, 0xb3, 0x9d, 0xbe, 0xd0, 0x9a, 0xbe, + 0xbc, 0xe3, 0xb1, 0xa5, 0x4b, 0xbf, 0x2f, 0x1f, 0xaf, 0x0b, 0x05, 0x85, 0xc2, 0xd4, 0x06, 0x4b, + 0xfa, 0xb6, 0xde, 0x8e, 0x38, 0xe0, 0xb9, 0x7a, 0x49, 0x57, 0x1e, 0xb2, 0x23, 0x8e, 0x19, 0x0c, + 0x11, 0xd9, 0xb2, 0xae, 0x8f, 0x4d, 0xa1, 0x4a, 0xa2, 0xf8, 0x67, 0xda, 0x30, 0x2e, 0x86, 0x72, + 0x62, 0xa0, 0x8f, 0x1c, 0xcc, 0xe9, 0x41, 0x26, 0xd7, 0x4a, 0x9e, 0x3b, 0xc6, 0x05, 0x9b, 0xf6, + 0xb8, 0x95, 0xff, 0x35, 0x17, 0x15, 0xb9, 0xc7, 0xbe, 0x3b, 0xae, 0xe6, 0x5b, 0x63, 0xb8, 0x9a, + 0x60, 0x60, 0x8c, 0xaf, 0xe6, 0xa3, 0xc6, 0x37, 0xdb, 0x33, 0xed, 0x90, 0xdd, 0x2f, 0xe2, 0x76, + 0xdf, 0x54, 0x92, 0xb0, 0x3b, 0xe3, 0xc1, 0x64, 0xfd, 0x14, 0x7e, 0xab, 0xdc, 0x12, 0xef, 0xff, + 0x9e, 0x83, 0xe6, 0xaa, 0x5a, 0x13, 0x1d, 0x78, 0x79, 0x38, 0xd4, 0x74, 0x4b, 0x2e, 0x60, 0x95, + 0xfd, 0x02, 0x2e, 0x31, 0x31, 0x26, 0xb9, 0x80, 0xb3, 0x09, 0xb1, 0x88, 0xa9, 0x37, 0x8e, 0x58, + 0xbc, 0x5d, 0x57, 0x8e, 0x84, 0xb2, 0xcc, 0xb6, 0x4d, 0xf2, 0x3c, 0xf6, 0x22, 0x5a, 0x5b, 0x8f, + 0xd7, 0x9f, 0xe5, 0x01, 0xfc, 0x6f, 0xb9, 0xe8, 0x7e, 0xef, 0x31, 0xef, 0x8e, 0xeb, 0xb6, 0x6e, + 0x0c, 0xd7, 0x8d, 0xcf, 0x4c, 0x90, 0x18, 0xdc, 0xed, 0xd8, 0x9c, 0x3b, 0xee, 0xa2, 0xd1, 0xdc, + 0x76, 0xd9, 0x8e, 0x85, 0x26, 0xb5, 0x4e, 0x0d, 0x6e, 0xe3, 0x8f, 0x98, 0x3d, 0x91, 0xfc, 0xdb, + 0x07, 0x0d, 0xf8, 0xb7, 0xaf, 0xf8, 0x3f, 0xe4, 0xa2, 0xa2, 0x8a, 0x46, 0xcd, 0x1f, 0x24, 0x66, + 0x7a, 0xb7, 0xe4, 0xb6, 0xbd, 0x6a, 0xbf, 0x6d, 0x4f, 0xf2, 0x2a, 0x26, 0xb8, 0x6d, 0x60, 0x97, + 0x68, 0x7c, 0x7a, 0x24, 0xb9, 0xf7, 0xc2, 0xed, 0xbf, 0x73, 0x3f, 0x50, 0x9e, 0x56, 0xf6, 0x81, + 0xae, 0x44, 0x51, 0x58, 0xca, 0xb8, 0xd1, 0x72, 0x09, 0x0f, 0x8c, 0x89, 0x81, 0x3e, 0xfe, 0xf3, + 0x29, 0x11, 0xeb, 0x75, 0x75, 0xed, 0x86, 0x82, 0xb0, 0x21, 0xbc, 0xc1, 0xe0, 0x9e, 0x3c, 0x74, + 0x9f, 0xc7, 0xa4, 0x77, 0xc7, 0x85, 0x7e, 0x65, 0x0c, 0x17, 0xda, 0x16, 0xa9, 0x08, 0x06, 0xe9, + 0xd9, 0x06, 0xbb, 0x77, 0xa7, 0x5c, 0xe2, 0x4e, 0x41, 0x57, 0xda, 0x05, 0xb4, 0x5d, 0x90, 0x32, + 0x1f, 0x85, 0x1c, 0xe0, 0x4d, 0xa6, 0xad, 0xbb, 0xbb, 0xf7, 0x5c, 0x22, 0xbe, 0x3b, 0xdd, 0x7f, + 0x12, 0x28, 0xa4, 0xc4, 0x40, 0xdc, 0x18, 0xda, 0x92, 0xec, 0x3b, 0xc9, 0x42, 0xe6, 0x98, 0x55, + 0x40, 0xf9, 0x0e, 0xb6, 0xa6, 0xb7, 0x0e, 0xc3, 0x5d, 0xe7, 0x3f, 0x9f, 0xdc, 0xf5, 0xbe, 0xcf, + 0x8d, 0x81, 0x01, 0x70, 0x4f, 0x2b, 0xfe, 0x2f, 0xb9, 0x68, 0x8e, 0x6b, 0x21, 0xeb, 0xe4, 0x1f, + 0xfb, 0xce, 0xbf, 0x6e, 0x17, 0xc7, 0x94, 0x9b, 0x0c, 0x2c, 0xb9, 0xf3, 0x4b, 0xb2, 0xde, 0x79, + 0x2c, 0x2a, 0xb9, 0x9c, 0xda, 0x7b, 0xe6, 0xd1, 0xd2, 0x47, 0x8d, 0xb6, 0xed, 0x46, 0xfb, 0x9f, + 0x1c, 0x62, 0x99, 0xbb, 0x00, 0x01, 0x7c, 0xa4, 0x2b, 0x9b, 0x50, 0x54, 0xca, 0xb2, 0xef, 0x3f, + 0x1a, 0x0a, 0xd8, 0x97, 0x87, 0xe6, 0x7a, 0x4e, 0x7b, 0x0f, 0x09, 0xdc, 0x42, 0x24, 0x60, 0xd9, + 0x92, 0x67, 0x3b, 0x8c, 0x5b, 0x89, 0x06, 0xfe, 0x3a, 0x07, 0x52, 0x52, 0x79, 0x63, 0x81, 0xdb, + 0x64, 0xa0, 0x2b, 0x7e, 0x8c, 0x0a, 0x42, 0x2d, 0xd1, 0xe6, 0x96, 0x28, 0x01, 0xae, 0xf5, 0xba, + 0xf2, 0x8e, 0x44, 0x8a, 0xe4, 0xb5, 0x60, 0xce, 0x68, 0x59, 0x2c, 0x75, 0xf5, 0x8f, 0xc4, 0xda, + 0x8d, 0xd8, 0x90, 0xef, 0x83, 0x40, 0x83, 0xb6, 0xd0, 0x68, 0x3d, 0x33, 0xb2, 0xf5, 0x0c, 0xd4, + 0x96, 0x94, 0xfa, 0xd6, 0xfb, 0x23, 0x81, 0xfa, 0x85, 0xc6, 0xd1, 0x78, 0xb2, 0xf7, 0x6b, 0x52, + 0xc8, 0x64, 0xa6, 0x7c, 0xa9, 0x4a, 0x86, 0x2f, 0x7b, 0x56, 0x57, 0x96, 0xa1, 0xa7, 0xa4, 0xd9, + 0xce, 0x5d, 0xc9, 0x64, 0x20, 0xcc, 0x6b, 0xe4, 0x8a, 0xff, 0xd7, 0x5c, 0x34, 0xc7, 0x6b, 0x3b, + 0xef, 0x8e, 0x5b, 0xb6, 0xda, 0xa6, 0xda, 0x79, 0x20, 0xa3, 0xf1, 0x13, 0x4e, 0x0a, 0x8d, 0x1d, + 0x16, 0xe1, 0xba, 0x4d, 0xc3, 0xe8, 0xc6, 0x23, 0xad, 0xfb, 0x6d, 0xbc, 0x6a, 0x84, 0x3f, 0xca, + 0x72, 0x1a, 0xf2, 0xc3, 0x44, 0x1d, 0xf5, 0xd9, 0x57, 0x16, 0xed, 0x4c, 0xdd, 0x32, 0xcc, 0x2f, + 0x72, 0x18, 0x2c, 0x82, 0x5c, 0xe8, 0xaf, 0x27, 0xa0, 0x49, 0xb6, 0x8d, 0x10, 0x97, 0x81, 0x8f, + 0x2f, 0xbb, 0x1f, 0xf8, 0x8c, 0x48, 0x91, 0x3c, 0x9d, 0x88, 0x9b, 0xe2, 0x7b, 0x02, 0xc4, 0xf7, + 0xa5, 0xba, 0x52, 0x25, 0x95, 0xe2, 0x33, 0x68, 0x5c, 0x20, 0x18, 0xd4, 0xc2, 0xd5, 0xb5, 0x56, + 0x7e, 0xbf, 0xfb, 0x25, 0x5a, 0x26, 0x4f, 0x23, 0xa0, 0xb5, 0xbd, 0x35, 0x35, 0xbc, 0x27, 0x31, + 0x30, 0x58, 0x5d, 0xab, 0xd2, 0x3a, 0xf1, 0x4d, 0x34, 0x91, 0x0e, 0x68, 0x45, 0xe3, 0x28, 0x7f, + 0x5a, 0x57, 0x9e, 0x90, 0x6c, 0x15, 0xf2, 0x82, 0x64, 0x6f, 0xdc, 0x38, 0xb2, 0x8b, 0x1c, 0x0e, + 0x0d, 0x8d, 0x08, 0xd7, 0x26, 0xbd, 0x75, 0x98, 0x98, 0x52, 0xd9, 0xfa, 0x88, 0xbf, 0x40, 0xb9, + 0x15, 0xb5, 0x6b, 0x31, 0xb2, 0x9d, 0x04, 0x70, 0x63, 0xfe, 0xa6, 0x66, 0x97, 0x15, 0xb5, 0x6b, + 0x09, 0xac, 0x99, 0xa5, 0xe2, 0x62, 0x94, 0xdb, 0xa4, 0x35, 0x91, 0xb4, 0x7c, 0x18, 0x28, 0xcc, + 0xdf, 0xd4, 0xef, 0xd2, 0xd8, 0xde, 0x6a, 0xf4, 0x1d, 0xa4, 0xed, 0x9b, 0xb4, 0x26, 0x71, 0x19, + 0xca, 0x5d, 0x51, 0xbb, 0xd6, 0x4a, 0xc5, 0xf7, 0x90, 0x64, 0xfe, 0x96, 0xef, 0x87, 0xf6, 0x2b, + 0xe8, 0xe0, 0xfc, 0x0a, 0x97, 0xaa, 0x66, 0x13, 0xb1, 0x4b, 0x40, 0x05, 0x11, 0xac, 0xf8, 0x22, + 0x12, 0x75, 0x93, 0xa0, 0x96, 0x48, 0x91, 0xfc, 0x3e, 0x39, 0x44, 0xac, 0xb9, 0xa0, 0x63, 0xb4, + 0x25, 0x8f, 0x5d, 0x4a, 0x76, 0x9e, 0xb5, 0x45, 0x05, 0xa0, 0x11, 0xd4, 0xaf, 0x0d, 0xb5, 0x5f, + 0x1b, 0xea, 0x20, 0x36, 0x50, 0xa5, 0xbe, 0xca, 0xaa, 0x95, 0x55, 0x6b, 0xaa, 0xf0, 0x9f, 0x15, + 0x6a, 0x95, 0xb2, 0x06, 0xff, 0xb5, 0x5c, 0xa9, 0x5e, 0x59, 0x55, 0x59, 0xea, 0xab, 0xae, 0xa9, + 0x5e, 0x53, 0xad, 0xac, 0xac, 0x7e, 0x43, 0x59, 0x53, 0xbd, 0xba, 0x46, 0x25, 0x73, 0x8a, 0x0a, + 0x2a, 0xf8, 0x38, 0x14, 0xd4, 0x98, 0x3c, 0xbe, 0xc4, 0x64, 0x61, 0xf2, 0xcc, 0x22, 0x6a, 0xc3, + 0x69, 0x74, 0xf5, 0xa7, 0xf6, 0x9e, 0x31, 0x3a, 0xe2, 0xce, 0x1d, 0x27, 0x1d, 0xc5, 0xdf, 0xdb, + 0x51, 0x2c, 0x44, 0xe9, 0x7a, 0x43, 0x57, 0x7e, 0x69, 0x47, 0xb1, 0x2f, 0x13, 0xa2, 0x80, 0x26, + 0x43, 0xe7, 0x31, 0x2e, 0xb6, 0x89, 0x63, 0x23, 0x2f, 0x4c, 0x0c, 0xb6, 0x52, 0xcd, 0xb4, 0x31, + 0xac, 0x1b, 0xe7, 0x8e, 0x24, 0xe2, 0xbb, 0xd9, 0x50, 0x25, 0x76, 0x44, 0xbb, 0x9c, 0x27, 0xf3, + 0x90, 0x95, 0xae, 0x8e, 0x23, 0xf3, 0x8a, 0x1c, 0x33, 0xb3, 0x04, 0x70, 0x3c, 0x59, 0xf7, 0x18, + 0xca, 0x5d, 0x57, 0x5b, 0x41, 0xc2, 0x76, 0x61, 0x28, 0x36, 0x7f, 0xd3, 0x88, 0x04, 0xac, 0xef, + 0xba, 0xda, 0x0a, 0x5f, 0x75, 0xa5, 0x6a, 0xd6, 0x89, 0x6f, 0x32, 0x63, 0xda, 0x89, 0x34, 0x26, + 0xef, 0x4b, 0xcc, 0x98, 0xf6, 0x29, 0xbe, 0x23, 0x98, 0xd1, 0x5a, 0xda, 0xa7, 0x4b, 0x97, 0x8d, + 0x8b, 0xe6, 0x83, 0x98, 0xbc, 0x78, 0xce, 0xe8, 0x3d, 0x6f, 0x6e, 0xec, 0xce, 0x63, 0xc6, 0xc5, + 0x23, 0xa9, 0xbe, 0x76, 0x66, 0x64, 0x5b, 0x83, 0x0a, 0x9a, 0xfd, 0x91, 0xc8, 0x07, 0x0d, 0xc4, + 0x1d, 0x1e, 0xc2, 0xa8, 0x41, 0x91, 0x5c, 0xe2, 0x70, 0xe0, 0xa7, 0x96, 0x85, 0x40, 0x7f, 0x82, + 0x59, 0x54, 0xfa, 0xf4, 0xe7, 0x46, 0xff, 0x76, 0x95, 0x74, 0x11, 0xdf, 0x46, 0xf8, 0x54, 0xb1, + 0x63, 0xfc, 0xa4, 0xf2, 0x6a, 0x5d, 0x59, 0x2e, 0x91, 0x03, 0xa4, 0x8c, 0x37, 0x3b, 0x68, 0xc8, + 0xfd, 0xc9, 0x1d, 0xc8, 0xb3, 0x3e, 0x16, 0x0e, 0x14, 0x04, 0xd5, 0x40, 0xc7, 0x26, 0xe2, 0xbb, + 0x2b, 0x14, 0x15, 0x0f, 0x2b, 0x2a, 0xa8, 0xb0, 0x41, 0xdb, 0x14, 0x30, 0x91, 0x03, 0xf1, 0x68, + 0x7f, 0x58, 0x57, 0x8a, 0x25, 0x56, 0x28, 0xcf, 0xaa, 0x50, 0x7c, 0xf4, 0x8a, 0xa6, 0xcf, 0x7e, + 0x67, 0x9c, 0xd8, 0x51, 0x5d, 0x69, 0x74, 0x5d, 0x54, 0x59, 0x0b, 0xf1, 0xf7, 0x16, 0x42, 0x50, + 0x43, 0x2c, 0x44, 0xfa, 0xeb, 0xba, 0xb2, 0x56, 0xb2, 0x55, 0xc8, 0x55, 0x84, 0xac, 0x38, 0xad, + 0xa7, 0xdb, 0x4d, 0x3c, 0xb0, 0x4a, 0xa9, 0x5b, 0x53, 0xa5, 0x96, 0xfa, 0x7e, 0xb9, 0x5a, 0x7d, + 0xd5, 0xfc, 0xbf, 0x6a, 0x4d, 0x45, 0x65, 0xa9, 0x0f, 0x4a, 0xdf, 0xc1, 0x3f, 0x94, 0x95, 0x2b, + 0xa9, 0x95, 0x7e, 0x62, 0x20, 0x0e, 0xed, 0x54, 0xdb, 0xa0, 0xe2, 0x1f, 0xd1, 0xa4, 0x96, 0x60, + 0x5d, 0xfd, 0x7b, 0x5a, 0x43, 0x4b, 0x23, 0x8e, 0x93, 0x3a, 0x0d, 0x6f, 0x14, 0x9e, 0xde, 0x5e, + 0x23, 0x57, 0xa6, 0xbf, 0xd9, 0x6a, 0xc4, 0x4f, 0xc1, 0x3d, 0xb5, 0x9e, 0xe2, 0xd8, 0xd0, 0xd2, + 0xf4, 0xf1, 0x33, 0xa9, 0x13, 0x71, 0xa3, 0x6b, 0x4b, 0x62, 0x60, 0x37, 0x34, 0xba, 0x36, 0xd4, + 0xf1, 0x18, 0x94, 0xe2, 0xa8, 0xa8, 0x56, 0x85, 0x6a, 0x1f, 0x54, 0x7c, 0x1a, 0x15, 0x9a, 0x60, + 0xcd, 0xfc, 0xe1, 0xc7, 0x43, 0x28, 0x2e, 0x56, 0x28, 0x4f, 0x24, 0xa7, 0x04, 0xf6, 0xe2, 0xac, + 0xbc, 0xf8, 0x4a, 0x2e, 0xe4, 0x87, 0xbd, 0x1b, 0x39, 0xe3, 0xe5, 0xb6, 0xe7, 0x7a, 0x86, 0xd7, + 0x73, 0x7d, 0xa7, 0xbf, 0xd2, 0x6b, 0x74, 0xe5, 0x35, 0xb4, 0x5a, 0xca, 0x78, 0x04, 0x37, 0xf6, + 0x46, 0xff, 0xcb, 0x5c, 0x74, 0x3f, 0x78, 0xac, 0x43, 0xc6, 0x87, 0x40, 0x70, 0x95, 0xff, 0xc3, + 0xba, 0xc0, 0xc7, 0xda, 0xf5, 0x7a, 0x4b, 0xbb, 0x58, 0x44, 0x2f, 0x26, 0xd7, 0x8e, 0x51, 0x5f, + 0x47, 0xe3, 0x9a, 0x02, 0x41, 0x73, 0x32, 0x0c, 0x03, 0x93, 0xca, 0x5f, 0x30, 0xdf, 0x64, 0x5a, + 0x26, 0x97, 0x24, 0x2e, 0x9f, 0x4d, 0xee, 0xbd, 0x14, 0xe4, 0xbc, 0xee, 0xfc, 0x24, 0x0c, 0x4e, + 0x20, 0xb8, 0x01, 0xec, 0x2e, 0x13, 0x03, 0xbb, 0x46, 0x0e, 0x75, 0xd3, 0x24, 0xb6, 0xb4, 0x2b, + 0x1e, 0x19, 0x3e, 0x03, 0x83, 0x08, 0x1b, 0x19, 0xca, 0xc6, 0x38, 0xf2, 0x4e, 0xdb, 0xc8, 0xd0, + 0x55, 0x7c, 0xc9, 0xc5, 0xd6, 0x2e, 0xc0, 0xb7, 0x87, 0xb1, 0xb5, 0x13, 0x81, 0xad, 0x4d, 0xc4, + 0xe3, 0xc6, 0x9e, 0x83, 0x56, 0xe2, 0x7c, 0x8b, 0xb3, 0x7d, 0x5b, 0x57, 0xde, 0x40, 0xaf, 0x4b, + 0x59, 0x77, 0x5d, 0x96, 0x60, 0x85, 0x6c, 0x53, 0x93, 0xbd, 0x31, 0xe3, 0x9b, 0x2e, 0x50, 0x64, + 0x91, 0x7c, 0x37, 0x67, 0x2f, 0x8d, 0x1c, 0xea, 0x1e, 0xf9, 0xec, 0xb0, 0x9d, 0xa1, 0x2d, 0xee, + 0xc9, 0x45, 0x0f, 0x64, 0x18, 0xfa, 0xee, 0xb8, 0xaa, 0x1e, 0x57, 0x2c, 0xef, 0x16, 0x5d, 0xb1, + 0x77, 0x74, 0xe5, 0x2d, 0xf4, 0x86, 0x94, 0x7d, 0xff, 0xe4, 0x67, 0xc6, 0x7e, 0x36, 0x4c, 0x55, + 0x07, 0xdf, 0x58, 0xdc, 0x65, 0x3f, 0x1c, 0x25, 0xb2, 0x26, 0xd0, 0xa4, 0xa9, 0xfe, 0xe0, 0x86, + 0x5b, 0x71, 0xdd, 0x36, 0x21, 0x14, 0xa5, 0xd3, 0x81, 0x20, 0xd9, 0xc3, 0x6b, 0x83, 0x2d, 0x08, + 0x0c, 0x26, 0xb8, 0x1e, 0xb2, 0x64, 0x9c, 0xed, 0x49, 0x1e, 0xb8, 0x00, 0x46, 0x1d, 0xe4, 0x2b, + 0x39, 0x8b, 0x45, 0x5b, 0xd6, 0x0a, 0xae, 0x9f, 0xf9, 0xe0, 0xb0, 0x2b, 0x93, 0xcb, 0x3d, 0x38, + 0xde, 0x57, 0x86, 0xbb, 0x29, 0x24, 0xdd, 0x6c, 0xf6, 0x1d, 0x93, 0xe7, 0x3b, 0x42, 0x71, 0xc0, + 0x2a, 0x93, 0xed, 0x5f, 0xa4, 0x86, 0xbe, 0x48, 0xf5, 0xed, 0x4f, 0xed, 0x3b, 0xe9, 0x14, 0xf9, + 0x70, 0x8b, 0x2b, 0x3e, 0x90, 0x8b, 0xe6, 0x65, 0x1a, 0xff, 0xde, 0x7d, 0x19, 0xe5, 0xbe, 0xbc, + 0xa9, 0x2b, 0xaf, 0xa3, 0x75, 0xd2, 0x28, 0x1b, 0x28, 0x3f, 0xb1, 0x21, 0xcb, 0x11, 0x51, 0x2b, + 0x50, 0xf3, 0xa0, 0x6c, 0x77, 0xe5, 0x3f, 0x0b, 0xe8, 0xa1, 0x35, 0x61, 0x7f, 0x30, 0xc2, 0xba, + 0xad, 0x09, 0xf1, 0x61, 0xbd, 0xe8, 0x8d, 0x69, 0xf0, 0xba, 0x31, 0xe5, 0x26, 0x65, 0x6e, 0xbb, + 0x31, 0xb3, 0xb8, 0x1f, 0x9c, 0x69, 0x0f, 0x8d, 0x45, 0x3d, 0xca, 0xe5, 0xa1, 0xce, 0x7c, 0x63, + 0x59, 0x91, 0x3c, 0x9b, 0x8d, 0x9f, 0x1e, 0xfe, 0x3a, 0xd9, 0xf9, 0x19, 0x7c, 0x96, 0x53, 0xf4, + 0x58, 0xbc, 0x3d, 0x17, 0x2d, 0xc8, 0x3e, 0xdc, 0xdd, 0x01, 0x80, 0x8d, 0xa8, 0x30, 0x4a, 0xc3, + 0xb1, 0xe5, 0x8d, 0x21, 0x1c, 0x1b, 0xd6, 0xe0, 0xb3, 0x2e, 0xf2, 0x43, 0xf4, 0x2f, 0xd8, 0x2c, + 0x87, 0x79, 0x57, 0xba, 0xff, 0x54, 0x72, 0x6b, 0xab, 0xca, 0x9a, 0xd3, 0x83, 0x18, 0xd3, 0xce, + 0xc9, 0x0b, 0x1c, 0x27, 0x91, 0x18, 0x88, 0xf3, 0x83, 0x13, 0x48, 0xdb, 0x66, 0xc7, 0xca, 0x95, + 0x5a, 0x24, 0x10, 0xd6, 0x1a, 0x6e, 0x11, 0x11, 0x54, 0x81, 0x53, 0x49, 0xd1, 0x09, 0x09, 0x21, + 0x34, 0x5f, 0x57, 0xe6, 0x49, 0x7c, 0xb9, 0x3c, 0xc5, 0x41, 0xb2, 0xa8, 0x7c, 0xad, 0xf8, 0x82, + 0x0b, 0xc5, 0x16, 0x67, 0xa5, 0x4a, 0xf2, 0xc2, 0xb6, 0x20, 0x21, 0x2c, 0xf2, 0x6a, 0xf6, 0x6d, + 0x90, 0x5f, 0x72, 0xbd, 0x7c, 0x47, 0x93, 0xbd, 0x9f, 0x5a, 0x27, 0xb6, 0xef, 0x9b, 0x52, 0x78, + 0x17, 0x8c, 0xf6, 0xce, 0xc4, 0xe5, 0xc3, 0xe9, 0xfe, 0xcd, 0x10, 0x77, 0x22, 0x31, 0x10, 0x4b, + 0xef, 0xf8, 0x36, 0x19, 0x3b, 0xed, 0xc4, 0xc4, 0xfc, 0x47, 0x14, 0x77, 0xdb, 0x51, 0xb1, 0x6d, + 0xfe, 0x7b, 0xa8, 0x78, 0x6c, 0xdc, 0x81, 0xc7, 0x06, 0x9a, 0xa7, 0xc5, 0x2e, 0xc4, 0x22, 0x07, + 0x26, 0x86, 0x13, 0x64, 0xc7, 0xe7, 0xa4, 0x57, 0xf6, 0xe7, 0x79, 0xdd, 0x0c, 0x18, 0xf1, 0x47, + 0xbf, 0x19, 0x2b, 0xd9, 0xcd, 0xc0, 0x36, 0x96, 0x70, 0x33, 0x20, 0x8e, 0x25, 0x57, 0x2e, 0x17, + 0xc1, 0x37, 0x38, 0x84, 0xcc, 0xc9, 0x7d, 0xdf, 0xa8, 0x7c, 0x33, 0xb1, 0xd2, 0x75, 0x45, 0x16, + 0x9a, 0x97, 0xcc, 0xba, 0x22, 0x22, 0x80, 0x6e, 0xd6, 0x8b, 0x22, 0xee, 0x13, 0x50, 0x41, 0x93, + 0x3f, 0xd8, 0xe2, 0x6f, 0x24, 0x46, 0xc2, 0x7f, 0xd0, 0x95, 0x8f, 0x25, 0x52, 0x24, 0x37, 0x83, + 0xfb, 0x03, 0x3f, 0x50, 0x29, 0x3d, 0x41, 0x67, 0x85, 0xc9, 0xa5, 0x6f, 0xee, 0x81, 0xfb, 0x61, + 0xc2, 0x60, 0x2c, 0x06, 0xea, 0x87, 0x6b, 0x43, 0x1d, 0xc6, 0xb9, 0x7d, 0x26, 0x73, 0x8f, 0xe3, + 0x06, 0x9a, 0x04, 0x65, 0xdf, 0xc9, 0x91, 0x2f, 0x71, 0xe8, 0x21, 0x6c, 0xdc, 0x0c, 0x03, 0x8e, + 0xec, 0xe8, 0x4c, 0xf7, 0xef, 0x53, 0xc9, 0xcc, 0x65, 0x41, 0x5d, 0xd9, 0x88, 0x02, 0x52, 0xf6, + 0xc3, 0x72, 0x91, 0x4a, 0xee, 0xfb, 0x9b, 0xe9, 0x82, 0xd6, 0x60, 0x96, 0xd1, 0xd2, 0x91, 0xfd, + 0xbd, 0xe7, 0x5d, 0xe5, 0x41, 0xed, 0x4e, 0xbf, 0xab, 0xb5, 0x63, 0x50, 0x93, 0xf1, 0xb9, 0x97, + 0x2c, 0x35, 0x19, 0xe7, 0x0f, 0x7b, 0xa7, 0x28, 0xcb, 0x7e, 0x9c, 0xdb, 0x7f, 0x45, 0x40, 0x0f, + 0x56, 0xe1, 0x18, 0x16, 0xac, 0x07, 0x8d, 0x2b, 0x7b, 0x0b, 0xee, 0x3f, 0xfd, 0xa8, 0xd1, 0x96, + 0x20, 0xcf, 0x83, 0x10, 0x1c, 0x16, 0x02, 0xa0, 0x0c, 0x0a, 0xd8, 0x3c, 0x3b, 0xa8, 0xae, 0x3d, + 0xb9, 0xc8, 0x97, 0x79, 0xc4, 0x7b, 0xef, 0xcc, 0x28, 0x90, 0x56, 0xa7, 0x2b, 0xb5, 0xa8, 0x46, + 0x1a, 0x75, 0x0b, 0x65, 0x29, 0xfb, 0xa9, 0xf0, 0xdf, 0x55, 0xfc, 0x6f, 0x04, 0xe4, 0xab, 0x0c, + 0x44, 0x6e, 0x1b, 0xa4, 0xad, 0xd5, 0x15, 0x15, 0xd5, 0x4a, 0xa3, 0xae, 0x41, 0x9e, 0x67, 0xb4, + 0x9e, 0x1f, 0x39, 0xd0, 0x37, 0x46, 0x50, 0xfb, 0x24, 0x17, 0xcd, 0xcf, 0x32, 0xe4, 0x3d, 0x58, + 0x1b, 0x1b, 0x56, 0x1b, 0x7d, 0x0f, 0x65, 0x29, 0xfb, 0xb9, 0xd8, 0x80, 0xed, 0xef, 0x11, 0x9a, + 0x06, 0xde, 0xfb, 0x26, 0x8e, 0xa7, 0xd0, 0xf5, 0x07, 0x54, 0x18, 0xf5, 0x47, 0x36, 0x62, 0x05, + 0x21, 0x0b, 0x5d, 0xf4, 0x6b, 0x89, 0x15, 0xca, 0x2a, 0xe0, 0x7a, 0x96, 0x40, 0x0d, 0x14, 0x2c, + 0x34, 0x93, 0x39, 0xde, 0x88, 0x6b, 0x43, 0x1d, 0xd4, 0x19, 0x78, 0x4d, 0xc8, 0x2a, 0xe3, 0x8c, + 0xf3, 0x97, 0x87, 0x43, 0x4d, 0xa4, 0x22, 0xd5, 0xd7, 0xae, 0xb2, 0xd1, 0xc5, 0x0d, 0x4c, 0x5d, + 0x07, 0x67, 0xba, 0x1a, 0x1f, 0x0c, 0x51, 0xd7, 0x4d, 0x24, 0x53, 0x63, 0x35, 0xc0, 0xf7, 0xe5, + 0x8f, 0x87, 0x1f, 0x53, 0x27, 0x32, 0x2d, 0x5b, 0x75, 0xcd, 0x0a, 0x75, 0x1c, 0xd1, 0xcc, 0xa9, + 0xe3, 0xea, 0xd6, 0x56, 0x54, 0x54, 0xd5, 0xd5, 0xa9, 0x05, 0xa0, 0x8d, 0x53, 0xc7, 0xad, 0xa9, + 0x5e, 0x55, 0xb5, 0x7a, 0xed, 0x1a, 0xa6, 0x86, 0xfb, 0xb5, 0xc3, 0xa5, 0x0d, 0xf2, 0x6c, 0x33, + 0xe8, 0x79, 0x8a, 0x58, 0x3f, 0xe0, 0x28, 0x7f, 0x4c, 0xbb, 0x98, 0xdc, 0x79, 0x72, 0x64, 0xef, + 0xa1, 0xe4, 0x81, 0x0b, 0x89, 0x81, 0x38, 0x00, 0x56, 0xb2, 0xab, 0x3b, 0x75, 0x22, 0x6e, 0x05, + 0x2f, 0x63, 0x10, 0xf6, 0x04, 0xca, 0x8f, 0x44, 0xfd, 0xe1, 0x28, 0x11, 0x8e, 0xce, 0xd3, 0x95, + 0xb9, 0x12, 0x94, 0xc8, 0x22, 0x09, 0x4e, 0xd9, 0xdd, 0x6f, 0x9e, 0xcd, 0x81, 0x0b, 0x23, 0x07, + 0xbe, 0x55, 0xa1, 0x4a, 0x5c, 0x8c, 0x72, 0xb5, 0x60, 0x03, 0x71, 0x7b, 0x02, 0xc5, 0xa8, 0x16, + 0x6c, 0xa0, 0x3d, 0xcc, 0x83, 0x3b, 0x7c, 0x94, 0xf4, 0x30, 0x2b, 0xc4, 0x95, 0x68, 0x92, 0xf6, + 0xa1, 0x56, 0xdf, 0x62, 0xc2, 0xc9, 0x9a, 0x40, 0x93, 0xc6, 0xab, 0x48, 0xed, 0x35, 0x74, 0x0c, + 0x12, 0xb7, 0x10, 0xc6, 0xb0, 0x37, 0x11, 0xd7, 0xa2, 0x09, 0xf5, 0x2d, 0xe1, 0xb0, 0x16, 0x8c, + 0xd6, 0x45, 0xb5, 0x66, 0xa2, 0x30, 0x7d, 0x5c, 0x57, 0x96, 0x4a, 0x7c, 0xb9, 0x3c, 0x9f, 0x8c, + 0xd4, 0xf7, 0xb9, 0xd1, 0x7b, 0x06, 0xc6, 0x63, 0xd4, 0x19, 0x51, 0x96, 0xf0, 0xed, 0xc5, 0xd7, + 0xd0, 0xc4, 0x48, 0x54, 0x6b, 0xae, 0x33, 0x21, 0x2c, 0x58, 0xaf, 0xe1, 0xcc, 0x46, 0xe3, 0xcb, + 0x17, 0xe9, 0x4a, 0xb1, 0x64, 0xab, 0x70, 0x2c, 0x11, 0x8f, 0xf7, 0x7d, 0x79, 0xfe, 0xff, 0xcf, + 0xde, 0xdf, 0x40, 0x47, 0x71, 0x64, 0x09, 0xa2, 0x70, 0x67, 0x49, 0x02, 0x29, 0x10, 0x7f, 0x69, + 0xc0, 0xb2, 0xf8, 0x2b, 0x97, 0xb1, 0x2d, 0xca, 0x12, 0x82, 0x04, 0xff, 0xc9, 0xc6, 0x76, 0x4a, + 0x02, 0x5a, 0x36, 0x3f, 0x72, 0x09, 0xe8, 0x6e, 0xbb, 0xdd, 0xb8, 0xa8, 0x4a, 0x44, 0x35, 0x52, + 0x55, 0x75, 0x55, 0x49, 0x36, 0x78, 0x7a, 0x3e, 0x81, 0x25, 0x90, 0x8c, 0xf8, 0x4b, 0x1b, 0x30, + 0xb2, 0xf8, 0xb3, 0xc1, 0x60, 0x1b, 0x49, 0x60, 0x6c, 0x2c, 0x24, 0x61, 0x66, 0xce, 0xce, 0xec, + 0xb7, 0x6f, 0x76, 0x66, 0x77, 0xd6, 0xbb, 0xb3, 0xb3, 0x67, 0xe7, 0xcd, 0xf4, 0xec, 0x71, 0x65, + 0x55, 0x69, 0xdf, 0x9b, 0xc3, 0xce, 0x3b, 0x7b, 0xde, 0xd9, 0xe7, 0xdd, 0x99, 0xf7, 0x4e, 0xc4, + 0x8d, 0xc8, 0x8c, 0xac, 0xcc, 0x2c, 0x49, 0xfe, 0xc7, 0xed, 0x73, 0x7c, 0x8c, 0x2a, 0xe2, 0x46, + 0x64, 0xc4, 0x8d, 0x7b, 0x6f, 0xdc, 0xb8, 0x71, 0xe3, 0x5e, 0x55, 0x70, 0x15, 0x0a, 0x3e, 0x13, + 0xa4, 0x78, 0x42, 0xc0, 0xe8, 0x55, 0xa2, 0x2c, 0x22, 0x79, 0xb9, 0x7d, 0xf6, 0x05, 0x8e, 0xb0, + 0x97, 0xe0, 0xa1, 0xd0, 0xd8, 0xdc, 0x9b, 0x54, 0xf9, 0xa7, 0x5e, 0x68, 0x2f, 0x3d, 0x09, 0xdf, + 0x84, 0xac, 0xc4, 0xf0, 0x4d, 0xee, 0x21, 0xd7, 0x70, 0xe6, 0xdd, 0xdd, 0x70, 0xef, 0x06, 0x85, + 0xe0, 0x1f, 0x83, 0x55, 0xd3, 0x91, 0x3d, 0xda, 0xe0, 0x60, 0xea, 0xf8, 0xb5, 0x2f, 0xaa, 0x27, + 0xf7, 0x08, 0xf9, 0x85, 0xc2, 0x8c, 0x59, 0x3e, 0xe8, 0x51, 0x7c, 0xd1, 0x7a, 0x3f, 0x5a, 0x4d, + 0x02, 0x0c, 0x1b, 0xf7, 0xa3, 0xfa, 0x44, 0x0d, 0xd6, 0x9f, 0x48, 0x78, 0xaf, 0xe7, 0xf8, 0x70, + 0x40, 0x70, 0x7f, 0xfa, 0x38, 0xf9, 0x82, 0x11, 0x0e, 0xc8, 0xfc, 0x05, 0x12, 0x08, 0x88, 0x39, + 0xd2, 0xd8, 0x64, 0x1b, 0x33, 0x1a, 0xf2, 0x49, 0x99, 0x8a, 0x6d, 0x93, 0x32, 0x01, 0xed, 0x12, + 0x4f, 0xa0, 0xe4, 0xd0, 0x90, 0x4d, 0x52, 0xa6, 0x3a, 0x84, 0x9a, 0xfc, 0xf1, 0x04, 0xa8, 0x60, + 0xf4, 0x2e, 0x95, 0x5c, 0x72, 0x73, 0xc5, 0x52, 0x09, 0x7d, 0x41, 0x34, 0xf8, 0x5a, 0xea, 0xd2, + 0x59, 0x1a, 0xf6, 0x19, 0x68, 0x92, 0x83, 0x2a, 0x5d, 0x8f, 0x90, 0xb1, 0x6c, 0x36, 0x61, 0x8b, + 0xbd, 0xe6, 0x14, 0xbc, 0x16, 0xe5, 0x15, 0x37, 0xe6, 0x83, 0x19, 0x47, 0x55, 0xb9, 0x19, 0xed, + 0xf0, 0x5a, 0xc5, 0x1e, 0xcb, 0x9b, 0xcb, 0x88, 0x01, 0x5e, 0x95, 0xe8, 0x62, 0xe9, 0x33, 0xc1, + 0x44, 0x7e, 0x9f, 0x09, 0xb0, 0xd4, 0x66, 0x77, 0x3a, 0x03, 0x89, 0x46, 0x3a, 0x15, 0xcf, 0xdf, + 0x0a, 0x48, 0xe4, 0xbf, 0x76, 0x7b, 0xec, 0x75, 0x65, 0x63, 0x9f, 0x09, 0x68, 0x9e, 0xd5, 0xcf, + 0x05, 0x34, 0xc3, 0xa7, 0x24, 0x62, 0x3b, 0xf9, 0x3d, 0xe4, 0xa7, 0xfa, 0xa3, 0x60, 0x3d, 0xfd, + 0xa6, 0xe8, 0xa5, 0x45, 0x52, 0x21, 0xe0, 0x18, 0x2b, 0x25, 0x25, 0xb1, 0x39, 0x24, 0x41, 0xba, + 0x4d, 0xfa, 0x3b, 0xfa, 0x8c, 0x78, 0x8d, 0x11, 0xa3, 0x1e, 0xe6, 0x5d, 0xa1, 0xca, 0x6e, 0x23, + 0x46, 0xfd, 0x6c, 0xe8, 0x0b, 0xce, 0x80, 0xda, 0xa1, 0x23, 0x99, 0x8f, 0x3f, 0x21, 0x34, 0x69, + 0xc9, 0xbc, 0x5e, 0xf5, 0xb8, 0x2a, 0x3f, 0x8a, 0x1e, 0xf6, 0x5a, 0xc6, 0x2a, 0xcd, 0x80, 0xc6, + 0xb8, 0x88, 0x2d, 0x3b, 0xfd, 0x38, 0x97, 0x2d, 0xf9, 0x7f, 0x09, 0x68, 0x26, 0xd7, 0xf2, 0x76, + 0xcb, 0xfd, 0xe8, 0x7c, 0xb0, 0x23, 0xdb, 0x12, 0x1c, 0xec, 0xee, 0xd0, 0x63, 0x58, 0x1b, 0xd1, + 0x91, 0xe9, 0x22, 0x27, 0x05, 0x34, 0xbd, 0x61, 0x47, 0x28, 0xfa, 0xcd, 0xac, 0xf1, 0xd3, 0xd9, + 0x6b, 0xbc, 0x14, 0xef, 0x5e, 0xfa, 0x1a, 0x53, 0x49, 0x91, 0xf9, 0xe4, 0x6a, 0xe6, 0xe6, 0xbe, + 0x74, 0x4f, 0x7b, 0xce, 0x65, 0xa6, 0x8e, 0x78, 0xd9, 0xa3, 0x95, 0x66, 0x40, 0xf3, 0xdc, 0xab, + 0xfc, 0x3f, 0x05, 0x34, 0xc3, 0x68, 0xf8, 0xfb, 0xb6, 0xc8, 0x99, 0x49, 0x68, 0x26, 0x88, 0x5d, + 0x7e, 0x99, 0xd7, 0x64, 0x2d, 0x73, 0xa5, 0xc3, 0x32, 0xc3, 0xd6, 0xb2, 0xc8, 0x79, 0x95, 0xb7, + 0x67, 0x29, 0x76, 0xf5, 0x39, 0x14, 0xbb, 0x15, 0x31, 0x69, 0x4c, 0xc5, 0x6e, 0x32, 0x56, 0xec, + 0x36, 0xf9, 0x56, 0x7d, 0xfb, 0x9a, 0x1d, 0xd5, 0xd1, 0xf2, 0xbf, 0xb4, 0x8e, 0x56, 0xf0, 0x35, + 0xea, 0x68, 0x93, 0xbe, 0x26, 0x1d, 0xcd, 0x50, 0xa8, 0x26, 0xdb, 0x2b, 0x54, 0x16, 0xd2, 0xf8, + 0xf6, 0x14, 0x2a, 0x2e, 0x51, 0x49, 0xa1, 0x6d, 0xa2, 0x12, 0x98, 0x2a, 0xa1, 0x6c, 0xb3, 0x4a, + 0x42, 0x41, 0xbe, 0x76, 0x3d, 0x62, 0xa5, 0x2a, 0x57, 0xa1, 0x47, 0xbc, 0x56, 0x7e, 0x91, 0x66, + 0xc0, 0x30, 0x72, 0x0b, 0x9a, 0x7f, 0x12, 0x90, 0xc8, 0x37, 0xfd, 0x7d, 0x13, 0x35, 0xaf, 0xba, + 0xd0, 0x4c, 0x38, 0x0c, 0x7e, 0x23, 0xa2, 0x26, 0x91, 0x9d, 0x7b, 0x80, 0xb8, 0x46, 0xea, 0x01, + 0x2c, 0xd6, 0xf2, 0xf1, 0x29, 0x8c, 0xb1, 0x61, 0x1a, 0x3c, 0x70, 0x35, 0x79, 0xe3, 0x66, 0xaa, + 0xf7, 0x7d, 0x70, 0x77, 0x07, 0xb6, 0xd1, 0xfa, 0xbb, 0x53, 0x9d, 0x24, 0xc2, 0xfd, 0xf5, 0xd3, + 0x24, 0x81, 0xc0, 0x5b, 0x5a, 0xc7, 0xf9, 0xf4, 0x70, 0x67, 0xaa, 0xef, 0x6d, 0x3e, 0x55, 0x40, + 0x55, 0xa5, 0x2a, 0x97, 0x23, 0xaf, 0xd7, 0x3a, 0x31, 0xa9, 0x98, 0xa6, 0xed, 0x27, 0x33, 0xd0, + 0xe9, 0xc1, 0xd3, 0xe6, 0x62, 0xa1, 0x4d, 0x6e, 0x27, 0x2a, 0x78, 0x66, 0x1c, 0x54, 0x40, 0x6e, + 0xed, 0x80, 0x0a, 0xe6, 0xf0, 0x91, 0xc8, 0x2d, 0x84, 0xb0, 0x4f, 0x40, 0xd3, 0xd6, 0x28, 0x09, + 0x9e, 0x0a, 0x56, 0x67, 0x51, 0xc1, 0x12, 0x55, 0x9e, 0xa9, 0x53, 0xc1, 0x64, 0x0c, 0xe9, 0x1e, + 0x0f, 0x11, 0x54, 0x55, 0xa8, 0xb2, 0x17, 0x95, 0x79, 0xb3, 0xba, 0x97, 0xe6, 0x80, 0x27, 0xbe, + 0x31, 0x12, 0x1a, 0xa5, 0xfb, 0x8f, 0x5d, 0x68, 0xba, 0x0e, 0xfa, 0xc3, 0xe4, 0x47, 0x3d, 0x36, + 0x77, 0xf6, 0x32, 0x54, 0xad, 0x52, 0xe5, 0x6a, 0xf4, 0x94, 0x37, 0x1b, 0x01, 0x13, 0x0d, 0x8b, + 0xfd, 0x3f, 0x26, 0xa1, 0xe9, 0x6b, 0x43, 0x71, 0xd3, 0x72, 0x06, 0xac, 0x6f, 0xc2, 0x56, 0xa9, + 0xf2, 0x63, 0xfc, 0x61, 0x78, 0x89, 0x71, 0x54, 0x1d, 0x5f, 0x1c, 0x6c, 0xb8, 0x8b, 0x32, 0xc5, + 0xeb, 0xe1, 0xce, 0xc3, 0x80, 0x7a, 0x89, 0x44, 0xc4, 0x37, 0xce, 0xc3, 0x73, 0xb3, 0x3e, 0xc2, + 0xc7, 0xc6, 0x85, 0x1e, 0xdd, 0xfc, 0x29, 0xf8, 0x09, 0xe3, 0x14, 0x9c, 0x67, 0xe4, 0x06, 0xb4, + 0x3f, 0x05, 0x93, 0x87, 0x5b, 0x90, 0x1b, 0x50, 0x3f, 0x03, 0x3f, 0x61, 0x6c, 0x59, 0xf9, 0x5c, + 0x7b, 0xdb, 0x2d, 0x8b, 0x6f, 0xcf, 0x32, 0x6b, 0xf1, 0x56, 0xb8, 0x82, 0x6f, 0xdf, 0x0a, 0x17, + 0xd3, 0x95, 0xb5, 0x49, 0x86, 0x6f, 0x39, 0x53, 0xd6, 0xd6, 0xf1, 0xca, 0x5a, 0x19, 0xaf, 0xa6, + 0x95, 0xbb, 0x75, 0xcf, 0x78, 0xaa, 0xa6, 0x19, 0xde, 0xf0, 0x54, 0x4b, 0x2b, 0x77, 0xaf, 0xde, + 0xe0, 0xab, 0x59, 0xa5, 0xc7, 0x2a, 0x5a, 0xac, 0xab, 0x6d, 0x9b, 0xe8, 0x93, 0x88, 0x7a, 0x6a, + 0x77, 0xc2, 0x7b, 0x2c, 0x7d, 0x12, 0x51, 0x2f, 0x2d, 0x4d, 0x9d, 0x3e, 0x9c, 0x1c, 0x7a, 0x4b, + 0xeb, 0x1d, 0x4a, 0x9d, 0x18, 0x48, 0x0e, 0xee, 0x37, 0x22, 0x7f, 0xd7, 0xd5, 0xd3, 0x50, 0xc2, + 0x03, 0xd7, 0xb5, 0xa1, 0x37, 0xf4, 0xd0, 0x1d, 0xf4, 0xbd, 0x44, 0xbd, 0xf8, 0x33, 0xbb, 0x18, + 0x38, 0x24, 0x28, 0x9f, 0xc9, 0x5a, 0x7e, 0x0f, 0xf4, 0xc8, 0x39, 0xc4, 0x64, 0x6e, 0xee, 0x4b, + 0x0d, 0x9f, 0x63, 0x0b, 0x4d, 0x5c, 0x5f, 0x4d, 0xb6, 0xf2, 0xd7, 0x04, 0x55, 0xde, 0x2b, 0xa0, + 0x57, 0x05, 0x6f, 0x36, 0xd1, 0x4b, 0x51, 0x18, 0x12, 0x46, 0xe7, 0xb7, 0x14, 0x3b, 0xf9, 0x83, + 0x3c, 0x34, 0xc3, 0x18, 0xc5, 0xed, 0x21, 0xbf, 0x1a, 0x72, 0xbb, 0x22, 0x13, 0xf9, 0x05, 0x8f, + 0x23, 0x88, 0xfc, 0x5a, 0x60, 0x8a, 0x98, 0xcc, 0x2d, 0x8b, 0x29, 0x0a, 0x8d, 0x82, 0x50, 0x93, + 0x3f, 0xa1, 0x00, 0x26, 0xe8, 0xb5, 0xa3, 0x7d, 0xd7, 0x78, 0xbf, 0xa6, 0x5d, 0x2f, 0xd2, 0xbb, + 0xd6, 0x6e, 0xbc, 0xae, 0x75, 0x1d, 0x48, 0xf5, 0xb6, 0xa5, 0x8e, 0x5d, 0xce, 0x0a, 0x3f, 0xe9, + 0xe3, 0x3a, 0xd6, 0xcd, 0x09, 0xd9, 0x38, 0x97, 0x44, 0x2a, 0x32, 0x41, 0x07, 0x76, 0x08, 0xce, + 0x3c, 0xbc, 0x08, 0x2d, 0x00, 0x56, 0xe5, 0xd2, 0x53, 0x6e, 0x88, 0x62, 0x1d, 0x9f, 0xc9, 0xcd, + 0xdf, 0xa0, 0x99, 0xa1, 0x38, 0xb1, 0xed, 0xd7, 0x46, 0x5e, 0x0a, 0xc3, 0x25, 0x13, 0x59, 0xc8, + 0x42, 0x78, 0xf4, 0x60, 0xad, 0x95, 0x1e, 0x20, 0x79, 0x31, 0x2b, 0x82, 0x91, 0x97, 0xc2, 0x15, + 0x10, 0x71, 0x3f, 0x58, 0x4e, 0x63, 0xf6, 0x77, 0xec, 0xce, 0xf4, 0x0f, 0xd2, 0x2b, 0x00, 0xc8, + 0x4b, 0x6d, 0x6d, 0x2f, 0xbe, 0x84, 0x0a, 0x95, 0x97, 0xa3, 0xfe, 0x70, 0x50, 0x3f, 0x88, 0x3f, + 0xaf, 0xca, 0x3f, 0xf7, 0xea, 0x85, 0xd2, 0x5a, 0xf6, 0x17, 0x75, 0x6e, 0x49, 0xf7, 0x1f, 0x4f, + 0x5d, 0x3d, 0x4a, 0xc2, 0xc0, 0x76, 0x82, 0x47, 0xfe, 0xad, 0x91, 0xae, 0x98, 0x3f, 0x1c, 0x8c, + 0x34, 0x97, 0xbb, 0x9b, 0x14, 0x7f, 0x3c, 0x51, 0xf1, 0x92, 0x3f, 0x9e, 0x50, 0xca, 0xdd, 0xcd, + 0x91, 0x78, 0xa2, 0x22, 0x1a, 0x09, 0xc6, 0xcb, 0xdd, 0xd1, 0x58, 0x28, 0x12, 0x0b, 0x25, 0x76, + 0xfa, 0xf4, 0x7e, 0xc5, 0x5d, 0x48, 0x6c, 0xf6, 0xbf, 0xbc, 0xaa, 0x39, 0x9a, 0xd8, 0x59, 0xdd, + 0xd2, 0xb4, 0x03, 0x04, 0x14, 0xf5, 0x57, 0x7e, 0x5a, 0x95, 0xd7, 0x78, 0x6d, 0xaa, 0xa5, 0x65, + 0xcd, 0xfe, 0x97, 0x2b, 0x14, 0x5c, 0x58, 0xb1, 0xb5, 0xa5, 0x69, 0x47, 0x05, 0x04, 0x30, 0x2b, + 0xd7, 0x0e, 0x1c, 0x4d, 0x5d, 0x3a, 0x4b, 0x83, 0x3c, 0x11, 0x4f, 0x54, 0xc3, 0x0d, 0xc2, 0xa6, + 0x1b, 0xf1, 0x15, 0x34, 0x2d, 0xce, 0xf0, 0x50, 0xab, 0x34, 0xf9, 0x77, 0xd2, 0x17, 0x4c, 0x0d, + 0xaa, 0x5c, 0xef, 0xcd, 0xaa, 0x92, 0x9e, 0x60, 0xb1, 0x1d, 0x89, 0x6b, 0xcf, 0xe1, 0x83, 0xda, + 0xb9, 0x9e, 0xd1, 0xa3, 0x37, 0xe1, 0x9c, 0xa6, 0x8d, 0xb4, 0x69, 0x17, 0xf6, 0x6b, 0x9d, 0xe7, + 0xb4, 0xfe, 0x1e, 0xf8, 0xbc, 0xfe, 0x4e, 0x61, 0xd9, 0x52, 0xad, 0x73, 0xef, 0xa8, 0x7a, 0xda, + 0x97, 0xd5, 0x9f, 0xf8, 0x2f, 0x04, 0x34, 0x5b, 0x2f, 0xda, 0x14, 0x0e, 0x2b, 0x4a, 0x50, 0x09, + 0x72, 0x47, 0x44, 0x08, 0xae, 0xea, 0xb5, 0x87, 0x91, 0x22, 0xdc, 0x7a, 0xb7, 0xd0, 0x8a, 0x8a, + 0x44, 0xa8, 0x59, 0x29, 0xa7, 0xe7, 0x3d, 0x88, 0x51, 0xd7, 0xd7, 0xa5, 0x7d, 0xda, 0x01, 0x63, + 0xc4, 0x1b, 0x2a, 0x7d, 0x1f, 0x7a, 0x2a, 0x3d, 0xdc, 0x97, 0x7e, 0x6f, 0x68, 0xf4, 0xf8, 0x87, + 0xda, 0xb9, 0x1e, 0xed, 0xf2, 0x11, 0x18, 0xa1, 0x76, 0xf8, 0x60, 0xe6, 0xed, 0x0f, 0x9c, 0x86, + 0x6f, 0x3f, 0x0e, 0xf1, 0xbf, 0x09, 0x68, 0xbe, 0x51, 0x93, 0x08, 0x35, 0x85, 0x76, 0x91, 0x7b, + 0xab, 0x8d, 0xdb, 0x63, 0x8a, 0x7f, 0x7b, 0xa4, 0x29, 0x48, 0x2f, 0x25, 0x68, 0x68, 0xeb, 0xdc, + 0xb0, 0xd2, 0xab, 0x02, 0x3f, 0x2d, 0x03, 0xa2, 0x22, 0xb1, 0x3d, 0xa6, 0xc4, 0x31, 0x48, 0x39, + 0x44, 0x56, 0xa3, 0xe4, 0x4c, 0xf2, 0x4f, 0x8d, 0xbe, 0xd9, 0xa9, 0xb5, 0x8d, 0x18, 0xd3, 0xe3, + 0xb2, 0x33, 0x62, 0x19, 0x79, 0xe3, 0x60, 0x72, 0xe8, 0x20, 0xcc, 0x33, 0x7d, 0xe2, 0x53, 0xad, + 0x73, 0x6f, 0x6a, 0xe0, 0x0d, 0x58, 0x29, 0x10, 0xab, 0xa3, 0xc7, 0x3f, 0x34, 0x72, 0x84, 0x0d, + 0x0e, 0x3d, 0xb8, 0xd4, 0x97, 0x7b, 0x90, 0xe2, 0x01, 0x01, 0xdd, 0x15, 0xdf, 0x11, 0x82, 0x04, + 0x55, 0x3f, 0x0b, 0x25, 0xb6, 0xaf, 0x8d, 0x04, 0xfc, 0x4d, 0x0d, 0x89, 0x48, 0x0c, 0x0b, 0xcf, + 0xc9, 0x84, 0x4d, 0x37, 0xa8, 0xf2, 0x5a, 0xaf, 0x33, 0x94, 0x54, 0xa9, 0xdd, 0xbc, 0x91, 0x3e, + 0x7a, 0x3e, 0xd5, 0xdb, 0x95, 0xea, 0xbd, 0xa4, 0xf5, 0x5e, 0xd6, 0xfa, 0xde, 0xd4, 0xf6, 0x5c, + 0xd4, 0x7d, 0x50, 0xf8, 0x01, 0x41, 0x06, 0x5c, 0xe7, 0xbe, 0xc4, 0x53, 0x02, 0xba, 0xd3, 0x54, + 0xdb, 0xb0, 0x33, 0x9e, 0x50, 0x9a, 0xeb, 0x23, 0xc1, 0x38, 0x8d, 0x76, 0x4d, 0x62, 0xf8, 0x39, + 0xc1, 0x48, 0xab, 0x61, 0x2c, 0x3b, 0x5a, 0xb6, 0x2a, 0x15, 0x71, 0x52, 0xec, 0x5e, 0xdf, 0x80, + 0xb7, 0xd9, 0x93, 0xa7, 0x6a, 0xfd, 0x4a, 0x73, 0x24, 0xdc, 0xa0, 0x24, 0xf4, 0x27, 0x14, 0xf5, + 0x91, 0xa0, 0x75, 0x94, 0x30, 0x44, 0xa7, 0x0f, 0x88, 0x87, 0x05, 0x34, 0x37, 0xd4, 0x18, 0x8e, + 0xc4, 0x14, 0xbd, 0xbf, 0x38, 0x87, 0x59, 0x1a, 0x37, 0x8e, 0x64, 0x3a, 0xcd, 0x05, 0x27, 0x95, + 0xc3, 0x40, 0x8d, 0x41, 0xb1, 0x3c, 0xaa, 0x99, 0xfe, 0xb3, 0xe9, 0xfe, 0xe3, 0x59, 0xc3, 0xc9, + 0xd5, 0x95, 0xb8, 0x5b, 0x40, 0x77, 0x44, 0x76, 0x6c, 0x8c, 0x24, 0xfc, 0x4d, 0x9b, 0xc2, 0x31, + 0xc5, 0x1f, 0xdc, 0x59, 0x13, 0x69, 0x09, 0x27, 0xc8, 0x8d, 0xcd, 0x54, 0x58, 0x3d, 0xbb, 0x7a, + 0xe9, 0xc1, 0xc8, 0x8e, 0x8a, 0x04, 0x2e, 0xad, 0x68, 0x81, 0xe2, 0x8a, 0x00, 0x2e, 0x2f, 0x07, + 0x21, 0xeb, 0xa6, 0x85, 0x6e, 0x3d, 0x94, 0x58, 0xea, 0xe8, 0xe5, 0xd1, 0x7d, 0x87, 0x7c, 0x76, + 0x7d, 0x89, 0x9f, 0x09, 0xe8, 0xae, 0x66, 0xff, 0xcb, 0x7c, 0x45, 0xbd, 0x12, 0x0b, 0x28, 0xe1, + 0x04, 0xa6, 0xa3, 0x29, 0x64, 0x24, 0xaf, 0x0b, 0xaa, 0x7c, 0x48, 0xf0, 0x3a, 0xc3, 0x49, 0x31, + 0x2c, 0x0a, 0xcd, 0x43, 0x8a, 0xea, 0xb5, 0xe5, 0xb4, 0x88, 0x72, 0x06, 0x89, 0xfa, 0x45, 0xc5, + 0x58, 0xdb, 0xb0, 0x3e, 0x48, 0x9d, 0x2d, 0x30, 0x0f, 0x11, 0x98, 0x54, 0xdf, 0x39, 0xe0, 0x2a, + 0xad, 0xf3, 0x84, 0xb6, 0xbb, 0x37, 0xd5, 0xf7, 0x36, 0xef, 0xef, 0xee, 0x73, 0x1e, 0x8e, 0xa8, + 0x0a, 0x68, 0x16, 0x27, 0x29, 0x48, 0x35, 0x11, 0x6a, 0xc5, 0x64, 0x3e, 0xbf, 0x52, 0xe5, 0xe7, + 0xbd, 0xb6, 0x00, 0x52, 0x8d, 0x49, 0xa2, 0xc1, 0x4c, 0x88, 0x40, 0x33, 0xcd, 0xc1, 0x56, 0xae, + 0x69, 0x07, 0x8e, 0x26, 0x6f, 0x1c, 0x48, 0x5f, 0x50, 0x7d, 0xb6, 0x5d, 0x8b, 0x7f, 0x2a, 0xa0, + 0xb9, 0xb8, 0x97, 0xc6, 0x10, 0x56, 0x04, 0x98, 0x3b, 0x50, 0x73, 0xa4, 0xd5, 0xdf, 0x44, 0xc6, + 0x36, 0x95, 0x8c, 0x8d, 0xb8, 0x7f, 0x7a, 0x73, 0x01, 0x4a, 0x2f, 0xb2, 0x08, 0x90, 0xec, 0xa1, + 0x0c, 0xd1, 0x9d, 0xb5, 0x4f, 0x3b, 0x4c, 0x9b, 0xc1, 0xe5, 0xbd, 0x34, 0x90, 0x67, 0xef, 0xfb, + 0x5a, 0xef, 0x45, 0xcc, 0x57, 0xb1, 0xb0, 0x92, 0x50, 0xe2, 0xc9, 0xc1, 0xbe, 0xd4, 0xd5, 0x8b, + 0xda, 0xde, 0x6e, 0x2b, 0x07, 0x2d, 0x67, 0x62, 0x36, 0xd7, 0xe7, 0xc5, 0x66, 0xfe, 0x3c, 0x35, + 0x8d, 0x5d, 0x91, 0x97, 0xf3, 0xe7, 0xa9, 0x85, 0xdc, 0x61, 0x09, 0x63, 0xc6, 0x7c, 0xa8, 0x9a, + 0x58, 0x22, 0xa1, 0x2a, 0xe3, 0x1c, 0x34, 0x9d, 0xa9, 0x84, 0xb3, 0x8c, 0x73, 0x50, 0x11, 0x77, + 0x02, 0xb2, 0xdc, 0x03, 0xae, 0xe4, 0x92, 0x03, 0xcf, 0x60, 0x81, 0x2f, 0x16, 0x70, 0xa9, 0x81, + 0xc5, 0x74, 0xd7, 0xf5, 0x54, 0xdb, 0x05, 0x9a, 0x05, 0x98, 0x84, 0x3c, 0xe5, 0x72, 0xf6, 0x5e, + 0xb4, 0x49, 0x32, 0x3e, 0x93, 0x88, 0x89, 0x3f, 0x54, 0xe5, 0x57, 0xac, 0x89, 0xc4, 0xb7, 0xf3, + 0xf9, 0x89, 0xb2, 0xfc, 0x1e, 0x88, 0x7d, 0x91, 0xe4, 0x2d, 0x3a, 0x7c, 0x30, 0x39, 0xd2, 0xa3, + 0xf5, 0x5e, 0xcc, 0x0c, 0x9c, 0x07, 0x7c, 0x8c, 0xbe, 0x7a, 0x31, 0x7d, 0xe3, 0x43, 0x37, 0x3d, + 0x06, 0x71, 0xfa, 0x98, 0x3b, 0x3d, 0xdc, 0x9e, 0x1c, 0xbe, 0xc6, 0xcb, 0x61, 0xb7, 0x43, 0x2a, + 0xf2, 0x7f, 0x25, 0xa0, 0x3b, 0xb6, 0xb6, 0x6c, 0xdb, 0xa6, 0xc4, 0x7c, 0x34, 0x65, 0xb0, 0x0f, + 0xcb, 0x18, 0xf2, 0xaa, 0x70, 0x6a, 0xf5, 0x51, 0x41, 0x95, 0x8f, 0x08, 0x5e, 0x3b, 0x08, 0x69, + 0x17, 0x14, 0x56, 0xb0, 0x54, 0xc3, 0x15, 0x24, 0x5d, 0x38, 0xdd, 0xe1, 0xa8, 0x83, 0x1d, 0xb7, + 0xc3, 0xf1, 0x6c, 0x4a, 0x9f, 0x9c, 0x70, 0x5b, 0x5d, 0xfa, 0xe0, 0x3e, 0xe0, 0xdd, 0xcc, 0xc0, + 0x79, 0xd8, 0x0e, 0xb5, 0xce, 0x13, 0x7c, 0x57, 0xfa, 0x5c, 0xdc, 0xcb, 0x96, 0x2e, 0xf5, 0xd9, + 0x0d, 0x48, 0x3c, 0x07, 0x12, 0x69, 0x4d, 0xcc, 0x1f, 0x50, 0xb6, 0xb5, 0x34, 0x6d, 0xa4, 0x41, + 0xb6, 0x43, 0x58, 0x7e, 0x06, 0x48, 0x32, 0xdf, 0xa9, 0xd5, 0xdb, 0x54, 0x39, 0xe0, 0x75, 0x86, + 0x92, 0x56, 0x63, 0x79, 0xd4, 0x48, 0xeb, 0x2a, 0x12, 0x46, 0x65, 0x45, 0x5c, 0x09, 0x94, 0x53, + 0xdd, 0x8c, 0x84, 0x55, 0x05, 0xce, 0x71, 0xd7, 0x47, 0x82, 0xee, 0xd1, 0xb6, 0x36, 0x6d, 0xdf, + 0x50, 0xaa, 0xb7, 0x4d, 0x67, 0x22, 0x9f, 0xf3, 0x27, 0xc4, 0x76, 0x01, 0x15, 0xc7, 0x03, 0xfe, + 0x70, 0x5d, 0x38, 0xa1, 0xc4, 0x5a, 0xfd, 0x4d, 0x25, 0xb3, 0xc8, 0xc8, 0x5e, 0x54, 0xe5, 0x17, + 0xbc, 0xa6, 0x0a, 0x69, 0x1d, 0xfe, 0x55, 0x11, 0xa2, 0x3f, 0xcb, 0xb3, 0x08, 0x23, 0xf5, 0x4e, + 0x5b, 0xea, 0xe3, 0xfd, 0xf0, 0x3d, 0xfc, 0x5f, 0xcf, 0x1b, 0xba, 0x2c, 0xc1, 0xaa, 0xc1, 0x05, + 0xd5, 0xb4, 0xfc, 0xcb, 0x96, 0xfa, 0x4c, 0x9d, 0xe3, 0x7d, 0x77, 0x56, 0xb3, 0xff, 0x65, 0xcc, + 0xa4, 0xf5, 0x98, 0x6e, 0xe3, 0xcc, 0xc4, 0x3f, 0x9b, 0x0c, 0xe7, 0xd7, 0xaa, 0xdc, 0xe8, 0xb5, + 0x05, 0x90, 0x36, 0x60, 0x1c, 0xe1, 0xe3, 0x64, 0x45, 0x94, 0x95, 0x83, 0xa8, 0x03, 0x94, 0x50, + 0xa5, 0xf5, 0xd0, 0xe1, 0xe4, 0xa7, 0x6f, 0xf1, 0x38, 0xe1, 0x25, 0x9d, 0xb1, 0x9a, 0x8f, 0x2e, + 0x5d, 0xea, 0xb3, 0xfd, 0x8c, 0x78, 0x52, 0x40, 0xd3, 0x09, 0x8d, 0x6e, 0x8a, 0xe2, 0xc3, 0xfe, + 0x73, 0x4a, 0x2c, 0x52, 0x32, 0x67, 0xcc, 0x4c, 0xfd, 0x3f, 0x53, 0xe5, 0x8d, 0xde, 0xec, 0x76, + 0x92, 0x0c, 0xd2, 0xb9, 0x25, 0x5a, 0xb1, 0x2d, 0x16, 0x69, 0xae, 0xd8, 0xa5, 0xc4, 0x22, 0x74, + 0xd3, 0xe3, 0x77, 0x86, 0x5b, 0x23, 0x9d, 0xa9, 0x0f, 0xcf, 0xa6, 0x7a, 0xbb, 0xdc, 0xfc, 0x3e, + 0x48, 0x96, 0xbb, 0xcb, 0x97, 0xdd, 0x27, 0x1e, 0xdf, 0x1c, 0xb3, 0x52, 0x2c, 0x6f, 0xc3, 0x6c, + 0x18, 0x0c, 0x96, 0xdc, 0x49, 0x50, 0xa8, 0xa8, 0xf2, 0x56, 0xaf, 0x03, 0x88, 0xf4, 0x53, 0x6e, + 0xbf, 0x08, 0xe2, 0x9a, 0x0a, 0xff, 0x36, 0x22, 0x9a, 0x83, 0xc1, 0x72, 0x43, 0x49, 0xef, 0x3c, + 0x97, 0x3a, 0xd6, 0xa7, 0x53, 0x9d, 0x75, 0xa1, 0xf1, 0xa6, 0xe1, 0xf0, 0x05, 0xf1, 0x5d, 0xac, + 0xe8, 0x59, 0xab, 0xe8, 0x11, 0xa5, 0x84, 0x0c, 0x91, 0x44, 0xbb, 0x75, 0x86, 0x72, 0x1c, 0x25, + 0x3d, 0xb1, 0x80, 0x2e, 0x9e, 0x1c, 0x3c, 0x67, 0x9c, 0x5b, 0x9c, 0x46, 0xe9, 0xfc, 0x11, 0xf1, + 0x5f, 0x0b, 0xa8, 0xd4, 0xa6, 0x76, 0xb5, 0x3f, 0xd4, 0xd4, 0x12, 0x53, 0x4a, 0xee, 0x1a, 0x47, + 0x36, 0xf1, 0x66, 0x55, 0xfe, 0xb5, 0x37, 0x47, 0x27, 0xd2, 0x5a, 0x87, 0x89, 0x6c, 0x83, 0x7a, + 0xca, 0xd9, 0x90, 0x8c, 0x54, 0x3b, 0x7c, 0x10, 0x2e, 0xd6, 0x1d, 0x27, 0x93, 0xe3, 0x4b, 0xe2, + 0x1e, 0x17, 0x72, 0xeb, 0xd5, 0x6b, 0xa2, 0x2d, 0x59, 0x4a, 0x38, 0x39, 0x06, 0x94, 0x94, 0x12, + 0xec, 0x7f, 0x2c, 0xa8, 0xf2, 0x15, 0xc1, 0x3b, 0x26, 0xb8, 0xd4, 0xcd, 0x1f, 0x2c, 0x1a, 0xa3, + 0x2d, 0x13, 0x3c, 0x5c, 0x94, 0xad, 0xa9, 0xdf, 0xb4, 0xf8, 0x6b, 0x3c, 0x61, 0x8c, 0x39, 0x60, + 0xf1, 0xaf, 0x04, 0x34, 0xc7, 0x2c, 0xa2, 0x6b, 0xa2, 0x2d, 0xb0, 0xb1, 0xcc, 0x25, 0x53, 0xef, + 0x15, 0x54, 0xf9, 0x4d, 0xc1, 0xeb, 0x00, 0x24, 0xfd, 0xa1, 0x7d, 0xf9, 0x04, 0x36, 0x97, 0x40, + 0xb4, 0xe5, 0x2b, 0xec, 0x2f, 0x0e, 0xe3, 0xb2, 0x99, 0xd7, 0x3a, 0xa5, 0x19, 0xe6, 0x35, 0x2f, + 0xc7, 0xbc, 0x18, 0x50, 0xf6, 0xbc, 0x58, 0xf9, 0x04, 0xe6, 0xd5, 0xac, 0x34, 0x7f, 0x7d, 0xf3, + 0x62, 0xdf, 0xaf, 0xc2, 0xdb, 0x22, 0xf2, 0x7b, 0xc7, 0xb0, 0xec, 0x48, 0xf3, 0x41, 0x67, 0xb2, + 0xd4, 0xdb, 0x85, 0xb2, 0xb5, 0x75, 0x29, 0xfa, 0x67, 0x01, 0x2d, 0x74, 0xfc, 0xc6, 0xed, 0x61, + 0xfa, 0x7b, 0xdc, 0x74, 0x75, 0x51, 0x66, 0x71, 0xde, 0xb3, 0x28, 0x63, 0x74, 0x7a, 0x70, 0xcf, + 0x90, 0x7e, 0x80, 0xbd, 0xb9, 0xf8, 0x3e, 0x99, 0xcf, 0x2e, 0x08, 0x16, 0xfb, 0xd9, 0x6b, 0xc2, + 0x37, 0x68, 0x40, 0xfb, 0xa2, 0xba, 0x3c, 0xe6, 0xf5, 0x4d, 0x02, 0x70, 0xdf, 0x14, 0x0e, 0xdc, + 0x57, 0xa4, 0x83, 0x63, 0x7d, 0xda, 0x62, 0x6f, 0x7b, 0x55, 0xc8, 0x61, 0x70, 0x6b, 0xf8, 0xfa, + 0x0c, 0x6e, 0x5f, 0x54, 0x4f, 0xf2, 0xe6, 0x97, 0x04, 0xcb, 0x04, 0x5b, 0xcb, 0xdb, 0x5e, 0xc1, + 0xc1, 0xf4, 0xf6, 0xab, 0x6f, 0xc0, 0xf4, 0xf6, 0x45, 0x75, 0xa1, 0x77, 0x52, 0x49, 0xdb, 0x3b, + 0x05, 0x65, 0x8f, 0x5b, 0xac, 0x70, 0xff, 0x66, 0x0c, 0x2b, 0xdc, 0xf1, 0xef, 0x95, 0x15, 0x8e, + 0x9f, 0x89, 0x83, 0x41, 0xee, 0xff, 0x19, 0xa7, 0x41, 0xee, 0xc3, 0xdb, 0xc7, 0x20, 0x07, 0xa4, + 0x54, 0x5f, 0xf6, 0x93, 0xb1, 0x2c, 0x73, 0xef, 0x8d, 0x69, 0x99, 0xcb, 0xad, 0xfa, 0x7e, 0x9b, + 0x56, 0xbb, 0xa1, 0x31, 0xac, 0x76, 0xb9, 0x47, 0xfa, 0x1d, 0x5b, 0xf4, 0x4e, 0x8d, 0xc3, 0xa2, + 0x97, 0x7b, 0x02, 0x4f, 0xa9, 0xf2, 0xca, 0xdc, 0xd6, 0xbe, 0x05, 0xb9, 0xad, 0x7d, 0xb9, 0xed, + 0x7b, 0xdd, 0x39, 0xed, 0x7b, 0xcf, 0x7d, 0xcd, 0xf6, 0x3d, 0xca, 0x96, 0x7f, 0x72, 0x47, 0xd9, + 0x4f, 0xec, 0x4d, 0x7d, 0x7f, 0x33, 0x0e, 0x53, 0x5f, 0xef, 0xf7, 0xd1, 0xd4, 0xc7, 0xa4, 0xf8, + 0x4f, 0x72, 0xd9, 0xfc, 0x4e, 0xe5, 0xb6, 0xf9, 0xfd, 0xfa, 0x9b, 0xb5, 0xf9, 0x7d, 0x51, 0x5d, + 0xe4, 0x9d, 0x4c, 0x64, 0xe2, 0xe5, 0xa2, 0x1f, 0xb8, 0xfd, 0x6f, 0x13, 0xef, 0xea, 0x30, 0x8d, + 0x3d, 0xfd, 0xaa, 0xe0, 0x5d, 0x1d, 0xdc, 0xe0, 0xdb, 0x90, 0x65, 0xfc, 0xcb, 0xed, 0xef, 0xb0, + 0x91, 0x37, 0x2b, 0x4e, 0x67, 0xe1, 0xcf, 0x26, 0x68, 0x56, 0xb4, 0xf8, 0x65, 0x54, 0x19, 0x5e, + 0x10, 0x33, 0x38, 0xeb, 0x21, 0xf3, 0x82, 0x28, 0xca, 0xe1, 0xb2, 0x67, 0xb2, 0x1e, 0xce, 0x9c, + 0xb8, 0xf5, 0x70, 0x5c, 0x27, 0x48, 0xf1, 0x07, 0x7e, 0x82, 0xbc, 0xe5, 0x60, 0x97, 0xbc, 0x63, + 0x1c, 0xd6, 0x80, 0x53, 0xdf, 0x4f, 0xab, 0xa5, 0x21, 0x8d, 0x6c, 0xcd, 0x97, 0x03, 0x39, 0xcd, + 0x97, 0x60, 0x24, 0xfc, 0xcd, 0xb7, 0x63, 0xbe, 0xe4, 0x15, 0xb5, 0x1c, 0x96, 0xcc, 0x43, 0xd9, + 0x96, 0x4c, 0x30, 0x1d, 0xee, 0xf8, 0xa6, 0x2d, 0x99, 0xc6, 0xf0, 0x0a, 0xb2, 0x8c, 0x9a, 0xef, + 0x3b, 0x19, 0x35, 0xe7, 0x90, 0x91, 0xb5, 0x7e, 0x7b, 0x46, 0x4d, 0x43, 0xae, 0xb7, 0x4f, 0x9e, + 0x80, 0x81, 0xf3, 0xce, 0xef, 0x91, 0x81, 0xf3, 0x3d, 0x67, 0x03, 0x67, 0x09, 0xa3, 0xc6, 0x6f, + 0xc1, 0xc0, 0x69, 0xda, 0x21, 0x9d, 0x8c, 0x9d, 0x57, 0x72, 0x1a, 0x3b, 0xef, 0x22, 0xc3, 0x8d, + 0x7f, 0x5b, 0xc6, 0x4e, 0x83, 0x3e, 0x7f, 0x92, 0xcb, 0xee, 0xf9, 0x1f, 0x73, 0xdb, 0x3d, 0x4b, + 0xc7, 0x21, 0xe9, 0x5e, 0xfe, 0x56, 0xed, 0x9e, 0xbc, 0x58, 0xc8, 0x65, 0x02, 0xfd, 0xbb, 0xb1, + 0xac, 0x7f, 0xe7, 0xbf, 0xd7, 0xd6, 0x3f, 0x43, 0x4e, 0x3b, 0x99, 0x01, 0xff, 0x6e, 0x2c, 0x33, + 0xe0, 0xf9, 0xef, 0xb5, 0x19, 0xd0, 0x71, 0x82, 0x6c, 0x20, 0xa2, 0x1f, 0x4d, 0x6a, 0x8e, 0x04, + 0x5b, 0x9a, 0x94, 0x92, 0xf9, 0x54, 0x20, 0x65, 0x99, 0xb9, 0xd6, 0x91, 0x5a, 0x92, 0xe3, 0xbb, + 0x42, 0x95, 0xbd, 0x5e, 0x0a, 0x2e, 0xb9, 0x61, 0x78, 0x2c, 0x20, 0x6f, 0xe6, 0xc6, 0xa5, 0xf4, + 0x85, 0x61, 0xac, 0xe1, 0x9c, 0x3c, 0x4e, 0x6d, 0x6f, 0x14, 0x52, 0x6c, 0x44, 0x93, 0x5f, 0x52, + 0xb6, 0x6e, 0x8f, 0x44, 0x76, 0x94, 0x2c, 0x20, 0xdf, 0x98, 0x6b, 0xf3, 0x16, 0x1d, 0x57, 0xaf, + 0x8b, 0x04, 0x95, 0xea, 0xa5, 0x58, 0x51, 0x64, 0x0d, 0x24, 0x0f, 0xfb, 0x8a, 0x9b, 0x96, 0x80, + 0x0e, 0x65, 0x8a, 0x5e, 0xc7, 0x80, 0xc5, 0x28, 0xe4, 0x54, 0x04, 0xab, 0x1b, 0xc9, 0xa9, 0xb8, + 0x90, 0x18, 0xd3, 0x7e, 0xaa, 0xca, 0xab, 0xbc, 0x59, 0x55, 0xd2, 0xf2, 0xe4, 0x70, 0x07, 0xa8, + 0x76, 0x35, 0x32, 0x5c, 0xa2, 0x42, 0xa7, 0xda, 0xa1, 0x3d, 0xa9, 0xa3, 0x97, 0xa1, 0xeb, 0xf2, + 0xe4, 0xe0, 0x01, 0x8a, 0x5b, 0x92, 0x12, 0xd1, 0x97, 0xd5, 0x89, 0x98, 0x16, 0xd0, 0x3c, 0xe5, + 0xe5, 0xa8, 0x12, 0x0e, 0xfa, 0xb7, 0x36, 0x29, 0xf8, 0xc8, 0x59, 0x4f, 0x2d, 0x59, 0x35, 0x2d, + 0x89, 0xc8, 0xb6, 0x6d, 0x25, 0xf7, 0xd2, 0x09, 0x67, 0xb3, 0x36, 0xc7, 0xd9, 0x90, 0x17, 0xce, + 0x9b, 0xb3, 0x1f, 0xc9, 0x9f, 0x1c, 0x79, 0x53, 0xeb, 0xe8, 0x4c, 0x0f, 0x5d, 0x00, 0x1d, 0x2c, + 0xd5, 0x77, 0x0e, 0x53, 0x4b, 0x4f, 0xbb, 0x3b, 0x1a, 0x09, 0xde, 0x1a, 0xe9, 0xc6, 0x4d, 0x43, + 0xe1, 0x46, 0x37, 0x9f, 0xd5, 0x51, 0xa7, 0x07, 0x5d, 0x86, 0x25, 0x47, 0x7a, 0xd2, 0x6f, 0x7d, + 0x94, 0x3a, 0x78, 0xde, 0xbd, 0x23, 0xd4, 0xd4, 0xc4, 0x42, 0xdf, 0x6a, 0x6d, 0x23, 0x15, 0xcb, + 0x96, 0xfa, 0x72, 0x0e, 0x40, 0xbc, 0x2c, 0x20, 0x31, 0xac, 0xbc, 0x54, 0x1f, 0x09, 0x36, 0xc0, + 0xe6, 0x01, 0xc6, 0xb0, 0xfb, 0xc6, 0x21, 0xba, 0xb6, 0xaa, 0xf2, 0xcf, 0xbd, 0x36, 0x8d, 0xa5, + 0x6a, 0x6b, 0xd9, 0xad, 0x91, 0xee, 0xd4, 0xb1, 0xcb, 0xd1, 0x48, 0x50, 0x1b, 0x1e, 0x4a, 0x7f, + 0xb0, 0x5f, 0x3b, 0xd7, 0x93, 0xbc, 0xde, 0x91, 0xbc, 0xbe, 0x5f, 0x3b, 0x7c, 0x30, 0xd5, 0x45, + 0xd7, 0xa2, 0x46, 0x66, 0x23, 0x77, 0x2f, 0x65, 0x11, 0x3f, 0x6d, 0xba, 0xd7, 0x4d, 0xdd, 0xb9, + 0xad, 0xb0, 0xd2, 0x7c, 0xa0, 0x82, 0x89, 0x9b, 0xba, 0xd9, 0x43, 0x99, 0x77, 0xf3, 0xd0, 0x42, + 0xc7, 0x6f, 0xdc, 0x1e, 0xa6, 0xee, 0xd0, 0x97, 0x33, 0x75, 0x57, 0x3f, 0xa0, 0xca, 0x65, 0xd4, + 0x3d, 0xd5, 0xad, 0xbf, 0xa4, 0xb1, 0x80, 0x7d, 0x4f, 0x32, 0x30, 0x7a, 0x8e, 0xe7, 0xa1, 0x7b, + 0xe8, 0x42, 0xc5, 0x61, 0x64, 0xb5, 0x24, 0xc8, 0x74, 0x3d, 0x3d, 0x8f, 0x31, 0xbb, 0xfc, 0x46, + 0xeb, 0x73, 0x80, 0xaf, 0xe1, 0x9c, 0x79, 0x5a, 0xe0, 0x0e, 0x8b, 0xb0, 0xa8, 0x70, 0x92, 0x37, + 0x4e, 0x8b, 0x71, 0x68, 0x4e, 0xfd, 0x55, 0xf4, 0x64, 0x29, 0x20, 0xf8, 0x99, 0x59, 0x29, 0x75, + 0xe5, 0x0c, 0x38, 0xd4, 0x97, 0xa5, 0xdf, 0xea, 0xd7, 0xba, 0x0e, 0x60, 0x39, 0x46, 0x42, 0x4d, + 0xed, 0x6c, 0x09, 0x27, 0x42, 0x9f, 0xb7, 0xed, 0x8e, 0x2b, 0x4d, 0xdb, 0xb2, 0x40, 0x79, 0xb5, + 0x9a, 0x80, 0xe9, 0xf5, 0x8b, 0x8d, 0xe3, 0x68, 0xd5, 0xcb, 0xaa, 0xdc, 0x82, 0xe2, 0xde, 0xf1, + 0xe0, 0x48, 0x7a, 0xd0, 0x81, 0x6b, 0x52, 0xbd, 0x97, 0x52, 0x97, 0xce, 0x5a, 0x87, 0x0c, 0x34, + 0x60, 0xe6, 0x26, 0xfd, 0xcb, 0x9e, 0x3f, 0x15, 0xd0, 0xa2, 0xdc, 0x5f, 0xbd, 0x2d, 0xf8, 0xc8, + 0xf3, 0xef, 0x17, 0xa3, 0x79, 0x0d, 0x3b, 0xc3, 0x81, 0x1f, 0xaf, 0x7c, 0xbe, 0xcc, 0x95, 0xcf, + 0x89, 0x5c, 0x57, 0x3e, 0x21, 0x7c, 0xd6, 0xb4, 0xbb, 0xf2, 0x59, 0x33, 0xe1, 0x2b, 0x9f, 0xc7, + 0xdc, 0x35, 0xb2, 0x76, 0xfd, 0x9a, 0x61, 0xff, 0x20, 0x15, 0xb9, 0x2f, 0x82, 0x8e, 0x3a, 0x5d, + 0x04, 0x35, 0xab, 0xf2, 0x16, 0xcb, 0x45, 0xd0, 0xba, 0xaf, 0x76, 0x11, 0x74, 0x6b, 0xe4, 0xad, + 0xd4, 0xf1, 0x33, 0xa9, 0xa3, 0x9d, 0xa0, 0x8c, 0xfc, 0x78, 0x2f, 0xf4, 0x7b, 0x72, 0x2f, 0xd4, + 0x3d, 0x0e, 0x8f, 0x6d, 0xe2, 0x7e, 0x9c, 0xe3, 0xee, 0x67, 0xc9, 0xf8, 0xef, 0x7e, 0x12, 0xb1, + 0x96, 0x9c, 0x57, 0x3f, 0x27, 0xc7, 0x74, 0xd8, 0x0e, 0xa8, 0xf2, 0x8b, 0xce, 0xd7, 0x3b, 0xab, + 0xbe, 0xf2, 0xf5, 0x0e, 0x19, 0xa1, 0xe3, 0xed, 0xce, 0x91, 0x71, 0xf9, 0x6b, 0x93, 0xcb, 0xb2, + 0x9c, 0x37, 0x38, 0x15, 0xb9, 0x6f, 0x70, 0xb8, 0x14, 0x11, 0x64, 0x3c, 0x3f, 0x5e, 0xe8, 0xfc, + 0x78, 0xa1, 0x33, 0xce, 0x0b, 0x1d, 0x93, 0x26, 0x39, 0xf5, 0x1b, 0xb8, 0xb1, 0x98, 0x36, 0xd1, + 0x1b, 0x8b, 0x71, 0x5d, 0x39, 0x4c, 0xff, 0x81, 0x5f, 0x39, 0xfc, 0x3b, 0x87, 0x2b, 0x87, 0x19, + 0x64, 0xde, 0xb7, 0xe7, 0xa5, 0xc2, 0xa5, 0x9c, 0x97, 0x0a, 0x90, 0xb5, 0x26, 0x8c, 0xc5, 0x75, + 0x8e, 0x4b, 0x85, 0x9a, 0xf1, 0x5d, 0x2a, 0x7c, 0x23, 0x37, 0x0a, 0xe2, 0xf7, 0xf6, 0x46, 0xe1, + 0x8e, 0xef, 0xe1, 0x8d, 0xc2, 0x39, 0x50, 0x95, 0x71, 0x45, 0x43, 0xc2, 0x1f, 0x4b, 0xb4, 0x44, + 0xc9, 0x50, 0xe1, 0xee, 0x28, 0xa1, 0xca, 0x8a, 0xd7, 0xa6, 0x9a, 0x1b, 0x68, 0x1c, 0x4a, 0xf9, + 0x61, 0x6a, 0x87, 0xde, 0x4c, 0x0e, 0x0e, 0x11, 0xd9, 0x85, 0xf7, 0x97, 0x09, 0x0f, 0xd4, 0xe6, + 0x83, 0xe2, 0xbf, 0x12, 0x50, 0x09, 0x5f, 0x4c, 0x33, 0x1b, 0x29, 0x9c, 0xfb, 0xf9, 0x7e, 0x41, + 0x95, 0xff, 0xc0, 0xeb, 0x08, 0x25, 0xbd, 0x68, 0x1e, 0x73, 0x45, 0x9c, 0x56, 0x5a, 0x31, 0x0c, + 0x13, 0xd0, 0x0e, 0x0d, 0xd0, 0x3c, 0x4c, 0x5f, 0x66, 0x12, 0x8e, 0xe3, 0xf8, 0xde, 0x3b, 0xa9, + 0xbf, 0x37, 0x96, 0x93, 0xfa, 0x6d, 0x73, 0x87, 0x53, 0x72, 0x3b, 0xde, 0xe1, 0xdc, 0xf5, 0x43, + 0xbc, 0xc3, 0x29, 0xfd, 0xa1, 0xdf, 0xe1, 0xcc, 0xfd, 0x41, 0xdc, 0xe1, 0x70, 0x17, 0x2c, 0xf3, + 0xbe, 0xd1, 0x0b, 0x96, 0x31, 0xaf, 0x3b, 0xe6, 0xff, 0xc0, 0xaf, 0x3b, 0x16, 0x7c, 0x8f, 0xaf, + 0x3b, 0x7e, 0xae, 0xca, 0x9b, 0x50, 0x83, 0x37, 0xa7, 0xfd, 0x51, 0x9a, 0xaf, 0x1d, 0xee, 0x4e, + 0xf5, 0x9d, 0xb7, 0xd4, 0x83, 0xa1, 0xc9, 0x6c, 0x9e, 0xd5, 0x2f, 0x38, 0xce, 0xe5, 0xa1, 0xf9, + 0x0e, 0xbd, 0xfe, 0xfe, 0x5c, 0x6f, 0x00, 0xe2, 0xd2, 0x3d, 0xed, 0xdf, 0xdb, 0xeb, 0x8d, 0xf7, + 0xf3, 0xd0, 0x02, 0xd8, 0xac, 0x1c, 0xcd, 0xcf, 0xbf, 0xb0, 0xde, 0x6c, 0x3c, 0xa6, 0xca, 0x25, + 0xfc, 0x79, 0x74, 0x8a, 0x29, 0x8a, 0xd1, 0xf8, 0x1f, 0xe1, 0xfe, 0xbd, 0x90, 0x1d, 0xd0, 0xec, + 0x4f, 0x05, 0x55, 0xfe, 0x63, 0xc1, 0x08, 0x69, 0xf6, 0xb1, 0xc0, 0xc7, 0x34, 0x73, 0x40, 0xe3, + 0x97, 0x0b, 0x70, 0xa6, 0x0d, 0x5c, 0x4f, 0x0e, 0x1d, 0xc4, 0xca, 0x13, 0xc9, 0x81, 0x6b, 0xf5, + 0x7e, 0xd4, 0xfa, 0xbb, 0x32, 0xef, 0x74, 0xa4, 0x7b, 0xda, 0xf5, 0xe0, 0x3c, 0x98, 0xf5, 0xde, + 0x1c, 0x30, 0x65, 0xe6, 0xff, 0xe4, 0x43, 0x78, 0x67, 0x9b, 0xee, 0x69, 0xaf, 0x91, 0xe1, 0x2a, + 0xdb, 0x14, 0x3c, 0xed, 0x69, 0x55, 0x5e, 0x83, 0x56, 0x79, 0xc7, 0x40, 0xb2, 0x74, 0xa7, 0xc3, + 0x04, 0x79, 0xee, 0xf2, 0xbc, 0x97, 0x87, 0x16, 0x3a, 0xf6, 0x73, 0xbb, 0x64, 0x92, 0xfa, 0x72, + 0x5c, 0x45, 0xe8, 0x1c, 0xb8, 0xea, 0x1e, 0x3e, 0xf0, 0xda, 0xf7, 0x96, 0xb1, 0xae, 0xbb, 0xd0, + 0xdc, 0x35, 0x4a, 0xe2, 0xbb, 0xe0, 0xaa, 0x56, 0xcb, 0x9d, 0x21, 0x89, 0x72, 0x65, 0x5c, 0x19, + 0x3e, 0x53, 0x23, 0xc3, 0x0c, 0x92, 0x43, 0x47, 0x58, 0x21, 0x49, 0x9b, 0x9c, 0x1c, 0x3e, 0xcf, + 0xb2, 0xf4, 0xc2, 0xbf, 0xa9, 0xe3, 0xd7, 0xca, 0xdd, 0xda, 0xb9, 0x03, 0xe9, 0x37, 0x2e, 0xb2, + 0xdb, 0x89, 0xac, 0x76, 0xdc, 0x55, 0xe0, 0x1a, 0x55, 0xae, 0x45, 0xd5, 0xde, 0x5c, 0xd3, 0x96, + 0xee, 0x81, 0x28, 0x42, 0x0e, 0xcb, 0x46, 0x43, 0xd6, 0xfd, 0x8f, 0x3c, 0x34, 0xcf, 0xbe, 0x93, + 0xdf, 0x9f, 0xad, 0x43, 0x8f, 0x69, 0xf7, 0x7d, 0xa5, 0x70, 0x96, 0x27, 0x24, 0xe7, 0x4a, 0x49, + 0xf3, 0x1d, 0xd6, 0xdb, 0x29, 0x80, 0xd4, 0xc5, 0x7c, 0x34, 0x6f, 0x6d, 0x28, 0xee, 0xcc, 0x37, + 0x61, 0x2b, 0xdf, 0xd4, 0xab, 0xf2, 0x6a, 0x9e, 0x6f, 0x1e, 0xb5, 0x5e, 0x30, 0x7f, 0xf9, 0x08, + 0x7c, 0xcf, 0x5b, 0x23, 0xf0, 0xad, 0x54, 0xe5, 0xe5, 0xbc, 0x5b, 0xfa, 0x7d, 0xce, 0xdf, 0x1b, + 0xc3, 0x39, 0xbd, 0x2e, 0x3b, 0x18, 0x5f, 0xa5, 0x2a, 0xdf, 0x6b, 0x04, 0xa1, 0x28, 0xb5, 0xaa, + 0x5c, 0x8e, 0x71, 0xf9, 0xea, 0xb2, 0xe3, 0xf2, 0x41, 0x57, 0xcc, 0xbe, 0x6b, 0xed, 0xca, 0x31, + 0x44, 0x5f, 0xd5, 0x39, 0x41, 0x95, 0xcf, 0x08, 0xe8, 0xa4, 0xe0, 0xcd, 0xb9, 0x14, 0xd2, 0x6f, + 0x1d, 0xd6, 0xf6, 0x5b, 0x8a, 0x0c, 0xf7, 0x8f, 0x2e, 0x34, 0xdf, 0x61, 0x7c, 0xb7, 0x87, 0x98, + 0x78, 0xde, 0x14, 0x26, 0x6e, 0xfc, 0x62, 0x62, 0xbe, 0x2a, 0x97, 0x52, 0x31, 0x21, 0x9a, 0x42, + 0xc7, 0xf1, 0x91, 0x2f, 0x69, 0x66, 0x95, 0xdc, 0x18, 0x9a, 0x30, 0x7b, 0x7e, 0xe8, 0xb2, 0x79, + 0xa0, 0xda, 0x40, 0xc2, 0x1c, 0x32, 0x06, 0x7d, 0x0a, 0x4d, 0x52, 0x78, 0x17, 0x05, 0x92, 0x41, + 0x9f, 0x16, 0x49, 0x73, 0xf9, 0x50, 0x26, 0xfa, 0x7d, 0x37, 0x1c, 0xbe, 0x7c, 0x14, 0xc8, 0x7c, + 0x01, 0xe2, 0xfa, 0x06, 0x2e, 0x40, 0xf2, 0x26, 0x7a, 0x01, 0xf2, 0x38, 0xb7, 0xa3, 0xe6, 0x1b, + 0x94, 0x61, 0xec, 0xa8, 0x33, 0x73, 0xec, 0x8b, 0xf6, 0xbe, 0x5e, 0x0c, 0x69, 0x3f, 0xee, 0x68, + 0xdf, 0x1f, 0x9d, 0xed, 0xa2, 0x0b, 0x4d, 0x6f, 0x50, 0x62, 0xad, 0x21, 0xc8, 0xe3, 0x4f, 0xbc, + 0x35, 0x57, 0xa2, 0xc2, 0x58, 0xa4, 0x09, 0x72, 0xe9, 0x0b, 0xdc, 0x6b, 0x1d, 0x56, 0x28, 0x89, + 0x71, 0x68, 0xe1, 0xc6, 0x25, 0x2c, 0xa3, 0x3e, 0xab, 0x15, 0x57, 0xa0, 0x49, 0xf8, 0x6f, 0x9d, + 0x90, 0x49, 0x54, 0x75, 0x5a, 0x24, 0x4d, 0xe7, 0x9b, 0xba, 0xeb, 0x6a, 0x7d, 0xb4, 0x42, 0x2c, + 0x47, 0x79, 0xfe, 0x58, 0x98, 0xd2, 0x29, 0x21, 0x06, 0xfc, 0x5b, 0x9a, 0x61, 0x82, 0xf7, 0xc7, + 0xc2, 0x3e, 0x5c, 0x2c, 0xae, 0x26, 0x59, 0x14, 0x03, 0xb1, 0x10, 0x41, 0xa6, 0x11, 0x96, 0xf5, + 0x6e, 0x2f, 0x5f, 0x6e, 0x1e, 0x68, 0xea, 0xd0, 0xa1, 0xcc, 0x4d, 0xc8, 0x9f, 0xc8, 0x00, 0xaa, + 0xbc, 0xaa, 0x7c, 0x3f, 0xba, 0xd7, 0x9b, 0x8d, 0x02, 0x73, 0x43, 0x2a, 0x7c, 0x33, 0x2e, 0x34, + 0x67, 0x8d, 0x92, 0xe0, 0x40, 0x75, 0x01, 0xf0, 0x08, 0x9a, 0x1c, 0x68, 0x8a, 0xb4, 0x04, 0xf5, + 0xfd, 0x79, 0x01, 0x44, 0x56, 0x82, 0x32, 0xa9, 0x28, 0x39, 0x74, 0x84, 0xdb, 0x10, 0x67, 0xb8, + 0x7c, 0xac, 0x4a, 0x7c, 0x14, 0x15, 0xf9, 0x03, 0xe4, 0x0a, 0x5b, 0xc7, 0x17, 0xc9, 0x23, 0x6d, + 0x94, 0x4a, 0x53, 0x92, 0x43, 0x47, 0xb4, 0x7d, 0x7d, 0x99, 0x81, 0xdd, 0x75, 0xb5, 0x3e, 0xa3, + 0x5c, 0xdc, 0x09, 0xcb, 0x44, 0xc2, 0xca, 0x02, 0xda, 0x5e, 0x50, 0x65, 0xd9, 0xab, 0x17, 0x4a, + 0x0f, 0xfa, 0x5f, 0x8a, 0xbb, 0xf9, 0x89, 0x80, 0x93, 0x1b, 0x51, 0x7b, 0x47, 0xdb, 0xba, 0xb4, + 0xb6, 0x91, 0xe4, 0xe0, 0x10, 0x25, 0xb0, 0x72, 0x3d, 0x1a, 0xea, 0x17, 0xd5, 0x73, 0x62, 0x78, + 0x93, 0x85, 0x72, 0x5f, 0x91, 0x91, 0x9c, 0x55, 0xef, 0xb9, 0xea, 0x57, 0xaa, 0xfc, 0x3c, 0xfa, + 0x85, 0xd7, 0x01, 0x1d, 0x2c, 0xba, 0xa7, 0x89, 0x4a, 0x48, 0x74, 0x4f, 0xe6, 0x2b, 0xca, 0xa6, + 0xff, 0x99, 0x60, 0xcc, 0xe7, 0x33, 0x41, 0xef, 0xdf, 0xf3, 0x2f, 0x5d, 0xe8, 0x4e, 0x4b, 0xdf, + 0xb7, 0x87, 0xd8, 0xf0, 0x99, 0x76, 0xb8, 0x85, 0x96, 0xe0, 0xf3, 0x66, 0x42, 0x1b, 0xdf, 0xc6, + 0xf6, 0x88, 0x2a, 0x3f, 0x88, 0x96, 0x7b, 0x9d, 0x50, 0x22, 0x95, 0x38, 0xe1, 0xdb, 0xb3, 0xcf, + 0x85, 0x66, 0x32, 0x3b, 0x28, 0xc4, 0xba, 0xc5, 0x0c, 0xbe, 0x1c, 0xe5, 0x87, 0x0d, 0xe6, 0x5e, + 0xa8, 0xca, 0xf3, 0xbc, 0xa4, 0x40, 0x9a, 0xc5, 0xee, 0x6b, 0xdd, 0x8d, 0x24, 0xa3, 0x35, 0xb0, + 0x36, 0xa9, 0x03, 0x5c, 0x34, 0x62, 0x6e, 0x03, 0x34, 0x32, 0x5c, 0xe0, 0x22, 0xa9, 0x58, 0xeb, + 0xbd, 0xac, 0x9d, 0x3e, 0xcd, 0x3c, 0xda, 0xa1, 0x54, 0x7c, 0x0e, 0xcd, 0xd4, 0x6f, 0xfa, 0xa8, + 0xfc, 0x67, 0xa4, 0x5a, 0xae, 0xca, 0x8b, 0xbd, 0xd6, 0xda, 0xec, 0x11, 0x40, 0x5c, 0x62, 0x9f, + 0x15, 0xb0, 0x0a, 0x0b, 0x3e, 0xb4, 0xd8, 0x6b, 0x9d, 0x5d, 0x76, 0x17, 0x94, 0x7b, 0xff, 0xbd, + 0x80, 0x4a, 0xd6, 0x28, 0x09, 0x13, 0xf8, 0x77, 0xca, 0xbf, 0x55, 0xd5, 0xaa, 0xfc, 0x24, 0x5a, + 0xe9, 0x75, 0x1c, 0x95, 0x74, 0x37, 0x2c, 0xab, 0x79, 0x3a, 0x71, 0x9e, 0x93, 0x3c, 0xff, 0xd6, + 0x85, 0xee, 0xb2, 0x69, 0x7f, 0x7b, 0xb0, 0xca, 0x46, 0x13, 0xab, 0xdc, 0x9d, 0xcd, 0x2a, 0x96, + 0x95, 0x1d, 0x1f, 0xb3, 0xd0, 0x74, 0x0e, 0xce, 0x68, 0x91, 0xe6, 0xe6, 0xc0, 0xab, 0x27, 0x2d, + 0x20, 0xe4, 0x23, 0xe4, 0x4b, 0x58, 0xc5, 0xa0, 0x7a, 0x61, 0xbc, 0x54, 0x5f, 0x83, 0x10, 0xfc, + 0x45, 0x36, 0x50, 0x40, 0xe4, 0x3d, 0xaa, 0xec, 0xf6, 0x72, 0xc5, 0x92, 0xc8, 0x37, 0xa5, 0x7c, + 0xc6, 0xd5, 0x8b, 0x4f, 0xa1, 0x29, 0xf0, 0x8b, 0x67, 0x1a, 0x12, 0x00, 0x9e, 0x2f, 0x67, 0x23, + 0xa0, 0x6c, 0xc2, 0x57, 0x55, 0x61, 0xb6, 0x46, 0xa5, 0x5e, 0x6e, 0x32, 0xe6, 0xf1, 0x7a, 0xfe, + 0x5c, 0x20, 0xfb, 0x59, 0x0d, 0xa6, 0x64, 0x00, 0xfa, 0x6e, 0xf9, 0x81, 0x2e, 0x9c, 0xc3, 0x98, + 0xd8, 0xa6, 0x42, 0x3e, 0xe4, 0x86, 0x89, 0x98, 0x58, 0xe1, 0x8f, 0x61, 0xcf, 0x30, 0x37, 0xbd, + 0x3d, 0x18, 0x61, 0x9d, 0x89, 0x11, 0x4a, 0xad, 0x8c, 0xc0, 0x56, 0x70, 0xc2, 0xdb, 0x85, 0x1d, + 0x36, 0xd8, 0x76, 0x61, 0xc5, 0xa4, 0xe7, 0x77, 0x2e, 0x54, 0xf8, 0x5c, 0x24, 0x0c, 0x6a, 0xe0, + 0x52, 0x34, 0x69, 0x17, 0xfe, 0x9b, 0xd1, 0x40, 0x89, 0x2a, 0xcf, 0xf6, 0xd2, 0x22, 0x69, 0x8a, + 0x76, 0x68, 0x20, 0xfd, 0xc6, 0x45, 0xad, 0x7b, 0x08, 0xeb, 0x70, 0x50, 0x28, 0xae, 0x40, 0xf9, + 0xf8, 0x2f, 0x1e, 0x67, 0x3c, 0xcd, 0x4f, 0xd7, 0xdb, 0xb0, 0x8d, 0x05, 0x43, 0x8b, 0x55, 0xa8, + 0x10, 0xff, 0x4b, 0xb8, 0x65, 0x7c, 0x74, 0xae, 0xc3, 0x8b, 0x8f, 0xa3, 0x22, 0xfc, 0x37, 0x30, + 0x49, 0xfe, 0xb8, 0x1a, 0x1b, 0x0d, 0xc4, 0x0d, 0xa8, 0x28, 0xde, 0xb2, 0x35, 0xac, 0x24, 0xd6, + 0xb7, 0x34, 0x53, 0x3f, 0xe0, 0x65, 0xaa, 0xbc, 0xc4, 0x6b, 0x94, 0x4a, 0x77, 0x67, 0x06, 0xce, + 0x1b, 0xc3, 0x26, 0x7f, 0xa4, 0x7b, 0xda, 0xb5, 0xbe, 0xc3, 0xe9, 0x1b, 0x47, 0x68, 0x30, 0x58, + 0x03, 0xba, 0x0a, 0x4f, 0x19, 0xcd, 0xf5, 0xea, 0x38, 0xe4, 0xa6, 0x4c, 0x99, 0x6e, 0x68, 0x12, + 0x9a, 0x41, 0x16, 0x85, 0x9e, 0x1f, 0x08, 0xa6, 0x1f, 0xb5, 0x1a, 0x78, 0xe6, 0x66, 0x1b, 0x46, + 0x93, 0x43, 0x47, 0xd8, 0x49, 0x8f, 0x3f, 0xe2, 0x3d, 0x85, 0xa6, 0xd0, 0x1f, 0x9c, 0xb4, 0x01, + 0x14, 0x70, 0xe5, 0x52, 0x31, 0x7d, 0x31, 0xc1, 0x92, 0x05, 0x19, 0x55, 0xe2, 0xf3, 0x48, 0xa4, + 0x3f, 0x6b, 0x39, 0x8d, 0x1a, 0x16, 0x82, 0x9c, 0x65, 0x6c, 0xaa, 0x25, 0x91, 0x1e, 0x2a, 0x88, + 0x4a, 0x4d, 0x89, 0xcf, 0x06, 0x4e, 0xac, 0x43, 0xd3, 0x68, 0xe9, 0x66, 0x25, 0x16, 0x37, 0x54, + 0x75, 0x72, 0xa0, 0xc8, 0xaa, 0x62, 0x83, 0x4c, 0x77, 0x75, 0xa6, 0x7a, 0x2f, 0xf9, 0xb2, 0x6a, + 0xc5, 0xa7, 0x74, 0x24, 0x6d, 0x68, 0xa0, 0x69, 0x14, 0x3c, 0x7c, 0x26, 0xc6, 0x0d, 0x0d, 0xfa, + 0xa8, 0x48, 0x2a, 0xf2, 0xf4, 0xd5, 0xe1, 0xf4, 0xf0, 0x69, 0x9f, 0x51, 0xcd, 0xe1, 0x8a, 0xe8, + 0xcc, 0x93, 0xac, 0xb8, 0x22, 0x6a, 0x33, 0x1b, 0x06, 0x51, 0x96, 0x7d, 0x7c, 0x95, 0x78, 0x40, + 0x40, 0x53, 0xe9, 0x6f, 0x38, 0xcc, 0xd2, 0xf4, 0x06, 0x8d, 0xaa, 0x1c, 0xf4, 0x9a, 0x6b, 0x24, + 0x7a, 0x58, 0xa7, 0x99, 0x15, 0x7c, 0x2d, 0x61, 0xac, 0xbb, 0xb8, 0x33, 0x37, 0x0f, 0x67, 0xce, + 0x76, 0x27, 0x07, 0xfb, 0xdc, 0x24, 0xea, 0x17, 0x2e, 0xa2, 0xc9, 0x0a, 0x07, 0xfb, 0xdc, 0x75, + 0x41, 0x12, 0xab, 0x74, 0xf4, 0xf8, 0x87, 0xe9, 0x1b, 0xfd, 0xb8, 0x40, 0xde, 0x1a, 0x8e, 0xc4, + 0x9a, 0xfd, 0x4d, 0x6e, 0x48, 0xa8, 0xb4, 0xd8, 0x67, 0xfe, 0x86, 0x18, 0x42, 0x85, 0x4d, 0x91, + 0x00, 0x78, 0xf1, 0x42, 0x32, 0x84, 0x75, 0xaa, 0xfc, 0xb4, 0x57, 0x2f, 0x94, 0x9e, 0xc0, 0xb2, + 0x96, 0x13, 0xfa, 0x65, 0x8d, 0x3b, 0x14, 0x78, 0x05, 0x83, 0xc9, 0xf9, 0xf4, 0xe9, 0xf4, 0xd0, + 0x05, 0xad, 0xf3, 0x03, 0x4d, 0xed, 0xd6, 0xe9, 0x14, 0x4a, 0x60, 0xec, 0x8b, 0x7d, 0x7a, 0x4f, + 0xe2, 0xcf, 0x51, 0x31, 0xfd, 0xf6, 0x5a, 0xa5, 0x55, 0x69, 0x22, 0x4e, 0xc3, 0x45, 0xd5, 0x2b, + 0x54, 0x79, 0x99, 0xd7, 0x54, 0x21, 0xdd, 0x4d, 0xe7, 0x4d, 0xfa, 0x29, 0x03, 0x3e, 0xfc, 0xbc, + 0x6d, 0x37, 0xe6, 0x3a, 0x28, 0x5b, 0xec, 0x33, 0x35, 0xa8, 0x2a, 0x53, 0xe5, 0x7b, 0xd1, 0x3d, + 0x5e, 0x0b, 0x5b, 0x48, 0xd3, 0x75, 0x9a, 0xa7, 0xcc, 0x73, 0x22, 0x0f, 0xcc, 0x5f, 0x9c, 0x54, + 0xa3, 0xf0, 0x5f, 0x7d, 0xe3, 0x7a, 0x24, 0x4b, 0xbd, 0x75, 0x3b, 0x6e, 0xf4, 0xac, 0x29, 0xdb, + 0xef, 0x9f, 0xe2, 0xb7, 0xbc, 0x3c, 0x46, 0x98, 0x8e, 0x5b, 0x1e, 0x6b, 0xce, 0x9d, 0xe4, 0x5e, + 0x42, 0x33, 0x63, 0xbc, 0xaa, 0x42, 0x58, 0x19, 0x18, 0xa5, 0x4e, 0x95, 0x57, 0x7b, 0xad, 0xb5, + 0xd2, 0x32, 0x79, 0x57, 0x4b, 0x4c, 0x71, 0x13, 0x4c, 0x24, 0x07, 0xfb, 0xf8, 0x9b, 0x8a, 0x74, + 0x4f, 0xbb, 0xad, 0x1a, 0x6f, 0xed, 0xa5, 0x0a, 0xf7, 0x8e, 0x6a, 0xbd, 0xb9, 0x91, 0x2a, 0xdd, + 0xc3, 0xed, 0x17, 0x80, 0x08, 0xf6, 0xfe, 0x8a, 0xdb, 0x7e, 0x53, 0x2e, 0xb4, 0xc0, 0xa9, 0x9b, + 0xdb, 0x63, 0x17, 0xde, 0x62, 0xda, 0x85, 0xdd, 0x56, 0x83, 0x8f, 0x99, 0x3c, 0x1d, 0xd3, 0x59, + 0xf0, 0xc8, 0x31, 0xed, 0xcb, 0xb5, 0xaa, 0x2c, 0xa3, 0x27, 0xbd, 0x63, 0xa0, 0x49, 0x9a, 0x9f, + 0x13, 0xdd, 0x9e, 0xff, 0x2b, 0x0f, 0x95, 0x9a, 0x77, 0x76, 0xbc, 0xdb, 0x7c, 0x0d, 0xaa, 0xdb, + 0x97, 0x38, 0xe0, 0x3d, 0x6a, 0x25, 0xfd, 0xf1, 0x5a, 0x2f, 0xe2, 0xa8, 0xa0, 0x35, 0x1a, 0xa8, + 0x63, 0xa9, 0xf7, 0x5e, 0x50, 0xe5, 0xe7, 0xbc, 0x50, 0x22, 0x3d, 0x0b, 0xd9, 0x5a, 0x52, 0xa7, + 0x0f, 0x27, 0x07, 0xdf, 0x6f, 0x8d, 0x06, 0xb2, 0x36, 0xdc, 0x25, 0xee, 0xcc, 0x7e, 0x7a, 0x67, + 0x57, 0x4e, 0x2c, 0xe5, 0xc4, 0xb7, 0x85, 0xac, 0xa8, 0x21, 0xc5, 0xb2, 0xf6, 0x68, 0xe8, 0x59, + 0xdc, 0x41, 0xf2, 0x38, 0x27, 0x58, 0x1a, 0x9e, 0x4d, 0xaa, 0xec, 0xf3, 0x42, 0x89, 0x54, 0x67, + 0xb4, 0x05, 0x89, 0x2d, 0x6f, 0x96, 0xeb, 0xd6, 0xca, 0xd5, 0x6b, 0x57, 0x41, 0x45, 0xe5, 0xa6, + 0xf5, 0x7a, 0x49, 0x72, 0xf0, 0x00, 0x14, 0x2e, 0x66, 0x2e, 0x27, 0xf0, 0xf9, 0x54, 0x57, 0x5b, + 0xaa, 0xb7, 0xcb, 0x07, 0x3d, 0xb2, 0x6b, 0xf0, 0x1c, 0x8b, 0x25, 0xdd, 0x6f, 0xa3, 0x89, 0xe9, + 0xca, 0x06, 0xcf, 0x5d, 0x7f, 0x09, 0x57, 0xab, 0xd6, 0x7e, 0x6e, 0xb7, 0x3c, 0x63, 0x98, 0xb5, + 0x4a, 0xb2, 0x59, 0x8b, 0xa9, 0x4b, 0xe3, 0x53, 0x6f, 0x69, 0x82, 0xab, 0x5c, 0xf8, 0x60, 0x47, + 0xe7, 0x1c, 0x88, 0xf5, 0xfc, 0xd7, 0x7c, 0x54, 0xbc, 0x21, 0xaa, 0x10, 0xc7, 0xf4, 0xf0, 0xda, + 0x48, 0xa3, 0x58, 0x83, 0x8a, 0x99, 0x84, 0xe4, 0x12, 0xa6, 0x13, 0xeb, 0x88, 0xa9, 0x42, 0x2a, + 0x06, 0x27, 0x35, 0xaa, 0x20, 0x98, 0xea, 0xc4, 0x47, 0xf1, 0xe1, 0x0f, 0x7e, 0xeb, 0x07, 0x20, + 0x82, 0x20, 0xae, 0x58, 0x2a, 0x84, 0x0e, 0xea, 0x6a, 0x7d, 0x5c, 0xa9, 0xb8, 0x5c, 0x4f, 0x96, + 0xc6, 0x71, 0x12, 0x4b, 0x96, 0x36, 0x8d, 0xa5, 0xcc, 0xcb, 0xf4, 0x5f, 0xd6, 0x6e, 0x1c, 0xd5, + 0xd3, 0xe3, 0x71, 0x0b, 0x99, 0x6f, 0xb7, 0x90, 0x5a, 0xff, 0xd9, 0x4c, 0xff, 0xd9, 0xd4, 0xf1, + 0xf3, 0xda, 0xcd, 0xe3, 0xd9, 0x0b, 0xb9, 0x04, 0x4d, 0x8a, 0x44, 0x37, 0xc5, 0x95, 0x18, 0x65, + 0x87, 0x39, 0xaa, 0x7c, 0x87, 0x97, 0x16, 0x49, 0x45, 0xa0, 0x45, 0x25, 0x87, 0x86, 0x7c, 0xb4, + 0x48, 0x5c, 0x89, 0x50, 0x00, 0xb2, 0x1f, 0xb3, 0xe4, 0xe4, 0x45, 0xb0, 0x62, 0x5c, 0xb1, 0x54, + 0x0c, 0xea, 0x0c, 0xcb, 0xff, 0x6c, 0xd4, 0x88, 0xab, 0x78, 0x2d, 0x17, 0xf4, 0xa6, 0xfb, 0x55, + 0x79, 0x11, 0xaf, 0xe5, 0xde, 0x09, 0x1f, 0xb5, 0xdc, 0x6d, 0xf0, 0x1a, 0xef, 0x2a, 0xfe, 0x76, + 0xb2, 0x90, 0xeb, 0xc6, 0xb8, 0x9d, 0xb4, 0x74, 0x43, 0x63, 0x68, 0xf1, 0xf7, 0x90, 0xdc, 0x6a, + 0x93, 0xed, 0xb6, 0xc8, 0x66, 0xb5, 0x41, 0x75, 0x86, 0xc5, 0xa2, 0x9b, 0xa8, 0xa9, 0xae, 0x0a, + 0x7f, 0x18, 0x79, 0xbc, 0x26, 0x3a, 0x92, 0x44, 0xf8, 0x3a, 0xe0, 0x1c, 0xf0, 0xef, 0xf9, 0x0f, + 0x2e, 0x34, 0x63, 0xa3, 0x3f, 0xbe, 0xc3, 0x44, 0x70, 0x1e, 0x3b, 0x82, 0xcb, 0xa2, 0xa7, 0x05, + 0x56, 0x7a, 0x32, 0x11, 0xcd, 0x1c, 0x33, 0xd1, 0xe8, 0x74, 0x51, 0x92, 0x45, 0x17, 0xc6, 0xaa, + 0xcf, 0x31, 0xaf, 0xba, 0xbe, 0xba, 0x0b, 0xac, 0xab, 0x6b, 0x5a, 0xbe, 0x79, 0x96, 0xe5, 0xe3, + 0x57, 0x65, 0x9e, 0x65, 0x55, 0x78, 0x64, 0xcf, 0xd1, 0x53, 0x90, 0x15, 0xc1, 0x37, 0x69, 0x9a, + 0xb0, 0x52, 0x2e, 0x33, 0x1a, 0x49, 0xae, 0xce, 0xa5, 0x2d, 0xf3, 0x64, 0x2d, 0xd0, 0x14, 0x33, + 0x76, 0x70, 0x99, 0xe7, 0x6f, 0x5c, 0x68, 0x0a, 0x46, 0x6b, 0x43, 0x42, 0x89, 0x62, 0x8c, 0x2e, + 0xcf, 0xca, 0x37, 0x38, 0x2e, 0x16, 0x5a, 0x89, 0x0a, 0xe3, 0x09, 0x25, 0xca, 0x9d, 0x9f, 0xe0, + 0xba, 0x83, 0x15, 0xea, 0x89, 0x5c, 0xf9, 0x7c, 0xab, 0x7a, 0xad, 0x58, 0x85, 0x0a, 0x9a, 0x88, + 0x46, 0x9c, 0x67, 0x5c, 0x42, 0x40, 0x89, 0x54, 0x02, 0x34, 0x90, 0xee, 0xeb, 0x4a, 0x0f, 0x5d, + 0x28, 0xab, 0x5b, 0xbf, 0x7a, 0x43, 0xf9, 0x2a, 0x9f, 0x6f, 0x83, 0x6f, 0xb1, 0x0f, 0x00, 0xc4, + 0x15, 0xd9, 0xdc, 0x4b, 0x24, 0xb7, 0xce, 0xbd, 0xc5, 0xf6, 0x7c, 0xfb, 0xd5, 0xf8, 0x70, 0xfc, + 0x44, 0x7b, 0x76, 0x32, 0x38, 0x26, 0x10, 0x29, 0x5b, 0x17, 0x8e, 0x27, 0xfc, 0x61, 0xa0, 0xca, + 0xaf, 0xae, 0x6b, 0xac, 0xc8, 0xd2, 0x35, 0xe8, 0x1d, 0x11, 0xe8, 0x1a, 0xd3, 0xb3, 0x0e, 0x2d, + 0x5f, 0x87, 0xba, 0x51, 0x4f, 0x4d, 0x13, 0xf9, 0x2c, 0xc1, 0xbe, 0xe4, 0x25, 0x05, 0x92, 0x57, + 0xdf, 0x17, 0xe0, 0x1e, 0xde, 0xed, 0x8f, 0x56, 0x34, 0xb6, 0xf8, 0xc3, 0x8d, 0xbb, 0xb6, 0x47, + 0x5a, 0x2a, 0x96, 0x95, 0xbb, 0x5b, 0xe2, 0x15, 0x2f, 0x29, 0xf1, 0xc4, 0xb2, 0x0a, 0x3f, 0xf3, + 0x66, 0x00, 0xb3, 0x45, 0x2d, 0x42, 0xe1, 0x48, 0x50, 0x59, 0xed, 0x6f, 0x0e, 0x35, 0xed, 0xa4, + 0x12, 0x94, 0x24, 0x06, 0xe4, 0x8a, 0xa5, 0xe2, 0x54, 0xef, 0x90, 0x76, 0x6a, 0x7f, 0xfa, 0xea, + 0xb0, 0xd6, 0x79, 0x9c, 0xb5, 0xe7, 0x00, 0xc4, 0xfb, 0x50, 0x5e, 0x20, 0xda, 0x42, 0xdf, 0xea, + 0xce, 0x52, 0xe5, 0x99, 0x5e, 0xfc, 0x5b, 0x42, 0x35, 0xf5, 0x9b, 0xdc, 0xa9, 0x33, 0x83, 0xa9, + 0xa3, 0x97, 0x7d, 0xb8, 0x40, 0x5c, 0x89, 0x26, 0x35, 0x2b, 0xcd, 0x91, 0xd8, 0x4e, 0xc2, 0x7a, + 0x53, 0xab, 0xef, 0x55, 0x65, 0x8f, 0x97, 0x16, 0x49, 0x25, 0xda, 0xde, 0x0e, 0xad, 0xef, 0x4d, + 0xed, 0xdc, 0x05, 0xed, 0xf2, 0x21, 0xdd, 0xb7, 0xdd, 0xbd, 0xa6, 0xda, 0x47, 0x21, 0xc4, 0xcd, + 0xa8, 0x60, 0x6b, 0x68, 0x97, 0x2e, 0x30, 0x49, 0xb4, 0x4e, 0x28, 0x91, 0x56, 0x24, 0x07, 0x7b, + 0x08, 0x5b, 0x94, 0xbb, 0x21, 0xa3, 0x6f, 0xea, 0xcd, 0x01, 0xd8, 0x3d, 0xa1, 0x22, 0x7d, 0x61, + 0x77, 0xaa, 0xb7, 0x2b, 0xb3, 0xef, 0x7d, 0x6d, 0x78, 0x48, 0x0f, 0x53, 0xe0, 0x83, 0xc6, 0xe2, + 0xb3, 0xdc, 0x2d, 0x71, 0x91, 0x91, 0x8d, 0xcf, 0xb8, 0x25, 0xbe, 0x8f, 0xfd, 0xa5, 0x37, 0xa5, + 0x0f, 0x7c, 0x8e, 0x5d, 0x2f, 0x23, 0x11, 0x16, 0x2a, 0xe3, 0x4a, 0xd3, 0x36, 0x2e, 0xba, 0x82, + 0x78, 0x50, 0xc8, 0x12, 0x8b, 0x44, 0x30, 0x54, 0xff, 0x5a, 0x95, 0x37, 0x64, 0xed, 0xc3, 0x4f, + 0x6a, 0x37, 0x5e, 0x67, 0xcd, 0x92, 0x83, 0x43, 0xb8, 0x23, 0xe2, 0xbc, 0xc5, 0x03, 0xf1, 0x5b, + 0x75, 0x59, 0x24, 0xdc, 0x14, 0x0a, 0x2b, 0x95, 0x91, 0x6d, 0xdb, 0xf0, 0xbf, 0x8b, 0xbf, 0xa8, + 0x9e, 0x1d, 0xbb, 0xc3, 0xf7, 0x13, 0xdf, 0x24, 0x28, 0xf7, 0x4d, 0xa6, 0x15, 0x66, 0x11, 0x5c, + 0xd5, 0x23, 0xa8, 0xf2, 0x31, 0x01, 0xbd, 0x2e, 0x78, 0xef, 0xc4, 0xdc, 0x60, 0xc3, 0x08, 0xd2, + 0xcb, 0xe0, 0x53, 0x00, 0x8b, 0x0d, 0xfa, 0xc5, 0xb7, 0xe4, 0x11, 0xf2, 0xd7, 0x2e, 0xee, 0x48, + 0x6c, 0x1e, 0xda, 0xed, 0xa1, 0x1a, 0x6e, 0x30, 0xa9, 0x86, 0xf3, 0xb2, 0x55, 0x43, 0x7e, 0x4a, + 0xe3, 0x53, 0x0f, 0x57, 0xab, 0x72, 0x0d, 0x92, 0xbd, 0xb3, 0x30, 0x56, 0xd6, 0x47, 0x82, 0x26, + 0x64, 0x48, 0x25, 0xd6, 0x85, 0x72, 0xf2, 0xfb, 0xf8, 0xe7, 0x42, 0x54, 0xcc, 0x7f, 0x5d, 0x7c, + 0x18, 0x15, 0x86, 0x69, 0x7f, 0xfc, 0xf6, 0xa2, 0x17, 0x02, 0xb3, 0x9f, 0xb8, 0x48, 0xf5, 0x42, + 0xbd, 0x1c, 0x37, 0x4c, 0xec, 0x8c, 0x2a, 0xdc, 0x06, 0x03, 0x0d, 0x59, 0x21, 0x93, 0x12, 0x6c, + 0x6b, 0x61, 0xe5, 0x58, 0xd0, 0x73, 0x22, 0x26, 0x8f, 0x13, 0xf4, 0x4e, 0x22, 0xc6, 0x24, 0x5b, + 0xee, 0x05, 0xd9, 0x02, 0xf1, 0x17, 0xee, 0x50, 0xe5, 0x19, 0x20, 0x5b, 0x8a, 0x02, 0xd1, 0x16, + 0x7b, 0xd1, 0x52, 0xe0, 0x2c, 0x5a, 0xfa, 0xaf, 0x8f, 0xee, 0xb3, 0x17, 0x2d, 0xf7, 0xa2, 0xbc, + 0x46, 0x5d, 0x82, 0xc1, 0x57, 0x1a, 0xf1, 0x57, 0x1a, 0x8d, 0xaf, 0x34, 0x46, 0x5b, 0xc4, 0xb8, + 0xae, 0x02, 0x4c, 0x36, 0xd2, 0x11, 0xb2, 0x2c, 0xa4, 0xeb, 0xe9, 0x1c, 0xc8, 0xc9, 0xeb, 0xd6, + 0x48, 0x77, 0xc3, 0xaa, 0xb5, 0x6b, 0x6f, 0x8d, 0xf4, 0x64, 0xce, 0x5e, 0x4c, 0x9f, 0x1b, 0xd2, + 0xfa, 0x4f, 0x25, 0x3f, 0xdd, 0xaf, 0x1d, 0x1a, 0xc8, 0x7c, 0xd4, 0x97, 0xbc, 0x7e, 0x19, 0x57, + 0x6f, 0x58, 0x5b, 0xbb, 0x65, 0xc3, 0xa6, 0x8d, 0xd9, 0x20, 0x9f, 0x7c, 0xa8, 0xbd, 0xd1, 0x9f, + 0xbe, 0xd1, 0xae, 0xeb, 0x17, 0x75, 0xa8, 0xa8, 0x25, 0x1c, 0x4a, 0xd4, 0xc7, 0x42, 0x01, 0x85, + 0x88, 0x3e, 0x17, 0x98, 0x34, 0x8d, 0x52, 0x69, 0x2e, 0xb4, 0x4d, 0x0e, 0x7f, 0x92, 0x3a, 0x33, + 0xa2, 0x4f, 0xf0, 0xd6, 0x48, 0x8f, 0xd6, 0xf1, 0xaa, 0xcf, 0x80, 0x13, 0x57, 0xa0, 0x02, 0x2c, + 0xf6, 0xb1, 0x06, 0x93, 0xc7, 0xcc, 0x86, 0x50, 0x22, 0x89, 0x60, 0x51, 0xc3, 0x67, 0x4e, 0xb6, + 0x97, 0xf8, 0xa0, 0x4a, 0xfc, 0x0d, 0x27, 0x1f, 0x91, 0x71, 0xe6, 0x34, 0xe4, 0xe3, 0x6a, 0x6d, + 0xe0, 0x7a, 0xea, 0xe0, 0x79, 0x43, 0x3a, 0xf6, 0x1e, 0xc0, 0x32, 0xb7, 0xa7, 0xdd, 0x70, 0x52, + 0xcd, 0x92, 0xca, 0x20, 0x3f, 0xf5, 0x8f, 0x41, 0x4b, 0x4e, 0x7e, 0x36, 0xa2, 0x69, 0x4c, 0x7c, + 0xd5, 0x47, 0x22, 0x4d, 0x75, 0xb5, 0xa0, 0x39, 0x55, 0x3f, 0xa9, 0xca, 0x8f, 0x7b, 0xb3, 0xaa, + 0x24, 0x2f, 0xc8, 0x75, 0x4d, 0xbd, 0x88, 0xb9, 0xe2, 0xca, 0x99, 0xba, 0xda, 0x72, 0x3e, 0xad, + 0xbb, 0xd6, 0x7d, 0x7d, 0xb4, 0xe3, 0x00, 0xfd, 0x44, 0x56, 0x5b, 0xf1, 0xb4, 0x80, 0x10, 0x84, + 0x2b, 0xa8, 0x0d, 0xc5, 0x77, 0x90, 0xb7, 0xe4, 0x36, 0x67, 0xbb, 0x5a, 0x7f, 0xc2, 0x8f, 0xeb, + 0x21, 0xf9, 0x0b, 0xd7, 0x40, 0xda, 0xa8, 0x13, 0x6e, 0x7a, 0xf8, 0x74, 0xfa, 0xad, 0x37, 0xd9, + 0x4c, 0xe1, 0xd3, 0x59, 0x1b, 0xce, 0x12, 0x77, 0x72, 0xb8, 0x23, 0x39, 0xdc, 0x61, 0x27, 0xef, + 0xc1, 0x39, 0x5d, 0xeb, 0xb8, 0x9a, 0xba, 0x7a, 0xd1, 0xc7, 0x7d, 0x41, 0xec, 0x15, 0x50, 0x51, + 0x90, 0x7e, 0x3f, 0x5e, 0x32, 0xd5, 0xfe, 0xf0, 0xa9, 0x0f, 0x90, 0xc4, 0xe0, 0x36, 0xe0, 0xd9, + 0xf8, 0x52, 0x47, 0x2f, 0xa7, 0x0e, 0xf4, 0x7f, 0x6d, 0xe3, 0x33, 0x3e, 0x50, 0x85, 0x59, 0x19, + 0x95, 0x78, 0x0b, 0xd7, 0xdb, 0x0a, 0x10, 0x8f, 0x56, 0x80, 0xee, 0x5e, 0xa3, 0x24, 0xd6, 0xf9, + 0x89, 0xc1, 0xb7, 0xa5, 0xb1, 0x51, 0x89, 0x27, 0x94, 0xe0, 0x3a, 0x7f, 0x60, 0x7b, 0xe8, 0x6b, + 0xb1, 0xf7, 0x3c, 0x96, 0xa5, 0x83, 0xdd, 0x93, 0x4b, 0x07, 0xcb, 0x36, 0x7a, 0xbe, 0x2b, 0x98, + 0xd5, 0xde, 0x43, 0x82, 0x2a, 0x37, 0x7b, 0x0b, 0x03, 0x4d, 0x71, 0xb0, 0x02, 0xfb, 0xa9, 0x15, + 0x18, 0x54, 0xdf, 0xb5, 0xcb, 0x96, 0x2e, 0x05, 0x4e, 0x5d, 0x5a, 0xb1, 0x6c, 0xe9, 0xd2, 0xe4, + 0xe0, 0xfb, 0x7a, 0x00, 0x8b, 0xb5, 0x0f, 0x1a, 0x55, 0x0f, 0x66, 0x55, 0x2d, 0x5b, 0xca, 0xea, + 0x30, 0x10, 0x29, 0x26, 0xee, 0xda, 0xaf, 0xa5, 0xfb, 0xba, 0x16, 0x7f, 0x51, 0x3d, 0x2f, 0x56, + 0xea, 0xcb, 0xc7, 0x40, 0xbe, 0x7c, 0xdc, 0x8b, 0xaf, 0x80, 0x34, 0xf0, 0x15, 0xac, 0x95, 0xc8, + 0x3f, 0xa0, 0x62, 0x9b, 0x74, 0xc6, 0xfc, 0x09, 0xe9, 0x8c, 0x4b, 0xc1, 0x44, 0x55, 0x4b, 0x95, + 0x3b, 0xb2, 0x75, 0x42, 0x89, 0x34, 0x0d, 0xb4, 0xa2, 0xf4, 0x8d, 0x23, 0xe9, 0xe1, 0xde, 0xba, + 0x5a, 0xb0, 0x2f, 0xd5, 0x7e, 0x5b, 0xda, 0x5c, 0x2b, 0x93, 0x45, 0xa0, 0xcd, 0x91, 0x44, 0x59, + 0x54, 0x16, 0x6d, 0x4c, 0x1d, 0xbc, 0x98, 0x39, 0x70, 0x98, 0x6e, 0x28, 0xe7, 0xda, 0x31, 0xa5, + 0x72, 0x37, 0x58, 0xb7, 0x46, 0xba, 0x21, 0x37, 0x72, 0xf9, 0x68, 0xcf, 0x1b, 0xda, 0x48, 0xdb, + 0xe7, 0x6d, 0x7b, 0x0c, 0x63, 0x9a, 0x5b, 0xeb, 0x3c, 0xa1, 0x0d, 0x5c, 0xd7, 0x81, 0x53, 0xc7, + 0xcf, 0x60, 0xc1, 0x73, 0x65, 0x0f, 0x95, 0x66, 0xcc, 0xc1, 0x72, 0x6c, 0xaa, 0x94, 0xbc, 0xa9, + 0x33, 0xd7, 0x53, 0x07, 0xfa, 0x9b, 0x09, 0x14, 0x98, 0xfd, 0xa9, 0x89, 0x8c, 0x1f, 0x1e, 0x18, + 0x62, 0xfe, 0xbb, 0x0b, 0x79, 0x72, 0xf5, 0x78, 0x7b, 0xe8, 0x31, 0xbf, 0x30, 0xe9, 0x31, 0xf7, + 0x39, 0xea, 0x31, 0x4a, 0x73, 0xb4, 0xc9, 0x9f, 0x50, 0x6a, 0x22, 0xe1, 0x6d, 0xa1, 0xc6, 0x09, + 0xf9, 0xb5, 0x8e, 0x03, 0x49, 0x52, 0x89, 0x15, 0xbf, 0x4e, 0xfa, 0x4d, 0x67, 0x1e, 0xba, 0xcb, + 0xa2, 0x39, 0xc6, 0xbf, 0xab, 0xa3, 0xdd, 0x16, 0xeb, 0xd1, 0x4e, 0x56, 0xe5, 0x27, 0x78, 0x36, + 0x5d, 0xc6, 0xb1, 0x69, 0xb9, 0x1b, 0xc8, 0x38, 0xd5, 0xbd, 0x4f, 0xeb, 0xef, 0xc1, 0x08, 0x1b, + 0x3a, 0x92, 0xf9, 0xe8, 0x5d, 0xed, 0xd0, 0x27, 0xf4, 0x55, 0x05, 0xc1, 0x25, 0xcf, 0xcc, 0xcf, + 0xa3, 0x49, 0xa1, 0x28, 0x9e, 0x2f, 0x15, 0x02, 0x35, 0xaa, 0xfc, 0xa8, 0x97, 0x16, 0x49, 0x95, + 0xb8, 0xb9, 0x1e, 0x82, 0x85, 0x67, 0xed, 0x7a, 0x3c, 0xda, 0x93, 0x6d, 0xec, 0x7b, 0x94, 0x6d, + 0x60, 0xd2, 0x82, 0x8f, 0xb6, 0xd7, 0x7d, 0x4e, 0x1c, 0xf1, 0x29, 0xcd, 0xa5, 0xba, 0xfb, 0xe1, + 0xf6, 0xe4, 0xe0, 0xfb, 0xfa, 0xd7, 0x28, 0x07, 0xfc, 0xbd, 0x0b, 0x95, 0xda, 0x35, 0xbd, 0x1d, + 0x3d, 0xde, 0xee, 0xb2, 0xbd, 0x37, 0xc1, 0x5b, 0x1c, 0x38, 0xc1, 0x00, 0xb1, 0x53, 0x17, 0x04, + 0x1e, 0x0b, 0x26, 0x92, 0xdf, 0xa0, 0xca, 0x6b, 0xd1, 0xd3, 0xde, 0x1c, 0x58, 0x61, 0x18, 0xcd, + 0xc2, 0xa5, 0x13, 0xb5, 0x7f, 0x3c, 0x19, 0x15, 0xe9, 0x23, 0x11, 0x1f, 0xa1, 0xe9, 0xe9, 0x19, + 0x71, 0x13, 0x04, 0xd1, 0x22, 0xe9, 0x0e, 0xba, 0xd3, 0x0c, 0x1d, 0x09, 0xd1, 0x8f, 0xd6, 0xd5, + 0xd2, 0x0c, 0xf4, 0xb5, 0xe2, 0xa3, 0x68, 0x72, 0x28, 0x1c, 0x56, 0x62, 0x75, 0xf5, 0x14, 0xb7, + 0xc4, 0x62, 0xc8, 0xca, 0xa4, 0x99, 0x74, 0x2c, 0x7b, 0x3b, 0xd2, 0x37, 0x8e, 0x24, 0x07, 0x87, + 0xeb, 0xea, 0x7d, 0xac, 0x4e, 0x7c, 0x1e, 0x15, 0x87, 0xb8, 0xf3, 0x04, 0xa5, 0xf2, 0x87, 0x55, + 0x79, 0x85, 0xd7, 0x54, 0x21, 0x2d, 0x02, 0xf6, 0xa5, 0xbe, 0x41, 0x7d, 0xc7, 0xd3, 0x97, 0xde, + 0x4d, 0x0e, 0x7e, 0x88, 0x77, 0x82, 0x43, 0x03, 0x99, 0x57, 0x6f, 0x80, 0xb4, 0xf6, 0x99, 0xda, + 0x88, 0x0f, 0xf0, 0xba, 0x3e, 0x59, 0x34, 0xb2, 0xf3, 0x4c, 0x87, 0xf1, 0x04, 0xa2, 0x2d, 0x14, + 0xbd, 0x64, 0xfb, 0x59, 0x82, 0xf2, 0x9a, 0x15, 0xe6, 0xf1, 0x40, 0xf8, 0x13, 0xff, 0x96, 0x44, + 0x7d, 0xf0, 0x5a, 0xdf, 0x9b, 0x0c, 0xbe, 0x59, 0x69, 0x16, 0x1f, 0xe1, 0x55, 0xfc, 0xfb, 0x54, + 0xf9, 0x1e, 0x50, 0xf1, 0xe7, 0x01, 0x7c, 0x23, 0xeb, 0x9c, 0x1f, 0xe1, 0x52, 0xd0, 0xfa, 0x97, + 0xa1, 0xbc, 0xd6, 0x68, 0x80, 0xaa, 0xfc, 0x04, 0x55, 0xf8, 0xb7, 0x34, 0x9b, 0xc6, 0x68, 0x60, + 0xf7, 0x95, 0x9b, 0xeb, 0x6b, 0xdc, 0x75, 0xb5, 0x3e, 0x5c, 0x87, 0x19, 0x95, 0xca, 0x8f, 0x42, + 0xc6, 0xa8, 0x4f, 0xe9, 0xf2, 0xe3, 0x21, 0xbe, 0x21, 0x5c, 0x61, 0xdf, 0x1a, 0xe9, 0xc6, 0xba, + 0xff, 0xbb, 0x7b, 0xb4, 0xeb, 0x37, 0xb5, 0x4f, 0x4e, 0xdd, 0x1a, 0xe9, 0x4e, 0x7d, 0x72, 0x45, + 0xeb, 0xbd, 0x8a, 0x47, 0xf3, 0xda, 0x19, 0xed, 0x93, 0x53, 0xe9, 0xbe, 0x2e, 0x5d, 0xcc, 0x3c, + 0x81, 0x8a, 0xe8, 0x72, 0xb4, 0x3e, 0x44, 0x0d, 0x16, 0x64, 0xed, 0x8d, 0x52, 0x69, 0x06, 0x7c, + 0x22, 0x14, 0x6d, 0x7d, 0x08, 0x78, 0xdf, 0x67, 0x54, 0x8a, 0xab, 0x74, 0x9f, 0x18, 0xd0, 0xe6, + 0x21, 0xd4, 0x2f, 0xf5, 0x89, 0x71, 0xb3, 0xf8, 0x1a, 0xba, 0x67, 0x4c, 0xf6, 0x9a, 0x31, 0x47, + 0x99, 0x95, 0xd4, 0x1a, 0x05, 0x9a, 0x39, 0x5c, 0x24, 0x12, 0x6b, 0xd4, 0x82, 0xac, 0x2e, 0xb2, + 0x3b, 0x00, 0xd3, 0xd3, 0x53, 0x9c, 0xc7, 0x4c, 0xb1, 0x61, 0x75, 0xd4, 0x0b, 0x19, 0x7e, 0xb3, + 0xfd, 0x6d, 0x0c, 0xbf, 0x99, 0x20, 0x9a, 0x1e, 0x30, 0xee, 0x4e, 0x30, 0x4f, 0x90, 0xb0, 0x4b, + 0x85, 0xd5, 0x55, 0xaa, 0xfc, 0xb0, 0x37, 0xbb, 0x4e, 0x5a, 0x04, 0x6f, 0x18, 0xf0, 0x19, 0x64, + 0xe0, 0x7c, 0x72, 0xe8, 0x48, 0xba, 0xa7, 0x1d, 0x6e, 0xe7, 0x40, 0x96, 0xd3, 0xa0, 0x8a, 0xd9, + 0xcd, 0xaa, 0xb0, 0x04, 0x47, 0x8f, 0x7b, 0xa7, 0xd0, 0x1b, 0x4e, 0xd2, 0x55, 0x05, 0x58, 0x5f, + 0x29, 0x8f, 0x31, 0xba, 0xa1, 0x3a, 0x35, 0xc7, 0xc8, 0xda, 0x95, 0xa3, 0xe9, 0x73, 0x43, 0x9e, + 0x0b, 0x2e, 0xe3, 0xb6, 0x53, 0x06, 0x61, 0xfe, 0x5d, 0x5a, 0x20, 0xbf, 0xe9, 0x6d, 0x8a, 0xf9, + 0x6e, 0xe5, 0x98, 0xb3, 0x34, 0xdb, 0x10, 0x7c, 0xa4, 0x2b, 0x7a, 0x5c, 0x18, 0xe5, 0xae, 0x08, + 0x4d, 0xad, 0x6e, 0x37, 0xfd, 0x49, 0x70, 0xbc, 0x7d, 0xe7, 0xa6, 0x35, 0x91, 0xcd, 0xa4, 0x5e, + 0x95, 0xd7, 0xa1, 0x67, 0xbc, 0xb9, 0xb0, 0xc3, 0xef, 0x26, 0x1c, 0x52, 0x9d, 0x76, 0x93, 0x23, + 0x02, 0xf5, 0xe2, 0xe2, 0xba, 0x12, 0x7f, 0x8b, 0xf2, 0x13, 0x86, 0x6d, 0x28, 0xa4, 0xca, 0xdb, + 0xbc, 0xa4, 0x40, 0xfa, 0x55, 0x56, 0xaf, 0x65, 0xf0, 0x3a, 0x83, 0x16, 0xf5, 0xb4, 0x83, 0xaa, + 0xa1, 0x47, 0xa0, 0x6d, 0xd8, 0x28, 0xaf, 0xaf, 0x95, 0x7d, 0xb5, 0xc9, 0xc1, 0xa1, 0xd4, 0x99, + 0x7d, 0xda, 0xbe, 0xbd, 0x00, 0x8e, 0x0f, 0x44, 0xab, 0xd6, 0xc8, 0x35, 0xbf, 0x48, 0x0e, 0x0e, + 0x25, 0x47, 0xce, 0xe0, 0x33, 0x33, 0x29, 0x5f, 0xec, 0x23, 0x5f, 0xf1, 0xdc, 0x70, 0x21, 0x37, + 0x9b, 0x61, 0xb5, 0x3f, 0x1c, 0x7c, 0x29, 0x14, 0x4c, 0x6c, 0xaf, 0xf7, 0x07, 0x76, 0xf8, 0x1b, + 0xbf, 0xb4, 0x5a, 0x27, 0x7c, 0xa5, 0xd3, 0xa2, 0xf0, 0xed, 0xb1, 0x0d, 0x95, 0x34, 0x63, 0x22, + 0x80, 0x19, 0x00, 0xf1, 0xc7, 0x3a, 0xae, 0x24, 0x87, 0x3e, 0xd0, 0x06, 0xdf, 0xd5, 0xfa, 0x6f, + 0x68, 0xdd, 0x1d, 0x9e, 0xff, 0xe5, 0x22, 0xc7, 0x6d, 0xa7, 0xe6, 0xb7, 0x07, 0x17, 0x05, 0x4c, + 0xba, 0xd8, 0xa2, 0x6c, 0x2e, 0xca, 0x9e, 0x97, 0x83, 0x1f, 0x8b, 0x15, 0x3b, 0xc0, 0x55, 0x94, + 0x9f, 0xe8, 0x2b, 0xd8, 0xb1, 0xb1, 0xe5, 0x8c, 0x6d, 0x2b, 0x4b, 0xa9, 0x02, 0x9a, 0x65, 0x37, + 0x3c, 0x71, 0x1a, 0x72, 0x85, 0x82, 0xf4, 0x6e, 0xd4, 0x15, 0x0a, 0x8a, 0x22, 0x7d, 0xbc, 0x00, + 0x77, 0xa1, 0xf0, 0x36, 0xc1, 0x8d, 0xa6, 0x84, 0x95, 0xc4, 0x4b, 0x91, 0xd8, 0x0e, 0x43, 0xb3, + 0xf2, 0xf1, 0x45, 0xdc, 0x0d, 0x64, 0xbe, 0xe9, 0x06, 0x72, 0x1e, 0x2a, 0xda, 0xca, 0xbe, 0x4a, + 0x14, 0xa2, 0x02, 0x9f, 0x51, 0xe0, 0xf9, 0x38, 0x1f, 0xdd, 0xa9, 0xab, 0xa0, 0x1b, 0xe2, 0x75, + 0xcd, 0xfe, 0xc6, 0xdb, 0xf1, 0xf2, 0xeb, 0xff, 0x2f, 0x58, 0x1e, 0xf3, 0xbd, 0x2f, 0xa8, 0xf2, + 0xbb, 0x02, 0x67, 0x88, 0x3c, 0x21, 0x8c, 0x1e, 0xed, 0xd5, 0x5e, 0x3d, 0xa4, 0x5f, 0xcf, 0x80, + 0xea, 0x01, 0xef, 0x84, 0xaa, 0xea, 0x37, 0x55, 0xaf, 0xad, 0xab, 0xd9, 0x52, 0xb7, 0x4e, 0x5e, + 0xb3, 0xaa, 0x4c, 0xeb, 0xb8, 0xa4, 0x75, 0x5c, 0x01, 0xf0, 0xc5, 0xe5, 0xf5, 0xbe, 0xba, 0xcd, + 0xf2, 0xc6, 0x55, 0xb4, 0x0e, 0x0e, 0x4f, 0xac, 0xae, 0xe1, 0xa7, 0xb2, 0x6f, 0x55, 0xad, 0xde, + 0x0c, 0x93, 0x00, 0xab, 0x5a, 0x27, 0xfb, 0x9e, 0x59, 0xb5, 0x91, 0x55, 0x0d, 0xee, 0xd1, 0x7a, + 0x87, 0x58, 0x95, 0x5b, 0x5e, 0xbb, 0x16, 0x5c, 0x69, 0xa0, 0x84, 0x33, 0x6e, 0xee, 0xe0, 0xaf, + 0x99, 0x0b, 0x0c, 0x8f, 0x47, 0xee, 0xf2, 0x7f, 0xa5, 0xd6, 0x7f, 0x5d, 0x3b, 0x71, 0x51, 0xbb, + 0x7e, 0x55, 0x3b, 0x74, 0x99, 0xdd, 0xfc, 0x97, 0xbb, 0x21, 0xa4, 0x10, 0x68, 0x2d, 0xd0, 0xad, + 0xee, 0x5f, 0x40, 0x15, 0x6d, 0x20, 0x71, 0xa3, 0x27, 0xdd, 0x8f, 0xda, 0x81, 0x02, 0xf4, 0xcb, + 0x04, 0xce, 0xdd, 0x94, 0x1e, 0xe8, 0xfe, 0xd6, 0x85, 0x4a, 0xac, 0xad, 0x6e, 0x0f, 0x11, 0xf2, + 0xb4, 0x49, 0x84, 0xdc, 0x99, 0x2d, 0x42, 0xe8, 0x6c, 0xc6, 0x67, 0xb9, 0xd8, 0xac, 0xca, 0x0d, + 0xe8, 0x59, 0xaf, 0x23, 0x2e, 0xa4, 0x45, 0x56, 0x14, 0xc2, 0xe2, 0xe4, 0x3e, 0xcd, 0x7d, 0x51, + 0x80, 0x26, 0xd3, 0xae, 0xc4, 0x65, 0x68, 0x72, 0x08, 0xff, 0xa1, 0xf3, 0xe1, 0x9d, 0x84, 0x0f, + 0x69, 0x99, 0x54, 0x04, 0xfd, 0xe1, 0xe3, 0x05, 0x2b, 0x13, 0x97, 0xa0, 0x02, 0x7f, 0x53, 0xc8, + 0x1f, 0xa7, 0xf8, 0x24, 0x8e, 0xed, 0x50, 0x22, 0x15, 0xb3, 0xcf, 0x7f, 0xa0, 0x1d, 0x3e, 0xe0, + 0x83, 0x42, 0xbc, 0x62, 0xfe, 0x58, 0x60, 0x3b, 0xff, 0x38, 0x91, 0x14, 0x48, 0xd3, 0x01, 0xba, + 0xa6, 0x7e, 0x53, 0xea, 0xd4, 0xb5, 0xd4, 0xa9, 0x76, 0x1f, 0x29, 0x16, 0x7d, 0x68, 0x7a, 0x24, + 0x5e, 0xd3, 0x12, 0x4f, 0x44, 0x9a, 0x43, 0xbb, 0xe0, 0xb0, 0x07, 0x5c, 0x47, 0x1e, 0x06, 0x67, + 0xd7, 0x49, 0xa2, 0xd6, 0xdf, 0xa3, 0x75, 0x5e, 0xa3, 0x86, 0x70, 0xb8, 0x3d, 0xca, 0x06, 0x12, + 0x1f, 0x46, 0x93, 0x22, 0x71, 0xa2, 0xf1, 0x17, 0x18, 0x87, 0x29, 0x5a, 0xc4, 0x6e, 0xef, 0x29, + 0x0d, 0x82, 0xb2, 0x4f, 0xeb, 0xc4, 0x3a, 0x84, 0xe2, 0x4a, 0x2c, 0xa4, 0x40, 0xe3, 0x49, 0xc6, + 0x89, 0x83, 0x2b, 0x96, 0x4a, 0xf8, 0x0e, 0xe0, 0x2a, 0x89, 0x3d, 0x4a, 0x31, 0xa0, 0x44, 0x39, + 0xeb, 0x0e, 0x87, 0x74, 0xc3, 0xee, 0x70, 0xe6, 0x51, 0xae, 0x22, 0x77, 0x38, 0x55, 0xee, 0xf5, + 0x1b, 0x7c, 0xeb, 0xe4, 0xb5, 0x65, 0x10, 0x9b, 0x66, 0xb1, 0x2e, 0x6f, 0x3f, 0xe1, 0x45, 0x11, + 0x1c, 0xf0, 0xe0, 0x7e, 0x95, 0x13, 0x45, 0x5d, 0x39, 0x45, 0x91, 0xfb, 0xdb, 0x94, 0x45, 0x9c, + 0xe8, 0x09, 0xa0, 0x42, 0xca, 0x0a, 0x70, 0x07, 0x64, 0x13, 0x3e, 0x8c, 0xf7, 0x0e, 0xf5, 0xaa, + 0xf2, 0xfd, 0x5e, 0xbd, 0x85, 0x34, 0x97, 0xd2, 0x95, 0xd9, 0xb3, 0x89, 0x32, 0x8b, 0x0e, 0x56, + 0xe5, 0x51, 0xe5, 0x85, 0x68, 0xbe, 0x97, 0x11, 0xb7, 0x79, 0x61, 0xa1, 0x0b, 0xcf, 0x3a, 0x34, + 0x85, 0x7f, 0x3c, 0xe0, 0x36, 0xbf, 0x00, 0x80, 0x8d, 0xd2, 0xe4, 0xe1, 0x3f, 0xcf, 0xf2, 0xb8, + 0x9c, 0xf3, 0xdc, 0xf1, 0xfc, 0xa5, 0x80, 0xe6, 0x1a, 0x1e, 0xa9, 0x2d, 0xe1, 0x44, 0xa8, 0x99, + 0x6c, 0xbc, 0x6c, 0x9f, 0x7b, 0xc8, 0xfa, 0x38, 0x81, 0x30, 0x0c, 0xe7, 0xb6, 0x55, 0x68, 0xe7, + 0xa7, 0xc5, 0xed, 0x8f, 0xae, 0x09, 0xed, 0x8f, 0x55, 0x4f, 0xaa, 0xf2, 0xe3, 0xa8, 0xca, 0x9b, + 0x6b, 0x54, 0x4c, 0x5f, 0x07, 0x77, 0xfa, 0xd4, 0xf1, 0x6b, 0xbc, 0x0c, 0xf7, 0xfc, 0xe7, 0x3c, + 0xce, 0x71, 0xc5, 0xd4, 0xf8, 0x76, 0x7b, 0x7a, 0x8e, 0xc9, 0xec, 0xa1, 0x6c, 0x32, 0xcb, 0x35, + 0x35, 0x72, 0x9d, 0xb5, 0x2a, 0x9c, 0x88, 0xed, 0x1c, 0x97, 0x84, 0x2e, 0xfd, 0x19, 0x2a, 0xd2, + 0x5b, 0x88, 0x33, 0x50, 0xde, 0x0e, 0x65, 0x27, 0x25, 0x21, 0xfc, 0xa7, 0xb8, 0x02, 0x15, 0xb4, + 0xfa, 0x9b, 0x5a, 0x60, 0xda, 0x53, 0xa4, 0x05, 0x96, 0xa7, 0x49, 0x2d, 0x24, 0xce, 0x2a, 0x7d, + 0xa3, 0xe1, 0x03, 0xe0, 0x2a, 0xd7, 0x23, 0x42, 0xd5, 0xcf, 0x54, 0x79, 0x23, 0xf2, 0x79, 0x73, + 0xae, 0x83, 0x74, 0x77, 0x8e, 0x55, 0x74, 0x92, 0xfd, 0x5e, 0x34, 0xcd, 0xfc, 0x55, 0xb1, 0x04, + 0x4d, 0x6e, 0xa5, 0xaf, 0x4b, 0x04, 0x77, 0x5e, 0x59, 0x91, 0x8f, 0xfd, 0xf4, 0xfc, 0x93, 0xc0, + 0xed, 0xc3, 0xf5, 0xb0, 0xb1, 0xc7, 0x6f, 0x3f, 0x05, 0xae, 0xea, 0x21, 0x55, 0x5e, 0x8e, 0x96, + 0x79, 0x1d, 0xe7, 0xc2, 0xd9, 0x04, 0x40, 0xe3, 0xa1, 0x8c, 0xf0, 0x37, 0x2e, 0xce, 0xc6, 0x6f, + 0xb4, 0xf9, 0x41, 0x78, 0x86, 0xf0, 0x73, 0x1a, 0x9f, 0x36, 0xb2, 0x5e, 0x95, 0x9f, 0x41, 0x75, + 0x5e, 0x67, 0x8c, 0x70, 0x56, 0x00, 0x1e, 0x8d, 0x4e, 0x94, 0xb8, 0x1e, 0x15, 0xf3, 0xdd, 0x98, + 0x7d, 0x20, 0x31, 0x52, 0xf3, 0x79, 0x1f, 0x48, 0x37, 0x9a, 0x42, 0x7f, 0x18, 0x8e, 0x20, 0x3e, + 0xbe, 0xc8, 0x73, 0x3d, 0x0f, 0xcd, 0xd2, 0xc7, 0xb6, 0x39, 0x1a, 0xb8, 0x0d, 0x29, 0x55, 0x7c, + 0x8a, 0xdd, 0x99, 0x82, 0xc2, 0x43, 0x76, 0x41, 0x7a, 0x67, 0xba, 0x80, 0xb9, 0xf5, 0x13, 0x8d, + 0x8f, 0x1c, 0xed, 0xc1, 0xb9, 0x9f, 0x7e, 0x9d, 0xde, 0xa1, 0x26, 0xec, 0x1e, 0xc3, 0x80, 0xce, + 0xb3, 0x5a, 0x95, 0x6b, 0xec, 0x1e, 0xc3, 0x2c, 0x31, 0x3f, 0x86, 0xd9, 0x1c, 0x0d, 0x4c, 0xf8, + 0x25, 0xcc, 0x13, 0xaa, 0xfc, 0x18, 0x7a, 0xd4, 0x6b, 0x8b, 0x7f, 0x26, 0xa6, 0x92, 0x43, 0x47, + 0x68, 0x44, 0x0d, 0x42, 0x1c, 0xe9, 0x9e, 0xf6, 0xd6, 0x68, 0x80, 0x72, 0xda, 0x5f, 0xb9, 0xd0, + 0xec, 0xac, 0xb6, 0x3f, 0x08, 0xd7, 0x7c, 0x36, 0x9f, 0xf1, 0x71, 0x18, 0xb5, 0xb4, 0xd9, 0x63, + 0xc2, 0x82, 0x46, 0xfa, 0x2c, 0x93, 0x43, 0xa3, 0x95, 0xc7, 0xf0, 0xd1, 0x95, 0xf5, 0xa4, 0x1f, + 0xfd, 0x05, 0xee, 0xe8, 0x3f, 0x8b, 0xbd, 0x23, 0x01, 0x86, 0xa2, 0x0f, 0x3d, 0x4a, 0x51, 0x61, + 0x28, 0xda, 0xba, 0xa2, 0x26, 0x14, 0xa4, 0xa1, 0x6f, 0x7c, 0xfa, 0x6f, 0x5a, 0xf7, 0x10, 0xa9, + 0xcb, 0xd7, 0xeb, 0xc8, 0x6f, 0x71, 0x39, 0x2a, 0x08, 0x84, 0x82, 0xb1, 0x78, 0x49, 0x01, 0x41, + 0xc7, 0xfc, 0x6c, 0x74, 0xc8, 0xf1, 0x78, 0x28, 0x9e, 0xf0, 0x87, 0x13, 0x18, 0xda, 0x07, 0xb0, + 0xe2, 0x22, 0x34, 0xd5, 0xdf, 0x44, 0x1e, 0xca, 0x29, 0x75, 0xd1, 0xf5, 0x2d, 0xcd, 0x70, 0x51, + 0xe2, 0x33, 0x17, 0x7a, 0x9e, 0x44, 0x53, 0x4d, 0xad, 0xf1, 0x6c, 0x70, 0x7b, 0x36, 0x9b, 0x00, + 0x1d, 0x1b, 0xfe, 0x97, 0x1c, 0x19, 0x5c, 0xc4, 0x1a, 0xa1, 0xff, 0xf6, 0xec, 0x9d, 0xc4, 0x19, + 0x23, 0x1a, 0xc8, 0x9b, 0xd3, 0xdb, 0x51, 0x42, 0xac, 0x36, 0x4b, 0x08, 0x12, 0x66, 0x97, 0x4a, + 0x88, 0x45, 0x4e, 0x12, 0x02, 0xde, 0xf2, 0xd0, 0x13, 0x3a, 0x95, 0x13, 0x6b, 0xe9, 0x1d, 0x0a, + 0x88, 0x06, 0x7c, 0x56, 0xa7, 0x77, 0x28, 0x15, 0x8e, 0xbd, 0xe8, 0xd7, 0x21, 0x7c, 0x77, 0x70, + 0xa5, 0xb2, 0x1a, 0x15, 0xc2, 0x33, 0xde, 0xba, 0x5a, 0x7a, 0x46, 0x02, 0x05, 0x9e, 0x15, 0xb2, + 0xad, 0x01, 0xfa, 0x83, 0x52, 0x7d, 0x60, 0x3e, 0x1d, 0x4c, 0xfc, 0x15, 0x9a, 0x1a, 0x0a, 0x63, + 0x89, 0x4e, 0x55, 0x74, 0x9a, 0x8d, 0x86, 0x0c, 0xcf, 0x5c, 0xa3, 0x5f, 0xaa, 0x5c, 0xbd, 0xa8, + 0x75, 0x9c, 0xa7, 0xaf, 0x95, 0xb8, 0x80, 0x3d, 0x14, 0xe3, 0xe6, 0x46, 0xf6, 0xd2, 0xb1, 0x70, + 0x22, 0xd2, 0x11, 0x86, 0x0a, 0x5f, 0x1a, 0xa7, 0x74, 0x14, 0x9f, 0xa6, 0x8c, 0x57, 0xc4, 0x22, + 0x53, 0x2d, 0xa7, 0x01, 0x43, 0x1e, 0xe0, 0x71, 0x4d, 0xd1, 0x4a, 0x7a, 0xd1, 0xba, 0x3b, 0xb4, + 0xc3, 0x1f, 0x60, 0x18, 0x03, 0x4b, 0xa4, 0x49, 0xd5, 0x53, 0xaa, 0xbc, 0x12, 0x3d, 0xe6, 0x15, + 0x31, 0x29, 0x9b, 0xa9, 0x58, 0xba, 0xd7, 0x30, 0x17, 0x72, 0x2b, 0x54, 0x3e, 0xda, 0xb6, 0x67, + 0xb4, 0xe3, 0x40, 0x72, 0xf0, 0x80, 0x76, 0xb8, 0x3b, 0x39, 0x74, 0xc4, 0xf3, 0xd7, 0xbc, 0x75, + 0x45, 0xef, 0xe2, 0xf6, 0x10, 0xb7, 0x9b, 0x4c, 0xe2, 0x76, 0x8e, 0x25, 0x3c, 0x0c, 0x99, 0x8d, + 0xe3, 0xd3, 0x42, 0x1e, 0x2d, 0x76, 0x6f, 0xa2, 0xee, 0x30, 0x21, 0xd5, 0x6c, 0x84, 0xe5, 0xdb, + 0x3a, 0x69, 0x34, 0xed, 0x93, 0xd0, 0x24, 0x68, 0x2e, 0xde, 0xcf, 0xd8, 0x14, 0xe4, 0xc9, 0x4c, + 0x55, 0x9e, 0xc6, 0xd8, 0x14, 0xfe, 0x61, 0x7c, 0xb8, 0x9c, 0xe3, 0x1c, 0x97, 0x61, 0x80, 0x31, + 0x38, 0xa7, 0x10, 0xbe, 0x5c, 0x57, 0xcb, 0xb1, 0xc9, 0x4a, 0x84, 0xe8, 0xab, 0x79, 0xe3, 0xd5, + 0x3f, 0x78, 0xb6, 0x1a, 0xc5, 0x52, 0x31, 0x4f, 0x50, 0x3e, 0xae, 0x46, 0x7c, 0x02, 0x15, 0x61, + 0xb1, 0xe8, 0xf3, 0x87, 0xcd, 0xef, 0x9e, 0x8c, 0x52, 0x69, 0x06, 0x34, 0x76, 0xd7, 0xd5, 0xb7, + 0xae, 0x70, 0xd7, 0xd4, 0xd5, 0xfa, 0x7c, 0x46, 0xa5, 0xf8, 0x34, 0x9a, 0xca, 0x44, 0x3e, 0xf4, + 0x51, 0x60, 0xdc, 0xa2, 0x9a, 0x6b, 0xf8, 0x7e, 0x1e, 0x82, 0x7e, 0xcc, 0x00, 0x7a, 0xd0, 0x83, + 0x49, 0xc6, 0x30, 0x40, 0x0e, 0xcd, 0x36, 0x78, 0xba, 0xf7, 0xa2, 0xe1, 0x19, 0x0a, 0xf2, 0x46, + 0x41, 0x77, 0xfa, 0x5b, 0xfd, 0xa1, 0x26, 0xff, 0xd6, 0x26, 0xa5, 0xae, 0x5e, 0x0e, 0x06, 0x63, + 0x4a, 0x3c, 0x0e, 0x29, 0x90, 0xb0, 0xc4, 0xc8, 0x07, 0x3f, 0x55, 0x27, 0x18, 0x69, 0xaa, 0xd6, + 0xf5, 0x5e, 0xf2, 0xc6, 0x09, 0x77, 0x5d, 0xbd, 0x3b, 0x75, 0xf4, 0xb2, 0xcf, 0x09, 0xce, 0x74, + 0x53, 0x5c, 0x68, 0x7b, 0x53, 0x6c, 0x3f, 0x48, 0xe3, 0xa6, 0xf8, 0x45, 0xc4, 0x42, 0x41, 0x11, + 0xee, 0x1f, 0xc3, 0xea, 0x41, 0x08, 0x97, 0x35, 0x90, 0xe6, 0xd2, 0xce, 0x89, 0x9c, 0xcb, 0xbc, + 0x4d, 0x5f, 0x95, 0x83, 0x25, 0x56, 0x8f, 0x30, 0x25, 0xc6, 0xd1, 0xcc, 0xed, 0x2f, 0xad, 0x57, + 0x5a, 0x12, 0xb1, 0x48, 0xb8, 0x81, 0x51, 0x12, 0x5c, 0xaf, 0x63, 0xb2, 0xf6, 0x5a, 0x6b, 0xa5, + 0x0a, 0xed, 0xc0, 0xc1, 0xe4, 0xe0, 0x90, 0x36, 0x70, 0x5d, 0x1b, 0x7a, 0x03, 0x3e, 0x52, 0xb6, + 0x21, 0xaa, 0x84, 0x1b, 0x12, 0xfe, 0xc0, 0x0e, 0x37, 0x85, 0x5e, 0x9c, 0x3a, 0x78, 0x5e, 0x3b, + 0xf4, 0x4e, 0x5d, 0xad, 0xcf, 0xda, 0x43, 0x15, 0xde, 0xad, 0xd0, 0x1c, 0x2f, 0xa5, 0x76, 0x46, + 0x6a, 0x46, 0x98, 0xc5, 0x85, 0x35, 0xdb, 0x95, 0xc0, 0x0e, 0xbc, 0xca, 0x35, 0x91, 0xf0, 0xb6, + 0xa6, 0x50, 0x20, 0xb1, 0x3a, 0x16, 0x69, 0xde, 0x1c, 0x0d, 0x7c, 0xf5, 0x1d, 0xb7, 0xcc, 0xa4, + 0xb1, 0x54, 0x8b, 0xaa, 0x3c, 0x9d, 0xbd, 0x7c, 0x9d, 0x94, 0x1c, 0x3a, 0xd2, 0x1a, 0x0d, 0x30, + 0x2d, 0x46, 0xa2, 0x1a, 0x02, 0x17, 0x15, 0x83, 0x14, 0x48, 0x77, 0x40, 0x3a, 0x97, 0x74, 0x4f, + 0x3b, 0xfe, 0xc9, 0xc4, 0x2b, 0xd1, 0x20, 0x8c, 0x7b, 0xba, 0xfc, 0x89, 0x7b, 0x75, 0x9a, 0xb6, + 0xf5, 0x82, 0x09, 0x1d, 0x51, 0xa9, 0x02, 0x3d, 0x16, 0xde, 0xa4, 0x39, 0xb0, 0x17, 0x93, 0x71, + 0xef, 0xfd, 0x30, 0xfd, 0xfe, 0x6e, 0x98, 0x8a, 0x27, 0xe5, 0x42, 0x6e, 0xe7, 0xb6, 0xb7, 0x87, + 0x70, 0xaf, 0x33, 0xdd, 0x61, 0x5b, 0x4f, 0xac, 0x74, 0x56, 0x84, 0x53, 0x88, 0x90, 0x04, 0x11, + 0x5f, 0x0c, 0x88, 0xa0, 0x9d, 0x81, 0x40, 0xa7, 0x51, 0xea, 0xc7, 0x44, 0x89, 0xb4, 0x00, 0x48, + 0x86, 0xc7, 0x25, 0x3f, 0x36, 0xab, 0x8c, 0x5f, 0x84, 0x8a, 0xf9, 0x81, 0x60, 0x05, 0x1a, 0x54, + 0x5e, 0xb0, 0x9d, 0xc0, 0x0f, 0x8f, 0x9a, 0xc7, 0x3d, 0xe7, 0x6f, 0x50, 0x02, 0x2d, 0xb1, 0x50, + 0x62, 0xe7, 0xd7, 0x15, 0x34, 0xeb, 0xcb, 0xe9, 0x9c, 0x2f, 0x5a, 0x75, 0xce, 0x6a, 0x55, 0x7e, + 0x92, 0x27, 0x4e, 0x89, 0x23, 0xce, 0xb2, 0xd1, 0x93, 0xa7, 0xb4, 0x9b, 0x1d, 0xc9, 0x91, 0x33, + 0xe5, 0x5a, 0xc7, 0x88, 0xd6, 0x7f, 0x3d, 0x7d, 0xee, 0x53, 0xad, 0x7b, 0x28, 0xdd, 0xd5, 0xa9, + 0xa9, 0xdd, 0xda, 0xde, 0x8e, 0xd1, 0x57, 0x2f, 0xa6, 0xbb, 0x3a, 0x17, 0xf3, 0xaa, 0xa9, 0xe2, + 0x1c, 0x87, 0x81, 0xb8, 0x69, 0xd9, 0x28, 0x57, 0x0b, 0x89, 0x72, 0x95, 0x1c, 0xec, 0x9b, 0xc0, + 0x59, 0x13, 0xf7, 0x85, 0x24, 0xb0, 0x43, 0xd8, 0xa2, 0x96, 0x99, 0x73, 0xb4, 0xfe, 0x2e, 0xad, + 0xe3, 0x62, 0x7a, 0xb8, 0x9d, 0x1e, 0x32, 0x3f, 0x77, 0xa1, 0x85, 0x8e, 0x8b, 0x72, 0x7b, 0xb0, + 0x48, 0xbd, 0x49, 0xff, 0x99, 0x6f, 0x0d, 0x8f, 0xc7, 0x4d, 0x6a, 0x7c, 0x67, 0x4e, 0xde, 0x55, + 0xd0, 0x1e, 0x27, 0xba, 0xf3, 0xa5, 0x19, 0x9d, 0x4e, 0x4a, 0xd0, 0xee, 0x3c, 0x44, 0xf4, 0xa8, + 0x67, 0x94, 0x9d, 0xf5, 0xfe, 0x50, 0xec, 0x47, 0x7a, 0xff, 0xaa, 0xf4, 0xbe, 0x4c, 0x95, 0x97, + 0xa0, 0x72, 0xaf, 0x1d, 0x52, 0x75, 0x4a, 0x1f, 0xd8, 0x3b, 0xaa, 0x9e, 0xc7, 0xfb, 0x39, 0x50, + 0xfa, 0xff, 0xe6, 0x02, 0x53, 0x98, 0x01, 0xfe, 0x83, 0xb8, 0x3c, 0xa5, 0xd3, 0x99, 0xf8, 0x43, + 0xb6, 0x6c, 0x3c, 0xe8, 0x4a, 0x3d, 0xe0, 0x2d, 0x27, 0x3d, 0xff, 0x07, 0x01, 0x4d, 0xa6, 0xed, + 0x45, 0x2f, 0x2a, 0x78, 0x46, 0xd9, 0xa9, 0x53, 0x30, 0x79, 0xa2, 0x00, 0x25, 0x52, 0x21, 0xf4, + 0x85, 0x15, 0x7b, 0x52, 0x20, 0xae, 0x20, 0xcd, 0xb8, 0x57, 0x6b, 0xf0, 0x38, 0x99, 0x96, 0x49, + 0xc5, 0xf4, 0xdb, 0xb0, 0xec, 0xac, 0x38, 0x3b, 0x32, 0x6b, 0x9e, 0x53, 0x64, 0x56, 0x68, 0x6d, + 0x0a, 0x20, 0x65, 0x8a, 0xcc, 0x4a, 0xc3, 0xd7, 0xb1, 0x91, 0x4b, 0xd3, 0x75, 0x12, 0xa1, 0x4a, + 0x9a, 0x36, 0x05, 0x4e, 0x81, 0xfc, 0x33, 0x66, 0x9d, 0x57, 0xf7, 0x0b, 0xb6, 0xc1, 0x1c, 0x48, + 0x9c, 0x26, 0xf3, 0x23, 0xd2, 0x8d, 0xfc, 0x0b, 0xd1, 0x72, 0xee, 0x9a, 0x91, 0x05, 0x46, 0x75, + 0xb3, 0xec, 0x18, 0xa1, 0x70, 0x63, 0x84, 0x8c, 0xad, 0xdc, 0x4d, 0x18, 0x9b, 0xfe, 0xd3, 0x1a, + 0x0d, 0x94, 0xbb, 0xc3, 0x91, 0xa0, 0x42, 0xb8, 0xa0, 0xdc, 0x9d, 0xf0, 0xc7, 0x77, 0x7c, 0x7d, + 0x41, 0x21, 0xea, 0x51, 0x11, 0xc9, 0xe7, 0x46, 0x9e, 0x7a, 0xe7, 0x91, 0x93, 0x81, 0xa4, 0xca, + 0x95, 0x5e, 0xa3, 0x54, 0xf2, 0x40, 0xa6, 0x64, 0x3d, 0x7d, 0xdb, 0x9a, 0x75, 0x1b, 0xdd, 0xf0, + 0x23, 0xd5, 0x79, 0xf5, 0xd6, 0x48, 0x77, 0xfa, 0x82, 0xea, 0x33, 0xc0, 0xc5, 0xa7, 0xd1, 0x64, + 0x25, 0x0c, 0xa9, 0x8f, 0xf3, 0x49, 0x7f, 0x90, 0xe8, 0x88, 0x96, 0x49, 0x1e, 0x4c, 0xd1, 0x27, + 0x4f, 0xe7, 0xec, 0x8d, 0x01, 0x8b, 0x0f, 0xa2, 0x82, 0xa6, 0x50, 0x73, 0x28, 0x41, 0x5d, 0x89, + 0x17, 0x92, 0x8b, 0x74, 0x52, 0x22, 0x15, 0xa7, 0x06, 0x0e, 0x8d, 0x9e, 0xfd, 0x98, 0xe5, 0x5f, + 0xcd, 0xf7, 0xba, 0xdc, 0x3f, 0xf1, 0x41, 0x9d, 0x58, 0x8e, 0xf2, 0xa3, 0x98, 0x23, 0xc1, 0xa1, + 0xb8, 0x04, 0x1f, 0x2d, 0x49, 0x81, 0x34, 0x69, 0xf4, 0xec, 0xc7, 0xe9, 0x33, 0xbb, 0x19, 0x38, + 0x29, 0x14, 0x6b, 0xd0, 0xa4, 0x78, 0xa8, 0x39, 0xda, 0xc4, 0x32, 0xfb, 0x92, 0x93, 0x11, 0x2d, + 0x92, 0x16, 0x68, 0x87, 0xde, 0x07, 0x57, 0x51, 0x77, 0x84, 0x27, 0x04, 0x37, 0x13, 0xa6, 0x00, + 0x27, 0xb6, 0x09, 0x08, 0xc1, 0x7b, 0xff, 0xf5, 0x2d, 0x4d, 0x4d, 0x34, 0x2d, 0x2f, 0x79, 0x38, + 0xc3, 0x15, 0x4b, 0x1b, 0x20, 0x9a, 0xcb, 0x36, 0x7f, 0x53, 0x5c, 0x29, 0x07, 0xd3, 0x06, 0xd4, + 0x82, 0xfb, 0xad, 0x9e, 0x17, 0xe5, 0x31, 0xb7, 0x76, 0xe3, 0x75, 0x9a, 0xe7, 0x36, 0x75, 0xfc, + 0x5a, 0x79, 0x72, 0xf0, 0x80, 0x2d, 0xb4, 0x8f, 0xeb, 0x5c, 0x7c, 0x81, 0xbf, 0x48, 0x2d, 0x32, + 0xde, 0xe4, 0x71, 0x17, 0xa9, 0x95, 0x7a, 0x0a, 0x46, 0xf2, 0x1e, 0x07, 0xfa, 0xa4, 0x2f, 0xa9, + 0x86, 0x3f, 0xa2, 0xc9, 0xfa, 0x20, 0xb6, 0x05, 0x79, 0xa2, 0xcf, 0xdf, 0xb7, 0xbe, 0xc0, 0xdf, + 0x3e, 0x20, 0xae, 0x7b, 0xc3, 0x35, 0xc6, 0xbe, 0x7b, 0x30, 0x66, 0xdb, 0x77, 0x6f, 0x5c, 0x5f, + 0xac, 0xd2, 0xef, 0xfe, 0xa7, 0x70, 0x9e, 0xcf, 0xf4, 0xee, 0xdf, 0x6d, 0xee, 0x18, 0xe2, 0x25, + 0x80, 0x27, 0x40, 0xba, 0xef, 0xad, 0xd1, 0xb6, 0x2e, 0xfd, 0xfe, 0xff, 0x19, 0x2e, 0xe2, 0x43, + 0x31, 0x0b, 0xda, 0x5f, 0xee, 0xd5, 0x0b, 0x1d, 0xba, 0x22, 0xdc, 0x49, 0xbb, 0x32, 0x42, 0x44, + 0x3c, 0x84, 0x5c, 0xad, 0x12, 0x75, 0x5c, 0x26, 0x6e, 0xe9, 0xae, 0x56, 0x49, 0x9a, 0x0f, 0xc7, + 0x4d, 0x38, 0x65, 0xb6, 0x4a, 0xc4, 0x55, 0x19, 0x8b, 0x4a, 0x1a, 0x56, 0xce, 0xd5, 0x2a, 0x89, + 0xb5, 0xfa, 0x5b, 0x90, 0x69, 0x46, 0x30, 0x5a, 0xf6, 0x16, 0x64, 0xa1, 0xe9, 0xa5, 0x07, 0x14, + 0x02, 0xa6, 0x60, 0x2c, 0xec, 0xd1, 0x87, 0xb8, 0x51, 0x0f, 0x36, 0x31, 0x9d, 0x05, 0x15, 0x78, + 0x54, 0x0f, 0x36, 0x61, 0x8b, 0x6a, 0x3a, 0x19, 0x5b, 0x54, 0xb3, 0x68, 0x14, 0x2f, 0x02, 0x82, + 0x88, 0xd8, 0x9d, 0x41, 0xfa, 0xad, 0x25, 0x51, 0x9d, 0x59, 0xa1, 0xf4, 0xa0, 0x73, 0xcf, 0x20, + 0x8b, 0xed, 0xfb, 0xd7, 0x3b, 0x10, 0x9b, 0xb2, 0x02, 0x6b, 0xcc, 0x24, 0x5f, 0xf9, 0xa9, 0x2a, + 0xaf, 0xca, 0x8a, 0x7c, 0x62, 0xfb, 0x25, 0x3e, 0x1a, 0x8a, 0xfd, 0x97, 0xcc, 0x21, 0x52, 0xe8, + 0x65, 0xbe, 0xa3, 0xa8, 0x66, 0x06, 0x2e, 0x3e, 0xfe, 0x04, 0x04, 0x3d, 0x82, 0x5c, 0x5b, 0x9e, + 0x51, 0x17, 0x98, 0xbd, 0xb9, 0x38, 0x1f, 0xba, 0x98, 0x5f, 0x9d, 0x15, 0xef, 0x83, 0x44, 0x43, + 0x67, 0x4b, 0x70, 0xf7, 0xf8, 0x91, 0xee, 0xb3, 0x84, 0x00, 0x21, 0x36, 0x4e, 0x23, 0x04, 0xc8, + 0xfd, 0x7c, 0x5f, 0x10, 0x08, 0xc4, 0x01, 0xcd, 0x7a, 0x5c, 0x10, 0x26, 0xe4, 0xf2, 0xc6, 0x25, + 0xe4, 0x74, 0x49, 0x9a, 0x3f, 0x11, 0x49, 0x5a, 0xb5, 0x4e, 0x95, 0x9f, 0x46, 0x3f, 0xf5, 0x3a, + 0x21, 0x48, 0x5a, 0x44, 0x1d, 0x3a, 0xb9, 0x71, 0x5b, 0x51, 0xfc, 0x99, 0x40, 0xf1, 0xe0, 0x39, + 0x46, 0xef, 0x8b, 0xb3, 0x16, 0xea, 0xf6, 0xd0, 0xbd, 0x9e, 0x33, 0x9d, 0xbe, 0x2b, 0xec, 0xbc, + 0x26, 0x6c, 0xe7, 0x55, 0xeb, 0x4f, 0xf8, 0x4d, 0xc7, 0x71, 0xfa, 0x52, 0x91, 0xbc, 0xfb, 0x05, + 0x5d, 0xcc, 0xd3, 0x27, 0xa0, 0x39, 0x0c, 0xc7, 0x3e, 0x25, 0x10, 0x89, 0x05, 0x75, 0x1a, 0xdc, + 0x98, 0x45, 0x83, 0x5f, 0x8b, 0x18, 0xd0, 0x83, 0xe1, 0xda, 0x7f, 0x54, 0x77, 0xd4, 0x25, 0x3d, + 0xd1, 0x17, 0x15, 0x3c, 0xd3, 0x1c, 0xe4, 0x98, 0x46, 0x6f, 0x7a, 0xbb, 0x45, 0x85, 0xc6, 0xcb, + 0x78, 0x7f, 0xf6, 0x32, 0xda, 0xcc, 0x68, 0x3c, 0x0b, 0xd8, 0xeb, 0x42, 0x77, 0x3a, 0x34, 0x15, + 0x63, 0xfa, 0xd6, 0x26, 0x18, 0xa9, 0xa3, 0xd8, 0xd6, 0xb6, 0x8e, 0xf2, 0x0e, 0x44, 0xf2, 0x81, + 0xd0, 0x70, 0x2f, 0xf9, 0x43, 0x89, 0x50, 0xb8, 0xb1, 0xdc, 0xdd, 0x14, 0xf1, 0x07, 0xc9, 0x1f, + 0xf1, 0x96, 0x40, 0x40, 0x89, 0xc7, 0xcb, 0xdd, 0xdb, 0xfd, 0x4d, 0xdb, 0x1a, 0xd8, 0x8f, 0x6d, + 0xfe, 0x50, 0x93, 0x12, 0x2c, 0x77, 0xb3, 0x0c, 0xd1, 0x8a, 0xe1, 0x07, 0xd7, 0x2d, 0xa0, 0x7c, + 0x2c, 0x2a, 0x4a, 0x5c, 0xe4, 0xa4, 0xb0, 0xc0, 0x79, 0x9a, 0x98, 0xa5, 0xab, 0x7f, 0xae, 0xca, + 0x9b, 0xbc, 0xa4, 0xc1, 0xd7, 0x3d, 0x20, 0xd2, 0xa9, 0xe7, 0x77, 0x2e, 0x34, 0xcd, 0xfc, 0x49, + 0xf1, 0x01, 0xde, 0xcf, 0x9a, 0xa2, 0x97, 0xdc, 0xf9, 0x14, 0xf3, 0x9b, 0x0d, 0xbd, 0x85, 0x7d, + 0x52, 0x47, 0x61, 0x9e, 0x11, 0x91, 0x8b, 0xa1, 0xb0, 0xd4, 0x24, 0x36, 0x61, 0xc4, 0xda, 0xe1, + 0xee, 0xe4, 0xe0, 0x6b, 0x06, 0x3e, 0x6a, 0x78, 0x3d, 0x17, 0x2f, 0x7d, 0x1e, 0x3c, 0x8a, 0xe6, + 0xf4, 0xdc, 0xd9, 0xf4, 0xbb, 0x9c, 0xb6, 0x9b, 0xea, 0xbc, 0xca, 0xab, 0xb6, 0x2b, 0x0d, 0xd5, + 0xb6, 0x80, 0x74, 0x41, 0x1e, 0x89, 0xe8, 0xaa, 0xed, 0x6c, 0xc6, 0x78, 0x86, 0x82, 0x8b, 0x3b, + 0xd0, 0xb5, 0x59, 0x96, 0x9c, 0x66, 0x12, 0x59, 0x12, 0x4f, 0xee, 0x25, 0x21, 0x44, 0x37, 0xae, + 0xfe, 0x81, 0x00, 0x6f, 0x08, 0x48, 0xb4, 0xf6, 0x20, 0x3e, 0x80, 0xf2, 0x9a, 0x22, 0x8d, 0x7c, + 0x70, 0x71, 0xfc, 0x5b, 0x9a, 0xae, 0xdd, 0x78, 0x5d, 0xeb, 0x3a, 0x90, 0x39, 0x8b, 0x4f, 0xee, + 0x5a, 0xff, 0x75, 0x1f, 0x2e, 0x15, 0x1f, 0x46, 0x45, 0x89, 0x50, 0xb3, 0x12, 0x4f, 0xf8, 0x9b, + 0xa3, 0x64, 0x5d, 0xf2, 0xa0, 0x89, 0x51, 0x2a, 0x15, 0x71, 0x88, 0xd1, 0x4b, 0x45, 0xd9, 0xfc, + 0x58, 0x9f, 0x68, 0xd0, 0x34, 0x46, 0xd5, 0x42, 0x6b, 0x8c, 0x2a, 0xf7, 0xcf, 0x64, 0xdf, 0xfa, + 0x72, 0xb7, 0x29, 0x54, 0x95, 0x67, 0x40, 0x80, 0x40, 0x33, 0x8e, 0x22, 0x54, 0x5c, 0x81, 0x0a, + 0x88, 0x61, 0x81, 0x0a, 0x16, 0x88, 0x90, 0x41, 0x4a, 0xcc, 0xd1, 0xa5, 0x58, 0x48, 0x46, 0x52, + 0x25, 0xfe, 0x1c, 0x4d, 0x06, 0xc6, 0x8f, 0x53, 0x56, 0xb0, 0xe0, 0x9d, 0xff, 0x62, 0xad, 0x92, + 0xf0, 0x87, 0x9a, 0xe8, 0x49, 0x94, 0xb6, 0xcb, 0xe2, 0x77, 0x56, 0xec, 0xd9, 0x53, 0x80, 0x44, + 0x6b, 0xdb, 0xaf, 0x27, 0xcc, 0x5f, 0x95, 0xcd, 0x89, 0x8e, 0x0c, 0x8a, 0x3f, 0xd1, 0x15, 0x41, + 0x07, 0xee, 0xac, 0x23, 0xdd, 0xca, 0xac, 0x38, 0x7f, 0xf0, 0xf8, 0x9f, 0x6e, 0x18, 0x25, 0x40, + 0x43, 0x6e, 0x9b, 0xb7, 0x83, 0x54, 0x57, 0xf9, 0x72, 0x31, 0xc3, 0xc6, 0x13, 0xeb, 0x2f, 0xd3, + 0xd6, 0x31, 0xd1, 0x58, 0x7f, 0x87, 0x8e, 0xa4, 0xdf, 0x38, 0x6d, 0x13, 0xeb, 0x6f, 0x33, 0xca, + 0xc7, 0xc3, 0x25, 0x27, 0xb6, 0x29, 0xd2, 0x2c, 0x3b, 0x56, 0x02, 0xad, 0x9b, 0x80, 0x49, 0x77, + 0xd3, 0x8d, 0x6c, 0xe0, 0xdd, 0xf4, 0xf0, 0x5e, 0xeb, 0x63, 0x52, 0xf2, 0xf2, 0x11, 0x03, 0x92, + 0x50, 0x3a, 0xec, 0xf8, 0x50, 0xc8, 0x87, 0xd2, 0x61, 0xc7, 0x87, 0x62, 0xfe, 0xc0, 0xc0, 0x1d, + 0x15, 0x96, 0x99, 0x23, 0xd0, 0xd1, 0x8d, 0x88, 0x0a, 0xa8, 0x62, 0xfe, 0xc0, 0xc2, 0x89, 0x24, + 0xb3, 0x9e, 0x8c, 0xbe, 0x44, 0x84, 0x40, 0xcf, 0x1b, 0xf4, 0xae, 0xda, 0xac, 0x9c, 0xdd, 0x8e, + 0x4f, 0xf2, 0xca, 0xed, 0x14, 0x2a, 0xbb, 0x69, 0x8d, 0x53, 0x9f, 0x9a, 0x97, 0xab, 0xfd, 0x97, + 0x14, 0x26, 0x3f, 0xcb, 0x16, 0x26, 0x77, 0xdb, 0x51, 0x1e, 0xfd, 0xe0, 0x44, 0x64, 0xc9, 0x55, + 0x17, 0x9a, 0x69, 0x69, 0x2a, 0x56, 0x64, 0xa9, 0x7e, 0xb3, 0x55, 0x59, 0xd4, 0x39, 0xb9, 0x90, + 0x85, 0x1b, 0xd4, 0x39, 0xf7, 0x61, 0xcb, 0x29, 0x03, 0x88, 0x57, 0x3f, 0x65, 0x14, 0x3b, 0x84, + 0x18, 0xfc, 0xea, 0xe2, 0xfb, 0x9b, 0x8d, 0x34, 0xe8, 0x20, 0x05, 0x3c, 0x7f, 0x95, 0x87, 0xee, + 0xaa, 0x69, 0x52, 0xfc, 0xe1, 0xda, 0xad, 0x3f, 0x0d, 0xc5, 0x13, 0x91, 0xd8, 0x4e, 0xbc, 0xb6, + 0x4c, 0x71, 0x6e, 0x17, 0x50, 0x21, 0x26, 0x06, 0x4e, 0x0a, 0x6f, 0x57, 0xe5, 0xb5, 0x5e, 0xbd, + 0x50, 0x7a, 0x8a, 0xc6, 0xde, 0xa1, 0x69, 0x8b, 0xd2, 0x6f, 0xf5, 0x6b, 0x5d, 0x07, 0x92, 0xc3, + 0x1d, 0x10, 0x6f, 0x09, 0x63, 0xb5, 0x9c, 0x37, 0xfa, 0xa4, 0xfb, 0xba, 0x32, 0x67, 0x2f, 0xf2, + 0x6d, 0x20, 0x97, 0x51, 0x3e, 0x98, 0xe4, 0x74, 0xd0, 0xa6, 0x48, 0xa3, 0x4f, 0xff, 0x88, 0xb8, + 0x92, 0xd7, 0x3c, 0x5c, 0xc4, 0x22, 0x46, 0x78, 0x9c, 0xd3, 0x3c, 0xa6, 0xe7, 0xd0, 0x39, 0x1e, + 0x36, 0x74, 0x0e, 0x30, 0xcf, 0x11, 0xfc, 0xe8, 0x3a, 0xc1, 0x74, 0x27, 0x6d, 0xa3, 0x6a, 0x50, + 0x50, 0xe5, 0x8f, 0x04, 0x74, 0x45, 0xf0, 0x3a, 0xe3, 0x48, 0x7a, 0x5d, 0x80, 0x40, 0x2a, 0xa9, + 0x93, 0x67, 0x93, 0xc3, 0xd7, 0x20, 0xff, 0x2e, 0x4c, 0x50, 0x1b, 0x7a, 0x1d, 0xfe, 0x28, 0x77, + 0xd3, 0x80, 0xee, 0x24, 0x3f, 0x2c, 0x3c, 0x70, 0xa2, 0x9f, 0xeb, 0xff, 0x38, 0xdd, 0xd3, 0x0e, + 0xa7, 0x83, 0x72, 0x37, 0x34, 0xce, 0x74, 0xbf, 0xaa, 0xbd, 0xf5, 0x51, 0x72, 0xf0, 0x80, 0xd6, + 0xb1, 0x3b, 0xd3, 0x3f, 0x08, 0xf9, 0xd5, 0x97, 0x69, 0xd7, 0x3f, 0xfa, 0xbc, 0x6d, 0x4f, 0x72, + 0xf0, 0x0d, 0xbd, 0x82, 0x7e, 0xaa, 0xb7, 0x2d, 0x73, 0xf3, 0xc8, 0x72, 0xdc, 0x63, 0x6f, 0x27, + 0x3e, 0xaa, 0x90, 0x2f, 0x7a, 0x86, 0x05, 0x54, 0x6a, 0x37, 0xe6, 0xdb, 0x42, 0xac, 0x79, 0x4e, + 0xbb, 0xd0, 0x54, 0xd3, 0x45, 0x91, 0xf8, 0x0c, 0x9a, 0x1e, 0xe7, 0x0b, 0x74, 0x86, 0x26, 0x81, + 0x40, 0xb3, 0xeb, 0xa4, 0x29, 0xfa, 0x45, 0x52, 0x5d, 0xad, 0x2f, 0xbb, 0x56, 0xdc, 0x84, 0x66, + 0x9a, 0x8a, 0x38, 0x76, 0x27, 0x5a, 0xb1, 0xb5, 0x56, 0x9a, 0x6e, 0xdc, 0x4c, 0xd1, 0x4b, 0x14, + 0x0b, 0x8c, 0x58, 0x63, 0x67, 0x57, 0x27, 0xe3, 0x33, 0xd9, 0xd5, 0x8d, 0xae, 0xec, 0xd2, 0x9d, + 0x61, 0x55, 0x03, 0xb9, 0xbd, 0xe6, 0xe9, 0x73, 0x6d, 0xa8, 0x69, 0xfd, 0xa8, 0x80, 0xee, 0x58, + 0x1f, 0x09, 0x2a, 0xba, 0xf6, 0x44, 0xd3, 0x0d, 0x3c, 0x86, 0xf2, 0xf1, 0x09, 0x82, 0xdc, 0x14, + 0xdb, 0x1c, 0xcd, 0x6c, 0x9a, 0x10, 0x6f, 0x7f, 0xd2, 0x48, 0x94, 0xd1, 0x64, 0x7a, 0x28, 0xa1, + 0xb2, 0x79, 0xdc, 0xed, 0x59, 0x3b, 0xcf, 0x06, 0x74, 0xa7, 0x03, 0x8c, 0x58, 0x0a, 0xc1, 0xf9, + 0xb8, 0x27, 0x30, 0xfa, 0x6f, 0x3e, 0x16, 0xae, 0xcb, 0x14, 0x0b, 0xd7, 0xf3, 0x5f, 0x0a, 0xd0, + 0x8c, 0xda, 0x98, 0x3f, 0x44, 0xc2, 0x15, 0x30, 0xb9, 0xf4, 0x0a, 0x2a, 0xa4, 0x01, 0x1f, 0xe8, + 0x9d, 0x78, 0xf5, 0x16, 0x55, 0xfe, 0xa5, 0x57, 0x2f, 0x94, 0xea, 0xf9, 0x20, 0x1f, 0x75, 0xf5, + 0x46, 0xbc, 0x47, 0xb5, 0x9b, 0xd6, 0x80, 0x0b, 0x1c, 0xb8, 0x69, 0x0d, 0x75, 0x8f, 0xb6, 0x75, + 0x25, 0x07, 0xdb, 0x6e, 0x8d, 0x74, 0x43, 0xb6, 0x7e, 0x2b, 0x8c, 0x4f, 0xef, 0x5b, 0xdc, 0x6c, + 0x4d, 0x04, 0xf9, 0x08, 0x49, 0x49, 0x62, 0x18, 0x89, 0xef, 0x8e, 0x46, 0x82, 0x99, 0x9b, 0xbb, + 0xd3, 0x17, 0x86, 0xb3, 0xa2, 0x68, 0xe8, 0x20, 0xe4, 0x02, 0xd2, 0x2d, 0xf0, 0xd6, 0xe1, 0x18, + 0x2a, 0xc0, 0xf8, 0xc0, 0xe7, 0x33, 0x3c, 0xa3, 0x5f, 0xaa, 0xf2, 0x2f, 0xbc, 0x50, 0xa2, 0x4f, + 0x87, 0x1b, 0x90, 0x69, 0x32, 0xa6, 0x69, 0x8e, 0x6b, 0x3a, 0xd0, 0xb1, 0x38, 0x0b, 0x15, 0x6c, + 0x23, 0x79, 0xce, 0xf1, 0x8e, 0x53, 0xe8, 0x83, 0x1f, 0xe2, 0x12, 0x24, 0x36, 0xc6, 0xfc, 0x01, + 0xa5, 0x5e, 0x89, 0x85, 0x22, 0xc1, 0x06, 0x25, 0x10, 0x09, 0x07, 0xe3, 0xf4, 0xe9, 0xad, 0x4d, + 0x8d, 0xb8, 0x14, 0xdd, 0x11, 0x6a, 0x0c, 0x47, 0x62, 0x8a, 0xdc, 0xd4, 0x54, 0xeb, 0x57, 0x9a, + 0x23, 0xe1, 0x06, 0x25, 0x11, 0x27, 0x9b, 0x51, 0xa1, 0xcf, 0xae, 0x0a, 0xaf, 0x37, 0x3e, 0xfa, + 0x44, 0x5a, 0xc0, 0x97, 0x6a, 0xaa, 0x8f, 0xfd, 0x14, 0xcb, 0xd0, 0xf4, 0x20, 0x49, 0x26, 0xbe, + 0x36, 0x12, 0xf0, 0x37, 0x61, 0xa1, 0x05, 0x37, 0x01, 0xbe, 0xec, 0x62, 0x4c, 0x4f, 0x71, 0xa5, + 0x49, 0x09, 0x24, 0x22, 0x34, 0xb0, 0xa9, 0x4f, 0xff, 0x4d, 0x3c, 0xf9, 0xf1, 0xf8, 0x68, 0x35, + 0xa2, 0x9e, 0xfc, 0x46, 0x11, 0xf9, 0x4e, 0x28, 0xee, 0xdf, 0xda, 0xa4, 0xac, 0x6a, 0x0d, 0x05, + 0x08, 0xc3, 0x4e, 0xa1, 0xdf, 0x31, 0x17, 0x8b, 0x3f, 0x45, 0x0b, 0xe3, 0x3b, 0x42, 0xd1, 0x9f, + 0xf9, 0x43, 0x89, 0xd5, 0x91, 0x18, 0x64, 0x3a, 0xdf, 0x08, 0xa3, 0x65, 0xa8, 0x29, 0x26, 0x73, + 0x18, 0x0b, 0x4c, 0x9c, 0x83, 0x26, 0x05, 0x63, 0x3b, 0x7d, 0x2d, 0x61, 0x30, 0x88, 0xfb, 0xe8, + 0x2f, 0x4f, 0xbb, 0x0b, 0xcd, 0xe4, 0x68, 0xfc, 0x76, 0x73, 0x13, 0xc0, 0xaa, 0xe7, 0x3d, 0xe3, + 0x90, 0x14, 0x63, 0x69, 0x9c, 0x5d, 0x2e, 0x34, 0x0d, 0x37, 0x33, 0x92, 0x5f, 0x8a, 0x4f, 0x64, + 0xcb, 0x0c, 0xc8, 0xdb, 0xa1, 0x17, 0x4a, 0xc5, 0x3c, 0x6d, 0x33, 0xa6, 0x32, 0xe4, 0xca, 0x4b, + 0x68, 0x0a, 0x9f, 0xb2, 0x13, 0xa4, 0x5a, 0xa5, 0xdd, 0x58, 0x8d, 0x8f, 0x2e, 0xe1, 0x92, 0x6f, + 0xc2, 0x33, 0x2d, 0xb8, 0x1b, 0xe5, 0xb3, 0x77, 0xd2, 0x38, 0x3c, 0xa9, 0xab, 0x17, 0x33, 0x17, + 0xde, 0x61, 0x77, 0xa3, 0x1c, 0x40, 0xe9, 0x13, 0x68, 0x46, 0x76, 0x37, 0x36, 0x6f, 0xb7, 0x66, + 0xf1, 0x6f, 0xb7, 0x8a, 0xb8, 0xb7, 0x59, 0x9e, 0x7f, 0x21, 0xa0, 0x79, 0x90, 0x9d, 0xd5, 0x3c, + 0x38, 0xdd, 0xa6, 0xd9, 0x60, 0x7d, 0xf3, 0xf7, 0xa0, 0x2a, 0x3f, 0xc0, 0x4b, 0xa1, 0x05, 0x34, + 0x99, 0xf2, 0xf8, 0x45, 0xd0, 0x7a, 0x26, 0x82, 0x1c, 0x4c, 0x5e, 0xe6, 0xb1, 0xd0, 0x57, 0xb9, + 0x20, 0xa2, 0x8a, 0xf9, 0xd8, 0x1e, 0x54, 0xbc, 0x78, 0x7e, 0xe7, 0x42, 0xf3, 0x1d, 0x66, 0xf1, + 0x7b, 0x4a, 0xe4, 0xec, 0x3a, 0x20, 0x37, 0x5a, 0xa4, 0x39, 0xfc, 0xd2, 0x19, 0x74, 0x65, 0xf5, + 0x1c, 0x48, 0x09, 0xa8, 0x08, 0x77, 0xb2, 0xd6, 0xbf, 0x55, 0x69, 0xfa, 0xca, 0xec, 0xf2, 0x2b, + 0x34, 0xa9, 0x09, 0x77, 0xc4, 0x08, 0xe0, 0x5e, 0xbb, 0x09, 0x93, 0x4f, 0x2d, 0x21, 0xff, 0xa7, + 0xfc, 0x01, 0x0f, 0x9d, 0xa1, 0xa5, 0xce, 0x1a, 0x67, 0xf6, 0xa5, 0xfb, 0x3e, 0x65, 0x57, 0xbc, + 0x50, 0x57, 0xfa, 0x28, 0x9a, 0xc2, 0xb5, 0x9b, 0x10, 0x43, 0x5c, 0x17, 0xd0, 0x9d, 0x06, 0xce, + 0xa0, 0x17, 0xc6, 0x0b, 0x75, 0x8c, 0x6c, 0x05, 0xfb, 0xf8, 0x66, 0x7a, 0x8b, 0x31, 0x29, 0xd6, + 0xcc, 0x56, 0xae, 0xaf, 0x87, 0xad, 0x3c, 0x7f, 0xe9, 0x42, 0x25, 0xd6, 0xb1, 0xff, 0xbe, 0x72, + 0x40, 0x8d, 0x2a, 0x3f, 0x85, 0x9e, 0xf0, 0x3a, 0x62, 0x44, 0x9a, 0xc9, 0x23, 0x98, 0x50, 0x8e, + 0x95, 0xee, 0xdf, 0xa2, 0x74, 0xbf, 0xd1, 0x1f, 0x0a, 0x27, 0xbe, 0x32, 0xdd, 0xaf, 0x47, 0x93, + 0x12, 0xb8, 0x23, 0x46, 0xf7, 0xb3, 0xad, 0x36, 0x89, 0x50, 0x38, 0x41, 0xe9, 0x1c, 0x20, 0x75, + 0x3a, 0xbf, 0x72, 0x56, 0x8f, 0x92, 0xe5, 0xa3, 0x75, 0x59, 0xc4, 0x4a, 0x1a, 0x4f, 0x88, 0x58, + 0xe1, 0x73, 0xdf, 0x0d, 0xb1, 0xfe, 0x3b, 0x13, 0xb1, 0xb2, 0xb1, 0xff, 0xbe, 0x12, 0x2b, 0x4d, + 0x08, 0xe5, 0x88, 0x11, 0x49, 0xe4, 0x11, 0x0c, 0xcb, 0x6f, 0xa5, 0xd6, 0x27, 0xd1, 0xd4, 0x9f, + 0x2a, 0xfe, 0xa6, 0xc4, 0x76, 0x4a, 0x04, 0x2c, 0x35, 0xae, 0xb9, 0x54, 0x2a, 0xd1, 0x76, 0x9f, + 0xd7, 0x86, 0x3e, 0x49, 0xbd, 0xd3, 0x96, 0x3a, 0x7d, 0x1e, 0x5c, 0xe3, 0x69, 0x72, 0xa1, 0xbd, + 0x2e, 0x34, 0x8d, 0xc1, 0x7e, 0x07, 0x4b, 0xb1, 0x1a, 0x15, 0xe9, 0xcf, 0x17, 0xe8, 0xb9, 0x96, + 0xc4, 0xc9, 0x30, 0x4a, 0xa5, 0x12, 0x7e, 0x41, 0xca, 0x12, 0xb1, 0x16, 0xa5, 0x92, 0xf8, 0xe8, + 0x2c, 0xf6, 0x19, 0x40, 0xec, 0x61, 0x51, 0xd6, 0x54, 0x6c, 0xe7, 0xed, 0xe0, 0x29, 0x77, 0x40, + 0x80, 0xeb, 0x6f, 0x96, 0x37, 0xb6, 0x21, 0xb0, 0x5d, 0x69, 0xd6, 0xed, 0x55, 0x4b, 0xb2, 0xfd, + 0x3f, 0x89, 0xf7, 0x9c, 0xee, 0xff, 0x39, 0x29, 0x39, 0x74, 0x84, 0x44, 0x19, 0x61, 0x61, 0x0c, + 0xe8, 0x78, 0x9c, 0x7b, 0x94, 0x16, 0xd0, 0xe7, 0xef, 0x10, 0x44, 0xfa, 0xe2, 0x59, 0x23, 0x66, + 0x2b, 0x2c, 0xcc, 0x25, 0x73, 0xce, 0xe2, 0xaf, 0x34, 0x9c, 0x1c, 0xf7, 0x79, 0x26, 0xf3, 0x35, + 0x3c, 0xd2, 0x5a, 0xae, 0xca, 0x4b, 0xd1, 0x12, 0xaf, 0xe3, 0xd7, 0x99, 0xdb, 0x22, 0x3f, 0x74, + 0xcf, 0x1f, 0xe5, 0xa1, 0xd2, 0x67, 0x5b, 0x94, 0xd8, 0xce, 0x7a, 0x25, 0xd6, 0x5c, 0xbd, 0x53, + 0x26, 0x27, 0x9c, 0xba, 0x5a, 0x9f, 0xf2, 0x1b, 0x72, 0xa4, 0x7a, 0x04, 0x21, 0xea, 0x4e, 0xb4, + 0x85, 0x05, 0x74, 0xa2, 0x5e, 0x70, 0x46, 0xb1, 0x54, 0x68, 0xcd, 0xd5, 0x13, 0xc4, 0x2d, 0x29, + 0xb3, 0xe1, 0x96, 0xbc, 0xff, 0x9c, 0x51, 0x6c, 0x17, 0x84, 0x22, 0x28, 0x2e, 0xa3, 0x93, 0xe6, + 0x5e, 0x18, 0xc1, 0xa4, 0x45, 0xed, 0xc8, 0x0d, 0x3c, 0xe3, 0xf7, 0x86, 0x46, 0x8f, 0x7f, 0x64, + 0xba, 0xca, 0x7c, 0x02, 0x4d, 0x49, 0xd0, 0x20, 0xbd, 0xf8, 0x6b, 0xf9, 0x46, 0x4b, 0xbe, 0x5c, + 0x9a, 0x92, 0xba, 0x78, 0x36, 0x75, 0xf2, 0xe6, 0xe8, 0x5b, 0x7b, 0xeb, 0x6a, 0x7d, 0x88, 0xd5, + 0xd4, 0x05, 0xc5, 0xc7, 0x10, 0xa2, 0x1e, 0xb6, 0xb8, 0x79, 0x81, 0xe1, 0xf0, 0xcb, 0x15, 0x93, + 0x57, 0x14, 0x10, 0xd1, 0x8c, 0x7f, 0x45, 0x81, 0x1b, 0x17, 0x82, 0x99, 0x32, 0x12, 0xa3, 0xe6, + 0x56, 0xe2, 0x09, 0xa2, 0x17, 0x72, 0x57, 0x35, 0x2c, 0xc6, 0x9a, 0x5e, 0xc7, 0x82, 0xa0, 0xe5, + 0x58, 0x03, 0x69, 0x41, 0xea, 0xe4, 0xab, 0xa3, 0x27, 0x0e, 0x03, 0x7d, 0xa5, 0x7b, 0xda, 0x93, + 0x83, 0xaf, 0x25, 0x07, 0xf7, 0xa7, 0x8e, 0xd1, 0xf4, 0x13, 0x9e, 0x37, 0x5c, 0x4e, 0x4b, 0x48, + 0x68, 0xee, 0x51, 0x54, 0xe8, 0xa7, 0x45, 0x74, 0x01, 0x09, 0x62, 0xf4, 0x42, 0x69, 0x1a, 0xf4, + 0xcf, 0x7e, 0xfb, 0xf4, 0x1a, 0x71, 0x3b, 0x2a, 0x8c, 0x2a, 0xb1, 0xe6, 0x2d, 0x81, 0xc4, 0xcb, + 0x34, 0x98, 0x84, 0x37, 0x5b, 0x82, 0x3a, 0x8f, 0x9b, 0x66, 0xe4, 0x61, 0x1d, 0x48, 0x22, 0x3f, + 0x0d, 0x66, 0xab, 0xc7, 0xb5, 0x35, 0x89, 0x97, 0xab, 0x9e, 0x55, 0xe5, 0xf5, 0x68, 0xad, 0x37, + 0xc7, 0x3c, 0x98, 0xf7, 0x2c, 0x04, 0xd0, 0xe3, 0xfb, 0xfa, 0x4c, 0xd0, 0x47, 0xfc, 0x99, 0xa0, + 0x7f, 0xcf, 0x73, 0x44, 0x40, 0x05, 0xb8, 0xa7, 0xb8, 0xf8, 0x10, 0x2a, 0xc0, 0xa5, 0x6c, 0x83, + 0xb5, 0xc4, 0x29, 0x24, 0x50, 0xf0, 0x7f, 0xa2, 0x86, 0xfa, 0x00, 0xbc, 0xb4, 0x1e, 0x21, 0xa3, + 0xd0, 0x46, 0x37, 0x2d, 0x37, 0x07, 0xda, 0x98, 0xb3, 0xa4, 0x31, 0x12, 0x69, 0x6c, 0x52, 0x96, + 0x44, 0x63, 0x91, 0x44, 0x64, 0x6b, 0xcb, 0xb6, 0x25, 0x9b, 0x71, 0x2d, 0xaf, 0xb3, 0x1e, 0x11, + 0xd0, 0x5c, 0xdb, 0x29, 0x7e, 0x49, 0x11, 0x5e, 0x4d, 0xb7, 0x37, 0x18, 0xc0, 0x6c, 0xdb, 0x89, + 0xd9, 0x6c, 0x68, 0xfc, 0xab, 0x15, 0x8f, 0xea, 0x42, 0xa8, 0x26, 0xd2, 0xdc, 0x1c, 0x09, 0xe3, + 0x61, 0x7c, 0xdf, 0x37, 0xf4, 0x5a, 0xd3, 0x86, 0x7e, 0xa7, 0x05, 0xe5, 0x0d, 0x89, 0x58, 0x4b, + 0x20, 0x31, 0xd6, 0x26, 0xce, 0xf2, 0x6c, 0x1b, 0xf3, 0x96, 0x8a, 0x47, 0xdb, 0x7a, 0xd2, 0x6f, + 0x50, 0x87, 0x6c, 0xcf, 0x3b, 0x2e, 0x34, 0x0d, 0x2a, 0xe9, 0x4e, 0xf0, 0xbd, 0x47, 0xcc, 0x1a, + 0x13, 0x62, 0x4a, 0x2d, 0x88, 0xc1, 0xf3, 0x20, 0xf4, 0x38, 0x16, 0x6e, 0x16, 0xab, 0xf2, 0x7d, + 0x68, 0x91, 0x37, 0x6b, 0xfa, 0x92, 0x08, 0xf8, 0xe1, 0xdd, 0xd6, 0x3d, 0x6b, 0x11, 0x79, 0x11, + 0x5c, 0xfd, 0x0c, 0xcd, 0xe9, 0x07, 0xaa, 0x0c, 0x0d, 0x7c, 0x62, 0x53, 0xc5, 0xb2, 0xb8, 0x27, + 0x87, 0x8e, 0x40, 0x1c, 0x60, 0xd3, 0xce, 0x79, 0x22, 0x9f, 0x86, 0x63, 0xa8, 0xd9, 0x18, 0x89, + 0x46, 0x9a, 0x22, 0x8d, 0x3b, 0x99, 0x08, 0xbb, 0x21, 0x58, 0x6d, 0x1b, 0xa7, 0x04, 0x55, 0x6e, + 0x13, 0x78, 0xcd, 0x36, 0xce, 0x36, 0x93, 0x72, 0x70, 0xe0, 0x4a, 0xed, 0xef, 0xd2, 0x0e, 0x0e, + 0xd3, 0x3c, 0x9c, 0xe4, 0xd5, 0x21, 0x11, 0x9e, 0x3d, 0xda, 0x6b, 0x67, 0x53, 0xfb, 0x5f, 0x4f, + 0x75, 0x1d, 0xf9, 0xbc, 0x6d, 0x0f, 0xb8, 0x04, 0xa7, 0x8e, 0x9f, 0x49, 0x1d, 0xed, 0x64, 0xcd, + 0x53, 0xc7, 0xaf, 0x25, 0x47, 0x7a, 0x70, 0xeb, 0x43, 0xc7, 0xc0, 0x35, 0x8b, 0xe4, 0x4d, 0xb2, + 0xed, 0xe2, 0x8b, 0xea, 0x3b, 0x63, 0xb3, 0x67, 0x08, 0x25, 0x41, 0x69, 0xfa, 0xaf, 0x9e, 0x5f, + 0x5a, 0xf1, 0xa8, 0xbf, 0x62, 0x97, 0x5c, 0xf1, 0x5c, 0xc5, 0x0b, 0x0f, 0x2c, 0xe2, 0xad, 0x28, + 0x58, 0x14, 0x41, 0x2a, 0x27, 0xa0, 0x84, 0x57, 0x54, 0xf9, 0x65, 0x96, 0xca, 0x29, 0x12, 0x68, + 0x0e, 0x6e, 0x65, 0xe9, 0x9c, 0xca, 0x52, 0xa7, 0x0f, 0x27, 0x87, 0xde, 0x02, 0x87, 0xe5, 0xe4, + 0xe0, 0x7e, 0xc8, 0x42, 0xc1, 0x52, 0x08, 0x5d, 0x4b, 0x0e, 0x1f, 0x63, 0x90, 0xe9, 0x9e, 0x76, + 0x18, 0x81, 0x9e, 0xce, 0x92, 0x8a, 0xc7, 0x9e, 0xf6, 0xd4, 0x9b, 0x03, 0x74, 0xd2, 0x24, 0x70, + 0x15, 0xb4, 0xd0, 0x8e, 0xbc, 0x09, 0xf0, 0x2c, 0x0b, 0xd4, 0x76, 0x34, 0x65, 0x5b, 0xa8, 0x89, + 0xbc, 0x01, 0x4d, 0x28, 0xf0, 0x5c, 0xd1, 0x8e, 0x6c, 0xaa, 0x23, 0x91, 0x26, 0x20, 0x1b, 0xf2, + 0xb6, 0x9e, 0x6f, 0x23, 0x95, 0x80, 0xd7, 0xae, 0x76, 0xe5, 0x50, 0xe6, 0x8d, 0x1b, 0x64, 0x57, + 0xfe, 0x30, 0xd5, 0x3b, 0x94, 0xba, 0x72, 0xc6, 0xc7, 0x83, 0x55, 0x55, 0xab, 0xf2, 0x93, 0x68, + 0xa5, 0xd7, 0x7e, 0x6d, 0x75, 0x6f, 0x47, 0x32, 0xca, 0xe4, 0xe0, 0x30, 0xee, 0xe1, 0xe2, 0x59, + 0xed, 0xe4, 0x71, 0x18, 0x2e, 0xa5, 0x8d, 0xf7, 0x0a, 0xd0, 0xbc, 0x35, 0x4a, 0xa2, 0x7a, 0x47, + 0x43, 0x24, 0x1a, 0x67, 0xf1, 0xf8, 0x81, 0x36, 0xd9, 0x2e, 0x87, 0xb6, 0xb6, 0xc4, 0x43, 0x61, + 0x25, 0x1e, 0xd7, 0x49, 0x04, 0xd4, 0x0d, 0xa3, 0x58, 0x2a, 0x64, 0xd8, 0xf3, 0x71, 0xa5, 0xe2, + 0xaf, 0xb8, 0xfd, 0xdb, 0x65, 0x3c, 0xd9, 0x31, 0xf6, 0xef, 0xe5, 0x99, 0x81, 0xf3, 0xb0, 0xed, + 0x68, 0xbd, 0x17, 0xc1, 0xc9, 0x87, 0x0d, 0x77, 0x7f, 0xaa, 0xb7, 0x0b, 0xf6, 0x22, 0x8c, 0x78, + 0xa2, 0x5d, 0xb0, 0xeb, 0x01, 0xd6, 0x5c, 0xec, 0x15, 0xd0, 0x34, 0xa6, 0x6b, 0x34, 0x10, 0xb5, + 0x8c, 0xaa, 0x36, 0x09, 0x55, 0xfe, 0xb9, 0x37, 0xab, 0x4a, 0x5a, 0x0d, 0xbd, 0xa4, 0x4e, 0x9e, + 0x4f, 0x0d, 0x1d, 0x2e, 0x77, 0xb3, 0x71, 0xa6, 0x3a, 0x8f, 0x65, 0xda, 0x3a, 0x02, 0x84, 0x27, + 0x21, 0xbd, 0x06, 0x28, 0x5d, 0xa9, 0x8f, 0x77, 0xa7, 0x2f, 0xee, 0x4f, 0x75, 0x1e, 0xc3, 0x6b, + 0x41, 0xe2, 0xaa, 0x41, 0x09, 0xdc, 0xa2, 0x16, 0xb2, 0xe6, 0xbe, 0x49, 0xd0, 0xd4, 0xf7, 0x13, + 0x5f, 0xd6, 0x07, 0xc5, 0x7f, 0x14, 0x50, 0x41, 0x3c, 0x10, 0xd1, 0xe3, 0xdd, 0xfd, 0x67, 0x41, + 0x95, 0x47, 0x04, 0x2f, 0x94, 0x49, 0x1f, 0x0a, 0x5b, 0x77, 0x6c, 0xd9, 0x1a, 0xda, 0xb5, 0x25, + 0x14, 0x74, 0xa7, 0xde, 0x69, 0x4b, 0x7f, 0x84, 0x29, 0x2c, 0x79, 0xa3, 0x17, 0x8b, 0x82, 0xd3, + 0xa7, 0x97, 0x18, 0x9e, 0xdf, 0x98, 0x8c, 0x31, 0x60, 0x79, 0xaa, 0xef, 0x5c, 0xea, 0xf8, 0x35, + 0x1d, 0x36, 0xf5, 0xe6, 0x40, 0x7a, 0xf8, 0x08, 0x84, 0x84, 0x75, 0xd7, 0xac, 0xab, 0xad, 0x76, + 0x03, 0xee, 0xdc, 0x75, 0xb5, 0xee, 0xe4, 0xe0, 0x90, 0xdb, 0xe8, 0x5e, 0x4f, 0xfa, 0x58, 0x8e, + 0x71, 0xdc, 0x36, 0x82, 0x6b, 0xa9, 0x3e, 0xe9, 0x4e, 0x1d, 0xbf, 0xa6, 0x75, 0x9e, 0x80, 0x4e, + 0x01, 0x28, 0x47, 0x7b, 0xc2, 0x94, 0xbe, 0x42, 0x36, 0x22, 0xdf, 0x64, 0xda, 0x8b, 0xef, 0x27, + 0x3e, 0x98, 0x55, 0xd5, 0xf3, 0xaa, 0xfc, 0x73, 0xb4, 0xd9, 0x9b, 0x93, 0xa4, 0x74, 0x27, 0x67, + 0x6e, 0x55, 0x81, 0x1a, 0x41, 0x5a, 0x7f, 0x26, 0x70, 0x44, 0xf4, 0x99, 0xa0, 0xaf, 0xb7, 0xe7, + 0xba, 0x0b, 0xcd, 0x77, 0xe8, 0xf8, 0x3b, 0x38, 0xa9, 0xb1, 0xe0, 0x05, 0x79, 0xf6, 0x11, 0x99, + 0xd8, 0xf8, 0xc8, 0xfb, 0x56, 0x3e, 0x3e, 0xb3, 0x69, 0xda, 0x16, 0xad, 0xa1, 0x6a, 0x93, 0x2a, + 0xfb, 0x50, 0xbd, 0x37, 0xf7, 0x44, 0x6d, 0x51, 0x48, 0xfa, 0x62, 0x28, 0xb4, 0xb1, 0x5e, 0x16, + 0xf3, 0x43, 0x12, 0x3d, 0xa8, 0x98, 0xd1, 0x2b, 0x77, 0x4f, 0x68, 0x2a, 0x13, 0x17, 0x20, 0x43, + 0x97, 0xd7, 0xf3, 0x6d, 0x1a, 0x25, 0xb8, 0x9e, 0x93, 0x0d, 0xc4, 0xb7, 0xdb, 0x24, 0x00, 0x3c, + 0xa8, 0x98, 0xfd, 0x32, 0x5e, 0xd3, 0xf9, 0x4c, 0x65, 0x62, 0x09, 0x9a, 0x4c, 0x9c, 0x24, 0x22, + 0x2c, 0x05, 0x27, 0xfb, 0x29, 0xce, 0x41, 0x93, 0x94, 0x60, 0x48, 0x57, 0xfe, 0x7d, 0xf4, 0x97, + 0x39, 0xb2, 0xd4, 0xe4, 0xac, 0xec, 0x9a, 0x9e, 0xa4, 0x9d, 0x40, 0xe3, 0x43, 0xf8, 0x7d, 0x05, + 0x81, 0xf6, 0xa8, 0x15, 0x1f, 0xb4, 0xa9, 0x51, 0x2c, 0x15, 0xc2, 0xa2, 0x98, 0x0e, 0x42, 0x66, + 0x59, 0x98, 0xf7, 0xed, 0xc8, 0xc2, 0xfc, 0xef, 0xa5, 0x2c, 0x2c, 0xf8, 0x51, 0x16, 0xf2, 0xa1, + 0x1b, 0xcd, 0x8c, 0x4c, 0x94, 0xa2, 0x71, 0xc9, 0xc2, 0xff, 0x60, 0x27, 0x0b, 0xbf, 0xb3, 0xb0, + 0x8e, 0xbf, 0xd6, 0x65, 0xa1, 0x60, 0xeb, 0x2c, 0x4c, 0xc7, 0x07, 0x9e, 0x62, 0x44, 0x22, 0x92, + 0x77, 0x7b, 0x20, 0x11, 0xef, 0x87, 0xc9, 0x43, 0x9f, 0xe9, 0x9e, 0x76, 0xad, 0xe3, 0xa2, 0x76, + 0xa5, 0x8d, 0xe2, 0xc2, 0x2a, 0x20, 0x29, 0x5a, 0x73, 0xcf, 0x9e, 0x69, 0x3f, 0x14, 0xaf, 0x96, + 0x1e, 0x9d, 0xc4, 0x64, 0x33, 0x12, 0xad, 0x83, 0x15, 0xdd, 0x86, 0x15, 0x64, 0x53, 0xac, 0x89, + 0x45, 0x15, 0xe5, 0x8a, 0xc4, 0x07, 0xd1, 0x24, 0x72, 0x18, 0x65, 0x66, 0xed, 0xf9, 0x36, 0xe1, + 0x0e, 0x48, 0xb0, 0x2b, 0x38, 0xb9, 0x52, 0x60, 0xcf, 0x16, 0x34, 0xd5, 0x54, 0x61, 0x73, 0x16, + 0xb6, 0x8b, 0xf0, 0x3d, 0x0b, 0x15, 0x84, 0xc2, 0x41, 0xe5, 0x65, 0x2a, 0x72, 0xe1, 0x07, 0x86, + 0x0c, 0x2a, 0xf1, 0x00, 0x95, 0xb2, 0xe4, 0x6f, 0x4f, 0x46, 0x20, 0x64, 0x52, 0x17, 0x0e, 0x2b, + 0x31, 0x36, 0x31, 0xf2, 0xa5, 0xf8, 0x57, 0x8d, 0x68, 0xfa, 0xb0, 0x45, 0xb9, 0x03, 0xff, 0x3d, + 0x5d, 0xa0, 0x15, 0xd3, 0x68, 0xad, 0x44, 0xa6, 0x71, 0x86, 0x19, 0x1a, 0x06, 0x39, 0xf7, 0xb0, + 0xa4, 0xa5, 0x74, 0xfd, 0x48, 0xcc, 0xff, 0xcc, 0xcd, 0xc3, 0xe9, 0xe1, 0x8f, 0x88, 0xef, 0x45, + 0x7f, 0x6a, 0xf0, 0xc3, 0xd4, 0xe9, 0xd7, 0x19, 0xbf, 0xbc, 0x39, 0xba, 0xef, 0x10, 0xd5, 0x64, + 0xff, 0xb5, 0x0b, 0x2d, 0x70, 0xea, 0xf3, 0x3b, 0x60, 0x89, 0xcd, 0x26, 0xf5, 0x60, 0xbe, 0x13, + 0x4b, 0xc0, 0x11, 0xc0, 0x46, 0x3f, 0x80, 0xa9, 0x59, 0xc9, 0x5f, 0x51, 0xe5, 0xad, 0xe8, 0x45, + 0xef, 0x18, 0x53, 0x95, 0x2a, 0xc6, 0x8f, 0x3f, 0xad, 0x6d, 0xc4, 0xca, 0x08, 0x3b, 0xd1, 0x54, + 0x53, 0xcf, 0xb6, 0xe1, 0xe6, 0x18, 0xc5, 0xb9, 0x0c, 0x8a, 0xc3, 0xb4, 0x19, 0x53, 0xb6, 0x29, + 0x2c, 0xd2, 0x1c, 0xfc, 0xc0, 0xa5, 0x89, 0x98, 0x3f, 0xcc, 0x02, 0xce, 0xc3, 0x0f, 0xe3, 0x0e, + 0xb2, 0x80, 0xbb, 0x83, 0xf4, 0xfc, 0x65, 0x01, 0x9a, 0x53, 0xab, 0x6c, 0x6d, 0x69, 0xa4, 0xec, + 0x4d, 0xde, 0x09, 0x00, 0xb1, 0x3e, 0x65, 0xb3, 0x77, 0xbb, 0x1d, 0xf7, 0x6e, 0x66, 0x14, 0xe4, + 0xb7, 0xf0, 0xa7, 0x6c, 0xb6, 0x70, 0xb7, 0xe3, 0x16, 0xae, 0xf7, 0xc0, 0xed, 0xe4, 0x9b, 0x2d, + 0x3b, 0x79, 0x95, 0x2a, 0x2f, 0xe5, 0x08, 0x7f, 0x91, 0xbe, 0x5d, 0xa7, 0xba, 0x2e, 0x64, 0xce, + 0x76, 0x67, 0x06, 0xce, 0x43, 0x7f, 0xe9, 0x9e, 0xf6, 0x58, 0xe2, 0x65, 0x60, 0x08, 0x8b, 0xc1, + 0xf2, 0xfb, 0xbe, 0x83, 0x77, 0x0a, 0xa8, 0x30, 0x40, 0x65, 0x15, 0x0d, 0x08, 0xb8, 0xc2, 0x92, + 0x3d, 0xd2, 0x76, 0xd5, 0x74, 0xd9, 0x07, 0x57, 0xd8, 0xf0, 0x98, 0x90, 0x75, 0x25, 0xdd, 0xcf, + 0x93, 0x28, 0x75, 0x3d, 0x37, 0xf6, 0x00, 0x42, 0x9f, 0x44, 0x6e, 0xfb, 0xf4, 0x26, 0xa5, 0x8f, + 0x19, 0x52, 0x73, 0xc2, 0xb7, 0xdb, 0x55, 0x71, 0x55, 0x8e, 0xa2, 0xb0, 0xd7, 0x81, 0xc2, 0xa4, + 0x45, 0x99, 0xcb, 0xaf, 0x66, 0x06, 0x8e, 0x5a, 0x07, 0x65, 0x7e, 0x23, 0x68, 0xda, 0x95, 0x39, + 0xea, 0xe0, 0xb6, 0xe8, 0xcf, 0x04, 0x7d, 0xc4, 0x9e, 0x7f, 0xeb, 0x42, 0x77, 0x5a, 0x3e, 0xf8, + 0x1d, 0x08, 0xa5, 0xed, 0xa6, 0x7d, 0xfa, 0x9e, 0x31, 0xd6, 0x8f, 0x6c, 0xd4, 0xe4, 0x45, 0x32, + 0x88, 0x26, 0x67, 0xdc, 0x70, 0x7b, 0x2a, 0x15, 0x53, 0xbf, 0x52, 0xe5, 0xe7, 0xd1, 0x2f, 0xbc, + 0x4e, 0xb3, 0xfe, 0xca, 0xf2, 0xe9, 0x49, 0x74, 0x87, 0xcd, 0x68, 0xc5, 0x32, 0xfa, 0xd4, 0x42, + 0x70, 0x7e, 0x6a, 0x01, 0x1e, 0xd0, 0x9e, 0x5b, 0x53, 0xd0, 0x74, 0x62, 0x42, 0x5b, 0x17, 0x09, + 0xb6, 0x34, 0x29, 0xab, 0x9b, 0xfc, 0x8d, 0xe2, 0xa6, 0xec, 0x5b, 0xa4, 0xc7, 0x54, 0xf9, 0x11, + 0xe3, 0x16, 0xa9, 0xa2, 0xba, 0xa6, 0x01, 0x32, 0x29, 0xe8, 0x39, 0x6e, 0x93, 0x43, 0x47, 0xf4, + 0x54, 0x35, 0x99, 0xfd, 0x57, 0x52, 0xc7, 0xf6, 0xe9, 0x29, 0xca, 0x8c, 0xcb, 0x26, 0xbf, 0x11, + 0x92, 0x19, 0x56, 0x6c, 0x8d, 0x2a, 0xd7, 0x7a, 0x59, 0x99, 0xf4, 0xa8, 0xde, 0x09, 0xbc, 0xca, + 0x2e, 0xd3, 0xde, 0xdd, 0xb3, 0xf1, 0x99, 0x55, 0x55, 0xee, 0x65, 0x4b, 0xa4, 0xa5, 0x4b, 0x1e, + 0x2a, 0x5f, 0xb6, 0x64, 0xd9, 0x23, 0x4b, 0x56, 0xe0, 0x7f, 0x56, 0x2c, 0x59, 0x5e, 0x91, 0xd8, + 0xf1, 0x48, 0x1c, 0xff, 0xfd, 0xd0, 0x92, 0xe5, 0x8b, 0xf5, 0xd8, 0xce, 0x62, 0x87, 0x80, 0x0a, + 0x9b, 0xc9, 0x44, 0xf4, 0x97, 0x34, 0x24, 0xe7, 0x8e, 0x5e, 0x28, 0x3d, 0x97, 0x1e, 0x6e, 0x4f, + 0x0e, 0x5f, 0x83, 0xdb, 0x9d, 0xb2, 0x67, 0x5a, 0xb6, 0x2a, 0x72, 0x7d, 0x5d, 0x83, 0x12, 0x6b, + 0x55, 0x62, 0xb7, 0x46, 0xba, 0xf1, 0xef, 0x9a, 0x48, 0x38, 0x11, 0x8b, 0x34, 0x35, 0x91, 0x82, + 0x55, 0x89, 0x40, 0x90, 0x96, 0x37, 0x04, 0xb6, 0x2b, 0xb8, 0x13, 0x5c, 0xbc, 0xa3, 0x65, 0xab, + 0xd2, 0xa4, 0x24, 0x3e, 0x6f, 0xdb, 0x1d, 0x83, 0x08, 0xd6, 0xe9, 0xbe, 0xae, 0xc5, 0x3e, 0xfd, + 0x2b, 0xe2, 0x0a, 0x54, 0xb8, 0xad, 0xc9, 0xdf, 0xc8, 0xc5, 0x4e, 0x21, 0xca, 0x84, 0x5e, 0x28, + 0x15, 0x01, 0x07, 0x69, 0x87, 0x0f, 0xf8, 0xf4, 0x42, 0xac, 0x4b, 0xe0, 0xbf, 0x6b, 0xf1, 0x5e, + 0xc2, 0x05, 0xda, 0xd2, 0x0b, 0xa5, 0x62, 0x68, 0x45, 0xbd, 0x78, 0xf5, 0x72, 0x71, 0x35, 0x2a, + 0x0e, 0x2a, 0xdb, 0xfc, 0x2d, 0x4d, 0xa0, 0x3e, 0xd1, 0x5b, 0x22, 0x8f, 0x2a, 0x2f, 0xf4, 0x9a, + 0x2a, 0xa4, 0xe9, 0xd0, 0x01, 0x1c, 0x24, 0xb4, 0xb6, 0x11, 0x9f, 0xa9, 0x5a, 0xac, 0x42, 0x93, + 0x94, 0x30, 0xb9, 0x72, 0x85, 0xa8, 0x0a, 0xa4, 0x07, 0x5a, 0x24, 0xcd, 0xa6, 0xd6, 0xb8, 0xc3, + 0x24, 0xc3, 0xf0, 0xc0, 0x79, 0x2a, 0x8f, 0x68, 0xb5, 0xf8, 0xb0, 0x71, 0x80, 0x2d, 0x34, 0x6e, + 0x81, 0x58, 0x99, 0x34, 0x9d, 0x85, 0xf1, 0x7e, 0x4b, 0x1b, 0x1e, 0xca, 0xb4, 0x75, 0x18, 0xe7, + 0xdb, 0x87, 0xd1, 0xe4, 0x16, 0x72, 0xd7, 0xcd, 0xb2, 0xc5, 0x43, 0x43, 0x5a, 0xc6, 0x1a, 0xd2, + 0x4b, 0x6f, 0xdc, 0x90, 0xd6, 0x88, 0x55, 0xa8, 0x88, 0xf4, 0x41, 0xfc, 0xec, 0x91, 0x71, 0xa7, + 0x66, 0x94, 0x4a, 0xc5, 0xf0, 0x3d, 0xfa, 0x0c, 0xc1, 0xa8, 0x10, 0x57, 0x22, 0x04, 0xdd, 0x90, + 0xc6, 0x53, 0xb8, 0x47, 0x0c, 0x46, 0xb1, 0x54, 0x0c, 0x1f, 0x65, 0x8f, 0x18, 0x8c, 0x1a, 0x31, + 0x01, 0x2b, 0xc5, 0x45, 0x2c, 0x20, 0x8f, 0x31, 0xf5, 0x42, 0xa9, 0x2e, 0x75, 0x66, 0x5f, 0x66, + 0x60, 0x2f, 0xe0, 0x88, 0x66, 0x78, 0x0a, 0x85, 0x13, 0xcb, 0xa5, 0xca, 0xad, 0x91, 0x48, 0x53, + 0x65, 0x3c, 0x11, 0x0b, 0x85, 0x1b, 0x2b, 0x83, 0x2d, 0xe0, 0x19, 0x50, 0xd9, 0xec, 0x8f, 0xd2, + 0xb2, 0x78, 0xba, 0xaf, 0x4b, 0x3b, 0x3d, 0x94, 0x3e, 0xdb, 0x06, 0xad, 0x16, 0xfb, 0xf4, 0x4e, + 0x45, 0x1f, 0x9a, 0x8a, 0xff, 0x26, 0x6b, 0x45, 0x22, 0x15, 0x4c, 0x25, 0x7e, 0xbb, 0xe4, 0xcd, + 0x94, 0xb9, 0x46, 0x2a, 0xa1, 0xf4, 0x45, 0x42, 0x97, 0xe0, 0x8d, 0xa4, 0x6d, 0x84, 0x9e, 0x95, + 0xcd, 0x80, 0xe2, 0x2f, 0xb0, 0x9e, 0xd2, 0xa8, 0xbc, 0x4c, 0xa2, 0x1e, 0x4c, 0x91, 0x4a, 0xb3, + 0x45, 0x05, 0xd9, 0x31, 0x7c, 0x18, 0x02, 0x3c, 0xd5, 0x01, 0x5a, 0x9a, 0x4b, 0x29, 0xb1, 0xb7, + 0x2b, 0x75, 0xb4, 0x33, 0xd5, 0x76, 0x21, 0x75, 0xe6, 0xec, 0xe8, 0xfb, 0xdd, 0x99, 0x0b, 0xed, + 0x5a, 0xe7, 0x09, 0x1f, 0xc0, 0x88, 0x11, 0x54, 0x10, 0x23, 0x81, 0x14, 0xa7, 0xdb, 0xc7, 0x08, + 0x5c, 0xdf, 0xd2, 0xbc, 0x55, 0x81, 0x80, 0x89, 0xf0, 0x40, 0x1a, 0xc0, 0xa5, 0xa5, 0x99, 0xfd, + 0x94, 0xb8, 0x92, 0x83, 0x43, 0x78, 0x12, 0x6d, 0x23, 0x86, 0x70, 0x81, 0xd4, 0xde, 0x70, 0x84, + 0x21, 0xcf, 0x16, 0x30, 0x15, 0x43, 0x43, 0xf1, 0x73, 0xc1, 0x9c, 0xf2, 0x07, 0x42, 0x25, 0xfc, + 0x11, 0x9c, 0xb1, 0xf9, 0x1a, 0xe9, 0x92, 0xa0, 0xdd, 0x78, 0x9d, 0x71, 0xeb, 0x4a, 0xca, 0xc3, + 0x24, 0x2f, 0x33, 0x26, 0x6c, 0x92, 0x8d, 0x3f, 0xfd, 0xc6, 0xe9, 0xd4, 0xd1, 0xce, 0xcf, 0xdb, + 0xf6, 0x50, 0xad, 0xbf, 0x5e, 0x1f, 0x03, 0xd7, 0x51, 0x95, 0x3b, 0x14, 0x6d, 0x5d, 0x51, 0x19, + 0x8a, 0xb6, 0x3e, 0x54, 0x19, 0x6c, 0xf1, 0x37, 0xb9, 0x61, 0x7c, 0x20, 0xc0, 0x74, 0xe9, 0xc8, + 0xe7, 0xf2, 0xc2, 0x1d, 0x92, 0x58, 0x12, 0x20, 0x20, 0x9f, 0x2f, 0x7f, 0x01, 0x62, 0x4a, 0xe8, + 0x19, 0x77, 0xa1, 0x07, 0xfd, 0x41, 0x0b, 0xee, 0xdf, 0x94, 0xb5, 0x88, 0x05, 0xd5, 0xcb, 0x96, + 0xda, 0xd2, 0x7d, 0x90, 0x2f, 0x2f, 0xdd, 0x7f, 0x36, 0x7d, 0x78, 0x2f, 0x04, 0x46, 0x25, 0x92, + 0x17, 0x0f, 0x00, 0x64, 0x1e, 0x3c, 0x03, 0xff, 0xdc, 0x05, 0xc4, 0xcb, 0x5c, 0xe4, 0x75, 0x41, + 0x45, 0x5d, 0xe4, 0x75, 0x71, 0x54, 0xca, 0x89, 0x23, 0x97, 0x51, 0x47, 0x24, 0x8e, 0x27, 0x4b, + 0xe2, 0x80, 0x96, 0x6b, 0x96, 0x26, 0x92, 0x2e, 0x4d, 0xf2, 0xc7, 0x32, 0xfe, 0xeb, 0x52, 0xa4, + 0x94, 0x63, 0xac, 0x02, 0xe3, 0x9b, 0x84, 0xfc, 0x17, 0x65, 0x93, 0xff, 0x24, 0x12, 0x9c, 0x2e, + 0x8b, 0xa0, 0x97, 0x32, 0x82, 0x9e, 0x3c, 0x16, 0x41, 0x33, 0x3a, 0x5d, 0xc6, 0xe8, 0xb4, 0x70, + 0x4c, 0x3a, 0x65, 0x94, 0x96, 0x95, 0x5b, 0xaa, 0xc8, 0x92, 0x5b, 0xca, 0x53, 0x8b, 0x90, 0xf1, + 0x25, 0x71, 0x1e, 0x2a, 0x6a, 0xf5, 0x37, 0x85, 0x82, 0x44, 0x3c, 0x02, 0x9e, 0x8d, 0x82, 0x1c, + 0x6f, 0x11, 0x96, 0xa1, 0x29, 0xdc, 0xd7, 0xb1, 0x82, 0xd7, 0x1c, 0x0a, 0x93, 0x0e, 0x0a, 0x7c, + 0xf8, 0x4f, 0x52, 0xe2, 0x7f, 0x99, 0x86, 0x85, 0xc6, 0x7f, 0x7a, 0x52, 0xf9, 0x68, 0x5e, 0x0d, + 0x79, 0x6e, 0x95, 0x45, 0x20, 0xec, 0xf0, 0x70, 0xfb, 0xee, 0xee, 0x7b, 0xac, 0xbb, 0xfb, 0x36, + 0xf2, 0x0a, 0x43, 0xdf, 0xdd, 0xeb, 0xbf, 0xce, 0xdd, 0x1d, 0x12, 0x8a, 0xd3, 0xf3, 0x89, 0xbe, + 0xb5, 0x6f, 0x01, 0x0a, 0xa5, 0x59, 0x83, 0x6d, 0xe3, 0xa3, 0x33, 0xee, 0xaa, 0x5e, 0x4c, 0x3c, + 0x14, 0x18, 0xb8, 0x24, 0xf2, 0x7c, 0x08, 0xe2, 0xf8, 0x8b, 0xea, 0x02, 0x55, 0x70, 0x15, 0x0a, + 0x3e, 0x1d, 0x4a, 0x7c, 0x8a, 0x3b, 0x58, 0x71, 0x21, 0x68, 0x8d, 0x83, 0xd5, 0x6c, 0x73, 0x37, + 0x6c, 0x43, 0x35, 0x4c, 0x0b, 0x41, 0x55, 0xf6, 0xa3, 0x2d, 0xde, 0x9c, 0x64, 0x20, 0xcd, 0x86, + 0x96, 0x78, 0x59, 0xb8, 0xee, 0x3e, 0x13, 0xd8, 0x82, 0x7e, 0x26, 0x30, 0xbc, 0x7f, 0x26, 0xe8, + 0xb3, 0xe7, 0x4d, 0x6f, 0x9a, 0x80, 0xe6, 0x3b, 0x7c, 0xe1, 0xdb, 0x57, 0xe9, 0x59, 0x6c, 0xcc, + 0xdc, 0x23, 0x92, 0xee, 0xb6, 0x9d, 0x74, 0xee, 0xd8, 0x98, 0x7f, 0x97, 0xcf, 0x1c, 0xe3, 0x7f, + 0x70, 0x0c, 0xf5, 0x8a, 0x85, 0x9f, 0xb6, 0x7c, 0xc3, 0xfc, 0xf4, 0xfd, 0x65, 0x24, 0x43, 0xc1, + 0xb4, 0x32, 0x52, 0xae, 0xe5, 0x97, 0x66, 0x43, 0xcb, 0x2f, 0xcf, 0x48, 0xbf, 0x13, 0xd8, 0x9b, + 0x85, 0xef, 0x03, 0x23, 0xf9, 0x54, 0x79, 0x03, 0x5a, 0xe7, 0xcd, 0x3d, 0x22, 0x69, 0xae, 0xed, + 0xa4, 0x9d, 0x7c, 0x28, 0xff, 0x4d, 0x3e, 0x9a, 0x07, 0xef, 0x93, 0x7e, 0x64, 0xa1, 0xaf, 0x93, + 0x85, 0x36, 0xa0, 0x62, 0xa6, 0xad, 0xe9, 0x6c, 0x44, 0x9f, 0x82, 0x9b, 0x2a, 0xa4, 0x12, 0x13, + 0xc3, 0xf0, 0xcf, 0xf2, 0x4c, 0x70, 0x13, 0xde, 0x7b, 0xce, 0x8c, 0x9e, 0x38, 0x67, 0xcf, 0x32, + 0xb9, 0x96, 0x1b, 0xef, 0x3d, 0xb8, 0xe5, 0x57, 0x63, 0x19, 0x87, 0x2f, 0x7c, 0x87, 0x2c, 0x93, + 0x73, 0x44, 0xd2, 0x5c, 0xdb, 0x49, 0x3b, 0xb1, 0xcc, 0x9f, 0xe5, 0x73, 0xe9, 0xff, 0x7f, 0x64, + 0x98, 0x1f, 0x2e, 0xc3, 0x6c, 0x55, 0xe5, 0x2d, 0xe8, 0x05, 0x6f, 0x8e, 0xc5, 0x96, 0x66, 0xeb, + 0x5e, 0x6d, 0x5f, 0x92, 0x5d, 0x06, 0x5c, 0x5c, 0x3a, 0xbf, 0xef, 0x96, 0x59, 0x44, 0x9f, 0xe9, + 0x42, 0x68, 0xa1, 0x6d, 0x6e, 0x21, 0x63, 0x88, 0xe6, 0xa8, 0xb8, 0x9c, 0x33, 0xa1, 0x6d, 0x32, + 0xef, 0x1c, 0x73, 0xe4, 0x5c, 0x03, 0xc7, 0xc3, 0x7e, 0xbf, 0x73, 0x11, 0xf7, 0x89, 0x55, 0x2f, + 0x27, 0x94, 0x58, 0xd8, 0xdf, 0xb4, 0x3e, 0x12, 0x54, 0x1a, 0xc8, 0x8b, 0x79, 0xc6, 0x80, 0x2f, + 0xa0, 0x29, 0xe1, 0x48, 0x50, 0x31, 0x87, 0x06, 0xf8, 0x4a, 0x4c, 0xc8, 0xf7, 0x27, 0xae, 0xb0, + 0x5c, 0x2b, 0x96, 0xd8, 0xfa, 0x7c, 0x27, 0x87, 0x86, 0xb8, 0xbb, 0x93, 0xe7, 0x50, 0x61, 0x28, + 0x0c, 0x23, 0xa6, 0x8e, 0x9d, 0x4f, 0xa8, 0xf2, 0x63, 0x5e, 0xbd, 0x50, 0xaa, 0xa4, 0x81, 0x85, + 0xc9, 0xf3, 0xed, 0x54, 0xe7, 0x31, 0xed, 0xdc, 0xb1, 0xf4, 0x8d, 0x23, 0x99, 0xf6, 0x9e, 0x54, + 0xef, 0x25, 0xe6, 0xe7, 0xc7, 0x97, 0xf9, 0xf4, 0xa6, 0x2c, 0x51, 0x5a, 0x4e, 0xac, 0x30, 0x24, + 0xa7, 0x2f, 0x5d, 0x4a, 0x0e, 0x76, 0xa5, 0x8e, 0x5d, 0x87, 0x5e, 0x18, 0xbd, 0xf2, 0x33, 0xf4, + 0xfc, 0x45, 0x1e, 0xb9, 0x92, 0xb5, 0xeb, 0xeb, 0xf6, 0x78, 0xfa, 0xb3, 0x82, 0x73, 0x88, 0x65, + 0x39, 0x3e, 0x08, 0x9d, 0xce, 0xde, 0xea, 0x8f, 0x2b, 0x0f, 0xad, 0x48, 0x8f, 0x1c, 0x4b, 0x9f, + 0xc1, 0x8b, 0x4e, 0x51, 0x49, 0x2a, 0xf1, 0x19, 0x76, 0xfa, 0x4b, 0xca, 0xd6, 0x2d, 0xfc, 0x23, + 0xe1, 0x02, 0xfb, 0xf4, 0xf6, 0x3f, 0x53, 0xb6, 0x72, 0x2f, 0x35, 0x37, 0x4b, 0x10, 0x7f, 0x3b, + 0xbb, 0xb5, 0x74, 0x37, 0xf5, 0x58, 0x37, 0x67, 0x21, 0x03, 0xab, 0x15, 0xdc, 0xbf, 0xf9, 0xa6, + 0xbd, 0x64, 0xea, 0x4a, 0xdf, 0xb0, 0x72, 0xe2, 0xdf, 0x61, 0x31, 0x9d, 0x38, 0xa6, 0x43, 0x40, + 0x45, 0xeb, 0xfc, 0x51, 0xf0, 0x8f, 0x16, 0x57, 0xea, 0x8e, 0x00, 0x82, 0xfd, 0xbb, 0x4e, 0x1d, + 0x14, 0x9c, 0xd8, 0xa9, 0x63, 0x3c, 0x6d, 0x54, 0xfa, 0x28, 0x9a, 0xc2, 0x15, 0x4f, 0xe8, 0xd9, + 0xe6, 0x9f, 0xe5, 0x81, 0xe3, 0x93, 0x3f, 0x11, 0xd8, 0x0e, 0xd9, 0x72, 0x1b, 0x94, 0x44, 0x22, + 0x14, 0xd6, 0xb7, 0x4e, 0x3f, 0x2a, 0x22, 0x8e, 0x29, 0x5c, 0x88, 0x99, 0x1a, 0x55, 0x7e, 0xca, + 0x6b, 0x94, 0x4a, 0xcb, 0xe1, 0x09, 0x0b, 0x18, 0x18, 0xa9, 0xf5, 0x76, 0x6b, 0x68, 0x57, 0xe5, + 0xd6, 0xd0, 0xae, 0x2d, 0x71, 0x25, 0xb1, 0xd8, 0x12, 0x76, 0x66, 0x6b, 0x68, 0x97, 0xcf, 0x68, + 0x2f, 0xbe, 0x88, 0x26, 0x93, 0x1f, 0x7a, 0x3e, 0x0f, 0x92, 0x86, 0x89, 0x95, 0x49, 0x8f, 0xf0, + 0xdd, 0xd7, 0xd5, 0x96, 0xb1, 0x8b, 0xda, 0x4a, 0xf8, 0x83, 0x3c, 0x1f, 0xb1, 0xff, 0x06, 0xeb, + 0x42, 0x7c, 0x5b, 0x40, 0x08, 0x24, 0x3d, 0xd9, 0xc7, 0x20, 0x80, 0xc3, 0x6e, 0x41, 0x95, 0xff, + 0xd0, 0xcb, 0x95, 0x4b, 0x51, 0xe3, 0x6f, 0x58, 0xcc, 0xd1, 0x8e, 0x03, 0xe9, 0x1b, 0xfd, 0x98, + 0x4a, 0x88, 0x0b, 0x95, 0x76, 0xf2, 0xb8, 0x1e, 0xdc, 0x21, 0x39, 0x78, 0x20, 0x39, 0x72, 0x06, + 0xcc, 0x8f, 0xf4, 0x56, 0x8a, 0xe4, 0xdb, 0x06, 0xb0, 0xb2, 0xac, 0xd1, 0xb8, 0x43, 0xd1, 0x2d, + 0x2c, 0xf8, 0xc1, 0x96, 0xed, 0x91, 0x78, 0x62, 0x4b, 0x53, 0x28, 0x9e, 0x58, 0xec, 0xe3, 0xbe, + 0xce, 0x1e, 0x3b, 0xe5, 0x5c, 0x0e, 0x16, 0x87, 0x5f, 0x1f, 0x18, 0xc4, 0xb6, 0xa3, 0xce, 0x0c, + 0x23, 0xd4, 0xbd, 0xc7, 0xa6, 0xf5, 0x97, 0x14, 0x12, 0x2b, 0xf8, 0x88, 0x23, 0x98, 0xd3, 0x21, + 0xe6, 0x11, 0x2d, 0x93, 0x8a, 0x69, 0xfe, 0xad, 0xce, 0xc3, 0xda, 0x6b, 0xa7, 0xf5, 0x20, 0x23, + 0xe2, 0xc3, 0xa8, 0x50, 0x89, 0xc5, 0x22, 0xb1, 0x75, 0xf1, 0x46, 0x3e, 0xb3, 0x99, 0x5e, 0x28, + 0x15, 0x9b, 0xc4, 0x8a, 0x5e, 0x2e, 0x3e, 0x84, 0x8a, 0x62, 0x30, 0xd1, 0xba, 0x20, 0x7f, 0x13, + 0x64, 0x94, 0x4a, 0x85, 0x30, 0xd7, 0xba, 0x5a, 0x9f, 0x51, 0xa8, 0x3f, 0x43, 0x28, 0x98, 0xe8, + 0x33, 0x04, 0xd3, 0xd3, 0x8b, 0x1a, 0x54, 0xd4, 0x40, 0x08, 0x26, 0xbc, 0x2d, 0x22, 0xce, 0xb3, + 0xd0, 0x3d, 0x4f, 0xb2, 0x25, 0x59, 0x24, 0xab, 0x93, 0x9a, 0xe7, 0xdd, 0x7c, 0x74, 0x17, 0x5e, + 0x83, 0xd0, 0x2e, 0xe6, 0x5a, 0xfd, 0xd3, 0x88, 0xe1, 0x17, 0xfd, 0x83, 0xe0, 0xa6, 0x10, 0x2a, + 0xf4, 0x37, 0x35, 0x11, 0x54, 0x51, 0xf9, 0x4f, 0x12, 0xc8, 0xeb, 0x85, 0xd2, 0x13, 0x34, 0x5d, + 0x11, 0xc7, 0x16, 0xa6, 0x49, 0x31, 0x67, 0x79, 0x82, 0xfd, 0xf6, 0x5b, 0x23, 0xdd, 0xba, 0xab, + 0x1e, 0x79, 0x92, 0xe8, 0xd3, 0x7b, 0x12, 0x8f, 0x09, 0x14, 0x61, 0x9c, 0xdd, 0xc3, 0xf2, 0x22, + 0x57, 0x5f, 0xb4, 0xea, 0x17, 0x54, 0xf9, 0x39, 0xaf, 0xd1, 0x40, 0x5a, 0x97, 0x79, 0x77, 0x37, + 0x1d, 0x05, 0xf7, 0x41, 0xbc, 0xc9, 0x70, 0xc3, 0x49, 0x1d, 0xbd, 0x9c, 0x1e, 0x6e, 0x2f, 0xb3, + 0xce, 0xd8, 0x08, 0x2f, 0x0b, 0xae, 0xfd, 0x3e, 0xa3, 0xe7, 0xaf, 0x87, 0x59, 0x4b, 0xed, 0x08, + 0xe5, 0x87, 0xcd, 0xa9, 0x6b, 0x4c, 0x9c, 0x3a, 0xb1, 0x77, 0x31, 0x26, 0x66, 0x5d, 0x8d, 0x0a, + 0xf1, 0x26, 0xcc, 0x22, 0xcd, 0x44, 0xb6, 0xc2, 0x43, 0x47, 0x76, 0x2d, 0xc3, 0x7e, 0x8b, 0x0b, + 0x10, 0x0a, 0x11, 0x7f, 0x8a, 0x00, 0xe3, 0x88, 0x7c, 0x1f, 0x57, 0xe2, 0xf9, 0x4f, 0x93, 0xd0, + 0x9d, 0x6b, 0x94, 0x04, 0x5b, 0x03, 0xdc, 0x67, 0xfc, 0x07, 0xc5, 0xad, 0x5b, 0xe0, 0xed, 0xbd, + 0xbe, 0xf1, 0xd9, 0x18, 0x0e, 0x19, 0x22, 0xa9, 0xe1, 0x90, 0x81, 0x4b, 0x22, 0x7d, 0xf4, 0x01, + 0x8f, 0xd3, 0x09, 0x9b, 0x18, 0x86, 0x43, 0x06, 0x85, 0x37, 0xd7, 0xa9, 0x71, 0xc5, 0x1f, 0x0b, + 0x6c, 0xc7, 0x27, 0x4d, 0x25, 0x9c, 0xa0, 0xf4, 0xf0, 0x07, 0xaa, 0xbc, 0xd3, 0x6b, 0xae, 0x91, + 0xb6, 0xa7, 0x2e, 0x9e, 0x4d, 0x5f, 0x7d, 0x2d, 0x75, 0xb8, 0x37, 0xfd, 0xd1, 0xdb, 0xc0, 0x0e, + 0xb7, 0x46, 0x3a, 0x69, 0xf4, 0xb5, 0xc3, 0xdd, 0xa9, 0xe3, 0xd7, 0xb4, 0x81, 0xeb, 0xf0, 0xec, + 0xa4, 0xae, 0xbe, 0x12, 0xfe, 0xd0, 0x0e, 0x1f, 0xa8, 0xe4, 0x73, 0xb8, 0x57, 0x1a, 0xef, 0x95, + 0xc8, 0x49, 0x33, 0x73, 0xf3, 0xad, 0xcc, 0xd9, 0x6e, 0xbe, 0xe3, 0x5b, 0x23, 0x5d, 0x3e, 0xf3, + 0x87, 0xc5, 0x6e, 0x01, 0x15, 0xf8, 0x9b, 0x42, 0xad, 0x0a, 0xa5, 0xbc, 0xb9, 0x16, 0xca, 0xab, + 0x0b, 0x27, 0x96, 0x4b, 0x40, 0x7a, 0xbf, 0x50, 0xe5, 0xcd, 0x5e, 0x00, 0x97, 0xd6, 0x41, 0xc8, + 0x7c, 0x88, 0x1e, 0x77, 0x6b, 0xa4, 0x87, 0x94, 0xde, 0x1a, 0xe9, 0x59, 0x9a, 0x1c, 0x1c, 0x92, + 0x1b, 0x95, 0x70, 0x42, 0x1b, 0xd9, 0xa3, 0x0d, 0x0e, 0xde, 0x1a, 0xe9, 0x5e, 0xc6, 0x4a, 0x20, + 0x61, 0xbf, 0xae, 0x23, 0x68, 0x9d, 0x27, 0x92, 0x83, 0x07, 0x68, 0xe4, 0x7d, 0xe8, 0x55, 0x5c, + 0x83, 0x0a, 0x48, 0xfc, 0x3b, 0xe2, 0x7b, 0x90, 0x5f, 0xbd, 0x4c, 0x95, 0x97, 0x78, 0xa1, 0x44, + 0xba, 0x17, 0x4e, 0x6c, 0x99, 0x8f, 0x3f, 0xd1, 0x2e, 0xec, 0x4f, 0xde, 0xc0, 0xa2, 0x43, 0xef, + 0x4a, 0x97, 0x93, 0x4b, 0x7d, 0x00, 0x2d, 0xbe, 0x80, 0x0a, 0xa3, 0xfe, 0x46, 0xa5, 0x21, 0xb4, + 0x0b, 0xbc, 0x10, 0x0a, 0xaa, 0x65, 0x55, 0x7e, 0xc2, 0xab, 0x17, 0x4a, 0x12, 0xbc, 0x9c, 0x82, + 0x4e, 0x21, 0xd4, 0xe3, 0xad, 0x91, 0xee, 0x54, 0x6f, 0x9b, 0x76, 0xee, 0xc2, 0x83, 0x4b, 0x97, + 0x5a, 0xbb, 0x96, 0x96, 0xfa, 0xf4, 0xd6, 0x55, 0xf8, 0x88, 0x86, 0x1e, 0xf2, 0x3a, 0x71, 0x88, + 0x9e, 0xd2, 0x13, 0xa4, 0x6b, 0x4f, 0x3b, 0x5d, 0x31, 0xc8, 0x40, 0xf3, 0x27, 0x2e, 0xf2, 0xf6, + 0x3a, 0xab, 0xe1, 0x0f, 0x5b, 0xbe, 0x3d, 0x6b, 0x92, 0x6f, 0x8b, 0xb2, 0x39, 0x2d, 0x1b, 0x1d, + 0x0e, 0x81, 0x3e, 0x4d, 0x92, 0xae, 0x5b, 0x40, 0xb3, 0xec, 0xda, 0x61, 0xad, 0x1e, 0x88, 0x08, + 0x12, 0x65, 0x53, 0x8a, 0x28, 0xe5, 0x28, 0x82, 0xe6, 0xbf, 0x65, 0xbf, 0x89, 0x43, 0x65, 0x24, + 0x41, 0x8f, 0xbb, 0xf9, 0x3e, 0xf8, 0x21, 0x96, 0xe7, 0xce, 0x5f, 0x8c, 0xb7, 0x25, 0x12, 0x9c, + 0x10, 0x86, 0xf3, 0x17, 0x02, 0x2a, 0x64, 0x45, 0xe2, 0x1c, 0x34, 0x09, 0x6b, 0xb3, 0x54, 0xee, + 0xe6, 0xfb, 0xe8, 0x2f, 0x71, 0x1a, 0x72, 0x85, 0xa2, 0x54, 0x35, 0x72, 0x85, 0xa2, 0xa2, 0x88, + 0xf2, 0x43, 0xd1, 0xd6, 0x87, 0xe8, 0xc5, 0x37, 0xf9, 0x1b, 0x0f, 0x14, 0x43, 0x73, 0x6f, 0x3c, + 0xf4, 0xdf, 0x78, 0xa0, 0x06, 0xb7, 0x4e, 0x65, 0x5c, 0x33, 0x07, 0x4d, 0x8a, 0xc0, 0x9b, 0x10, + 0xfa, 0xb6, 0x03, 0x7e, 0x89, 0x8f, 0xa1, 0x22, 0x62, 0x45, 0x90, 0x63, 0x8a, 0x9f, 0x5e, 0x64, + 0xcf, 0xb7, 0x9b, 0x45, 0x0d, 0x03, 0xf2, 0x19, 0xf0, 0x9e, 0xe5, 0x68, 0xaa, 0xa9, 0x8e, 0x8c, + 0x1d, 0xe6, 0x33, 0xd5, 0xe7, 0x0a, 0x05, 0xed, 0x7c, 0xa9, 0x3d, 0x9f, 0x4f, 0x22, 0x6e, 0xc3, + 0xfc, 0xce, 0x5d, 0x17, 0x8c, 0xff, 0xb8, 0x79, 0xfc, 0xb8, 0x79, 0xdc, 0x4e, 0x9b, 0xc7, 0xcf, + 0x2d, 0x9b, 0x07, 0x71, 0x2c, 0x32, 0x36, 0x8f, 0x0a, 0xdb, 0xcd, 0x83, 0xef, 0x8e, 0x02, 0x10, + 0x1d, 0x9f, 0xdb, 0x37, 0x68, 0x58, 0x96, 0x31, 0x78, 0x44, 0x9a, 0x6f, 0xbb, 0x7d, 0xd4, 0xd5, + 0xd2, 0x0d, 0xe4, 0x33, 0x17, 0x5a, 0xe8, 0xd8, 0xc3, 0x0f, 0x7b, 0x1f, 0xf9, 0xb9, 0x69, 0x1f, + 0x79, 0x20, 0xc7, 0x3e, 0xc2, 0x63, 0x65, 0x3c, 0xdb, 0x49, 0x8f, 0x80, 0xe6, 0xe6, 0x68, 0xfe, + 0xb5, 0xed, 0x2a, 0xcb, 0x4d, 0xbb, 0xca, 0x42, 0x3b, 0x79, 0x5c, 0x57, 0x1b, 0x67, 0xd2, 0x83, + 0x0e, 0xae, 0x01, 0x4d, 0xcf, 0xaa, 0x70, 0xdc, 0x62, 0xca, 0x50, 0x7e, 0xb3, 0xa2, 0x07, 0x5b, + 0xb0, 0x38, 0xed, 0xae, 0x53, 0x70, 0xa7, 0x18, 0xc2, 0xf3, 0x4b, 0x94, 0x8f, 0x7f, 0x89, 0xf3, + 0x11, 0x22, 0x72, 0x6d, 0x4b, 0xc2, 0xf6, 0x4c, 0x7f, 0x17, 0x2a, 0x84, 0xea, 0x50, 0xf6, 0xa1, + 0x5e, 0x2c, 0x45, 0x45, 0xfa, 0x63, 0x2e, 0xba, 0x87, 0x4d, 0xde, 0xba, 0xa3, 0x3a, 0xb4, 0xab, + 0x2e, 0xe8, 0x69, 0xcb, 0x43, 0x73, 0xd6, 0x28, 0x09, 0x3c, 0xec, 0x38, 0xbc, 0xfe, 0xf9, 0x61, + 0x6d, 0x01, 0xbf, 0x80, 0x6d, 0x9a, 0xdb, 0x02, 0xc6, 0x5a, 0x4b, 0xf0, 0x2b, 0xd5, 0x5b, 0x49, + 0x53, 0x61, 0xc5, 0xe2, 0xec, 0xf9, 0x21, 0xab, 0x60, 0xe9, 0xf9, 0x1c, 0xd0, 0x27, 0xdd, 0x0f, + 0x81, 0x9b, 0x99, 0x50, 0x88, 0xd3, 0x93, 0x7c, 0xef, 0x90, 0x76, 0xe2, 0x62, 0x66, 0xe0, 0xdd, + 0xd4, 0xab, 0x1d, 0x34, 0xe4, 0xca, 0x4d, 0x17, 0x39, 0xc3, 0x99, 0xfb, 0xf8, 0x61, 0xcb, 0x87, + 0x75, 0xba, 0x7c, 0xb0, 0x8d, 0xa1, 0xc2, 0x14, 0xb4, 0x9f, 0x85, 0x12, 0xdb, 0x31, 0xed, 0x8f, + 0x25, 0x14, 0xfe, 0x5f, 0x01, 0xcd, 0xc8, 0x6e, 0xf3, 0x03, 0x50, 0xee, 0x74, 0x21, 0x51, 0x38, + 0xa6, 0x90, 0x18, 0xca, 0x27, 0x87, 0x15, 0x62, 0x4b, 0x22, 0xdd, 0x6d, 0x57, 0x02, 0x3b, 0x7e, + 0x50, 0x8c, 0xbc, 0x49, 0x4f, 0xd9, 0x06, 0xf6, 0xef, 0x95, 0xaa, 0x5c, 0xa5, 0xa7, 0x6c, 0x5b, + 0x5a, 0x57, 0xdf, 0xba, 0x02, 0xb4, 0x34, 0x3d, 0x1a, 0xfa, 0xc0, 0x75, 0x5d, 0x59, 0xe2, 0xd5, + 0x24, 0xad, 0xfb, 0xfa, 0x68, 0xc7, 0x01, 0x3d, 0x87, 0xdb, 0xf3, 0xa8, 0x10, 0xaf, 0x38, 0x77, + 0x41, 0x4c, 0x72, 0xe6, 0xe9, 0x85, 0xa4, 0xeb, 0x87, 0x26, 0xd4, 0xb5, 0xde, 0x56, 0x6c, 0x44, + 0x93, 0x77, 0x28, 0x3b, 0x49, 0xdf, 0x05, 0xa4, 0x6f, 0x62, 0x69, 0x64, 0x65, 0xd2, 0x93, 0x5a, + 0xc7, 0xd5, 0xd1, 0x37, 0xfa, 0xb5, 0xbe, 0xe3, 0xac, 0xff, 0xcc, 0x85, 0x77, 0x52, 0xa7, 0x0e, + 0x6b, 0xfb, 0x86, 0x8c, 0xc3, 0xe8, 0xe1, 0x03, 0x95, 0x40, 0xb8, 0xe9, 0xbe, 0x2e, 0x1d, 0x9e, + 0xdd, 0x68, 0xd1, 0x9e, 0xaa, 0xb0, 0xe2, 0x83, 0x1e, 0xf6, 0x3a, 0x92, 0x80, 0x34, 0x17, 0x12, + 0x4f, 0xd9, 0x9f, 0x74, 0xaf, 0xbb, 0x88, 0xd1, 0x37, 0xbb, 0xe5, 0x0f, 0x5b, 0x04, 0xad, 0x32, + 0x89, 0x20, 0xc7, 0x63, 0xe3, 0x58, 0xa2, 0xe7, 0xcf, 0x04, 0x54, 0xbc, 0x3e, 0x92, 0x08, 0x6d, + 0xdb, 0x59, 0x13, 0x09, 0x6f, 0x0b, 0x35, 0x8a, 0x6b, 0xd1, 0xa4, 0x38, 0xf1, 0x5f, 0xa0, 0x9c, + 0xb6, 0x42, 0x95, 0x97, 0x79, 0x69, 0x91, 0x74, 0x3f, 0xb8, 0x6a, 0x8f, 0xb6, 0xf5, 0xa4, 0x4f, + 0x9f, 0x07, 0x95, 0x1e, 0xd2, 0x14, 0x42, 0x79, 0xba, 0xa7, 0x1d, 0x00, 0x7d, 0xb4, 0x81, 0xf8, + 0x00, 0x9a, 0x84, 0x3f, 0xc3, 0x6c, 0x7f, 0xd5, 0x77, 0xa8, 0xf2, 0x0c, 0x2f, 0x2d, 0x92, 0xe8, + 0xbf, 0x3e, 0xfa, 0xaf, 0xf8, 0x24, 0x9a, 0xe2, 0x27, 0xd8, 0xdc, 0x18, 0xd9, 0xa1, 0x84, 0xf9, + 0x90, 0x67, 0x7c, 0xb9, 0xc4, 0xff, 0xf0, 0xf1, 0x3f, 0x3c, 0x07, 0x5c, 0x08, 0xc1, 0x64, 0x88, + 0xee, 0xb2, 0x52, 0xf7, 0xe9, 0x16, 0xc8, 0x42, 0x42, 0x9e, 0x1a, 0xfa, 0x42, 0xa4, 0x84, 0x26, + 0xe1, 0x80, 0x77, 0x22, 0x23, 0x6d, 0xda, 0xe1, 0x01, 0x98, 0x96, 0xee, 0xde, 0xfd, 0x38, 0x2a, + 0x48, 0x84, 0x12, 0x4d, 0xec, 0x82, 0x96, 0xe4, 0x67, 0x84, 0x12, 0xa9, 0x14, 0x40, 0xc9, 0x0f, + 0xed, 0xc0, 0xd5, 0xe4, 0xd0, 0x7e, 0xdd, 0x09, 0xc4, 0x07, 0x20, 0xe2, 0x6e, 0x01, 0x4d, 0x0e, + 0xd0, 0x43, 0x55, 0x9e, 0x91, 0xbb, 0x95, 0x95, 0x49, 0xbf, 0x80, 0x2e, 0xe0, 0x20, 0x05, 0x4f, + 0xa7, 0xca, 0xdd, 0xb0, 0xe5, 0xc2, 0x1d, 0xe9, 0x68, 0x6f, 0x5b, 0xea, 0xca, 0x1e, 0x78, 0x5a, + 0x05, 0xe8, 0x05, 0xd8, 0xcf, 0xdb, 0xf6, 0xe8, 0xfe, 0xf7, 0xf8, 0x38, 0x40, 0xf0, 0x4f, 0x8f, + 0x03, 0x17, 0xcf, 0xa6, 0xbb, 0x3a, 0x7d, 0xec, 0x1b, 0x9e, 0xfe, 0x69, 0x68, 0x1a, 0xe0, 0x83, + 0xbd, 0x0b, 0x15, 0x9f, 0x45, 0x33, 0xc2, 0xa6, 0x12, 0xdd, 0x1f, 0x80, 0x60, 0xc7, 0x52, 0x29, + 0x4d, 0x83, 0x71, 0x42, 0xd7, 0x75, 0xb5, 0x3e, 0x0b, 0x84, 0x1e, 0xa2, 0xce, 0x65, 0x09, 0x51, + 0xc7, 0x37, 0x35, 0x85, 0xa8, 0xfb, 0x35, 0x1f, 0x0e, 0x02, 0xb0, 0xb3, 0x56, 0x95, 0xeb, 0xf8, + 0x54, 0x9f, 0x8f, 0xf3, 0x8d, 0x53, 0x5d, 0x6d, 0x10, 0xbf, 0x47, 0x7f, 0xca, 0x7f, 0x6b, 0xa4, + 0x3b, 0x33, 0x70, 0x1e, 0xfe, 0x4e, 0x0e, 0x0e, 0x65, 0x5e, 0x3f, 0x39, 0xfa, 0xe1, 0xa0, 0x5e, + 0xcb, 0xe7, 0xfd, 0x3c, 0x2b, 0x20, 0x44, 0xc7, 0xbc, 0x53, 0x8f, 0xeb, 0xd2, 0x26, 0xa8, 0xf2, + 0x6f, 0xbd, 0x5c, 0xb9, 0x14, 0xa1, 0x44, 0x6d, 0x9f, 0xaa, 0x63, 0xeb, 0x8e, 0x2d, 0xcd, 0x91, + 0x70, 0x28, 0x11, 0x89, 0x6d, 0x51, 0x5a, 0x95, 0x70, 0xe2, 0xf3, 0x36, 0xbe, 0xa8, 0x59, 0x49, + 0xc4, 0x42, 0x81, 0xf8, 0x12, 0x77, 0xaa, 0xf7, 0xfd, 0xd4, 0xc9, 0xf3, 0xda, 0xe5, 0xbd, 0xd0, + 0x2a, 0x96, 0x78, 0xf9, 0xf3, 0xb6, 0xdd, 0x4a, 0xb3, 0x3f, 0xd4, 0xf4, 0x79, 0xdb, 0xee, 0xd6, + 0x48, 0x28, 0xa0, 0xa4, 0xfb, 0xba, 0x52, 0xc7, 0xae, 0x6b, 0x23, 0x87, 0x7c, 0xdc, 0xc7, 0xc5, + 0x87, 0xe9, 0xa3, 0x5c, 0xf0, 0xca, 0xa1, 0x2f, 0x8b, 0x95, 0x78, 0x40, 0x2a, 0xd1, 0xb1, 0x90, + 0x3a, 0x79, 0xd3, 0x94, 0x6b, 0x18, 0x5e, 0xee, 0x3e, 0xac, 0x93, 0x38, 0x09, 0x27, 0x4f, 0x63, + 0xb0, 0x52, 0x12, 0x17, 0x73, 0x10, 0xf7, 0x41, 0x01, 0x4d, 0x0a, 0x10, 0x8e, 0xa7, 0xbb, 0xfa, + 0x3c, 0xab, 0x65, 0xc1, 0x90, 0x0a, 0xf0, 0x62, 0x88, 0x36, 0x90, 0x9e, 0xe1, 0xf9, 0x1f, 0xae, + 0x57, 0x74, 0x42, 0xd4, 0x05, 0x01, 0x1d, 0x38, 0x99, 0x2b, 0x44, 0x6e, 0x02, 0x48, 0x1d, 0x00, + 0x3a, 0xf3, 0xd1, 0x4e, 0xc5, 0xed, 0x68, 0x6a, 0x80, 0xba, 0x43, 0x93, 0x61, 0x50, 0xa5, 0xa1, + 0xd4, 0x7e, 0x58, 0x44, 0xb4, 0x11, 0x8e, 0x34, 0xb7, 0x92, 0x44, 0x70, 0x9a, 0x06, 0x8f, 0x02, + 0x3a, 0x67, 0x33, 0x08, 0xfe, 0x52, 0x90, 0x3a, 0xbf, 0xc1, 0x97, 0x8a, 0xc6, 0xf9, 0x25, 0x53, + 0x2b, 0xfc, 0xa5, 0x33, 0xa3, 0x27, 0xce, 0x99, 0xbf, 0x64, 0x02, 0x11, 0x7f, 0x83, 0xa6, 0xc3, + 0xa7, 0xd7, 0x33, 0x5f, 0x12, 0xf2, 0xf4, 0x2b, 0xf7, 0xb7, 0x88, 0x83, 0x57, 0x76, 0x3b, 0x69, + 0x36, 0x8b, 0xa7, 0x7b, 0x26, 0x75, 0xec, 0xb2, 0xf6, 0xf6, 0x29, 0xfa, 0xc1, 0x6c, 0x38, 0xfc, + 0x49, 0x18, 0x83, 0xf1, 0xc9, 0x29, 0xe3, 0xfc, 0x64, 0x56, 0x3b, 0xee, 0x93, 0x74, 0xa6, 0xf4, + 0x93, 0x59, 0x70, 0xf8, 0x93, 0x2d, 0x7a, 0xfc, 0x57, 0xf8, 0x64, 0xf1, 0x38, 0x3f, 0x99, 0xd5, + 0x8e, 0x9f, 0x25, 0x71, 0xd9, 0x65, 0x9f, 0xcc, 0x82, 0x13, 0x7f, 0x8b, 0x66, 0x92, 0x64, 0xd5, + 0x0d, 0x01, 0x7f, 0x93, 0xb2, 0xa1, 0x25, 0x81, 0x6b, 0x48, 0xd6, 0x80, 0xdc, 0x1f, 0x5d, 0xae, + 0xca, 0x4b, 0xbd, 0xd6, 0x96, 0xd2, 0x5c, 0xe3, 0xb3, 0x5d, 0xef, 0x69, 0xfd, 0xd7, 0xe1, 0x27, + 0xfd, 0xb8, 0x15, 0x5e, 0x7c, 0x05, 0xcd, 0x30, 0x0a, 0xeb, 0x48, 0x5e, 0x02, 0xa7, 0x27, 0x69, + 0x13, 0xfa, 0x7a, 0x7a, 0xc4, 0xf2, 0x75, 0xcb, 0x87, 0xc4, 0x36, 0x01, 0x6b, 0x0c, 0x01, 0x25, + 0xd4, 0xaa, 0xc4, 0xe2, 0x34, 0x73, 0xef, 0x56, 0x55, 0xde, 0xe2, 0x35, 0x4a, 0x25, 0x1f, 0xe5, + 0xbe, 0x83, 0xe7, 0x53, 0x6f, 0x5c, 0xcb, 0xb4, 0x75, 0x94, 0x6b, 0x87, 0x06, 0x52, 0xdd, 0xfb, + 0xb4, 0xfe, 0x9e, 0x5b, 0x23, 0x6f, 0x65, 0xf6, 0x9f, 0x4f, 0x1d, 0x3f, 0x03, 0x3f, 0xcb, 0xdd, + 0xda, 0xa1, 0x01, 0xba, 0x85, 0x10, 0x42, 0xae, 0xe4, 0x16, 0x9d, 0xbc, 0x46, 0xd4, 0x3d, 0xcd, + 0x8d, 0xee, 0xf9, 0xf8, 0x3f, 0x33, 0xcc, 0xf1, 0x7f, 0x4a, 0x8c, 0xf7, 0x91, 0x33, 0xa1, 0x86, + 0x3d, 0x80, 0x5c, 0x60, 0xca, 0xc4, 0x24, 0x42, 0x5c, 0x22, 0x2e, 0xe1, 0xda, 0x02, 0xd3, 0x23, + 0xc7, 0x3b, 0xa0, 0xde, 0x28, 0xa9, 0x0a, 0xa8, 0xf2, 0x8b, 0xe8, 0x57, 0xde, 0xac, 0xfd, 0x4c, + 0x5a, 0xcb, 0x6f, 0x13, 0xe5, 0xee, 0xe4, 0xe0, 0x70, 0xe6, 0xdd, 0xdd, 0xf0, 0xb8, 0x4c, 0x1b, + 0xb8, 0x0e, 0x3b, 0x29, 0xe8, 0xb8, 0x00, 0x58, 0x06, 0xd3, 0xfc, 0xbc, 0x6d, 0xb7, 0x81, 0xf5, + 0xbe, 0x2e, 0xd0, 0x05, 0x16, 0x7b, 0xfe, 0x6a, 0x2a, 0x9a, 0x5b, 0x43, 0x39, 0x8a, 0xff, 0x0c, + 0x3b, 0x89, 0x6c, 0xe3, 0xf7, 0x2d, 0x81, 0xa5, 0x1d, 0xf6, 0xf2, 0xfb, 0xd6, 0x7c, 0x93, 0xc4, + 0x66, 0x21, 0xa5, 0x59, 0x50, 0xd8, 0x2f, 0xaa, 0x4b, 0x62, 0x73, 0x66, 0x08, 0x25, 0x6d, 0x33, + 0x6c, 0x62, 0xe4, 0x19, 0x7b, 0xd6, 0x23, 0xa6, 0x2d, 0x75, 0x91, 0xdd, 0x96, 0x9a, 0x3a, 0x79, + 0x93, 0x8b, 0xd7, 0x3d, 0x43, 0xa0, 0x3b, 0x2b, 0xdb, 0x49, 0xf2, 0x26, 0xba, 0x93, 0xfc, 0xb9, + 0xdd, 0x36, 0xf9, 0xc1, 0x77, 0xbe, 0x4d, 0x7e, 0x51, 0x5d, 0x16, 0xbb, 0xcf, 0x37, 0x23, 0xbb, + 0x63, 0x9f, 0x68, 0xed, 0xd7, 0xb4, 0xa3, 0x36, 0xe8, 0x1b, 0x63, 0xc1, 0x98, 0xc1, 0xfc, 0xc6, + 0xbd, 0x69, 0x5a, 0xf6, 0xa8, 0x49, 0xdf, 0xda, 0x1e, 0x35, 0xf9, 0x5b, 0xdc, 0xa3, 0x0a, 0xbf, + 0xfd, 0x3d, 0xaa, 0xe8, 0xdb, 0xdf, 0xa3, 0xd0, 0x77, 0xb1, 0x47, 0x4d, 0xf9, 0x4e, 0xf7, 0xa8, + 0xe2, 0x6f, 0x6b, 0x8f, 0xe2, 0xb4, 0xcb, 0xa9, 0xdf, 0x0b, 0xed, 0xd2, 0xbc, 0x69, 0x4e, 0xfb, + 0x8e, 0x37, 0xcd, 0xe9, 0xa6, 0x4d, 0xb3, 0xea, 0x45, 0x55, 0x7e, 0x01, 0x3d, 0xef, 0xcd, 0xb5, + 0xf3, 0xe8, 0x32, 0x83, 0x13, 0xe2, 0x9f, 0x09, 0xc6, 0x8e, 0xf1, 0x99, 0x40, 0xc4, 0xff, 0x67, + 0x02, 0x27, 0x03, 0x3f, 0x13, 0xd8, 0x17, 0x3c, 0x83, 0x2e, 0xf6, 0xce, 0x36, 0xbb, 0xf7, 0xdb, + 0xc3, 0x7d, 0x79, 0xa7, 0xd5, 0x0f, 0x39, 0x7f, 0x9c, 0x7e, 0xc8, 0x24, 0xa3, 0xbe, 0xc5, 0x0f, + 0xb9, 0xc4, 0xea, 0x87, 0x6c, 0xef, 0x7e, 0xec, 0x79, 0xcd, 0x85, 0xe6, 0xd6, 0x52, 0x69, 0x62, + 0xa7, 0x12, 0xd4, 0x58, 0x55, 0x02, 0xc8, 0xfb, 0x6c, 0xa8, 0x04, 0xb3, 0xb3, 0xd4, 0x00, 0x8a, + 0x10, 0x6e, 0xbf, 0xb7, 0x3b, 0x95, 0xbb, 0xbe, 0xd2, 0xa9, 0xbc, 0xaa, 0x41, 0x95, 0xeb, 0xd1, + 0x7a, 0x6f, 0xae, 0xb1, 0xeb, 0xdb, 0x03, 0xd7, 0x97, 0x99, 0xa8, 0xa6, 0x85, 0x23, 0x41, 0xc5, + 0xe8, 0x94, 0xd0, 0x91, 0x7d, 0x87, 0x3f, 0xd2, 0xd1, 0x18, 0x74, 0xf4, 0xd7, 0x2e, 0x48, 0xcd, + 0x60, 0x4f, 0x45, 0x0f, 0x59, 0xa9, 0x08, 0xac, 0x80, 0x06, 0x15, 0xd9, 0x24, 0x16, 0xf8, 0x46, + 0x08, 0xa7, 0x5f, 0x50, 0xe5, 0xf7, 0x05, 0x74, 0x41, 0xf0, 0x3a, 0x8f, 0x57, 0xfa, 0x43, 0xea, + 0x5b, 0xc9, 0x89, 0x23, 0x30, 0x52, 0xde, 0x1a, 0xe9, 0xd6, 0xde, 0xdd, 0x93, 0x3a, 0xd5, 0xab, + 0x9d, 0xfd, 0x40, 0xdb, 0x7b, 0x22, 0x39, 0xb4, 0x17, 0xa3, 0xe4, 0xcc, 0x3e, 0x88, 0x53, 0x81, + 0x6b, 0x3b, 0x4f, 0x90, 0x34, 0x91, 0x9d, 0x50, 0x4e, 0x03, 0xa6, 0x90, 0xde, 0x8c, 0xb6, 0x1d, + 0x17, 0xc1, 0xbe, 0x45, 0xee, 0xdf, 0x87, 0x58, 0xc8, 0xe7, 0x8b, 0xa3, 0xfb, 0x0e, 0xb1, 0x20, + 0x80, 0x5c, 0xf4, 0xd0, 0xff, 0xdd, 0x05, 0xaf, 0xcf, 0x6e, 0x4f, 0x92, 0x7c, 0xd6, 0x74, 0x51, + 0xbb, 0xc0, 0x7e, 0x9f, 0x64, 0x93, 0x32, 0xbd, 0x30, 0x32, 0x1d, 0x05, 0xe0, 0x72, 0x0f, 0x5e, + 0x18, 0xad, 0x55, 0xe5, 0x3a, 0xb4, 0xc6, 0x9b, 0x03, 0x29, 0x2c, 0x7f, 0x80, 0x69, 0xfd, 0x9c, + 0x5e, 0x17, 0x15, 0x10, 0x37, 0x80, 0xfa, 0x58, 0xa4, 0x35, 0x14, 0x54, 0x62, 0x2c, 0x9b, 0xc6, + 0x26, 0x5c, 0xc9, 0xc8, 0xf7, 0x37, 0x24, 0x33, 0x06, 0xa9, 0xd7, 0xe9, 0xf7, 0x59, 0x55, 0x5e, + 0xef, 0xe5, 0x8a, 0xa5, 0xa7, 0x68, 0xae, 0x8d, 0x2b, 0x67, 0x58, 0xe1, 0xad, 0x91, 0x6e, 0x38, + 0x40, 0x50, 0x37, 0xfd, 0x9d, 0x2d, 0xe1, 0x44, 0xa8, 0x32, 0xae, 0x34, 0x6d, 0xab, 0x0c, 0xc4, + 0x2a, 0xb7, 0x06, 0xe2, 0x5b, 0x58, 0x2a, 0xea, 0x2d, 0xd1, 0x48, 0xa4, 0xc9, 0xc7, 0xf5, 0x26, + 0x56, 0x61, 0x54, 0x37, 0x1a, 0x8f, 0xff, 0x20, 0xfc, 0x0f, 0x14, 0x49, 0xb3, 0x53, 0xbd, 0x43, + 0xda, 0xa9, 0xfd, 0x98, 0x2d, 0x7b, 0x2f, 0xa6, 0x7b, 0xda, 0xb5, 0xde, 0xcb, 0xda, 0xe9, 0xd3, + 0x3e, 0x5a, 0x2d, 0xae, 0x44, 0xc5, 0xcc, 0x07, 0x95, 0x1c, 0x76, 0xf2, 0x8c, 0xa8, 0xb0, 0xa6, + 0x0a, 0x69, 0x12, 0xf4, 0xe3, 0x33, 0x95, 0x8a, 0xaf, 0x0a, 0xa8, 0x80, 0xc4, 0xc2, 0xa1, 0xc2, + 0x63, 0x9e, 0xe5, 0x6c, 0xb1, 0x89, 0xf3, 0x48, 0xd9, 0xa0, 0xca, 0x35, 0x5e, 0x80, 0x97, 0xaa, + 0x20, 0x30, 0x78, 0xfa, 0xe0, 0xbe, 0x72, 0xb7, 0x8e, 0x0d, 0xbd, 0x4c, 0xbb, 0x7c, 0x28, 0x39, + 0x74, 0x30, 0xdd, 0xd7, 0x95, 0x1c, 0x3a, 0x48, 0xe0, 0x75, 0x57, 0xe9, 0xd4, 0x95, 0x33, 0x5f, + 0x54, 0x4f, 0xf2, 0xe6, 0x97, 0x04, 0xcb, 0x7e, 0xe2, 0x83, 0xbe, 0xc4, 0x13, 0x02, 0x9f, 0x76, + 0xa6, 0x60, 0x1c, 0x23, 0x01, 0xff, 0x6c, 0x23, 0x29, 0xcd, 0x3a, 0xf8, 0x72, 0x72, 0xf0, 0xfd, + 0xd4, 0xd1, 0xcb, 0xdc, 0x80, 0xb4, 0x43, 0x03, 0xe9, 0x37, 0x30, 0xda, 0x28, 0x16, 0x8f, 0x5e, + 0xc6, 0xab, 0xc4, 0x0d, 0x4e, 0xef, 0x82, 0x1f, 0x20, 0x9f, 0xc9, 0x06, 0x9f, 0x1b, 0x2f, 0x08, + 0xe8, 0x9c, 0xe0, 0x1d, 0x8b, 0x74, 0xa4, 0x16, 0x53, 0x1e, 0x96, 0x2b, 0x67, 0x20, 0xb2, 0x3c, + 0x7c, 0x99, 0x44, 0x94, 0x05, 0xbd, 0x8f, 0x44, 0x86, 0xbd, 0xcf, 0xcd, 0xee, 0xa4, 0x89, 0x39, + 0x1c, 0xe2, 0x15, 0x11, 0xe7, 0x1c, 0x6d, 0xdf, 0x50, 0xfa, 0xd2, 0xbb, 0xda, 0xe1, 0x4e, 0x70, + 0xf6, 0xe1, 0xc7, 0x65, 0x84, 0xaa, 0xe7, 0xba, 0x32, 0x09, 0x90, 0x3d, 0x79, 0xc8, 0xed, 0x3c, + 0xcc, 0xdb, 0x31, 0xd5, 0xb9, 0xe3, 0x1b, 0x0c, 0x48, 0x59, 0x4f, 0xe4, 0xc7, 0xdd, 0x14, 0xc7, + 0xcc, 0xcd, 0x9e, 0x46, 0x2e, 0x26, 0x48, 0x4a, 0xbd, 0xda, 0xa1, 0xed, 0xfd, 0x98, 0x8a, 0x13, + 0xfa, 0x4a, 0x7a, 0x4c, 0x14, 0x49, 0x5e, 0x53, 0x36, 0xa0, 0x2b, 0x67, 0x6c, 0x3b, 0x75, 0x12, + 0x33, 0xff, 0x32, 0x1f, 0x15, 0x57, 0xb3, 0x00, 0x7d, 0xf4, 0x09, 0x88, 0x9e, 0x40, 0x87, 0xb9, + 0x8b, 0x18, 0x19, 0x75, 0xdc, 0x68, 0x0a, 0xfd, 0x61, 0xa4, 0x27, 0xf6, 0xf1, 0x45, 0x1c, 0x44, + 0x0d, 0x5e, 0xb7, 0x3c, 0x13, 0x04, 0x2e, 0x12, 0x3d, 0xa8, 0x98, 0xfe, 0xdc, 0x14, 0xc7, 0xc7, + 0x02, 0x1a, 0xea, 0x9a, 0x2f, 0x13, 0x67, 0x41, 0xb2, 0x82, 0x20, 0x0b, 0x77, 0x49, 0x7e, 0x60, + 0x5d, 0x7e, 0x6b, 0x68, 0x17, 0x77, 0x5d, 0xce, 0x7e, 0x8a, 0xa5, 0xa8, 0x70, 0x6b, 0x68, 0x17, + 0xf4, 0x07, 0x71, 0xae, 0xf5, 0xdf, 0x78, 0x46, 0x7a, 0x62, 0x1f, 0x88, 0x3b, 0xc6, 0x67, 0xfa, + 0x71, 0xa3, 0x29, 0xf4, 0x07, 0xe9, 0x97, 0x86, 0xe9, 0xe1, 0x8a, 0xc4, 0x45, 0x68, 0x2a, 0xfd, + 0xe9, 0x03, 0xc9, 0x07, 0x89, 0x5b, 0xcd, 0x85, 0x78, 0x56, 0xb4, 0x00, 0x46, 0x31, 0x05, 0x66, + 0xc5, 0x97, 0xe1, 0xf1, 0x93, 0x33, 0x5b, 0x5d, 0x10, 0x22, 0x82, 0xf9, 0xd8, 0x4f, 0x3c, 0xc6, + 0x46, 0x3d, 0xe9, 0xf3, 0x54, 0x18, 0xa3, 0x5e, 0x80, 0xfb, 0x36, 0x09, 0xce, 0x69, 0xd0, 0xb7, + 0x49, 0x3a, 0xce, 0x42, 0x05, 0xbb, 0x22, 0x61, 0x85, 0x9a, 0x26, 0x7d, 0xf0, 0x83, 0x98, 0xff, + 0x22, 0xe1, 0x78, 0x4b, 0x33, 0x99, 0xfc, 0x0c, 0x6a, 0xfe, 0xd3, 0x4b, 0xc4, 0x39, 0x68, 0x12, + 0x16, 0xf1, 0x75, 0x41, 0x6a, 0x37, 0xa4, 0xbf, 0x70, 0x3b, 0xf2, 0x79, 0x98, 0x0b, 0x35, 0x1b, + 0x1a, 0x25, 0xe2, 0x0c, 0x94, 0xd7, 0x12, 0x6b, 0xa2, 0xf6, 0x42, 0xfc, 0xa7, 0x74, 0xe5, 0x94, + 0x0b, 0x4d, 0xa3, 0xd6, 0x8d, 0x75, 0xb0, 0x8b, 0x8a, 0x7f, 0x2e, 0xa0, 0xa9, 0x35, 0x26, 0x03, + 0x8b, 0x45, 0xe1, 0x33, 0x55, 0xfb, 0x94, 0xdf, 0x94, 0xde, 0x3d, 0x06, 0x44, 0x3c, 0xea, 0x69, + 0x55, 0xe5, 0xf5, 0xe2, 0x54, 0x38, 0x99, 0xd1, 0xf2, 0xd2, 0x95, 0xa6, 0x9f, 0xb7, 0x46, 0xba, + 0xe1, 0x88, 0x08, 0x06, 0x33, 0xad, 0x63, 0x04, 0x1f, 0x9e, 0x77, 0xbf, 0x31, 0xba, 0xe7, 0x5d, + 0x9a, 0x96, 0x42, 0xed, 0x4e, 0xef, 0xbf, 0x94, 0xfe, 0x60, 0x3f, 0xfc, 0xdc, 0xf3, 0xef, 0x93, + 0xaf, 0xbb, 0x16, 0x7a, 0x4a, 0x2b, 0xcd, 0xdf, 0xae, 0x6c, 0x5d, 0xc6, 0x4a, 0xaa, 0x04, 0xaf, + 0xd8, 0xe6, 0x42, 0x73, 0x7c, 0x4a, 0x22, 0xb6, 0xd3, 0x34, 0xa4, 0x8d, 0xfe, 0xf8, 0x0e, 0xd1, + 0xf2, 0x76, 0xd1, 0x0a, 0x87, 0x27, 0x77, 0xdf, 0x78, 0xc0, 0xe2, 0x51, 0xcf, 0x31, 0x41, 0x95, + 0x7f, 0x29, 0xde, 0x35, 0xba, 0xef, 0x40, 0x66, 0xe0, 0xa8, 0x69, 0x66, 0x10, 0x45, 0xb2, 0xf4, + 0xc9, 0x51, 0xb5, 0x13, 0x4b, 0x58, 0xce, 0xa2, 0xa5, 0x9d, 0xbb, 0x92, 0xf9, 0xe8, 0x3c, 0xa4, + 0xed, 0xc0, 0xf3, 0xdf, 0x77, 0x20, 0x75, 0xec, 0x72, 0x72, 0x70, 0xbf, 0x76, 0xe8, 0x08, 0x0f, + 0x06, 0x1d, 0x90, 0x09, 0x2f, 0xf3, 0x94, 0x3b, 0x4f, 0xb8, 0xf2, 0x15, 0x3d, 0x80, 0xf1, 0x6f, + 0x2b, 0x63, 0x78, 0x98, 0x18, 0x05, 0x7f, 0x26, 0xa0, 0x59, 0xe4, 0x9e, 0x9f, 0x38, 0x9e, 0xd0, + 0x87, 0xf6, 0xf8, 0xa4, 0x6f, 0xf1, 0x4e, 0x31, 0xea, 0xf0, 0xc4, 0x17, 0xe4, 0xaa, 0x8e, 0x47, + 0x3d, 0x71, 0x55, 0xae, 0x16, 0xef, 0xda, 0xa1, 0x17, 0xc2, 0x5e, 0x98, 0x6a, 0xbb, 0x90, 0x7a, + 0xa7, 0x2d, 0xf5, 0xf1, 0xfe, 0xd2, 0x7b, 0x8d, 0xaa, 0xcc, 0xcd, 0x53, 0xa9, 0x83, 0xe7, 0xe9, + 0x9c, 0xcd, 0x60, 0x64, 0x56, 0x65, 0xa5, 0xf7, 0xd8, 0xce, 0x2a, 0xd2, 0x12, 0xac, 0x34, 0x7a, + 0xc1, 0x93, 0xd9, 0xe3, 0x42, 0x73, 0xed, 0x26, 0x53, 0x13, 0x09, 0x87, 0x95, 0x40, 0x42, 0x5c, + 0xe4, 0x3c, 0x68, 0x0a, 0x82, 0xa7, 0x76, 0xef, 0x38, 0xa0, 0xe2, 0x51, 0xcf, 0x51, 0x41, 0x95, + 0x9f, 0x16, 0xdd, 0xdc, 0x14, 0xf7, 0x76, 0x54, 0xd2, 0x77, 0xd4, 0xfd, 0x37, 0x47, 0x8f, 0xf7, + 0xa7, 0x5f, 0xbb, 0x96, 0x6a, 0xdb, 0x5d, 0x7a, 0x1f, 0x37, 0x53, 0x52, 0x4e, 0x67, 0xaa, 0x43, + 0x03, 0x1c, 0x99, 0x6a, 0xb5, 0xf8, 0x94, 0xd3, 0x54, 0xe3, 0x78, 0xfd, 0xc8, 0x1b, 0xf3, 0xdf, + 0x32, 0x90, 0xb8, 0x69, 0x49, 0x03, 0x74, 0x92, 0xff, 0x55, 0x40, 0x53, 0xeb, 0x9a, 0xa3, 0x91, + 0x58, 0xc2, 0x91, 0x47, 0x4d, 0xd5, 0xb6, 0x3c, 0x9a, 0x05, 0x11, 0x8f, 0x7a, 0x5e, 0x17, 0x54, + 0x39, 0x28, 0xde, 0xa5, 0x0d, 0x8c, 0x68, 0x1d, 0x34, 0x58, 0xbf, 0x99, 0x82, 0xd7, 0xf0, 0x55, + 0x30, 0xc7, 0x32, 0xea, 0x27, 0x73, 0xae, 0x27, 0x39, 0x74, 0x84, 0xe5, 0xcc, 0xc1, 0x40, 0xda, + 0x6b, 0xa7, 0x33, 0xaf, 0xde, 0xa8, 0x72, 0xb3, 0xe0, 0xda, 0xdc, 0x3a, 0x2e, 0x26, 0x88, 0xb8, + 0xcf, 0x73, 0x77, 0x0e, 0x4a, 0x0e, 0x91, 0xd1, 0xe1, 0x15, 0xdf, 0xeb, 0x42, 0x53, 0x59, 0xd0, + 0x1a, 0x87, 0xc9, 0x9a, 0xaa, 0x6d, 0x27, 0x9b, 0x05, 0x11, 0x8f, 0x7a, 0x06, 0x04, 0x55, 0x7e, + 0x45, 0x9c, 0x0a, 0xf6, 0x27, 0x26, 0x91, 0x7e, 0x6d, 0xfa, 0x09, 0xba, 0x06, 0x5c, 0x9f, 0x43, + 0x32, 0xc1, 0xe4, 0x70, 0x07, 0x5c, 0x98, 0xd0, 0x30, 0x39, 0x0c, 0x80, 0x38, 0x1a, 0xf7, 0x64, + 0x2e, 0xbc, 0xab, 0x1d, 0x3a, 0x92, 0x1c, 0x1e, 0x4e, 0xde, 0x38, 0x4a, 0x45, 0x19, 0x09, 0xda, + 0x87, 0x55, 0xac, 0x7d, 0xef, 0x6b, 0xaf, 0x5d, 0xd4, 0xba, 0x8f, 0x69, 0xaf, 0x5d, 0x4c, 0xde, + 0xe8, 0xfd, 0xbc, 0x6d, 0x0f, 0xc1, 0xc1, 0x03, 0xa5, 0xf7, 0x8d, 0x8f, 0x9b, 0x31, 0x22, 0xba, + 0x5d, 0x68, 0xa6, 0x1c, 0x0c, 0x12, 0x07, 0xd8, 0x8d, 0x11, 0x86, 0x0c, 0x8b, 0x8f, 0x23, 0x03, + 0xa1, 0x5a, 0x63, 0xa9, 0xdb, 0x19, 0x00, 0x94, 0x11, 0xcf, 0x55, 0x41, 0x95, 0x77, 0x89, 0x62, + 0x72, 0xf0, 0xb5, 0xd4, 0xa9, 0x6b, 0x30, 0x70, 0xb0, 0xd2, 0x95, 0x06, 0xc1, 0x8a, 0x57, 0x57, + 0x8f, 0x8f, 0x1f, 0xc3, 0x27, 0xe8, 0xfa, 0xbe, 0x7d, 0x4a, 0x7b, 0xed, 0x0c, 0x40, 0x94, 0x25, + 0x87, 0x8e, 0xd4, 0x6c, 0x5e, 0x47, 0x73, 0x8a, 0xaa, 0xdd, 0x75, 0xb5, 0x35, 0xc6, 0xbb, 0x72, + 0x52, 0xb8, 0x98, 0x24, 0x8f, 0xa7, 0xb8, 0x49, 0xbf, 0x35, 0xa8, 0x75, 0x5c, 0xd5, 0x91, 0x01, + 0x41, 0x9a, 0x09, 0x26, 0x96, 0x7a, 0x1e, 0x18, 0xa7, 0x5c, 0x0b, 0x47, 0x82, 0x0a, 0x46, 0xc7, + 0xff, 0x21, 0xa0, 0x39, 0xb5, 0xba, 0xed, 0x3a, 0xbe, 0x3a, 0x16, 0x69, 0x66, 0x38, 0xf1, 0x58, + 0x23, 0xff, 0xea, 0x70, 0x0c, 0x2d, 0xf7, 0xe4, 0x84, 0xa1, 0x98, 0xd9, 0x27, 0xa8, 0xf2, 0xb3, + 0x18, 0x33, 0xfb, 0xb3, 0x31, 0xf3, 0x18, 0xc3, 0x0c, 0x3e, 0x2f, 0x9d, 0x6c, 0x03, 0x53, 0x2f, + 0x40, 0xe0, 0x01, 0x32, 0xff, 0xb1, 0xe4, 0xd0, 0x11, 0xbc, 0x6d, 0x99, 0x51, 0x42, 0x26, 0x5c, + 0xe1, 0x9d, 0xc8, 0x84, 0xc5, 0x41, 0x17, 0x9a, 0x4b, 0xde, 0x6f, 0x3a, 0x4c, 0x79, 0x49, 0xf6, + 0x74, 0x38, 0x60, 0x0a, 0x63, 0x9a, 0x7e, 0xe5, 0xb8, 0xe1, 0x29, 0x2a, 0x3e, 0x11, 0x54, 0xf9, + 0x25, 0xb1, 0x24, 0xd5, 0x75, 0x7d, 0x74, 0xdf, 0x21, 0x1b, 0x84, 0x3c, 0xef, 0x54, 0x53, 0xa6, + 0x75, 0x77, 0xa4, 0xf6, 0x5f, 0xa2, 0x81, 0x0b, 0xba, 0xf6, 0x63, 0x0e, 0x80, 0x4c, 0x84, 0xa7, + 0xae, 0x01, 0xc4, 0xe7, 0x6d, 0xbb, 0x6b, 0x64, 0xfd, 0xcf, 0x2c, 0x64, 0xa5, 0xfb, 0xba, 0x40, + 0x5e, 0x3c, 0xec, 0x7d, 0xd0, 0x19, 0x61, 0x71, 0x0b, 0xc6, 0xe2, 0x95, 0x15, 0x95, 0x5b, 0xf1, + 0x9c, 0xc4, 0xff, 0x53, 0x40, 0x77, 0xac, 0x51, 0x98, 0xa4, 0x8b, 0xaf, 0x53, 0x12, 0x7e, 0xe2, + 0xf3, 0xe4, 0xb5, 0xf1, 0x55, 0xcf, 0x06, 0x62, 0xe8, 0x7a, 0x60, 0x5c, 0xb0, 0x14, 0x55, 0x7f, + 0xa0, 0xca, 0x6b, 0xc5, 0x45, 0xd4, 0x14, 0x73, 0xae, 0x47, 0x3b, 0x76, 0x92, 0x4a, 0x83, 0x9e, + 0x76, 0xad, 0xe3, 0x55, 0x3e, 0xce, 0x49, 0xa9, 0x01, 0x95, 0x1c, 0x7c, 0xdf, 0x09, 0x8a, 0x4c, + 0xff, 0x7e, 0x8f, 0x27, 0xd7, 0xf4, 0x2b, 0x2a, 0x9b, 0x95, 0x84, 0x1f, 0xf3, 0xc5, 0x51, 0x17, + 0x64, 0x57, 0x23, 0xcb, 0x57, 0x17, 0x66, 0x04, 0xb2, 0x38, 0x7b, 0x06, 0x56, 0x18, 0x36, 0x59, + 0xef, 0x78, 0x40, 0xe9, 0x5c, 0x2f, 0x08, 0xaa, 0xfc, 0x1b, 0xd1, 0x03, 0xd3, 0x60, 0x72, 0x73, + 0x70, 0x3f, 0x7d, 0x4b, 0xcd, 0xa5, 0x1a, 0x2e, 0x7d, 0x86, 0xda, 0x51, 0x40, 0xa3, 0xb1, 0x03, + 0xd1, 0x8d, 0x5a, 0xa9, 0xd3, 0x87, 0xe1, 0x70, 0xaa, 0xbb, 0x6e, 0x69, 0x9d, 0x27, 0xb4, 0x9b, + 0x37, 0xd2, 0x47, 0xcf, 0x67, 0x06, 0xce, 0x6b, 0x6d, 0x23, 0xc0, 0x41, 0xe2, 0x84, 0x38, 0xe8, + 0x3d, 0x17, 0x9a, 0x85, 0x27, 0xb2, 0xce, 0x4f, 0x30, 0x66, 0x60, 0xe6, 0x01, 0xbb, 0xe9, 0x66, + 0x43, 0x31, 0xdc, 0x94, 0x8f, 0x0f, 0x98, 0x62, 0xe7, 0x63, 0x41, 0x95, 0x7f, 0x2b, 0x96, 0xd9, + 0x63, 0xa7, 0x99, 0xb4, 0x32, 0xe1, 0xe8, 0x59, 0x5b, 0x1c, 0x59, 0x01, 0x27, 0x88, 0xa9, 0x4a, + 0xb1, 0x62, 0x9c, 0x98, 0x82, 0x4f, 0x89, 0x1f, 0x08, 0x68, 0xaa, 0x49, 0x16, 0x58, 0xf7, 0x5c, + 0x53, 0xb5, 0xed, 0x9e, 0x9b, 0x05, 0x11, 0x8f, 0x7a, 0x36, 0xa9, 0xf2, 0x22, 0x7c, 0x08, 0x38, + 0x33, 0x7a, 0xe2, 0x1c, 0xdb, 0x72, 0xef, 0x80, 0x9f, 0xe9, 0xae, 0xeb, 0x5a, 0x7f, 0x0f, 0x2d, + 0x04, 0x9d, 0xd0, 0x3b, 0xce, 0xbd, 0x51, 0xbc, 0x2a, 0x20, 0x64, 0xf0, 0xa3, 0x55, 0xad, 0x35, + 0xea, 0x6c, 0xd5, 0x5a, 0xbe, 0x3a, 0x1e, 0xf5, 0x6c, 0x53, 0xe5, 0x07, 0xc5, 0xa9, 0xa6, 0x25, + 0x63, 0x6c, 0x0a, 0x32, 0xbf, 0x86, 0x7d, 0x59, 0x0f, 0xc7, 0xc2, 0xb1, 0x69, 0x99, 0x38, 0xde, + 0x51, 0xef, 0xa3, 0x7c, 0x5a, 0x4f, 0x8f, 0xd9, 0x74, 0xf4, 0xf7, 0xda, 0x11, 0x98, 0x19, 0xc6, + 0xf6, 0x54, 0x62, 0x07, 0x16, 0x8f, 0x7a, 0xce, 0x0a, 0xaa, 0xbc, 0x4d, 0xbc, 0x97, 0x8e, 0xff, + 0xf4, 0x61, 0x2c, 0x66, 0xa8, 0x27, 0xe0, 0xfe, 0x74, 0x4f, 0x3b, 0x05, 0xa5, 0xe4, 0xb7, 0x92, + 0x92, 0x1f, 0x07, 0x40, 0xb7, 0x7c, 0x52, 0x0f, 0xd3, 0xcc, 0x8e, 0x3f, 0xc0, 0x6c, 0xed, 0x20, + 0xa5, 0x25, 0x71, 0xa9, 0xcd, 0xfc, 0xa9, 0x9d, 0x20, 0x5e, 0xf9, 0x8a, 0x6e, 0x4a, 0x32, 0x54, + 0x5c, 0xf1, 0x1d, 0x17, 0x9a, 0x02, 0x21, 0x9e, 0x00, 0x05, 0x0b, 0xec, 0xe6, 0xc6, 0xcd, 0x7d, + 0x61, 0xce, 0xfa, 0x78, 0xd4, 0xf3, 0x99, 0xa0, 0xca, 0x97, 0x04, 0xf1, 0x0e, 0xd3, 0x22, 0xd2, + 0x39, 0xbe, 0x21, 0x80, 0x61, 0x8c, 0x62, 0x84, 0x30, 0x0f, 0x78, 0x4c, 0x9b, 0xe0, 0x78, 0x0e, + 0x1b, 0x3d, 0x7b, 0x1d, 0xe0, 0x20, 0xa1, 0x52, 0x16, 0x9f, 0xa5, 0xfa, 0xce, 0x41, 0xed, 0xe7, + 0x6d, 0x7b, 0x68, 0x13, 0x88, 0xaf, 0x42, 0x0a, 0x47, 0x5f, 0xbd, 0xc1, 0x37, 0xe1, 0x53, 0x2e, + 0x02, 0x18, 0x77, 0x98, 0x9d, 0x27, 0xe6, 0x38, 0xcc, 0x8a, 0xff, 0x49, 0x40, 0x33, 0xc9, 0x44, + 0x49, 0x0a, 0x0b, 0x86, 0xab, 0x45, 0xb6, 0xb8, 0xe0, 0x41, 0x6c, 0xcf, 0x3b, 0x36, 0x50, 0x70, + 0x48, 0x7f, 0x5a, 0xbc, 0x8b, 0xdd, 0x21, 0x5c, 0xd2, 0x3a, 0xae, 0x98, 0x71, 0x57, 0xc1, 0x57, + 0xb1, 0xd3, 0xdc, 0x6b, 0xfc, 0x4f, 0xb8, 0xdd, 0x81, 0x7b, 0x1d, 0x32, 0xa7, 0x7b, 0x44, 0x3b, + 0x2d, 0x3f, 0xbe, 0xdd, 0x1f, 0x53, 0x82, 0x3a, 0x01, 0xfc, 0xb3, 0x80, 0x44, 0x39, 0x18, 0x6c, + 0x68, 0xd9, 0x1a, 0x56, 0x12, 0x86, 0x6a, 0x7b, 0xaf, 0x8d, 0xe6, 0x9a, 0x05, 0x63, 0xcb, 0x0a, + 0x76, 0x60, 0xf1, 0xa8, 0xe7, 0x4d, 0x41, 0x95, 0x9f, 0x17, 0x4b, 0xe8, 0x40, 0x3f, 0x19, 0xd6, + 0x5e, 0x3b, 0xa3, 0xf5, 0x1d, 0xc6, 0x67, 0x39, 0x62, 0x85, 0x2b, 0x7d, 0xd2, 0xa9, 0xa6, 0xdc, + 0x9d, 0xe9, 0xf8, 0x34, 0xd3, 0x3f, 0x90, 0x1c, 0x3a, 0xb2, 0xb9, 0xbe, 0xa6, 0xa2, 0x66, 0x7d, + 0x5d, 0xea, 0xe2, 0x59, 0x6d, 0x84, 0xe8, 0x3a, 0x1c, 0x30, 0x99, 0xef, 0x0a, 0x4f, 0xe5, 0x78, + 0xb5, 0x94, 0x38, 0x19, 0x63, 0x1c, 0xef, 0xd9, 0x7f, 0xea, 0x42, 0xf3, 0x1a, 0x5e, 0x0a, 0x25, + 0x02, 0xdb, 0xe9, 0x80, 0x37, 0x85, 0x83, 0x4a, 0xac, 0xc9, 0xbf, 0x73, 0x3d, 0x84, 0x9e, 0x16, + 0x2d, 0xea, 0x5a, 0x2e, 0x68, 0x8c, 0x94, 0xa5, 0x13, 0x6b, 0x10, 0x8f, 0x7a, 0xfe, 0x98, 0x9c, + 0x02, 0xe6, 0x6a, 0x9d, 0xfb, 0x52, 0x07, 0xde, 0xd6, 0x55, 0x11, 0x88, 0x71, 0x0e, 0xf3, 0x2d, + 0x7d, 0x1e, 0x2a, 0xc1, 0xa6, 0xac, 0x9f, 0xf7, 0xb2, 0xa0, 0xe8, 0x05, 0x45, 0x0b, 0xfd, 0x84, + 0x9b, 0xaf, 0x2b, 0xd3, 0x11, 0x09, 0x50, 0xad, 0xd1, 0x40, 0x45, 0x20, 0x1c, 0xd2, 0x75, 0xbc, + 0x27, 0x3c, 0x8f, 0x8e, 0x5b, 0xc7, 0x83, 0xa1, 0xc7, 0x2b, 0xd9, 0x87, 0x30, 0x1e, 0xff, 0x52, + 0x40, 0xb3, 0xc0, 0x32, 0xb3, 0x39, 0x14, 0x4b, 0xb4, 0xf8, 0x9b, 0x18, 0x29, 0xdd, 0x6f, 0x6f, + 0xa1, 0x32, 0x43, 0x61, 0xbc, 0x95, 0x8d, 0x0f, 0x30, 0x1e, 0xf5, 0x28, 0xaa, 0xfc, 0xb8, 0x48, + 0x7d, 0x0d, 0x32, 0x27, 0x7a, 0x52, 0xfb, 0x4f, 0x03, 0x3a, 0x4a, 0xef, 0xb3, 0x96, 0x95, 0x27, + 0x3f, 0x3d, 0x99, 0xea, 0x7a, 0x33, 0x39, 0x74, 0x70, 0x7b, 0x24, 0x9e, 0xe0, 0x58, 0xde, 0xed, + 0x99, 0x6b, 0x33, 0xe1, 0x56, 0xce, 0x80, 0xf5, 0xa7, 0x02, 0x9a, 0x05, 0x3b, 0xe9, 0x58, 0x53, + 0xb2, 0x83, 0xb2, 0x9d, 0x92, 0x3d, 0x60, 0x3c, 0xea, 0x79, 0x4e, 0x95, 0xcb, 0x44, 0x7a, 0xd3, + 0x6d, 0x9a, 0x92, 0x4d, 0x19, 0x19, 0xfe, 0x62, 0xef, 0xfd, 0x39, 0x86, 0x6f, 0xda, 0xee, 0xfe, + 0x56, 0x40, 0x77, 0xc1, 0x29, 0xdc, 0xfc, 0xe1, 0x67, 0x5b, 0x22, 0x09, 0xbf, 0x58, 0x6e, 0x7f, + 0x60, 0xb7, 0x01, 0xc5, 0x33, 0xaa, 0x98, 0x00, 0x74, 0x3c, 0xea, 0x09, 0xe0, 0x69, 0xd1, 0xa4, + 0x0f, 0xa3, 0x1d, 0x07, 0x46, 0xdf, 0x3e, 0x59, 0x5a, 0x42, 0xfd, 0x4e, 0xb8, 0x09, 0x41, 0x0d, + 0x6c, 0x62, 0xa5, 0x15, 0xe3, 0x9c, 0x56, 0xe5, 0x6f, 0xf0, 0x57, 0xf0, 0x3a, 0x5d, 0x14, 0xd0, + 0xe4, 0x35, 0x0a, 0x38, 0x14, 0xd9, 0xa9, 0x18, 0xb8, 0x82, 0x29, 0x91, 0x0b, 0x1d, 0xeb, 0xa9, + 0xde, 0xf8, 0x4b, 0x55, 0x5e, 0x2a, 0x22, 0x90, 0xb6, 0xb8, 0xa2, 0xd4, 0xc3, 0x2b, 0x20, 0x24, + 0x31, 0x56, 0x5d, 0x7d, 0xba, 0xa7, 0x1d, 0x74, 0x42, 0x4e, 0xfd, 0xb0, 0x17, 0xb7, 0x58, 0xff, + 0xad, 0x7c, 0x25, 0x04, 0xcd, 0x7e, 0x2b, 0xfe, 0xa3, 0x80, 0xa6, 0xd0, 0x2f, 0x42, 0xae, 0x4c, + 0x87, 0xe1, 0x70, 0x89, 0xfc, 0xac, 0xc7, 0x65, 0x13, 0x0c, 0x1d, 0x36, 0x96, 0xb0, 0x8d, 0xe2, + 0x1c, 0x63, 0xdc, 0xfc, 0xe3, 0xc7, 0xd2, 0x75, 0xb9, 0xe6, 0xc0, 0x43, 0x96, 0x67, 0xb9, 0xa6, + 0xa6, 0x0e, 0x9e, 0xd7, 0xba, 0x0e, 0xa4, 0x3f, 0x18, 0x00, 0x47, 0x27, 0xe8, 0x26, 0x87, 0xb6, + 0x65, 0x9e, 0x6e, 0x65, 0x08, 0xcf, 0xf1, 0xa2, 0x80, 0xa6, 0xf9, 0x94, 0x40, 0x24, 0x16, 0xd4, + 0xa7, 0x6d, 0x63, 0xff, 0xe5, 0xeb, 0xd9, 0xcc, 0x4b, 0xad, 0xb9, 0xee, 0x58, 0xf2, 0x6f, 0x4f, + 0x83, 0x2a, 0x2f, 0x11, 0x4b, 0xb4, 0x1b, 0x47, 0xb5, 0x8e, 0xf3, 0xd6, 0x79, 0x94, 0x8a, 0x7c, + 0x0d, 0x9c, 0xe8, 0x60, 0xa3, 0xf7, 0xdc, 0xe9, 0x30, 0x6c, 0x4c, 0x49, 0xff, 0xb7, 0x80, 0xd0, + 0x26, 0xdd, 0x43, 0x4e, 0x74, 0xb0, 0x65, 0xf1, 0xf4, 0xe4, 0xc9, 0x05, 0x42, 0xd7, 0xe6, 0x0c, + 0xb1, 0x77, 0xcd, 0x00, 0xba, 0xc7, 0x9f, 0xa2, 0x63, 0x6c, 0xcc, 0x2e, 0xf9, 0x26, 0xed, 0x5d, + 0xf3, 0x4a, 0x73, 0x4d, 0xfc, 0x3f, 0xbb, 0xd0, 0x1d, 0x26, 0x43, 0x1d, 0x84, 0xfb, 0xb4, 0x1e, + 0xd4, 0x6d, 0x80, 0x1c, 0x0f, 0xea, 0xb6, 0xb0, 0x14, 0x27, 0xa3, 0xa0, 0x27, 0x2e, 0xa1, 0xa2, + 0x81, 0x4c, 0x01, 0x4e, 0x40, 0x9a, 0xda, 0x8d, 0x47, 0x85, 0x67, 0x72, 0xe3, 0x52, 0xfa, 0xc2, + 0x30, 0x04, 0xcb, 0xa3, 0x28, 0xdb, 0x35, 0x31, 0xf8, 0x72, 0x77, 0x72, 0x70, 0x28, 0x39, 0xb4, + 0x17, 0x6e, 0x34, 0xb4, 0xbe, 0x37, 0x47, 0xf7, 0x1d, 0x32, 0x9c, 0xf5, 0x46, 0x7a, 0xb4, 0xc3, + 0xdd, 0xa9, 0xbe, 0xf3, 0xd0, 0xa7, 0xbf, 0x25, 0x11, 0x89, 0x07, 0xfc, 0x4d, 0xa1, 0x70, 0xe3, + 0x86, 0x68, 0x22, 0x14, 0x09, 0xeb, 0xf1, 0xfc, 0x38, 0x26, 0x5f, 0x5e, 0xba, 0x64, 0xbc, 0xbb, + 0x24, 0x44, 0xed, 0xc3, 0xc8, 0xfd, 0x07, 0x01, 0x89, 0xc4, 0x70, 0x0e, 0xf4, 0xcd, 0x76, 0x11, + 0xeb, 0xd5, 0x0d, 0x83, 0x89, 0x3b, 0x52, 0x17, 0x0f, 0x42, 0x31, 0x79, 0x48, 0x50, 0xe5, 0x17, + 0xc5, 0x7b, 0xe1, 0x82, 0xda, 0xa0, 0x25, 0xea, 0x20, 0xdc, 0xf7, 0xa6, 0xd6, 0x7b, 0x71, 0x6b, + 0x80, 0x26, 0x5a, 0x2f, 0x7d, 0x38, 0xf5, 0x4e, 0x1b, 0x66, 0x62, 0x60, 0x0b, 0x3b, 0x90, 0xf2, + 0xd1, 0x37, 0x3f, 0x4c, 0xf5, 0xbd, 0x9d, 0x19, 0x18, 0xd0, 0xde, 0x3a, 0x95, 0x7a, 0xe3, 0x1a, + 0x67, 0x37, 0xb3, 0x37, 0x1b, 0x13, 0x96, 0x37, 0x2e, 0xd5, 0x05, 0xaf, 0x38, 0x28, 0x20, 0x54, + 0x13, 0x89, 0x05, 0x23, 0x61, 0x7b, 0x2e, 0x32, 0xea, 0x9c, 0xe7, 0xc9, 0x81, 0xd0, 0x79, 0x06, + 0x54, 0xf9, 0x61, 0x91, 0xba, 0xb5, 0x62, 0x35, 0xe8, 0xd0, 0x40, 0xe6, 0xf2, 0xab, 0xda, 0xd0, + 0xbb, 0xa9, 0xb6, 0xdd, 0xa5, 0x0b, 0xa8, 0x04, 0xe8, 0xff, 0x94, 0x7a, 0x57, 0xb2, 0x4a, 0xce, + 0xfa, 0x7f, 0x4f, 0xe9, 0x02, 0xa7, 0xd1, 0x07, 0xc8, 0xd7, 0xf0, 0xd0, 0x87, 0x04, 0x54, 0xbc, + 0x29, 0xcc, 0x0d, 0xde, 0x22, 0x7c, 0xf9, 0x5a, 0x36, 0xfc, 0x45, 0xb9, 0x81, 0xe8, 0x04, 0xb6, + 0xa8, 0xf2, 0x32, 0x51, 0xa4, 0xb6, 0x04, 0x7e, 0xf4, 0x73, 0xf9, 0xd1, 0xdb, 0x0d, 0xfd, 0xde, + 0x52, 0xb7, 0xd3, 0xd0, 0x5b, 0xc2, 0xa6, 0xc1, 0x17, 0xd5, 0xc6, 0xfc, 0x21, 0x18, 0xb9, 0xd5, + 0x6c, 0xc0, 0xaa, 0xd8, 0xb0, 0xef, 0xce, 0x01, 0x41, 0xc7, 0xbc, 0x5d, 0x95, 0x57, 0x8a, 0x5e, + 0x18, 0x5f, 0x34, 0x12, 0xcc, 0xdc, 0xdc, 0x9d, 0xbe, 0x30, 0x5c, 0xae, 0x5d, 0xde, 0xcb, 0xd6, + 0xe1, 0xb5, 0x74, 0x4f, 0xbb, 0xbb, 0x3e, 0x12, 0x74, 0x8f, 0xbe, 0x77, 0x65, 0xb4, 0xed, 0x70, + 0xe9, 0xf4, 0x2c, 0x58, 0x32, 0x7e, 0x8f, 0x67, 0xbe, 0xd3, 0xf8, 0x83, 0xf8, 0x93, 0x78, 0xf0, + 0xc3, 0x02, 0x9a, 0x61, 0xc8, 0xce, 0xb5, 0xfe, 0xad, 0x4a, 0x53, 0xdc, 0xaa, 0x68, 0x65, 0x43, + 0xb0, 0xa9, 0x94, 0x8d, 0x0d, 0x48, 0x67, 0xb4, 0x91, 0x28, 0x5a, 0x54, 0x07, 0x01, 0x36, 0x38, + 0xb3, 0x2f, 0xdd, 0xf7, 0x69, 0xa9, 0x4d, 0xd9, 0x58, 0x74, 0xd3, 0x44, 0xba, 0xc6, 0xa3, 0xff, + 0xb7, 0x02, 0x9a, 0x6d, 0x7c, 0x92, 0xf3, 0xa8, 0x73, 0x52, 0xaf, 0xb2, 0xc0, 0xd8, 0x3c, 0x2a, + 0xc6, 0x09, 0x4d, 0x27, 0xf3, 0x0b, 0xeb, 0x64, 0xae, 0x5e, 0xcc, 0x5c, 0x78, 0xa7, 0xd4, 0xa6, + 0x2c, 0xc7, 0x6d, 0x1f, 0xb0, 0x30, 0x17, 0xcd, 0xd6, 0xb2, 0x1e, 0x1b, 0xfd, 0xa1, 0x70, 0x22, + 0xe7, 0x7a, 0x00, 0xc4, 0x38, 0xd6, 0x83, 0x01, 0x3a, 0xaf, 0xc7, 0x95, 0xb3, 0xe9, 0x3d, 0xd7, + 0x4b, 0x6d, 0xca, 0xc6, 0x5a, 0x8f, 0x04, 0xe9, 0x1a, 0x8f, 0xfe, 0x9f, 0x20, 0x1e, 0x16, 0x15, + 0xb5, 0x35, 0x31, 0x25, 0xa8, 0x84, 0x13, 0x21, 0x7f, 0x93, 0x75, 0x06, 0x76, 0x50, 0xb6, 0xaa, + 0xbb, 0x3d, 0x60, 0x3c, 0xea, 0x39, 0x22, 0xa8, 0xf2, 0x66, 0x71, 0xbe, 0xc9, 0xe2, 0x61, 0x80, + 0x80, 0x56, 0x52, 0xfa, 0x20, 0x35, 0x7d, 0x1c, 0x3a, 0x9c, 0xfc, 0xf4, 0xad, 0x74, 0x4f, 0x3b, + 0x44, 0x5f, 0x7f, 0x46, 0xd9, 0x99, 0xb3, 0x59, 0x0e, 0xbb, 0x0e, 0x2d, 0x09, 0xe8, 0x2d, 0x2a, + 0x5f, 0x89, 0xb3, 0x3e, 0x7f, 0x2b, 0xfe, 0x37, 0x01, 0xdd, 0x69, 0xda, 0x7e, 0x39, 0x14, 0xe4, + 0xde, 0xd3, 0xcd, 0x58, 0x78, 0x60, 0xdc, 0xb0, 0xf1, 0xa8, 0xe7, 0x0f, 0x54, 0xf9, 0x09, 0x71, + 0xbe, 0xe9, 0x1e, 0xcf, 0x82, 0x87, 0xf9, 0xa0, 0x83, 0x3a, 0x00, 0x91, 0xf9, 0x3e, 0x58, 0x3a, + 0xe1, 0xf9, 0xe2, 0x25, 0xff, 0x2f, 0x02, 0xba, 0xd3, 0x64, 0xf7, 0xcc, 0x35, 0x65, 0x07, 0x40, + 0xdb, 0x29, 0x3b, 0xc2, 0xc6, 0xa3, 0x9e, 0x66, 0x55, 0x96, 0xc4, 0x3b, 0x4d, 0x66, 0x55, 0x03, + 0xa2, 0xd4, 0xa9, 0x02, 0x96, 0xd5, 0x3b, 0xf1, 0x65, 0xfd, 0x07, 0x01, 0xcd, 0xe6, 0x2c, 0x6e, + 0xdc, 0x0c, 0xcb, 0x72, 0x18, 0xe6, 0xcc, 0xf3, 0x5b, 0x3c, 0x4e, 0xc8, 0x78, 0xd4, 0xf3, 0xff, + 0x53, 0xe5, 0x7a, 0x47, 0xc2, 0xa6, 0x86, 0xa9, 0x4a, 0xab, 0x4d, 0x2f, 0x67, 0x03, 0xd0, 0x24, + 0xc4, 0x45, 0xe3, 0x99, 0xbb, 0xf8, 0x17, 0x02, 0x9a, 0x5d, 0x17, 0x0e, 0x25, 0x56, 0x2b, 0x41, + 0x05, 0xf2, 0xfa, 0x31, 0xe5, 0xc9, 0x32, 0x5f, 0x5b, 0x30, 0xdb, 0xf9, 0x3a, 0x40, 0xc6, 0xa3, + 0x78, 0x87, 0x5e, 0x2a, 0xce, 0xd1, 0x3a, 0x4f, 0x6a, 0x17, 0xf6, 0x6b, 0xdd, 0xc7, 0xc0, 0x03, + 0x86, 0x19, 0xa2, 0x1d, 0xca, 0x73, 0x68, 0x46, 0xa1, 0x70, 0x28, 0xb1, 0x4d, 0xb7, 0xb5, 0x11, + 0x35, 0x5b, 0x40, 0x77, 0xc8, 0xc1, 0x20, 0xfd, 0xba, 0x12, 0x64, 0xb3, 0xb1, 0xb3, 0xa3, 0x65, + 0x03, 0xe1, 0xb9, 0xdc, 0x3f, 0x2e, 0xb8, 0x78, 0xd4, 0x13, 0x23, 0xac, 0xa8, 0x5d, 0xde, 0xcb, + 0xac, 0x88, 0xaf, 0x9d, 0xc1, 0xa7, 0x21, 0xd3, 0x84, 0x72, 0x57, 0xc3, 0x25, 0xb9, 0xc7, 0xee, + 0x90, 0xe7, 0x0f, 0x06, 0xb7, 0xb1, 0x8f, 0x72, 0x93, 0xbb, 0x24, 0xa0, 0x29, 0x5c, 0xae, 0x28, + 0xeb, 0xd9, 0x96, 0xab, 0x74, 0x3c, 0xdb, 0x9a, 0x60, 0x8c, 0x2d, 0x62, 0x89, 0x38, 0x5d, 0xcf, + 0x33, 0x05, 0x8e, 0xc0, 0xa5, 0x73, 0xb3, 0x0a, 0x68, 0x96, 0x3e, 0x43, 0x57, 0x9f, 0xef, 0x29, + 0x71, 0x72, 0xf7, 0xc0, 0xc3, 0xbd, 0x2c, 0xa0, 0x29, 0x5c, 0x46, 0x1e, 0xd1, 0xe3, 0x24, 0xea, + 0x72, 0x0d, 0xd7, 0x04, 0x43, 0x87, 0xfb, 0x73, 0xbc, 0xa3, 0x4d, 0xd7, 0xb3, 0xf9, 0xd0, 0xe1, + 0xce, 0xce, 0x2a, 0xe0, 0xef, 0x17, 0x4b, 0x3d, 0x8e, 0x2e, 0x38, 0xba, 0x5b, 0x0a, 0x1e, 0xf2, + 0x27, 0x02, 0x9a, 0xc2, 0x65, 0x44, 0x71, 0xba, 0x6c, 0xcf, 0x3d, 0x64, 0x13, 0x8c, 0xa1, 0x9a, + 0x4a, 0xe2, 0x4c, 0x26, 0xad, 0x22, 0x2d, 0x41, 0x3a, 0xe8, 0xf9, 0xfc, 0x0d, 0x51, 0xc0, 0xa8, + 0xe0, 0x06, 0xbf, 0xc8, 0x3b, 0x8e, 0xc1, 0x8b, 0xef, 0x0b, 0xa8, 0x90, 0x6c, 0xa0, 0x78, 0xd8, + 0x0b, 0x6d, 0xb7, 0x56, 0x6e, 0xcc, 0x6e, 0x67, 0x00, 0x3a, 0xe0, 0xe7, 0x31, 0x49, 0x4c, 0x61, + 0x82, 0x26, 0xd2, 0x12, 0x2c, 0x5d, 0xc8, 0x9b, 0x38, 0xe8, 0x77, 0xad, 0x83, 0x15, 0xc7, 0x33, + 0xd8, 0xd3, 0x2e, 0x54, 0xa4, 0xe7, 0xbd, 0xb0, 0xea, 0xd1, 0x7a, 0x95, 0xa3, 0x1e, 0xcd, 0x41, + 0xd0, 0xf1, 0xfe, 0xb9, 0xa0, 0xca, 0x17, 0x05, 0x71, 0x26, 0x37, 0x62, 0x2a, 0x3f, 0xd5, 0x1c, + 0x97, 0x22, 0x3a, 0xd4, 0x77, 0x71, 0x25, 0x52, 0x2a, 0x3a, 0xb2, 0x0f, 0x3e, 0xe1, 0x4d, 0xe3, + 0x38, 0x75, 0x73, 0x7d, 0x8d, 0xd5, 0xa4, 0x63, 0xae, 0x67, 0xb8, 0xba, 0x6f, 0x2c, 0x30, 0x8a, + 0xb0, 0x9f, 0xe1, 0x05, 0x16, 0x75, 0x16, 0xdf, 0x5c, 0x5f, 0x43, 0x2d, 0x00, 0x25, 0x7c, 0x99, + 0x85, 0xe7, 0xed, 0x8d, 0xba, 0x64, 0xd0, 0xad, 0xd1, 0x00, 0xe6, 0xa1, 0x4f, 0x05, 0x34, 0x8d, + 0xe3, 0x5a, 0xdb, 0xa1, 0x9b, 0xeb, 0x1d, 0x87, 0x9e, 0x0d, 0x46, 0x87, 0xfe, 0x82, 0x2a, 0x7b, + 0x98, 0xcd, 0x33, 0x39, 0x74, 0xa4, 0x35, 0x1a, 0x60, 0xba, 0x2c, 0xfc, 0xe2, 0x86, 0x6b, 0x6f, + 0xed, 0x64, 0xc3, 0xe5, 0x7c, 0xd2, 0x5e, 0x69, 0x8d, 0x06, 0xa8, 0x10, 0xf8, 0x0b, 0x01, 0x4d, + 0xe3, 0x78, 0xd8, 0x76, 0x02, 0xe6, 0x7a, 0xc7, 0x09, 0x64, 0x83, 0xd1, 0x09, 0x34, 0xa9, 0xf2, + 0x0a, 0x71, 0x36, 0x27, 0x0d, 0xdc, 0xfa, 0xa8, 0x4b, 0xe7, 0x5a, 0x24, 0x82, 0xdb, 0x3c, 0xa5, + 0x4a, 0xef, 0xc4, 0xa6, 0x24, 0x5e, 0x75, 0xa1, 0x62, 0x9d, 0x61, 0xf0, 0x6c, 0xee, 0x71, 0x64, + 0x27, 0x6e, 0x2e, 0x8b, 0x72, 0x03, 0xd1, 0x99, 0xfc, 0xb5, 0xa0, 0xca, 0x97, 0x05, 0x71, 0x36, + 0xc7, 0x76, 0xee, 0xcd, 0xf5, 0x35, 0x94, 0xf5, 0x8e, 0xe5, 0x66, 0x3d, 0x03, 0xf2, 0xbb, 0x60, + 0xbf, 0xf9, 0x62, 0x2e, 0x4a, 0x16, 0x3f, 0x17, 0xd0, 0x0c, 0x4e, 0xcc, 0x34, 0x92, 0xb3, 0xe6, + 0xfd, 0x39, 0x04, 0x51, 0x23, 0x7f, 0xcc, 0x2c, 0x1b, 0x1b, 0xd0, 0x70, 0xa8, 0xa9, 0x13, 0x4b, + 0x78, 0xfc, 0xc1, 0xeb, 0x14, 0xfd, 0x5a, 0x92, 0x60, 0x90, 0x2e, 0xaa, 0x1e, 0xcc, 0x5f, 0xbb, + 0x72, 0x8a, 0x25, 0xca, 0x85, 0x47, 0x2d, 0x1c, 0x81, 0x78, 0xc5, 0x32, 0xa7, 0x89, 0x41, 0xd7, + 0x9c, 0x24, 0xfe, 0x63, 0x70, 0x2f, 0xd8, 0x5c, 0x5f, 0x53, 0x13, 0x0a, 0xda, 0x58, 0xcc, 0x8c, + 0x3a, 0x47, 0x4b, 0x12, 0x0f, 0x62, 0xd0, 0xf7, 0x93, 0xe2, 0x2c, 0x98, 0x53, 0x6b, 0x34, 0xe0, + 0x0e, 0x84, 0x82, 0xec, 0x9a, 0x95, 0x86, 0x13, 0x24, 0xa4, 0xc9, 0xcf, 0xa6, 0x35, 0x1a, 0x48, + 0xf7, 0xb4, 0x63, 0xc0, 0x31, 0x77, 0x93, 0xd6, 0x68, 0x00, 0xc3, 0xe9, 0xf4, 0xfd, 0x6f, 0x04, + 0x34, 0xbd, 0x26, 0xeb, 0x6d, 0xb9, 0x83, 0x14, 0xd4, 0x01, 0xd8, 0x6c, 0xee, 0x1f, 0x13, 0x8e, + 0x4e, 0xe9, 0xd7, 0xaa, 0xfc, 0x14, 0x53, 0x91, 0xa8, 0xf3, 0xd6, 0x70, 0x7b, 0x69, 0x45, 0x56, + 0x01, 0xdc, 0xa9, 0xde, 0x1a, 0xe9, 0xa6, 0xf6, 0xfd, 0x91, 0xeb, 0xa9, 0xb6, 0x0b, 0xc9, 0x91, + 0xc1, 0xf4, 0xc8, 0x7b, 0xcc, 0x4c, 0x7c, 0xb7, 0x67, 0x9e, 0xc3, 0xe9, 0x9a, 0xb8, 0xb3, 0x63, + 0x01, 0xf4, 0x27, 0x02, 0x9a, 0xbe, 0x29, 0xeb, 0x19, 0xf9, 0x7d, 0xce, 0xe7, 0xfd, 0xdc, 0x13, + 0xb2, 0xc0, 0xd1, 0x09, 0xbd, 0xc8, 0x29, 0x51, 0x7a, 0x2d, 0x53, 0xa2, 0xf4, 0x02, 0x5e, 0xee, + 0x94, 0x7a, 0x73, 0x0d, 0xbc, 0xf2, 0x15, 0x2e, 0x53, 0x12, 0x91, 0xa3, 0x7f, 0xe2, 0x42, 0xd3, + 0x6b, 0xb3, 0x1e, 0xe0, 0xdf, 0xe7, 0xec, 0x99, 0x98, 0x7b, 0x1a, 0x16, 0x38, 0x3a, 0x8d, 0xdf, + 0x09, 0xaa, 0xfc, 0x9e, 0x80, 0x57, 0x06, 0x4b, 0x4d, 0x63, 0x22, 0x47, 0x05, 0x5e, 0x8e, 0xea, + 0xe5, 0x58, 0x6a, 0xdc, 0x78, 0x5d, 0xff, 0x99, 0xea, 0xed, 0x4a, 0x1f, 0x3d, 0xa1, 0xf5, 0xbd, + 0x99, 0xee, 0x69, 0xc7, 0x85, 0xa9, 0xe3, 0xd7, 0xe0, 0x06, 0x40, 0xeb, 0xd8, 0x9d, 0xe9, 0x1f, + 0x4c, 0xbf, 0xf5, 0x51, 0xea, 0xe0, 0x79, 0xe8, 0x48, 0x97, 0x37, 0x99, 0x77, 0x77, 0x43, 0x49, + 0xaa, 0xb7, 0x6b, 0x3d, 0xb5, 0x8b, 0xb3, 0xf5, 0x27, 0xf7, 0x0b, 0x9f, 0x50, 0x3b, 0xe3, 0xc8, + 0x90, 0xd6, 0x79, 0x8d, 0x82, 0x32, 0x91, 0x45, 0x30, 0x59, 0xee, 0x9d, 0x00, 0x26, 0xc5, 0x3f, + 0x12, 0x50, 0x31, 0xbd, 0x90, 0x02, 0x1c, 0x3a, 0x5d, 0x57, 0x99, 0x10, 0xb8, 0x28, 0x37, 0x10, + 0xc5, 0x9e, 0x82, 0xcf, 0x63, 0xd3, 0x8d, 0x3b, 0x2d, 0xc0, 0xdd, 0x7c, 0x5e, 0xd3, 0x5b, 0x6f, + 0x8c, 0x85, 0x23, 0x86, 0x72, 0x71, 0x22, 0x53, 0xf8, 0x07, 0x01, 0xdc, 0xd3, 0x38, 0xe7, 0x4b, + 0x98, 0xca, 0x03, 0x39, 0x8e, 0xca, 0x96, 0x29, 0x95, 0x8f, 0x0f, 0x98, 0x4e, 0x6d, 0x97, 0x2a, + 0xaf, 0x14, 0x17, 0xf0, 0x3e, 0x67, 0x74, 0x8d, 0x09, 0x18, 0x95, 0x46, 0x34, 0x5d, 0x14, 0xef, + 0xd2, 0x49, 0x5e, 0xef, 0xeb, 0xe7, 0xe8, 0x15, 0xa2, 0x34, 0x11, 0xc7, 0x4c, 0x32, 0xf9, 0xb8, + 0xf8, 0x89, 0x0b, 0x4d, 0x65, 0x7e, 0x85, 0x30, 0xd1, 0x45, 0x4e, 0x6e, 0x87, 0xa6, 0x19, 0xde, + 0x3b, 0x06, 0x14, 0x9d, 0xda, 0x7f, 0x32, 0x6d, 0xba, 0xd9, 0x73, 0x72, 0xde, 0x74, 0xb3, 0x20, + 0xbf, 0x8b, 0x4d, 0x77, 0x81, 0x98, 0x53, 0xfa, 0x89, 0xff, 0x5d, 0x40, 0x33, 0xd6, 0x45, 0x5a, + 0x15, 0xea, 0x08, 0x0e, 0xc8, 0xb3, 0x08, 0x83, 0x6c, 0x08, 0xc7, 0x5d, 0xd7, 0x0a, 0x48, 0x51, + 0xd8, 0x2d, 0xa8, 0xf2, 0x06, 0x76, 0xd9, 0x91, 0xbe, 0x30, 0x6c, 0xdc, 0x64, 0x5e, 0x39, 0x53, + 0xfa, 0x90, 0x76, 0x79, 0x2f, 0xf5, 0x00, 0xfa, 0xe4, 0x43, 0x2c, 0x22, 0x74, 0x0e, 0xe7, 0x00, + 0xb1, 0xb4, 0x27, 0x01, 0x85, 0xd2, 0x43, 0x57, 0xd3, 0xfd, 0x67, 0x19, 0x6f, 0xdb, 0xfb, 0xc8, + 0x38, 0x30, 0x86, 0x7e, 0x3b, 0x78, 0xc4, 0x85, 0x66, 0xf9, 0x94, 0x66, 0x36, 0xda, 0xd5, 0xb1, + 0x48, 0xb3, 0x03, 0x83, 0xd8, 0x41, 0x39, 0x32, 0x88, 0x3d, 0x30, 0x45, 0xc1, 0x49, 0x72, 0xad, + 0x35, 0x5b, 0x9f, 0x4d, 0xfa, 0xc2, 0xf0, 0xe8, 0x09, 0xe6, 0xf1, 0xbc, 0xc6, 0xec, 0x02, 0x9e, + 0x1c, 0x3e, 0xa8, 0xc3, 0x25, 0x07, 0xfb, 0x00, 0x94, 0x84, 0xe3, 0xd8, 0x9b, 0x7a, 0x73, 0x20, + 0x33, 0x40, 0x71, 0x92, 0x1c, 0x3e, 0x90, 0x6e, 0xbf, 0xa6, 0xf5, 0x5e, 0x64, 0x4e, 0x9e, 0x7d, + 0x80, 0x13, 0xef, 0x97, 0xc1, 0xc9, 0x17, 0x79, 0x68, 0x66, 0x4d, 0x93, 0xe2, 0x0f, 0x53, 0xef, + 0x5c, 0x40, 0x88, 0xd5, 0x87, 0x25, 0x1b, 0x84, 0x61, 0x63, 0xf1, 0x38, 0x20, 0xd9, 0x0d, 0x5f, + 0x9e, 0x2a, 0xff, 0xb9, 0x4b, 0x9c, 0xcb, 0x5f, 0xc8, 0xd1, 0x99, 0xb2, 0xa5, 0x2f, 0xbd, 0xe4, + 0x1a, 0x27, 0x4a, 0xae, 0x9f, 0x4e, 0x0e, 0x1f, 0xd4, 0x11, 0xa0, 0x97, 0x6b, 0xd7, 0xaf, 0xa5, + 0x06, 0x3b, 0xd2, 0x87, 0xf7, 0x82, 0x8e, 0xc0, 0x7f, 0xea, 0xf3, 0xb6, 0x3d, 0xc6, 0xad, 0xf4, + 0xe0, 0x90, 0x36, 0xb2, 0x27, 0xd5, 0x47, 0x7f, 0xe2, 0x86, 0x37, 0x5e, 0xd7, 0x6b, 0x21, 0x2e, + 0x3d, 0xcd, 0x29, 0x09, 0x7b, 0xd5, 0x70, 0x47, 0xe6, 0xd5, 0x1b, 0xe9, 0xb3, 0xfd, 0x98, 0xe7, + 0x48, 0xff, 0xf0, 0x9e, 0x05, 0x20, 0x41, 0x3d, 0x81, 0x2d, 0x2d, 0xf3, 0xea, 0x8d, 0xe4, 0xcd, + 0x93, 0x99, 0x01, 0x16, 0xf1, 0x8a, 0x00, 0x6b, 0x9f, 0x7c, 0x98, 0x1e, 0x3e, 0xa4, 0xf5, 0x77, + 0xa7, 0x3a, 0x0f, 0xeb, 0xf2, 0x00, 0x22, 0xa9, 0x40, 0x9f, 0x99, 0x9b, 0x6f, 0x69, 0x43, 0xef, + 0xde, 0x1a, 0xe9, 0xa6, 0xe1, 0x55, 0xda, 0x7a, 0x32, 0x37, 0xf7, 0xd1, 0xa7, 0xa7, 0x3d, 0xed, + 0x1b, 0xfd, 0xf1, 0x1d, 0xc0, 0x05, 0x99, 0x81, 0x77, 0xd3, 0xc3, 0x7b, 0x81, 0xeb, 0x19, 0x2f, + 0x3c, 0xea, 0x5d, 0x31, 0x81, 0x75, 0x27, 0x65, 0x6c, 0xf1, 0x2f, 0xe5, 0xa3, 0x3b, 0x2c, 0xeb, + 0xb5, 0x59, 0xb2, 0xda, 0x99, 0x6d, 0x80, 0x1c, 0xaf, 0xcb, 0x6d, 0x61, 0x29, 0x09, 0x0c, 0xe7, + 0xa9, 0xf2, 0xff, 0x74, 0x89, 0x4f, 0xe7, 0x20, 0x01, 0x3d, 0xfc, 0xcc, 0x6f, 0x5a, 0x94, 0xd8, + 0x4e, 0x9a, 0x81, 0x9b, 0xd0, 0x04, 0xe0, 0x06, 0x30, 0xfa, 0x23, 0xc5, 0x7c, 0x05, 0x8a, 0x79, + 0xc8, 0x86, 0x62, 0xa4, 0xb1, 0x29, 0x46, 0xfc, 0x8f, 0xf4, 0xb0, 0x66, 0x12, 0x15, 0xe3, 0xd2, + 0x93, 0xca, 0x72, 0xbc, 0x07, 0x30, 0x0b, 0x89, 0xb8, 0x2a, 0x3f, 0x2a, 0xce, 0x80, 0xf1, 0xe2, + 0x8f, 0xd2, 0xed, 0x96, 0xba, 0x1f, 0x6b, 0x57, 0x4e, 0x25, 0x87, 0x0e, 0xea, 0x92, 0x10, 0xcb, + 0x53, 0x50, 0x37, 0x38, 0x65, 0x62, 0x99, 0x38, 0x51, 0x39, 0x28, 0xfe, 0xbd, 0x60, 0x7a, 0xf0, + 0xc0, 0xd8, 0x60, 0xf1, 0x58, 0xa3, 0x36, 0xb8, 0xc0, 0x3b, 0x1e, 0xd0, 0x6f, 0x74, 0x8a, 0xd2, + 0x18, 0x53, 0xcc, 0x43, 0x73, 0xe0, 0x90, 0x42, 0xca, 0x6b, 0x95, 0x78, 0x28, 0xa6, 0x10, 0x4f, + 0x25, 0xd1, 0xe1, 0xb2, 0x36, 0x1b, 0x8e, 0x4d, 0x75, 0xc9, 0x78, 0xc1, 0xe9, 0x74, 0x53, 0x2e, + 0x55, 0x3e, 0xeb, 0x12, 0xef, 0x84, 0x33, 0x0f, 0x07, 0x41, 0x4d, 0x31, 0x1d, 0xae, 0xec, 0xd3, + 0xd0, 0x60, 0x9f, 0x05, 0x8a, 0xba, 0x14, 0x81, 0xf9, 0x69, 0xa4, 0x47, 0x1b, 0x18, 0xc9, 0xec, + 0xfb, 0x48, 0x6f, 0x41, 0xa9, 0x5f, 0x0f, 0x42, 0x30, 0x72, 0x54, 0xeb, 0x38, 0x4f, 0x83, 0xe7, + 0x13, 0x2e, 0xd0, 0xef, 0x3c, 0xb4, 0xeb, 0xd7, 0xe0, 0x92, 0x80, 0x45, 0x26, 0x34, 0x38, 0x1c, + 0xce, 0x13, 0xe9, 0x9e, 0xf6, 0xa0, 0xf1, 0x71, 0xed, 0xd0, 0xfb, 0x99, 0x57, 0x6f, 0xa4, 0x06, + 0xde, 0xd0, 0x6e, 0xbc, 0xae, 0x75, 0x1d, 0xc8, 0x5c, 0x20, 0xae, 0x34, 0xe7, 0x2e, 0xe8, 0x9c, + 0x9b, 0x1a, 0x78, 0x23, 0x79, 0x7d, 0xbf, 0xd6, 0x75, 0x40, 0xbb, 0x7c, 0xe8, 0xd6, 0xc8, 0x5b, + 0xc6, 0xd9, 0x65, 0xdf, 0x21, 0xed, 0xf2, 0x21, 0x7e, 0x09, 0xa1, 0x6d, 0x66, 0xe0, 0x13, 0x90, + 0x6e, 0x16, 0x29, 0x49, 0x16, 0xf6, 0x31, 0xcf, 0x43, 0x13, 0xa0, 0x5d, 0x3a, 0x50, 0x26, 0xcd, + 0x87, 0x5c, 0x76, 0x4b, 0x4c, 0xd2, 0x56, 0x8c, 0x63, 0x89, 0x31, 0xdc, 0x04, 0x96, 0x18, 0xc0, + 0xe9, 0x12, 0xff, 0x91, 0xa0, 0xca, 0x7f, 0x90, 0xb5, 0xc2, 0x18, 0x80, 0xae, 0xb0, 0xdf, 0xba, + 0xc0, 0x9c, 0x97, 0x12, 0x00, 0xa5, 0x7b, 0xda, 0xb9, 0x86, 0xba, 0xbf, 0x1b, 0x41, 0xf4, 0x30, + 0x16, 0xfb, 0x6f, 0x0e, 0x24, 0x6f, 0xf6, 0xa7, 0xfa, 0xde, 0xa1, 0xcf, 0x9a, 0x06, 0x0f, 0x24, + 0x07, 0xdb, 0x32, 0xfb, 0x3e, 0x82, 0x38, 0x07, 0x5f, 0x1e, 0x79, 0xf1, 0xd0, 0x2e, 0x82, 0xbc, + 0x8f, 0x5c, 0xcc, 0xf3, 0x81, 0x40, 0xac, 0x0b, 0x85, 0xd7, 0xf9, 0x5f, 0x26, 0xb8, 0x2b, 0xcf, + 0x81, 0x0c, 0x03, 0x6c, 0x0c, 0xcf, 0x07, 0x0b, 0x34, 0xc5, 0xdc, 0x0d, 0xe2, 0x53, 0x37, 0x17, + 0x10, 0xd4, 0x1c, 0x0a, 0xe3, 0xca, 0xca, 0x66, 0x00, 0xa2, 0xd8, 0xfb, 0xe5, 0xf8, 0xb0, 0x07, + 0x69, 0xce, 0xf0, 0xff, 0x2f, 0x1f, 0x1a, 0x3d, 0x71, 0x78, 0xf4, 0xed, 0x93, 0x3c, 0xee, 0xb4, + 0x03, 0x87, 0x32, 0x97, 0x5f, 0xd5, 0xce, 0xf5, 0xe8, 0x38, 0x00, 0x6e, 0x01, 0x0d, 0xc2, 0x33, + 0x11, 0x0d, 0x62, 0x6b, 0xa4, 0x25, 0xac, 0xa3, 0xad, 0xd3, 0x4c, 0x73, 0x72, 0x7c, 0x63, 0xa8, + 0x59, 0xf1, 0xf9, 0xc3, 0x8d, 0xb9, 0x69, 0x8e, 0x83, 0x1b, 0x0f, 0xcd, 0x99, 0xc0, 0x29, 0xe6, + 0x0e, 0x0a, 0xf0, 0x46, 0xce, 0xe4, 0x5d, 0x71, 0x46, 0xeb, 0xef, 0x49, 0x1d, 0xbf, 0x96, 0xea, + 0x7a, 0x0f, 0x9e, 0x53, 0xa6, 0xfb, 0x8e, 0xa5, 0x8f, 0x9e, 0x2f, 0x1d, 0x17, 0xd4, 0x97, 0x40, + 0x45, 0x22, 0xd4, 0xac, 0xc4, 0xf0, 0xa8, 0x88, 0xa7, 0x89, 0x8b, 0xe4, 0xc9, 0xb2, 0xa6, 0x4d, + 0xae, 0xde, 0xc9, 0x72, 0x77, 0x97, 0xdb, 0xec, 0x95, 0x8e, 0x29, 0xb3, 0xad, 0xa4, 0x94, 0x33, + 0x29, 0xb3, 0x67, 0x58, 0x50, 0xe5, 0x3f, 0x14, 0x2b, 0x68, 0x84, 0x17, 0x4e, 0xf2, 0x64, 0x3d, + 0x87, 0x84, 0x47, 0xba, 0x90, 0xb2, 0xb9, 0x74, 0x9d, 0xe1, 0x6f, 0x07, 0xa6, 0x1a, 0x62, 0x26, + 0x4c, 0x0e, 0x1d, 0xb1, 0xb6, 0x63, 0xb9, 0xc0, 0xb3, 0x1e, 0xef, 0x24, 0x94, 0x70, 0x40, 0x09, + 0x83, 0xd5, 0x35, 0xc7, 0x61, 0xde, 0x38, 0xb7, 0x67, 0xe1, 0x30, 0x4e, 0x66, 0x21, 0x1e, 0x76, + 0xa1, 0x79, 0x1b, 0x63, 0xfe, 0x70, 0x5c, 0xa7, 0xf3, 0x8d, 0x91, 0xf5, 0x5c, 0x3c, 0x34, 0x71, + 0x79, 0x36, 0x36, 0x72, 0x41, 0x33, 0x14, 0xae, 0x98, 0x58, 0x23, 0x8a, 0xc9, 0x76, 0x41, 0x95, + 0x57, 0x8b, 0x0b, 0x74, 0x72, 0xc9, 0xdc, 0xb8, 0x44, 0xde, 0x2c, 0x50, 0x0b, 0x24, 0xbd, 0x54, + 0x5c, 0x94, 0xa3, 0x3e, 0xdd, 0xd5, 0xc9, 0x79, 0xbe, 0x3c, 0xe8, 0x59, 0x3e, 0x11, 0xa2, 0x62, + 0x33, 0x3e, 0xea, 0x42, 0x25, 0xab, 0x48, 0x2c, 0x54, 0x7d, 0xc0, 0x72, 0x4b, 0x22, 0x42, 0x42, + 0x3f, 0x5a, 0x9f, 0x73, 0x38, 0x41, 0x32, 0x54, 0x2c, 0x1d, 0x7f, 0x03, 0x8a, 0x86, 0xa3, 0xc0, + 0x61, 0x10, 0x9c, 0xd5, 0x98, 0x2c, 0x10, 0x03, 0xf1, 0xce, 0xd5, 0x39, 0xa8, 0xd4, 0x04, 0x45, + 0x37, 0x3c, 0x02, 0x02, 0x66, 0x59, 0x78, 0xca, 0x4f, 0x90, 0xf1, 0x94, 0xe7, 0xb1, 0x09, 0x20, + 0x83, 0x49, 0x3a, 0xa5, 0x12, 0xa2, 0xc2, 0x62, 0x46, 0x3b, 0xe1, 0x42, 0x77, 0xd5, 0x86, 0xe2, + 0x0e, 0x88, 0xb1, 0xcc, 0xd3, 0x11, 0x94, 0x61, 0x66, 0xd9, 0x04, 0x5a, 0x50, 0xd4, 0x1c, 0xa3, + 0xa8, 0xe9, 0xb8, 0x3a, 0x7a, 0xbc, 0x6f, 0x4c, 0xd4, 0x70, 0x50, 0x39, 0x51, 0x23, 0x7b, 0x1e, + 0xff, 0x52, 0xa8, 0x09, 0xc2, 0x78, 0x31, 0x6e, 0xde, 0x81, 0x3c, 0x94, 0xb6, 0xa1, 0x83, 0xac, + 0x34, 0x33, 0x46, 0xb8, 0x28, 0x2b, 0xcd, 0x8c, 0x15, 0x95, 0xc8, 0xf3, 0x0e, 0x31, 0x77, 0x94, + 0xf0, 0x61, 0xa6, 0xf8, 0x78, 0x44, 0xa5, 0xf4, 0x36, 0x82, 0x85, 0x16, 0x03, 0x71, 0x03, 0x77, + 0x2b, 0x34, 0xfe, 0x55, 0xe7, 0xb1, 0x4c, 0x5b, 0x87, 0xae, 0xca, 0x41, 0x63, 0x3d, 0xb6, 0x11, + 0xb7, 0xdb, 0x57, 0x89, 0x8f, 0xd8, 0x3f, 0x13, 0x24, 0x1d, 0xc3, 0x3b, 0x41, 0x1a, 0xbe, 0xec, + 0xb7, 0x95, 0x7a, 0x64, 0xb3, 0x16, 0x82, 0x88, 0x7e, 0x01, 0x21, 0xb8, 0x82, 0x20, 0x61, 0x5c, + 0x1c, 0x82, 0xcf, 0xe0, 0x3a, 0x67, 0xcf, 0x5e, 0x0e, 0xc4, 0xf0, 0x62, 0x5c, 0x21, 0x16, 0xd3, + 0x7b, 0x5d, 0x08, 0x77, 0xb1, 0x88, 0xc6, 0x60, 0x39, 0x7a, 0x33, 0x75, 0xfc, 0xda, 0xe8, 0xf1, + 0x8f, 0x32, 0x37, 0x0f, 0x67, 0xce, 0xfe, 0x7f, 0xdc, 0x5d, 0x5d, 0x6c, 0x14, 0xd7, 0xbd, 0xbf, + 0xb3, 0xd1, 0x8d, 0x72, 0x47, 0xba, 0x81, 0x7b, 0x08, 0x01, 0x26, 0xb9, 0x66, 0xb3, 0xf7, 0x5e, + 0x3e, 0x1c, 0xf0, 0x02, 0x21, 0x84, 0x8b, 0x42, 0x93, 0x31, 0x4e, 0x8c, 0x63, 0x92, 0x38, 0x98, + 0xd2, 0x94, 0xb7, 0xf5, 0x7a, 0x62, 0x6f, 0x6c, 0xef, 0x6e, 0x77, 0xc6, 0xa6, 0x8e, 0xe5, 0x2a, + 0x14, 0x0c, 0x31, 0x06, 0x0c, 0x6b, 0x08, 0x85, 0x92, 0x04, 0x57, 0x71, 0x70, 0x49, 0x62, 0x48, + 0x42, 0x60, 0xb3, 0x2e, 0xd0, 0x3c, 0xf4, 0x21, 0x6a, 0x94, 0x2a, 0x95, 0x1a, 0xa9, 0xed, 0x43, + 0xd5, 0x76, 0x67, 0xbd, 0xee, 0x43, 0xfa, 0x10, 0x55, 0xaa, 0xa2, 0xa6, 0xaa, 0xe6, 0xfc, 0xcf, + 0x99, 0x39, 0xb3, 0x73, 0xce, 0xcc, 0xae, 0x41, 0xa1, 0xea, 0x0b, 0xac, 0xe7, 0xfc, 0x66, 0xf7, + 0xfc, 0x7e, 0x73, 0xbe, 0xe6, 0x9c, 0xff, 0xc7, 0xa1, 0x99, 0xd3, 0xfb, 0xcc, 0xa3, 0x47, 0xcc, + 0xd1, 0x8b, 0x4c, 0x54, 0x16, 0xbe, 0x41, 0xbf, 0x11, 0xd3, 0xbb, 0xac, 0xc7, 0xba, 0x37, 0x24, + 0xff, 0x07, 0x0e, 0x1a, 0x83, 0xeb, 0x1b, 0xe6, 0xc6, 0x93, 0x61, 0xab, 0x7b, 0x9f, 0x0f, 0x82, + 0xd4, 0xf6, 0x22, 0x5e, 0xb3, 0xcd, 0x27, 0xc1, 0x66, 0x70, 0x14, 0x19, 0xab, 0x5c, 0xe9, 0x24, + 0x31, 0x66, 0xf0, 0x15, 0x4b, 0x78, 0x5c, 0xc7, 0x55, 0x61, 0x12, 0xd7, 0x1b, 0xc3, 0x21, 0x82, + 0x77, 0x5d, 0x18, 0xfe, 0x2a, 0x4c, 0x0f, 0xcd, 0x9e, 0x3a, 0x5a, 0xc8, 0x1f, 0x81, 0x7b, 0xe0, + 0x86, 0x42, 0xee, 0x78, 0x61, 0xfa, 0x08, 0x2c, 0x9b, 0xe1, 0xba, 0x6e, 0x68, 0x69, 0x6b, 0x94, + 0x38, 0x37, 0x52, 0x1c, 0x3e, 0x57, 0x1a, 0x3f, 0xe4, 0x13, 0xbe, 0xc2, 0xa2, 0x1d, 0x1d, 0xb0, + 0xfe, 0x75, 0x85, 0xa1, 0xc9, 0x85, 0xe4, 0x3b, 0x5a, 0xbb, 0x12, 0x69, 0x2c, 0x82, 0xc7, 0xfa, + 0x82, 0x96, 0x08, 0xad, 0x2f, 0x1c, 0x00, 0x91, 0xa0, 0x24, 0x65, 0xd5, 0x4b, 0x12, 0xba, 0xbb, + 0x74, 0xe5, 0xbd, 0xd2, 0xf5, 0x03, 0x6c, 0x5d, 0xb1, 0x12, 0xa7, 0x24, 0x5f, 0x29, 0xe0, 0x2e, + 0x2a, 0x05, 0xfb, 0x97, 0x35, 0x37, 0xe2, 0x0f, 0xec, 0x57, 0xb2, 0xb2, 0x14, 0x72, 0x23, 0x85, + 0xdc, 0x8b, 0xc5, 0xb7, 0x27, 0x58, 0x3d, 0x56, 0x85, 0x09, 0xe4, 0x83, 0x91, 0xd9, 0x93, 0x97, + 0x8a, 0x67, 0x86, 0x67, 0x7e, 0x98, 0x2b, 0xe4, 0xb3, 0x85, 0x6b, 0xaf, 0x94, 0xde, 0x7f, 0xb9, + 0x90, 0x3b, 0x6c, 0x4e, 0xe7, 0x4b, 0x53, 0x53, 0xf0, 0x3b, 0x70, 0x02, 0xa9, 0xfc, 0x5f, 0xa0, + 0x76, 0x7a, 0x57, 0x02, 0x1f, 0x76, 0x8d, 0xdb, 0x1e, 0x21, 0xfc, 0x16, 0xef, 0x94, 0x05, 0x78, + 0x84, 0xb8, 0x04, 0xdc, 0x96, 0x55, 0x6b, 0x90, 0x0c, 0x8b, 0x2b, 0x2c, 0xd9, 0x7c, 0xe7, 0x33, + 0x73, 0x8c, 0xc1, 0xb7, 0xfb, 0x76, 0x55, 0xd4, 0xaa, 0xe3, 0xab, 0x92, 0x2c, 0xc3, 0x01, 0x14, + 0xbf, 0x8e, 0x4e, 0x99, 0xb0, 0x8e, 0x2c, 0x84, 0xd4, 0xb1, 0x09, 0xd7, 0x11, 0x0e, 0x88, 0xa0, + 0x8e, 0xec, 0x91, 0x95, 0x75, 0x05, 0x6c, 0xbb, 0x6b, 0x03, 0xeb, 0x88, 0x5e, 0x01, 0x07, 0x2d, + 0x5c, 0x3b, 0x9e, 0x83, 0x16, 0x5b, 0xb5, 0xa5, 0xc2, 0x72, 0x52, 0xaf, 0x67, 0xb2, 0xea, 0x32, + 0xea, 0xa0, 0x85, 0xeb, 0xb5, 0x98, 0x3d, 0x0f, 0xda, 0x81, 0x7f, 0x92, 0xd1, 0x30, 0x82, 0x82, + 0xeb, 0x77, 0x2a, 0x24, 0xdf, 0xb1, 0x2d, 0xa1, 0x1b, 0xfc, 0xfe, 0x41, 0x4b, 0x84, 0xfd, 0xc3, + 0x01, 0x90, 0x2a, 0x7e, 0x24, 0x65, 0xd5, 0x37, 0x24, 0xba, 0x55, 0x61, 0x15, 0x91, 0xad, 0x8a, + 0x63, 0xc2, 0xc3, 0x0f, 0x07, 0x74, 0x2b, 0xce, 0x3d, 0x96, 0x20, 0xd1, 0x20, 0x6a, 0xad, 0x2f, + 0x17, 0xc1, 0x98, 0x4d, 0x67, 0x73, 0xdb, 0x41, 0xc6, 0x1b, 0xf9, 0x44, 0x00, 0x14, 0x46, 0x3e, + 0x11, 0xe2, 0x89, 0x90, 0x63, 0x52, 0x56, 0x8d, 0xa1, 0x1a, 0x57, 0x48, 0x2f, 0x0f, 0x5a, 0x79, + 0xc4, 0xbf, 0xdc, 0x3e, 0xef, 0x26, 0x3f, 0xbe, 0xda, 0x5e, 0x00, 0x64, 0xc0, 0x17, 0x08, 0xfc, + 0x29, 0x23, 0x3c, 0x93, 0x54, 0xe6, 0x85, 0x31, 0x85, 0xbf, 0xcc, 0xea, 0x6f, 0x85, 0x10, 0x35, + 0xae, 0xae, 0x40, 0x12, 0x01, 0x50, 0x28, 0x89, 0x10, 0x4f, 0x24, 0x99, 0x01, 0x4b, 0xb2, 0x8d, + 0x2e, 0x0b, 0x6a, 0x0f, 0x7c, 0x55, 0xd8, 0xb5, 0x01, 0x8b, 0x83, 0xd2, 0xc2, 0x1d, 0x4a, 0xb7, + 0xe7, 0x4e, 0xbd, 0x4c, 0xad, 0x42, 0xee, 0xc5, 0x42, 0xee, 0xbc, 0xe8, 0xab, 0x21, 0x52, 0x25, + 0x60, 0xa0, 0x09, 0x59, 0x02, 0x5f, 0xfa, 0x91, 0xf9, 0x93, 0x13, 0xd0, 0xed, 0x0a, 0xb9, 0xbc, + 0x7d, 0xee, 0xe8, 0x63, 0xd0, 0xed, 0x91, 0xb6, 0x3c, 0xe8, 0xd2, 0x6f, 0x6e, 0x93, 0xef, 0x25, + 0x6a, 0xe8, 0xf0, 0xd3, 0x0d, 0x5a, 0x5f, 0x22, 0xae, 0xd1, 0x85, 0x94, 0xf7, 0xcd, 0xc6, 0x0f, + 0x2d, 0x7c, 0xb3, 0xf1, 0xbf, 0x89, 0xa8, 0xfe, 0x49, 0x28, 0xab, 0x7e, 0x29, 0xa1, 0x01, 0x7f, + 0xed, 0xec, 0x45, 0x97, 0xbd, 0x0c, 0xb3, 0xb7, 0x12, 0xcc, 0xfc, 0x71, 0x68, 0x84, 0xa5, 0x03, + 0xe7, 0x67, 0xce, 0x1e, 0x2f, 0xe4, 0x8f, 0x15, 0xae, 0x5d, 0x2f, 0xe4, 0x8f, 0x14, 0xf2, 0xe7, + 0xcc, 0xb1, 0x3d, 0xa5, 0xa9, 0x8b, 0xe6, 0xf5, 0xfd, 0xd6, 0x0b, 0xe6, 0x5b, 0xe3, 0x10, 0xe2, + 0xcb, 0xfb, 0x55, 0xca, 0xad, 0xfc, 0x71, 0xfc, 0x1c, 0x9f, 0x50, 0x1e, 0xab, 0xf6, 0x39, 0xf2, + 0xd6, 0x95, 0xf8, 0xe1, 0x1e, 0x08, 0x51, 0x6b, 0xfd, 0x0a, 0xfa, 0x90, 0x00, 0x28, 0xec, 0x43, + 0x42, 0x3c, 0x79, 0x9a, 0x07, 0xf1, 0xf1, 0x6a, 0x8d, 0xcb, 0x3a, 0xdf, 0x3b, 0xac, 0xac, 0x26, + 0xc6, 0x11, 0x70, 0x86, 0x42, 0xcf, 0xe8, 0x45, 0x70, 0x1f, 0x9b, 0x7e, 0x5f, 0x85, 0x2c, 0x25, + 0xee, 0x6a, 0xd4, 0x0c, 0xaf, 0x0c, 0xbc, 0xc0, 0x47, 0x42, 0x0d, 0x56, 0x55, 0x06, 0x66, 0xc6, + 0xd5, 0x67, 0xa9, 0xf9, 0x81, 0x50, 0x80, 0x0d, 0xec, 0xc4, 0xea, 0x04, 0x1c, 0x10, 0x6b, 0xc0, + 0x5a, 0x36, 0xa2, 0xea, 0x95, 0xf8, 0x4b, 0x08, 0xbc, 0x1b, 0xbc, 0x52, 0x70, 0x6d, 0x2b, 0x84, + 0x5a, 0xac, 0xae, 0x10, 0x4d, 0xc4, 0xf8, 0xbb, 0x94, 0x55, 0x3f, 0x91, 0x68, 0xd4, 0x28, 0xe1, + 0xb0, 0x07, 0x33, 0xf8, 0x44, 0x50, 0x0c, 0x13, 0xc1, 0x8d, 0xb7, 0x62, 0x56, 0xe7, 0x7b, 0x59, + 0x78, 0x9e, 0x01, 0x3a, 0xc8, 0x9b, 0xcf, 0x5a, 0x8d, 0x98, 0xd1, 0xab, 0x57, 0x30, 0x9f, 0x01, + 0xb0, 0xf2, 0xf9, 0x8c, 0xe2, 0x89, 0xfa, 0x87, 0xa5, 0xac, 0xba, 0x15, 0x45, 0x60, 0x1b, 0x24, + 0x0a, 0xaf, 0xfc, 0xc4, 0xba, 0x01, 0x9b, 0xa7, 0x39, 0xfb, 0x01, 0x15, 0x60, 0x30, 0xed, 0x87, + 0x95, 0x87, 0xaa, 0x1e, 0xa6, 0x74, 0x5c, 0x29, 0x6b, 0x60, 0x3a, 0x18, 0x92, 0x17, 0xb6, 0xf6, + 0x27, 0xe3, 0x15, 0x34, 0x42, 0x2e, 0x4c, 0xd8, 0x08, 0x05, 0x68, 0xa6, 0x47, 0xb6, 0xa0, 0x65, + 0x5b, 0x54, 0xc2, 0x6b, 0xea, 0xd5, 0xd9, 0x53, 0x43, 0x70, 0x88, 0x0b, 0x4e, 0xca, 0xa5, 0x03, + 0xef, 0xcd, 0x4c, 0x8d, 0x17, 0x8f, 0x9c, 0x9b, 0x79, 0xf3, 0x82, 0x52, 0x21, 0x0e, 0xde, 0xf7, + 0x95, 0x07, 0xab, 0x97, 0xa3, 0x3f, 0x89, 0x8d, 0xa5, 0xbf, 0x90, 0x64, 0xe4, 0x98, 0x1c, 0xda, + 0x5b, 0x8a, 0x2b, 0xc5, 0x66, 0x89, 0xe5, 0x1b, 0x89, 0xb5, 0x95, 0x40, 0x89, 0x06, 0x43, 0x52, + 0x56, 0xad, 0x47, 0x8b, 0xd9, 0xf0, 0xab, 0xec, 0xc6, 0x20, 0x8d, 0xee, 0xe1, 0x2d, 0x59, 0x01, + 0x81, 0x90, 0x20, 0x48, 0x34, 0x84, 0x33, 0xd9, 0x14, 0x79, 0xb0, 0xd2, 0x60, 0x48, 0xc9, 0x54, + 0xbb, 0x46, 0xf7, 0x0e, 0x71, 0x13, 0xf8, 0x9b, 0x24, 0x23, 0xc6, 0x5f, 0x51, 0xc8, 0xda, 0x8b, + 0x11, 0xb2, 0xe6, 0x41, 0x99, 0xfd, 0xf8, 0x4d, 0xa8, 0x86, 0x38, 0xb6, 0x63, 0x22, 0x2c, 0x37, + 0x6a, 0xf6, 0xee, 0xda, 0x89, 0x67, 0x4a, 0x30, 0xdb, 0x66, 0xe5, 0xf1, 0x39, 0xb1, 0x85, 0x9d, + 0x31, 0x27, 0xad, 0xc2, 0x20, 0x7d, 0xe8, 0x8e, 0x3d, 0xa3, 0x98, 0xbe, 0x17, 0x23, 0xa4, 0xcf, + 0x83, 0x32, 0x0f, 0x7d, 0xbd, 0xf5, 0xd0, 0xcf, 0xda, 0xe6, 0x3d, 0xac, 0xdb, 0x86, 0xb2, 0x98, + 0x7d, 0xeb, 0x64, 0xe9, 0x63, 0xe2, 0x5b, 0x6b, 0x6f, 0x12, 0x71, 0xf4, 0x65, 0xc8, 0x39, 0xa3, + 0xb7, 0x39, 0x2f, 0x17, 0x9d, 0x4e, 0x97, 0x33, 0x5e, 0x11, 0x0c, 0x24, 0x7c, 0xb3, 0xa1, 0xac, + 0xfa, 0xa9, 0x3d, 0xdb, 0xb0, 0xf1, 0xbe, 0x58, 0x72, 0x64, 0xb6, 0x99, 0x14, 0xce, 0x36, 0xac, + 0x52, 0x5f, 0xdb, 0x0c, 0x63, 0xd7, 0x96, 0x0d, 0x20, 0xc8, 0x3c, 0x8d, 0x87, 0xd0, 0xdc, 0x3a, + 0x9d, 0xd5, 0xe3, 0xe6, 0x11, 0xf3, 0x07, 0x5b, 0xfb, 0x65, 0x02, 0xfb, 0x88, 0x72, 0xe9, 0x97, + 0x07, 0xe2, 0x88, 0xf2, 0x27, 0xf1, 0xe9, 0x44, 0xad, 0x57, 0x78, 0x73, 0xe8, 0x4a, 0xe1, 0xea, + 0x98, 0xf7, 0x0c, 0x42, 0x59, 0xcc, 0x9e, 0x09, 0x79, 0x4e, 0x27, 0xb6, 0xa2, 0x9b, 0xd5, 0xf6, + 0x3e, 0xb7, 0x63, 0x27, 0x95, 0xe5, 0xc1, 0xbd, 0x5f, 0x34, 0x7a, 0x72, 0xb2, 0x9d, 0x78, 0x97, + 0x80, 0x7e, 0xb9, 0x94, 0x22, 0x03, 0x59, 0x75, 0x03, 0x2a, 0xcf, 0xd7, 0x64, 0x8d, 0xb2, 0x61, + 0xef, 0x35, 0xce, 0xf8, 0xfa, 0x70, 0xe4, 0xa1, 0xca, 0xc9, 0x5b, 0x15, 0x70, 0x8d, 0xb0, 0x5f, + 0xd9, 0x91, 0x95, 0x82, 0x08, 0xfb, 0x24, 0x06, 0xf2, 0x12, 0xf6, 0x4b, 0xfa, 0x13, 0x19, 0x66, + 0x07, 0x1a, 0x36, 0xa5, 0x08, 0x6f, 0xa0, 0x61, 0xd9, 0x63, 0xbe, 0xdb, 0x6a, 0x9f, 0x98, 0x23, + 0x5f, 0xeb, 0x71, 0xbb, 0x93, 0xd7, 0x0c, 0xa2, 0xef, 0xdf, 0x46, 0xed, 0x66, 0x5c, 0xec, 0x05, + 0x76, 0x33, 0x3c, 0xee, 0xb5, 0x95, 0x40, 0x09, 0xf3, 0xe3, 0xff, 0xc2, 0x43, 0xce, 0xff, 0xa3, + 0xb9, 0xb6, 0x43, 0xf4, 0x2b, 0x7b, 0x71, 0x83, 0xcf, 0x60, 0xd5, 0x78, 0x3c, 0xd5, 0x9b, 0x34, + 0x44, 0x8b, 0x1b, 0x16, 0x13, 0xb0, 0xb8, 0x71, 0x43, 0x9d, 0x48, 0x1a, 0x75, 0x68, 0xa1, 0xed, + 0xbc, 0x56, 0xba, 0xf4, 0x86, 0x39, 0x7a, 0x85, 0x34, 0x3d, 0xfe, 0x65, 0xdf, 0xa0, 0xf3, 0x65, + 0x31, 0xcb, 0x63, 0xf0, 0x6b, 0xb8, 0x73, 0xfd, 0xd6, 0x5e, 0xbe, 0xf8, 0xf3, 0xf2, 0x62, 0x02, + 0x96, 0x2f, 0x5c, 0x5e, 0x49, 0xb7, 0xb7, 0x2b, 0x10, 0x60, 0xbc, 0x5d, 0x3d, 0x8c, 0x36, 0x2b, + 0x1b, 0xab, 0x61, 0x14, 0x1d, 0x20, 0x9f, 0xc8, 0xea, 0xe4, 0x78, 0x48, 0x5e, 0xf0, 0x64, 0xa2, + 0x23, 0x53, 0x4e, 0xcf, 0x53, 0x67, 0x0e, 0x48, 0x68, 0x7a, 0xc9, 0xc5, 0x32, 0x27, 0x73, 0x09, + 0x34, 0x0f, 0xc2, 0x99, 0x38, 0x0c, 0x77, 0xc2, 0x05, 0xf3, 0xe0, 0x59, 0xf3, 0xc2, 0xfe, 0x32, + 0x9e, 0x34, 0x32, 0xfb, 0xe1, 0x13, 0x85, 0xdc, 0x79, 0x28, 0x00, 0xf4, 0x1f, 0x5f, 0xdc, 0x63, + 0xbe, 0x7e, 0x1a, 0xae, 0x58, 0x9f, 0x87, 0x26, 0x67, 0xf7, 0x4e, 0xb2, 0x00, 0x18, 0x5c, 0xd7, + 0x2a, 0x55, 0x3f, 0xf4, 0x3f, 0xd9, 0x8b, 0x36, 0xff, 0x87, 0xee, 0xc5, 0x04, 0x2c, 0xda, 0xb8, + 0x9a, 0x0c, 0x5a, 0x4b, 0xd6, 0xc5, 0xac, 0x87, 0xa0, 0xab, 0x3d, 0xd7, 0x78, 0x9d, 0x04, 0x3d, + 0xcd, 0x60, 0x53, 0xed, 0x9c, 0x9b, 0x01, 0xfa, 0x2c, 0xc4, 0x38, 0xbf, 0x51, 0xaa, 0x62, 0xe7, + 0xb7, 0x32, 0xa2, 0x2b, 0x82, 0x81, 0x84, 0xe6, 0xe7, 0x52, 0x56, 0xbd, 0x2c, 0xb9, 0xdd, 0xdf, + 0x80, 0x08, 0x19, 0x2c, 0x4f, 0x05, 0x78, 0x10, 0xb2, 0xe0, 0xaf, 0x6d, 0x07, 0x00, 0x7e, 0x14, + 0x8b, 0x5c, 0x87, 0xaa, 0x6a, 0x48, 0xe8, 0x8b, 0x90, 0x7c, 0x77, 0xb9, 0x1a, 0x3b, 0x52, 0x2d, + 0x5a, 0xa6, 0x47, 0xe4, 0x0b, 0xe3, 0xe0, 0x2c, 0x54, 0x80, 0x2f, 0x4c, 0x39, 0x98, 0xc8, 0xfc, + 0x95, 0x94, 0x55, 0x3f, 0x93, 0xd0, 0x46, 0x91, 0xcc, 0xee, 0x84, 0xc9, 0x10, 0xe1, 0x94, 0xec, + 0x4c, 0xe2, 0x3b, 0xfe, 0xe9, 0x1f, 0x03, 0xdf, 0x97, 0xd3, 0x56, 0xdd, 0x94, 0x64, 0xb4, 0x53, + 0xcb, 0x24, 0x9e, 0xeb, 0xf7, 0xef, 0xbb, 0x5e, 0x8c, 0xb0, 0xef, 0xf2, 0xa0, 0x44, 0xed, 0xef, + 0xe2, 0x65, 0x10, 0xc4, 0x01, 0xb3, 0xc7, 0x2d, 0x3b, 0x33, 0x88, 0x22, 0x2c, 0xf1, 0x31, 0x15, + 0x14, 0xf7, 0x5a, 0x57, 0x5c, 0xb0, 0x22, 0xac, 0xf2, 0x5b, 0xb5, 0x4c, 0x5f, 0x22, 0xae, 0x6d, + 0x4f, 0x75, 0x6b, 0x3a, 0x77, 0x95, 0xcf, 0x02, 0xfc, 0x56, 0xf9, 0x6e, 0x1c, 0xa1, 0xb7, 0x07, + 0xaf, 0xf2, 0xef, 0x83, 0x27, 0x11, 0xdb, 0xad, 0x43, 0x0b, 0xd0, 0x01, 0x1a, 0xce, 0xa4, 0xba, + 0xa9, 0xd9, 0x70, 0x30, 0xc4, 0x37, 0xfa, 0x4e, 0x19, 0x63, 0x72, 0x77, 0x06, 0x93, 0xfa, 0xbd, + 0x24, 0xff, 0x57, 0xa3, 0x66, 0x50, 0x4b, 0x8f, 0x46, 0x70, 0xbb, 0xe2, 0x45, 0x14, 0x72, 0x43, + 0x84, 0xbe, 0x21, 0x1c, 0x24, 0xa1, 0xbb, 0xdb, 0x1a, 0x89, 0xef, 0x01, 0x2a, 0xd4, 0x58, 0x23, + 0x0c, 0xf6, 0x62, 0xd4, 0x89, 0xcc, 0xa7, 0xd0, 0xd7, 0x89, 0xac, 0x8c, 0x21, 0xfd, 0x02, 0xe2, + 0x44, 0xf6, 0x31, 0x3c, 0x4c, 0x97, 0xff, 0xf1, 0x32, 0x71, 0xdc, 0x06, 0x97, 0xfb, 0xf1, 0xf2, + 0x40, 0x9c, 0xb3, 0x68, 0x5a, 0x87, 0x16, 0x01, 0x01, 0x5c, 0x11, 0xb0, 0x78, 0x21, 0xcc, 0x44, + 0x05, 0xbe, 0x21, 0xea, 0x3d, 0xac, 0xa0, 0xea, 0x25, 0x9a, 0xa9, 0xc0, 0xae, 0xc5, 0x2e, 0x9c, + 0x11, 0xaa, 0xd6, 0xbf, 0xaa, 0x18, 0xe4, 0x9f, 0xa9, 0xa0, 0x1c, 0xeb, 0x74, 0xc3, 0x06, 0x14, + 0xf6, 0x32, 0xc0, 0xdd, 0xcd, 0x3c, 0x94, 0x27, 0x1c, 0x03, 0x11, 0x60, 0x0d, 0x82, 0x56, 0x56, + 0x42, 0x16, 0x92, 0x5c, 0x7d, 0x2e, 0x31, 0x83, 0x3c, 0x54, 0x8d, 0xc6, 0xa1, 0x59, 0x1d, 0xe0, + 0x17, 0x5e, 0x16, 0x91, 0xbf, 0xae, 0x52, 0x38, 0xe1, 0xdc, 0x0b, 0x01, 0xa2, 0xca, 0x19, 0xb1, + 0x81, 0xce, 0x15, 0xff, 0xe2, 0x6a, 0x66, 0x35, 0x3b, 0xc6, 0xf5, 0xa7, 0x12, 0xf8, 0x3b, 0x42, + 0x78, 0x80, 0x74, 0x5c, 0x47, 0x3e, 0xd1, 0x03, 0xd2, 0x71, 0xdd, 0xd7, 0xdf, 0x91, 0x41, 0x39, + 0x6e, 0x09, 0x8f, 0xa2, 0x1a, 0xd8, 0x2a, 0x28, 0xe4, 0x8f, 0xb1, 0xa6, 0x59, 0x7d, 0xe9, 0x38, + 0xa1, 0x15, 0x50, 0x1e, 0xe4, 0x19, 0xcf, 0xf2, 0xea, 0xb3, 0x18, 0x7c, 0x25, 0xc9, 0x8b, 0x21, + 0x19, 0x53, 0xa2, 0x3d, 0xb3, 0x25, 0x95, 0x7c, 0xae, 0x3b, 0x11, 0x37, 0x1e, 0xcf, 0xa4, 0x7a, + 0x76, 0xa6, 0xe3, 0x5e, 0x7b, 0x35, 0x11, 0x52, 0x68, 0xaf, 0x26, 0xbe, 0x81, 0x90, 0xfe, 0x5e, + 0x56, 0xdd, 0x80, 0x96, 0x90, 0x80, 0x16, 0xb9, 0x11, 0xec, 0x42, 0xbf, 0xff, 0xdd, 0x99, 0xf3, + 0x7b, 0x48, 0x06, 0x2a, 0x71, 0x11, 0xa6, 0xfa, 0x08, 0xda, 0x5c, 0x29, 0x55, 0x70, 0xa4, 0x6f, + 0x1f, 0x8c, 0x5a, 0x5f, 0x14, 0x27, 0xd5, 0x41, 0xbf, 0x63, 0xe3, 0x1f, 0x40, 0xc8, 0x71, 0xbf, + 0xf8, 0x07, 0x04, 0x11, 0xbc, 0x04, 0xb4, 0x81, 0x4e, 0x37, 0xad, 0xa7, 0xae, 0xac, 0xd6, 0xd3, + 0xc2, 0xe1, 0xc6, 0xc9, 0x33, 0x5d, 0xe9, 0x1b, 0x2c, 0x00, 0xa0, 0xcc, 0x8a, 0xb7, 0xc2, 0x11, + 0x89, 0xc4, 0x26, 0x47, 0x33, 0x92, 0xbc, 0xc8, 0xa9, 0x96, 0x16, 0xef, 0xcd, 0x24, 0x8c, 0x7e, + 0x32, 0x95, 0x88, 0x3b, 0x9e, 0x1b, 0x28, 0x3c, 0x95, 0x11, 0xe2, 0x09, 0xed, 0x2e, 0xfc, 0xb6, + 0x4a, 0x1c, 0x6b, 0xa6, 0x86, 0xcd, 0xa1, 0xc9, 0x99, 0xe9, 0x7d, 0x84, 0x36, 0xff, 0x72, 0x35, + 0x53, 0x89, 0x4e, 0x7e, 0x94, 0x4c, 0x25, 0x3f, 0x95, 0x20, 0x02, 0x48, 0xb3, 0xd6, 0x9f, 0x8e, + 0x25, 0x32, 0x3a, 0x3f, 0x02, 0x48, 0xb3, 0xd6, 0xdf, 0x62, 0x95, 0xfa, 0x46, 0x00, 0x71, 0x40, + 0x8e, 0x0b, 0xb9, 0x43, 0xe4, 0xc2, 0xfe, 0xd9, 0xec, 0x04, 0xce, 0x03, 0xe7, 0x22, 0xe2, 0xbe, + 0x5c, 0xcd, 0x10, 0xd3, 0x45, 0x6b, 0xfc, 0x67, 0x76, 0x4c, 0x6d, 0x62, 0x12, 0x0d, 0xea, 0x48, + 0xbc, 0x16, 0x66, 0x71, 0xbe, 0x67, 0x97, 0x1c, 0xb4, 0xd3, 0x3c, 0x1f, 0xa6, 0x76, 0x46, 0x38, + 0x42, 0x00, 0xb6, 0x05, 0x55, 0x56, 0x40, 0xcb, 0x84, 0xac, 0xa3, 0x6c, 0x50, 0x36, 0x07, 0xc3, + 0x90, 0x7d, 0x00, 0xad, 0xad, 0x84, 0x2c, 0xcd, 0x9f, 0x68, 0x60, 0x5a, 0x13, 0x21, 0x59, 0x69, + 0xd4, 0x48, 0xfe, 0x95, 0xd6, 0xde, 0x8e, 0x0e, 0x4d, 0x37, 0xb4, 0xf6, 0x27, 0x63, 0xf1, 0xce, + 0x84, 0x35, 0xc9, 0xac, 0xe5, 0xcc, 0x85, 0x02, 0x2c, 0xa5, 0xbe, 0xae, 0x9a, 0x5b, 0x08, 0xff, + 0xd7, 0xa4, 0x9b, 0x21, 0xc0, 0x2e, 0xf4, 0x6c, 0x15, 0x6b, 0x85, 0xe8, 0x00, 0x7c, 0xb0, 0x67, + 0x98, 0x6e, 0xad, 0x4f, 0xeb, 0xd6, 0xa3, 0x03, 0xf8, 0xff, 0x72, 0x9d, 0x7e, 0x41, 0x73, 0x47, + 0x58, 0xdf, 0x42, 0xb2, 0x84, 0xe8, 0x48, 0x3c, 0x00, 0x51, 0x88, 0x70, 0x2d, 0xc8, 0x41, 0xba, + 0xda, 0xba, 0x3d, 0xd1, 0xc0, 0xd6, 0x19, 0x6d, 0xeb, 0xdc, 0xcb, 0xd5, 0xb4, 0x75, 0xba, 0xa7, + 0x86, 0xfe, 0xca, 0x0e, 0xbd, 0x4f, 0xeb, 0x4d, 0x3d, 0xb1, 0x0e, 0xcd, 0x67, 0xe8, 0x25, 0x88, + 0xe0, 0xa1, 0xd7, 0x06, 0x12, 0x3a, 0x47, 0xa5, 0xac, 0xba, 0x8b, 0xe6, 0x37, 0xc2, 0xcf, 0x0d, + 0xdb, 0x86, 0x42, 0x24, 0xf2, 0xd9, 0x13, 0x67, 0xcc, 0xbd, 0xa3, 0x84, 0xdc, 0x7a, 0xdf, 0xa7, + 0x2d, 0xb8, 0xab, 0x9a, 0x31, 0x39, 0xa5, 0x27, 0x30, 0xcb, 0x59, 0xe2, 0xef, 0xe8, 0xea, 0x90, + 0x3a, 0x5a, 0x19, 0xd8, 0x69, 0x75, 0xdf, 0x7d, 0xdb, 0x72, 0xa8, 0x13, 0x7b, 0xa7, 0x81, 0x6d, + 0xdb, 0x84, 0xed, 0x1a, 0x11, 0x5b, 0xf3, 0xe8, 0xbe, 0x42, 0xee, 0x3c, 0xf8, 0xa0, 0xb0, 0x29, + 0x8b, 0x7c, 0x13, 0x11, 0x09, 0x3a, 0xb9, 0x8e, 0xfe, 0xc0, 0xac, 0x88, 0xe9, 0x56, 0x40, 0x7f, + 0x5a, 0x13, 0xaf, 0x88, 0x19, 0x50, 0xe0, 0x8a, 0xd8, 0x85, 0x25, 0x74, 0x33, 0x59, 0x75, 0x23, + 0x1d, 0xaa, 0xed, 0xd7, 0x4f, 0xc8, 0x48, 0xaa, 0x2c, 0x05, 0xce, 0x6a, 0x73, 0x6b, 0x33, 0x17, + 0xe0, 0xe3, 0xc0, 0x2a, 0x7a, 0x39, 0xb5, 0xba, 0xa7, 0xf5, 0x40, 0x97, 0xd0, 0x3a, 0xd5, 0xc7, + 0x92, 0xed, 0xbb, 0x13, 0xed, 0x46, 0x67, 0x4b, 0x2c, 0xde, 0x15, 0xeb, 0xd0, 0x74, 0xb4, 0x46, + 0x54, 0x7d, 0x0f, 0x54, 0xe8, 0x12, 0xe1, 0x73, 0x07, 0xa1, 0xdd, 0x01, 0xef, 0xe3, 0x94, 0x95, + 0x39, 0xf4, 0x4e, 0x21, 0xff, 0xa6, 0x99, 0x7b, 0xc3, 0x9c, 0xba, 0x6a, 0x1e, 0x1a, 0x52, 0x84, + 0x25, 0xd5, 0x2c, 0x19, 0xdb, 0x76, 0xa7, 0xf1, 0x21, 0xdb, 0x5d, 0xce, 0x02, 0xbd, 0x37, 0x69, + 0x24, 0x7a, 0x20, 0x1a, 0xbf, 0x78, 0x6b, 0x87, 0x41, 0x05, 0x6f, 0xed, 0xb8, 0xc0, 0x84, 0xdc, + 0x4b, 0x52, 0x56, 0x7d, 0x0a, 0xdd, 0xeb, 0xb4, 0x61, 0xab, 0x69, 0x62, 0x5b, 0xfe, 0xe2, 0xc9, + 0xcb, 0xa4, 0x3d, 0xd7, 0xf9, 0xf5, 0x5e, 0x2f, 0xbe, 0x9a, 0x47, 0x9d, 0x81, 0x2a, 0xe1, 0x34, + 0x04, 0x1f, 0x91, 0x81, 0xf8, 0xe9, 0x34, 0x89, 0xfc, 0xb9, 0x2d, 0xd5, 0x21, 0x18, 0x88, 0x5d, + 0x10, 0xdf, 0x81, 0xb8, 0x0c, 0xe9, 0x84, 0x53, 0xb4, 0x1f, 0x29, 0x0c, 0x3f, 0xc5, 0x93, 0x13, + 0xe6, 0xf5, 0x93, 0x84, 0xb0, 0xb0, 0xc4, 0xc7, 0x60, 0x39, 0x45, 0x7f, 0xa8, 0xdb, 0xaa, 0xf5, + 0xa7, 0x64, 0x08, 0xde, 0x11, 0xd3, 0xbb, 0x5a, 0x0d, 0x2d, 0x8d, 0xa9, 0x2c, 0x17, 0xd9, 0x25, + 0x53, 0x84, 0xef, 0x10, 0xec, 0x06, 0xb2, 0x61, 0xa5, 0x88, 0x99, 0x18, 0x75, 0xc3, 0x9f, 0x98, + 0x3d, 0xff, 0xba, 0x8b, 0x4e, 0x40, 0x39, 0x84, 0x95, 0x42, 0x4b, 0x05, 0x06, 0xc6, 0xba, 0xa1, + 0xa5, 0x31, 0xa7, 0x0f, 0x25, 0x79, 0x9e, 0x63, 0x49, 0x1d, 0x4f, 0x65, 0xda, 0x39, 0x1b, 0x0a, + 0x65, 0x00, 0xe1, 0x86, 0x82, 0x07, 0xe7, 0xc4, 0xe6, 0x73, 0x3a, 0x1b, 0xae, 0x70, 0x69, 0xea, + 0xa2, 0x79, 0xf5, 0x84, 0xfb, 0xc9, 0x78, 0x4b, 0x20, 0xb8, 0x20, 0xaa, 0x11, 0x90, 0xc8, 0x90, + 0xfa, 0xee, 0x0d, 0xc9, 0x08, 0x3b, 0x28, 0x37, 0xb4, 0x6d, 0x4d, 0xe8, 0x46, 0x2a, 0xd3, 0x8f, + 0xd3, 0x1d, 0xf2, 0x63, 0x7d, 0xb8, 0x30, 0xe2, 0x23, 0x25, 0x0e, 0x94, 0xf1, 0x33, 0xd3, 0xd0, + 0xfd, 0x24, 0xf0, 0xc1, 0x91, 0xfd, 0xe6, 0xe8, 0xbb, 0x50, 0xf3, 0x28, 0x34, 0x2d, 0x20, 0x00, + 0xcf, 0x02, 0x3e, 0x2b, 0x1b, 0xc8, 0x46, 0x29, 0x76, 0xaa, 0x81, 0xbe, 0x16, 0x06, 0xcf, 0xa1, + 0x70, 0xf1, 0x48, 0xd6, 0xcc, 0x8f, 0xc2, 0xce, 0x3d, 0x7c, 0x59, 0xb2, 0xf8, 0xca, 0x38, 0x93, + 0x3a, 0x63, 0x79, 0x2d, 0xcf, 0x6d, 0xa2, 0xbd, 0xad, 0x3d, 0x66, 0xc4, 0xf4, 0xe8, 0x80, 0xf5, + 0x9f, 0x35, 0x9e, 0x0f, 0xa2, 0x9f, 0x93, 0x59, 0x92, 0x6e, 0x59, 0xb5, 0xc6, 0x3b, 0xb5, 0x9e, + 0x18, 0x7f, 0x96, 0x74, 0x63, 0xa8, 0x0a, 0x35, 0xfc, 0xc4, 0x1f, 0xe4, 0x86, 0xb4, 0xd5, 0x2e, + 0xed, 0xc7, 0x48, 0x76, 0x82, 0x27, 0xc7, 0xed, 0x35, 0x9d, 0x22, 0x2c, 0xf1, 0x99, 0xf3, 0xe9, + 0xf6, 0x96, 0x8e, 0x2b, 0xc2, 0xc4, 0xa0, 0xfb, 0xd8, 0xbd, 0x99, 0x47, 0xc8, 0xf8, 0x6d, 0xe6, + 0xb9, 0xb9, 0xf8, 0x25, 0x31, 0xf9, 0x8e, 0x80, 0x07, 0xb5, 0x3f, 0x10, 0x95, 0xf8, 0xbc, 0x6c, + 0x89, 0x78, 0x44, 0x07, 0x92, 0xb1, 0x1e, 0x6d, 0x10, 0xbd, 0x1c, 0x92, 0x17, 0x3c, 0xd3, 0xab, + 0x65, 0xfa, 0x5b, 0xb4, 0x4c, 0x4f, 0x7d, 0xbf, 0x1a, 0xb7, 0x06, 0x95, 0xa6, 0x06, 0xef, 0xb4, + 0xce, 0x01, 0x09, 0xa7, 0x75, 0x2e, 0x96, 0xb4, 0xd2, 0x09, 0x29, 0xab, 0x76, 0xa3, 0xf5, 0xc5, + 0xb3, 0xe3, 0xb3, 0xe7, 0x0f, 0x81, 0x7d, 0x31, 0x6c, 0xe1, 0xaf, 0x32, 0xaf, 0x8e, 0x15, 0x4f, + 0x9e, 0x85, 0x3f, 0x8a, 0x27, 0x2f, 0xd3, 0x28, 0x20, 0xe4, 0xca, 0x37, 0xb7, 0x6f, 0x53, 0xe6, + 0x74, 0x97, 0x4f, 0x52, 0xdb, 0xb4, 0x96, 0xe9, 0xd1, 0xa3, 0x31, 0x5c, 0x45, 0x7c, 0xa4, 0x04, + 0x75, 0x1d, 0xa4, 0xe1, 0x8b, 0xad, 0x06, 0x56, 0xdf, 0x2c, 0x08, 0xae, 0xcb, 0x14, 0x56, 0xda, + 0x4e, 0xbf, 0xcd, 0xbc, 0x7d, 0x5a, 0x33, 0xf8, 0xa1, 0xbc, 0xb3, 0x7b, 0xc9, 0xbf, 0xec, 0x33, + 0x05, 0x24, 0x53, 0xed, 0x5a, 0x4f, 0x2c, 0x49, 0x42, 0xb0, 0xfe, 0x52, 0x92, 0xef, 0xc4, 0x53, + 0xef, 0x96, 0x1d, 0xa9, 0x74, 0xaa, 0x3b, 0xd5, 0xd1, 0xcf, 0xcf, 0x5f, 0xe8, 0x94, 0x57, 0xd2, + 0x20, 0x07, 0xd9, 0x01, 0x1f, 0x7b, 0x0e, 0x16, 0x72, 0xd3, 0xc5, 0x33, 0x79, 0x48, 0x84, 0x52, + 0x1c, 0x19, 0x2b, 0x0e, 0x1f, 0x53, 0x02, 0xca, 0x83, 0x23, 0x93, 0xb9, 0x33, 0x6b, 0xc7, 0xa3, + 0x06, 0x65, 0x30, 0x19, 0x92, 0x17, 0x36, 0x6a, 0x46, 0x7d, 0x57, 0x6b, 0x2a, 0xad, 0x53, 0x3b, + 0x06, 0x8b, 0x05, 0xd7, 0x03, 0xdc, 0x0b, 0xf3, 0xf3, 0x00, 0xe7, 0xa1, 0x49, 0x13, 0x7d, 0x47, + 0xca, 0xaa, 0x3d, 0x68, 0x39, 0x99, 0x96, 0xcf, 0x1e, 0x30, 0x0f, 0xec, 0x2f, 0x5d, 0x3f, 0x3a, + 0x33, 0x7d, 0x09, 0x86, 0x53, 0x48, 0x04, 0x63, 0x5b, 0x3d, 0x28, 0xf5, 0x00, 0x24, 0xad, 0xf2, + 0xcc, 0x30, 0xb4, 0x3c, 0xdb, 0xd7, 0xb2, 0x90, 0x1b, 0x09, 0xfc, 0x0e, 0x38, 0x4c, 0x41, 0xbc, + 0x94, 0x6b, 0x6d, 0x5d, 0x7a, 0x2a, 0xad, 0x47, 0xdb, 0x7a, 0x75, 0xeb, 0x4d, 0x57, 0x8f, 0x0e, + 0xd0, 0x4f, 0xac, 0x8f, 0xb3, 0x8e, 0xde, 0xe7, 0x49, 0x85, 0x97, 0x73, 0xc1, 0x52, 0xb1, 0xeb, + 0xb9, 0xd5, 0x15, 0xa2, 0x89, 0x54, 0xd7, 0x6e, 0x8d, 0x54, 0x7c, 0x5b, 0xab, 0xca, 0xa4, 0x8a, + 0x0e, 0x18, 0x8c, 0xe9, 0xcd, 0xb9, 0x90, 0x7c, 0x77, 0xa3, 0x66, 0xe0, 0x24, 0x58, 0x94, 0xe1, + 0xce, 0x58, 0x77, 0xaf, 0xa6, 0x23, 0x9e, 0x14, 0x1c, 0x9c, 0x70, 0xf7, 0x5b, 0x04, 0x27, 0xd2, + 0xbd, 0x8d, 0xb3, 0xfc, 0x11, 0x2b, 0x9c, 0xfa, 0x2d, 0xad, 0xe6, 0x07, 0xef, 0x99, 0xa3, 0x17, + 0xcd, 0xfd, 0x43, 0x10, 0x3d, 0x85, 0x70, 0x1e, 0xfd, 0xc1, 0xec, 0x81, 0x51, 0x65, 0x7b, 0x25, + 0xa8, 0x55, 0xe4, 0x40, 0x34, 0xf7, 0x6e, 0xf1, 0xb5, 0x31, 0x90, 0xd8, 0x42, 0x78, 0x04, 0x05, + 0xf3, 0x60, 0x9f, 0xf7, 0x05, 0xa2, 0x23, 0x95, 0xa9, 0x0f, 0xe4, 0xf8, 0x99, 0x24, 0xcf, 0x6b, + 0xd0, 0xda, 0x7a, 0x3b, 0x48, 0x73, 0x88, 0xe9, 0x5d, 0xbc, 0x00, 0x99, 0x2e, 0x80, 0x4f, 0x80, + 0xcc, 0x32, 0x1c, 0x11, 0x25, 0x86, 0x67, 0xc0, 0xd2, 0xc5, 0xbd, 0xa5, 0x0b, 0x27, 0xbc, 0x35, + 0x57, 0x84, 0x25, 0x10, 0x80, 0x35, 0xb2, 0x54, 0xcc, 0xa6, 0xdd, 0xfa, 0x45, 0x6b, 0x60, 0x1f, + 0x23, 0x3d, 0x25, 0x66, 0xc4, 0x3b, 0xb7, 0xf4, 0xea, 0x46, 0xaa, 0xa7, 0x55, 0x33, 0x8c, 0x44, + 0xb2, 0x83, 0xdf, 0x53, 0x3c, 0x30, 0xdf, 0x9e, 0xc2, 0x41, 0x13, 0x66, 0x67, 0x24, 0x7c, 0xc2, + 0x03, 0xfb, 0x2e, 0x4d, 0x2d, 0xd6, 0xbb, 0xcd, 0xc8, 0x8f, 0xcd, 0x53, 0x93, 0xe0, 0x73, 0x36, + 0x3b, 0x4e, 0x72, 0xc7, 0x29, 0x81, 0x08, 0x4c, 0xf5, 0xe9, 0x08, 0xcf, 0xfe, 0x6c, 0xb7, 0xd6, + 0x16, 0x8d, 0xb3, 0xbf, 0xae, 0x47, 0xf5, 0x78, 0x2a, 0xad, 0x45, 0x07, 0xf0, 0x7f, 0x78, 0x39, + 0x46, 0x3e, 0x37, 0xb5, 0x0f, 0x42, 0x52, 0xee, 0x46, 0x0d, 0xe7, 0xf6, 0xbf, 0x10, 0x92, 0x91, + 0x45, 0x20, 0xf1, 0x02, 0x9d, 0x1f, 0xb6, 0xa6, 0x74, 0xce, 0xa1, 0xb3, 0x17, 0x23, 0x5c, 0xaa, + 0xf2, 0xa0, 0x44, 0x8c, 0x0f, 0xa5, 0xac, 0x9a, 0x44, 0x0f, 0x92, 0x4d, 0x28, 0xdc, 0xf7, 0xad, + 0xa6, 0x8a, 0xe7, 0x8b, 0xe2, 0xd9, 0x63, 0x9e, 0xe0, 0x18, 0x04, 0x82, 0x0d, 0x0e, 0x95, 0xb9, + 0xdd, 0x06, 0x2e, 0x4b, 0x91, 0xc7, 0x04, 0xb2, 0xf9, 0xe9, 0x44, 0xe7, 0xa3, 0x68, 0x67, 0x4a, + 0x37, 0xb6, 0xa4, 0x7a, 0x93, 0x06, 0x09, 0x11, 0x30, 0xbf, 0x51, 0x33, 0x28, 0x3f, 0x1c, 0x83, + 0x88, 0x9b, 0x4f, 0xc6, 0x85, 0x10, 0xbe, 0x74, 0x79, 0x81, 0x4c, 0x3c, 0x92, 0xe7, 0x10, 0x22, + 0x27, 0x0a, 0x98, 0x2b, 0x4c, 0xb2, 0x4a, 0x0b, 0x7b, 0x0d, 0x0f, 0xa2, 0xd6, 0x65, 0x5f, 0x15, + 0xa8, 0x85, 0xeb, 0xe5, 0xc2, 0x34, 0x89, 0x23, 0x0a, 0xcb, 0x7d, 0x98, 0xb0, 0xc1, 0xb4, 0x31, + 0xd2, 0x78, 0xa3, 0x1a, 0xe9, 0x90, 0xf7, 0x1d, 0xc7, 0x57, 0x0f, 0xc9, 0x8b, 0x18, 0x6a, 0x56, + 0x2b, 0x68, 0x6a, 0xd7, 0x41, 0xac, 0x3a, 0x1f, 0x0d, 0x58, 0xa0, 0xf0, 0xd8, 0x42, 0x88, 0x67, + 0x9a, 0xd9, 0xf3, 0xe8, 0x2e, 0xaf, 0x74, 0x4d, 0x0d, 0xca, 0x76, 0xae, 0x78, 0x4d, 0x0d, 0x37, + 0x2a, 0xdf, 0x53, 0x91, 0xa6, 0x1b, 0x95, 0x2f, 0xd1, 0xce, 0x08, 0x38, 0x14, 0xc2, 0x07, 0xeb, + 0x16, 0x3f, 0xbd, 0x41, 0x33, 0x62, 0x89, 0x6e, 0xfe, 0xc1, 0x3a, 0x0b, 0xf0, 0x3b, 0x58, 0x77, + 0xe3, 0x98, 0x94, 0x84, 0xdb, 0x11, 0x89, 0x76, 0x4d, 0x95, 0xd0, 0x89, 0x42, 0x10, 0xff, 0x8b, + 0xcd, 0xa6, 0x58, 0x29, 0x10, 0x0b, 0xf2, 0x58, 0xe4, 0xd1, 0x39, 0x08, 0x02, 0xcd, 0xa8, 0x1d, + 0xea, 0x49, 0xe2, 0x33, 0x5b, 0xef, 0x5d, 0xad, 0x16, 0xc0, 0xe2, 0x80, 0x8f, 0x24, 0xb9, 0xef, + 0x5d, 0x6e, 0x88, 0x9f, 0x11, 0x45, 0x39, 0x92, 0xa8, 0xf1, 0x6b, 0x29, 0xab, 0x1e, 0x96, 0xd0, + 0x3a, 0x60, 0xd9, 0xd4, 0x12, 0x6d, 0x6a, 0xe9, 0xdb, 0x10, 0x05, 0xb6, 0xe6, 0xd1, 0xc3, 0x33, + 0x6f, 0x0f, 0x03, 0x3d, 0x3a, 0x0e, 0xe1, 0xeb, 0xb0, 0xc0, 0xf9, 0x16, 0x91, 0x02, 0xa7, 0xf7, + 0xb6, 0x17, 0x35, 0x61, 0xb2, 0xe0, 0x19, 0x1e, 0x31, 0x0f, 0x4e, 0x96, 0xae, 0x8d, 0x99, 0x43, + 0x13, 0x33, 0xa7, 0xf7, 0x55, 0xf6, 0xc5, 0x8c, 0x92, 0xf5, 0x91, 0xcd, 0x73, 0x54, 0x32, 0x1a, + 0xb7, 0x08, 0x5a, 0x32, 0xee, 0x0b, 0xc9, 0x0b, 0x19, 0xb3, 0x54, 0x48, 0xc3, 0xf8, 0x78, 0x77, + 0x8c, 0x33, 0xfb, 0x71, 0x61, 0xc2, 0xd9, 0x4f, 0x80, 0x66, 0xdc, 0xba, 0x54, 0xb4, 0x10, 0xb2, + 0x70, 0x16, 0xf2, 0xc7, 0x66, 0xa6, 0xf7, 0x15, 0xa6, 0x2f, 0xc3, 0x4a, 0x44, 0x59, 0x61, 0x5f, + 0xa6, 0x89, 0x3a, 0xb0, 0x8b, 0xe1, 0xcc, 0xf0, 0x4b, 0xc5, 0x33, 0x6f, 0x41, 0xd7, 0x62, 0xd6, + 0x2c, 0x5b, 0x22, 0xdf, 0xa8, 0xe8, 0xac, 0x58, 0xcb, 0xe8, 0xf0, 0x5a, 0x47, 0x3e, 0xd1, 0x14, + 0x8c, 0xb8, 0x35, 0x8d, 0xd8, 0x61, 0xca, 0x02, 0x65, 0xe0, 0xc2, 0x02, 0xc2, 0x94, 0x89, 0x64, + 0x38, 0x2e, 0x65, 0xd5, 0xcd, 0xc8, 0xb1, 0x86, 0x75, 0xc9, 0xf0, 0xbf, 0x4e, 0x4a, 0x18, 0x86, + 0xff, 0xcc, 0xe9, 0x7d, 0x2c, 0x0a, 0xc6, 0x18, 0xa5, 0xe9, 0xc6, 0x24, 0x88, 0x0e, 0xc0, 0x07, + 0xf2, 0xae, 0xfb, 0x52, 0x48, 0x5e, 0xc8, 0x98, 0x77, 0xfa, 0xa9, 0xc1, 0x85, 0x09, 0xd5, 0x10, + 0xa0, 0x89, 0x1a, 0xc7, 0x40, 0x0d, 0xd8, 0x63, 0xf2, 0xa8, 0x61, 0x5f, 0x0e, 0x52, 0xa3, 0xb9, + 0xf6, 0xe6, 0xa9, 0x61, 0x0d, 0xb7, 0x0b, 0xec, 0x2d, 0x6c, 0x46, 0x08, 0xf1, 0x41, 0x8d, 0x57, + 0x86, 0xfb, 0x2b, 0xc2, 0x32, 0x4d, 0xe2, 0x51, 0x66, 0x53, 0xc0, 0x25, 0xc2, 0x72, 0x91, 0x21, + 0x63, 0x19, 0x10, 0x74, 0x40, 0x37, 0x51, 0x87, 0x71, 0x49, 0xbe, 0x7d, 0xab, 0x16, 0xeb, 0x36, + 0x3a, 0xd1, 0x7f, 0x97, 0xd3, 0x81, 0xeb, 0xc2, 0x4d, 0x0f, 0x5a, 0xec, 0xe4, 0x3f, 0x5a, 0x8f, + 0x16, 0x17, 0xcf, 0x1c, 0xb6, 0x5e, 0x3d, 0xf6, 0x4c, 0x98, 0xf9, 0x2b, 0x60, 0x52, 0x08, 0xe1, + 0x08, 0x14, 0x61, 0x09, 0xe6, 0x74, 0x0f, 0x5a, 0xc2, 0xe1, 0xd4, 0x89, 0x7f, 0xa1, 0xfe, 0xa8, + 0x94, 0x55, 0x0f, 0x49, 0x28, 0x2c, 0x2f, 0x22, 0x96, 0x45, 0xe1, 0x27, 0x01, 0x13, 0x56, 0x5b, + 0x9a, 0xc2, 0x0d, 0xa9, 0xf8, 0xba, 0x7f, 0x5f, 0x53, 0xb7, 0xb6, 0x6e, 0x4d, 0x44, 0x8e, 0xb6, + 0xc5, 0xf5, 0x58, 0x3a, 0x11, 0xed, 0x5b, 0x5f, 0x2b, 0x85, 0xd6, 0xcd, 0x8f, 0xa5, 0xd3, 0xdd, + 0x89, 0x38, 0xde, 0x3f, 0x8f, 0x3e, 0xaf, 0xa7, 0x92, 0x9b, 0x3c, 0x57, 0x76, 0xfd, 0x8f, 0x7c, + 0x9f, 0x2c, 0xab, 0xe9, 0x44, 0xb3, 0xd6, 0xaf, 0xf6, 0x1a, 0x9d, 0x68, 0xc1, 0x1d, 0x21, 0xe5, + 0x3f, 0xad, 0x4f, 0xa9, 0x4c, 0xe2, 0x05, 0x8c, 0x0b, 0x87, 0xda, 0xe6, 0xcb, 0x77, 0xba, 0x40, + 0xff, 0xd6, 0x76, 0x7b, 0x3a, 0x93, 0x32, 0x52, 0x0f, 0xfc, 0x23, 0x00, 0x00, 0xff, 0xff, 0x2b, + 0x2c, 0xff, 0x6e, 0x8a, 0x88, 0x04, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -37706,7 +37727,7 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type ClusterManagerClient interface { - // * cluster management + //* cluster management CreateCluster(ctx context.Context, in *CreateClusterReq, opts ...grpc.CallOption) (*CreateClusterResp, error) RetryCreateClusterTask(ctx context.Context, in *RetryCreateClusterReq, opts ...grpc.CallOption) (*RetryCreateClusterResp, error) CheckCloudKubeConfig(ctx context.Context, in *KubeConfigReq, opts ...grpc.CallOption) (*KubeConfigResp, error) @@ -37729,7 +37750,7 @@ type ClusterManagerClient interface { CreateVirtualCluster(ctx context.Context, in *CreateVirtualClusterReq, opts ...grpc.CallOption) (*CreateVirtualClusterResp, error) DeleteVirtualCluster(ctx context.Context, in *DeleteVirtualClusterReq, opts ...grpc.CallOption) (*DeleteVirtualClusterResp, error) UpdateVirtualClusterQuota(ctx context.Context, in *UpdateVirtualClusterQuotaReq, opts ...grpc.CallOption) (*UpdateVirtualClusterQuotaResp, error) - // * node management + //* node management GetNode(ctx context.Context, in *GetNodeRequest, opts ...grpc.CallOption) (*GetNodeResponse, error) GetNodeInfo(ctx context.Context, in *GetNodeInfoRequest, opts ...grpc.CallOption) (*GetNodeInfoResponse, error) RecordNodeInfo(ctx context.Context, in *RecordNodeInfoRequest, opts ...grpc.CallOption) (*CommonResp, error) @@ -37742,28 +37763,28 @@ type ClusterManagerClient interface { UpdateNodeLabels(ctx context.Context, in *UpdateNodeLabelsRequest, opts ...grpc.CallOption) (*UpdateNodeLabelsResponse, error) UpdateNodeAnnotations(ctx context.Context, in *UpdateNodeAnnotationsRequest, opts ...grpc.CallOption) (*UpdateNodeAnnotationsResponse, error) UpdateNodeTaints(ctx context.Context, in *UpdateNodeTaintsRequest, opts ...grpc.CallOption) (*UpdateNodeTaintsResponse, error) - // * cluster credential management + //* cluster credential management GetClusterCredential(ctx context.Context, in *GetClusterCredentialReq, opts ...grpc.CallOption) (*GetClusterCredentialResp, error) UpdateClusterCredential(ctx context.Context, in *UpdateClusterCredentialReq, opts ...grpc.CallOption) (*UpdateClusterCredentialResp, error) DeleteClusterCredential(ctx context.Context, in *DeleteClusterCredentialReq, opts ...grpc.CallOption) (*DeleteClusterCredentialResp, error) ListClusterCredential(ctx context.Context, in *ListClusterCredentialReq, opts ...grpc.CallOption) (*ListClusterCredentialResp, error) - // * federation cluster management + //* federation cluster management InitFederationCluster(ctx context.Context, in *InitFederationClusterReq, opts ...grpc.CallOption) (*InitFederationClusterResp, error) AddFederatedCluster(ctx context.Context, in *AddFederatedClusterReq, opts ...grpc.CallOption) (*AddFederatedClusterResp, error) - // * Cloud information management * + //* Cloud information management * CreateCloud(ctx context.Context, in *CreateCloudRequest, opts ...grpc.CallOption) (*CreateCloudResponse, error) UpdateCloud(ctx context.Context, in *UpdateCloudRequest, opts ...grpc.CallOption) (*UpdateCloudResponse, error) DeleteCloud(ctx context.Context, in *DeleteCloudRequest, opts ...grpc.CallOption) (*DeleteCloudResponse, error) GetCloud(ctx context.Context, in *GetCloudRequest, opts ...grpc.CallOption) (*GetCloudResponse, error) ListCloud(ctx context.Context, in *ListCloudRequest, opts ...grpc.CallOption) (*ListCloudResponse, error) - // * Cloud VPC information management * + //* Cloud VPC information management * CreateCloudVPC(ctx context.Context, in *CreateCloudVPCRequest, opts ...grpc.CallOption) (*CreateCloudVPCResponse, error) UpdateCloudVPC(ctx context.Context, in *UpdateCloudVPCRequest, opts ...grpc.CallOption) (*UpdateCloudVPCResponse, error) DeleteCloudVPC(ctx context.Context, in *DeleteCloudVPCRequest, opts ...grpc.CallOption) (*DeleteCloudVPCResponse, error) ListCloudVPC(ctx context.Context, in *ListCloudVPCRequest, opts ...grpc.CallOption) (*ListCloudVPCResponse, error) ListCloudRegions(ctx context.Context, in *ListCloudRegionsRequest, opts ...grpc.CallOption) (*ListCloudRegionsResponse, error) GetVPCCidr(ctx context.Context, in *GetVPCCidrRequest, opts ...grpc.CallOption) (*GetVPCCidrResponse, error) - // * NodeGroup information management * + //* NodeGroup information management * CreateNodeGroup(ctx context.Context, in *CreateNodeGroupRequest, opts ...grpc.CallOption) (*CreateNodeGroupResponse, error) UpdateNodeGroup(ctx context.Context, in *UpdateNodeGroupRequest, opts ...grpc.CallOption) (*UpdateNodeGroupResponse, error) DeleteNodeGroup(ctx context.Context, in *DeleteNodeGroupRequest, opts ...grpc.CallOption) (*DeleteNodeGroupResponse, error) @@ -37785,7 +37806,7 @@ type ClusterManagerClient interface { EnableNodeGroupAutoScale(ctx context.Context, in *EnableNodeGroupAutoScaleRequest, opts ...grpc.CallOption) (*EnableNodeGroupAutoScaleResponse, error) DisableNodeGroupAutoScale(ctx context.Context, in *DisableNodeGroupAutoScaleRequest, opts ...grpc.CallOption) (*DisableNodeGroupAutoScaleResponse, error) GetProviderResourceUsage(ctx context.Context, in *GetProviderResourceUsageRequest, opts ...grpc.CallOption) (*GetProviderResourceUsageResponse, error) - // * Task information management * + //* Task information management * CreateTask(ctx context.Context, in *CreateTaskRequest, opts ...grpc.CallOption) (*CreateTaskResponse, error) RetryTask(ctx context.Context, in *RetryTaskRequest, opts ...grpc.CallOption) (*RetryTaskResponse, error) SkipTask(ctx context.Context, in *SkipTaskRequest, opts ...grpc.CallOption) (*SkipTaskResponse, error) @@ -37793,7 +37814,7 @@ type ClusterManagerClient interface { DeleteTask(ctx context.Context, in *DeleteTaskRequest, opts ...grpc.CallOption) (*DeleteTaskResponse, error) GetTask(ctx context.Context, in *GetTaskRequest, opts ...grpc.CallOption) (*GetTaskResponse, error) ListTask(ctx context.Context, in *ListTaskRequest, opts ...grpc.CallOption) (*ListTaskResponse, error) - // * ClusterAutoScalingOption information management * + //* ClusterAutoScalingOption information management * CreateAutoScalingOption(ctx context.Context, in *CreateAutoScalingOptionRequest, opts ...grpc.CallOption) (*CreateAutoScalingOptionResponse, error) UpdateAutoScalingOption(ctx context.Context, in *UpdateAutoScalingOptionRequest, opts ...grpc.CallOption) (*UpdateAutoScalingOptionResponse, error) UpdateAsOptionDeviceProvider(ctx context.Context, in *UpdateAsOptionDeviceProviderRequest, opts ...grpc.CallOption) (*UpdateAsOptionDeviceProviderResponse, error) @@ -39189,7 +39210,7 @@ func (c *clusterManagerClient) Health(ctx context.Context, in *HealthRequest, op // ClusterManagerServer is the server API for ClusterManager service. type ClusterManagerServer interface { - // * cluster management + //* cluster management CreateCluster(context.Context, *CreateClusterReq) (*CreateClusterResp, error) RetryCreateClusterTask(context.Context, *RetryCreateClusterReq) (*RetryCreateClusterResp, error) CheckCloudKubeConfig(context.Context, *KubeConfigReq) (*KubeConfigResp, error) @@ -39212,7 +39233,7 @@ type ClusterManagerServer interface { CreateVirtualCluster(context.Context, *CreateVirtualClusterReq) (*CreateVirtualClusterResp, error) DeleteVirtualCluster(context.Context, *DeleteVirtualClusterReq) (*DeleteVirtualClusterResp, error) UpdateVirtualClusterQuota(context.Context, *UpdateVirtualClusterQuotaReq) (*UpdateVirtualClusterQuotaResp, error) - // * node management + //* node management GetNode(context.Context, *GetNodeRequest) (*GetNodeResponse, error) GetNodeInfo(context.Context, *GetNodeInfoRequest) (*GetNodeInfoResponse, error) RecordNodeInfo(context.Context, *RecordNodeInfoRequest) (*CommonResp, error) @@ -39225,28 +39246,28 @@ type ClusterManagerServer interface { UpdateNodeLabels(context.Context, *UpdateNodeLabelsRequest) (*UpdateNodeLabelsResponse, error) UpdateNodeAnnotations(context.Context, *UpdateNodeAnnotationsRequest) (*UpdateNodeAnnotationsResponse, error) UpdateNodeTaints(context.Context, *UpdateNodeTaintsRequest) (*UpdateNodeTaintsResponse, error) - // * cluster credential management + //* cluster credential management GetClusterCredential(context.Context, *GetClusterCredentialReq) (*GetClusterCredentialResp, error) UpdateClusterCredential(context.Context, *UpdateClusterCredentialReq) (*UpdateClusterCredentialResp, error) DeleteClusterCredential(context.Context, *DeleteClusterCredentialReq) (*DeleteClusterCredentialResp, error) ListClusterCredential(context.Context, *ListClusterCredentialReq) (*ListClusterCredentialResp, error) - // * federation cluster management + //* federation cluster management InitFederationCluster(context.Context, *InitFederationClusterReq) (*InitFederationClusterResp, error) AddFederatedCluster(context.Context, *AddFederatedClusterReq) (*AddFederatedClusterResp, error) - // * Cloud information management * + //* Cloud information management * CreateCloud(context.Context, *CreateCloudRequest) (*CreateCloudResponse, error) UpdateCloud(context.Context, *UpdateCloudRequest) (*UpdateCloudResponse, error) DeleteCloud(context.Context, *DeleteCloudRequest) (*DeleteCloudResponse, error) GetCloud(context.Context, *GetCloudRequest) (*GetCloudResponse, error) ListCloud(context.Context, *ListCloudRequest) (*ListCloudResponse, error) - // * Cloud VPC information management * + //* Cloud VPC information management * CreateCloudVPC(context.Context, *CreateCloudVPCRequest) (*CreateCloudVPCResponse, error) UpdateCloudVPC(context.Context, *UpdateCloudVPCRequest) (*UpdateCloudVPCResponse, error) DeleteCloudVPC(context.Context, *DeleteCloudVPCRequest) (*DeleteCloudVPCResponse, error) ListCloudVPC(context.Context, *ListCloudVPCRequest) (*ListCloudVPCResponse, error) ListCloudRegions(context.Context, *ListCloudRegionsRequest) (*ListCloudRegionsResponse, error) GetVPCCidr(context.Context, *GetVPCCidrRequest) (*GetVPCCidrResponse, error) - // * NodeGroup information management * + //* NodeGroup information management * CreateNodeGroup(context.Context, *CreateNodeGroupRequest) (*CreateNodeGroupResponse, error) UpdateNodeGroup(context.Context, *UpdateNodeGroupRequest) (*UpdateNodeGroupResponse, error) DeleteNodeGroup(context.Context, *DeleteNodeGroupRequest) (*DeleteNodeGroupResponse, error) @@ -39268,7 +39289,7 @@ type ClusterManagerServer interface { EnableNodeGroupAutoScale(context.Context, *EnableNodeGroupAutoScaleRequest) (*EnableNodeGroupAutoScaleResponse, error) DisableNodeGroupAutoScale(context.Context, *DisableNodeGroupAutoScaleRequest) (*DisableNodeGroupAutoScaleResponse, error) GetProviderResourceUsage(context.Context, *GetProviderResourceUsageRequest) (*GetProviderResourceUsageResponse, error) - // * Task information management * + //* Task information management * CreateTask(context.Context, *CreateTaskRequest) (*CreateTaskResponse, error) RetryTask(context.Context, *RetryTaskRequest) (*RetryTaskResponse, error) SkipTask(context.Context, *SkipTaskRequest) (*SkipTaskResponse, error) @@ -39276,7 +39297,7 @@ type ClusterManagerServer interface { DeleteTask(context.Context, *DeleteTaskRequest) (*DeleteTaskResponse, error) GetTask(context.Context, *GetTaskRequest) (*GetTaskResponse, error) ListTask(context.Context, *ListTaskRequest) (*ListTaskResponse, error) - // * ClusterAutoScalingOption information management * + //* ClusterAutoScalingOption information management * CreateAutoScalingOption(context.Context, *CreateAutoScalingOptionRequest) (*CreateAutoScalingOptionResponse, error) UpdateAutoScalingOption(context.Context, *UpdateAutoScalingOptionRequest) (*UpdateAutoScalingOptionResponse, error) UpdateAsOptionDeviceProvider(context.Context, *UpdateAsOptionDeviceProviderRequest) (*UpdateAsOptionDeviceProviderResponse, error) diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.micro.go b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.micro.go index 67ad3631fa..8daa508b82 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.micro.go +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.micro.go @@ -906,7 +906,7 @@ func NewClusterManagerEndpoints() []*api.Endpoint { // Client API for ClusterManager service type ClusterManagerService interface { - // * cluster management + //* cluster management CreateCluster(ctx context.Context, in *CreateClusterReq, opts ...client.CallOption) (*CreateClusterResp, error) RetryCreateClusterTask(ctx context.Context, in *RetryCreateClusterReq, opts ...client.CallOption) (*RetryCreateClusterResp, error) CheckCloudKubeConfig(ctx context.Context, in *KubeConfigReq, opts ...client.CallOption) (*KubeConfigResp, error) @@ -929,7 +929,7 @@ type ClusterManagerService interface { CreateVirtualCluster(ctx context.Context, in *CreateVirtualClusterReq, opts ...client.CallOption) (*CreateVirtualClusterResp, error) DeleteVirtualCluster(ctx context.Context, in *DeleteVirtualClusterReq, opts ...client.CallOption) (*DeleteVirtualClusterResp, error) UpdateVirtualClusterQuota(ctx context.Context, in *UpdateVirtualClusterQuotaReq, opts ...client.CallOption) (*UpdateVirtualClusterQuotaResp, error) - // * node management + //* node management GetNode(ctx context.Context, in *GetNodeRequest, opts ...client.CallOption) (*GetNodeResponse, error) GetNodeInfo(ctx context.Context, in *GetNodeInfoRequest, opts ...client.CallOption) (*GetNodeInfoResponse, error) RecordNodeInfo(ctx context.Context, in *RecordNodeInfoRequest, opts ...client.CallOption) (*CommonResp, error) @@ -942,28 +942,28 @@ type ClusterManagerService interface { UpdateNodeLabels(ctx context.Context, in *UpdateNodeLabelsRequest, opts ...client.CallOption) (*UpdateNodeLabelsResponse, error) UpdateNodeAnnotations(ctx context.Context, in *UpdateNodeAnnotationsRequest, opts ...client.CallOption) (*UpdateNodeAnnotationsResponse, error) UpdateNodeTaints(ctx context.Context, in *UpdateNodeTaintsRequest, opts ...client.CallOption) (*UpdateNodeTaintsResponse, error) - // * cluster credential management + //* cluster credential management GetClusterCredential(ctx context.Context, in *GetClusterCredentialReq, opts ...client.CallOption) (*GetClusterCredentialResp, error) UpdateClusterCredential(ctx context.Context, in *UpdateClusterCredentialReq, opts ...client.CallOption) (*UpdateClusterCredentialResp, error) DeleteClusterCredential(ctx context.Context, in *DeleteClusterCredentialReq, opts ...client.CallOption) (*DeleteClusterCredentialResp, error) ListClusterCredential(ctx context.Context, in *ListClusterCredentialReq, opts ...client.CallOption) (*ListClusterCredentialResp, error) - // * federation cluster management + //* federation cluster management InitFederationCluster(ctx context.Context, in *InitFederationClusterReq, opts ...client.CallOption) (*InitFederationClusterResp, error) AddFederatedCluster(ctx context.Context, in *AddFederatedClusterReq, opts ...client.CallOption) (*AddFederatedClusterResp, error) - // * Cloud information management * + //* Cloud information management * CreateCloud(ctx context.Context, in *CreateCloudRequest, opts ...client.CallOption) (*CreateCloudResponse, error) UpdateCloud(ctx context.Context, in *UpdateCloudRequest, opts ...client.CallOption) (*UpdateCloudResponse, error) DeleteCloud(ctx context.Context, in *DeleteCloudRequest, opts ...client.CallOption) (*DeleteCloudResponse, error) GetCloud(ctx context.Context, in *GetCloudRequest, opts ...client.CallOption) (*GetCloudResponse, error) ListCloud(ctx context.Context, in *ListCloudRequest, opts ...client.CallOption) (*ListCloudResponse, error) - // * Cloud VPC information management * + //* Cloud VPC information management * CreateCloudVPC(ctx context.Context, in *CreateCloudVPCRequest, opts ...client.CallOption) (*CreateCloudVPCResponse, error) UpdateCloudVPC(ctx context.Context, in *UpdateCloudVPCRequest, opts ...client.CallOption) (*UpdateCloudVPCResponse, error) DeleteCloudVPC(ctx context.Context, in *DeleteCloudVPCRequest, opts ...client.CallOption) (*DeleteCloudVPCResponse, error) ListCloudVPC(ctx context.Context, in *ListCloudVPCRequest, opts ...client.CallOption) (*ListCloudVPCResponse, error) ListCloudRegions(ctx context.Context, in *ListCloudRegionsRequest, opts ...client.CallOption) (*ListCloudRegionsResponse, error) GetVPCCidr(ctx context.Context, in *GetVPCCidrRequest, opts ...client.CallOption) (*GetVPCCidrResponse, error) - // * NodeGroup information management * + //* NodeGroup information management * CreateNodeGroup(ctx context.Context, in *CreateNodeGroupRequest, opts ...client.CallOption) (*CreateNodeGroupResponse, error) UpdateNodeGroup(ctx context.Context, in *UpdateNodeGroupRequest, opts ...client.CallOption) (*UpdateNodeGroupResponse, error) DeleteNodeGroup(ctx context.Context, in *DeleteNodeGroupRequest, opts ...client.CallOption) (*DeleteNodeGroupResponse, error) @@ -985,7 +985,7 @@ type ClusterManagerService interface { EnableNodeGroupAutoScale(ctx context.Context, in *EnableNodeGroupAutoScaleRequest, opts ...client.CallOption) (*EnableNodeGroupAutoScaleResponse, error) DisableNodeGroupAutoScale(ctx context.Context, in *DisableNodeGroupAutoScaleRequest, opts ...client.CallOption) (*DisableNodeGroupAutoScaleResponse, error) GetProviderResourceUsage(ctx context.Context, in *GetProviderResourceUsageRequest, opts ...client.CallOption) (*GetProviderResourceUsageResponse, error) - // * Task information management * + //* Task information management * CreateTask(ctx context.Context, in *CreateTaskRequest, opts ...client.CallOption) (*CreateTaskResponse, error) RetryTask(ctx context.Context, in *RetryTaskRequest, opts ...client.CallOption) (*RetryTaskResponse, error) SkipTask(ctx context.Context, in *SkipTaskRequest, opts ...client.CallOption) (*SkipTaskResponse, error) @@ -993,7 +993,7 @@ type ClusterManagerService interface { DeleteTask(ctx context.Context, in *DeleteTaskRequest, opts ...client.CallOption) (*DeleteTaskResponse, error) GetTask(ctx context.Context, in *GetTaskRequest, opts ...client.CallOption) (*GetTaskResponse, error) ListTask(ctx context.Context, in *ListTaskRequest, opts ...client.CallOption) (*ListTaskResponse, error) - // * ClusterAutoScalingOption information management * + //* ClusterAutoScalingOption information management * CreateAutoScalingOption(ctx context.Context, in *CreateAutoScalingOptionRequest, opts ...client.CallOption) (*CreateAutoScalingOptionResponse, error) UpdateAutoScalingOption(ctx context.Context, in *UpdateAutoScalingOptionRequest, opts ...client.CallOption) (*UpdateAutoScalingOptionResponse, error) UpdateAsOptionDeviceProvider(ctx context.Context, in *UpdateAsOptionDeviceProviderRequest, opts ...client.CallOption) (*UpdateAsOptionDeviceProviderResponse, error) @@ -2538,7 +2538,7 @@ func (c *clusterManagerService) Health(ctx context.Context, in *HealthRequest, o // Server API for ClusterManager service type ClusterManagerHandler interface { - // * cluster management + //* cluster management CreateCluster(context.Context, *CreateClusterReq, *CreateClusterResp) error RetryCreateClusterTask(context.Context, *RetryCreateClusterReq, *RetryCreateClusterResp) error CheckCloudKubeConfig(context.Context, *KubeConfigReq, *KubeConfigResp) error @@ -2561,7 +2561,7 @@ type ClusterManagerHandler interface { CreateVirtualCluster(context.Context, *CreateVirtualClusterReq, *CreateVirtualClusterResp) error DeleteVirtualCluster(context.Context, *DeleteVirtualClusterReq, *DeleteVirtualClusterResp) error UpdateVirtualClusterQuota(context.Context, *UpdateVirtualClusterQuotaReq, *UpdateVirtualClusterQuotaResp) error - // * node management + //* node management GetNode(context.Context, *GetNodeRequest, *GetNodeResponse) error GetNodeInfo(context.Context, *GetNodeInfoRequest, *GetNodeInfoResponse) error RecordNodeInfo(context.Context, *RecordNodeInfoRequest, *CommonResp) error @@ -2574,28 +2574,28 @@ type ClusterManagerHandler interface { UpdateNodeLabels(context.Context, *UpdateNodeLabelsRequest, *UpdateNodeLabelsResponse) error UpdateNodeAnnotations(context.Context, *UpdateNodeAnnotationsRequest, *UpdateNodeAnnotationsResponse) error UpdateNodeTaints(context.Context, *UpdateNodeTaintsRequest, *UpdateNodeTaintsResponse) error - // * cluster credential management + //* cluster credential management GetClusterCredential(context.Context, *GetClusterCredentialReq, *GetClusterCredentialResp) error UpdateClusterCredential(context.Context, *UpdateClusterCredentialReq, *UpdateClusterCredentialResp) error DeleteClusterCredential(context.Context, *DeleteClusterCredentialReq, *DeleteClusterCredentialResp) error ListClusterCredential(context.Context, *ListClusterCredentialReq, *ListClusterCredentialResp) error - // * federation cluster management + //* federation cluster management InitFederationCluster(context.Context, *InitFederationClusterReq, *InitFederationClusterResp) error AddFederatedCluster(context.Context, *AddFederatedClusterReq, *AddFederatedClusterResp) error - // * Cloud information management * + //* Cloud information management * CreateCloud(context.Context, *CreateCloudRequest, *CreateCloudResponse) error UpdateCloud(context.Context, *UpdateCloudRequest, *UpdateCloudResponse) error DeleteCloud(context.Context, *DeleteCloudRequest, *DeleteCloudResponse) error GetCloud(context.Context, *GetCloudRequest, *GetCloudResponse) error ListCloud(context.Context, *ListCloudRequest, *ListCloudResponse) error - // * Cloud VPC information management * + //* Cloud VPC information management * CreateCloudVPC(context.Context, *CreateCloudVPCRequest, *CreateCloudVPCResponse) error UpdateCloudVPC(context.Context, *UpdateCloudVPCRequest, *UpdateCloudVPCResponse) error DeleteCloudVPC(context.Context, *DeleteCloudVPCRequest, *DeleteCloudVPCResponse) error ListCloudVPC(context.Context, *ListCloudVPCRequest, *ListCloudVPCResponse) error ListCloudRegions(context.Context, *ListCloudRegionsRequest, *ListCloudRegionsResponse) error GetVPCCidr(context.Context, *GetVPCCidrRequest, *GetVPCCidrResponse) error - // * NodeGroup information management * + //* NodeGroup information management * CreateNodeGroup(context.Context, *CreateNodeGroupRequest, *CreateNodeGroupResponse) error UpdateNodeGroup(context.Context, *UpdateNodeGroupRequest, *UpdateNodeGroupResponse) error DeleteNodeGroup(context.Context, *DeleteNodeGroupRequest, *DeleteNodeGroupResponse) error @@ -2617,7 +2617,7 @@ type ClusterManagerHandler interface { EnableNodeGroupAutoScale(context.Context, *EnableNodeGroupAutoScaleRequest, *EnableNodeGroupAutoScaleResponse) error DisableNodeGroupAutoScale(context.Context, *DisableNodeGroupAutoScaleRequest, *DisableNodeGroupAutoScaleResponse) error GetProviderResourceUsage(context.Context, *GetProviderResourceUsageRequest, *GetProviderResourceUsageResponse) error - // * Task information management * + //* Task information management * CreateTask(context.Context, *CreateTaskRequest, *CreateTaskResponse) error RetryTask(context.Context, *RetryTaskRequest, *RetryTaskResponse) error SkipTask(context.Context, *SkipTaskRequest, *SkipTaskResponse) error @@ -2625,7 +2625,7 @@ type ClusterManagerHandler interface { DeleteTask(context.Context, *DeleteTaskRequest, *DeleteTaskResponse) error GetTask(context.Context, *GetTaskRequest, *GetTaskResponse) error ListTask(context.Context, *ListTaskRequest, *ListTaskResponse) error - // * ClusterAutoScalingOption information management * + //* ClusterAutoScalingOption information management * CreateAutoScalingOption(context.Context, *CreateAutoScalingOptionRequest, *CreateAutoScalingOptionResponse) error UpdateAutoScalingOption(context.Context, *UpdateAutoScalingOptionRequest, *UpdateAutoScalingOptionResponse) error UpdateAsOptionDeviceProvider(context.Context, *UpdateAsOptionDeviceProviderRequest, *UpdateAsOptionDeviceProviderResponse) error diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go index d14635ee97..85d60a4d89 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go @@ -11,11 +11,12 @@ import ( "net/mail" "net/url" "regexp" + "sort" "strings" "time" "unicode/utf8" - "github.com/golang/protobuf/ptypes" + "google.golang.org/protobuf/types/known/anypb" ) // ensure the imports are used @@ -30,19 +31,31 @@ var ( _ = time.Duration(0) _ = (*url.URL)(nil) _ = (*mail.Address)(nil) - _ = ptypes.DynamicAny{} + _ = anypb.Any{} + _ = sort.Sort ) -// define the regex for a UUID once up-front -var _clustermanager_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") - // Validate checks the field values on Cluster with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *Cluster) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Cluster 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 ClusterMultiError, or nil if none found. +func (m *Cluster) ValidateAll() error { + return m.validate(true) +} + +func (m *Cluster) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID // no validation rules for ClusterName @@ -75,62 +88,168 @@ func (m *Cluster) Validate() error { // no validation rules for UpdateTime - for key, val := range m.GetBcsAddons() { - _ = val - - // no validation rules for BcsAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: fmt.Sprintf("BcsAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetBcsAddons())) + i := 0 + for key := range m.GetBcsAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetBcsAddons()[key] + _ = val + + // no validation rules for BcsAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraAddons() { - _ = val - - // no validation rules for ExtraAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: fmt.Sprintf("ExtraAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetExtraAddons())) + i := 0 + for key := range m.GetExtraAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraAddons()[key] + _ = val + + // no validation rules for ExtraAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for SystemID // no validation rules for ManageType - for key, val := range m.GetMaster() { - _ = val + { + sorted_keys := make([]string, len(m.GetMaster())) + i := 0 + for key := range m.GetMaster() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetMaster()[key] + _ = val + + // no validation rules for Master[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("Master[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("Master[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ClusterValidationError{ + field: fmt.Sprintf("Master[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for Master[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return ClusterValidationError{ - field: fmt.Sprintf("Master[%v]", key), + errors = append(errors, ClusterValidationError{ + field: "NetworkSettings", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "NetworkSettings", @@ -140,7 +259,26 @@ func (m *Cluster) Validate() error { } } - if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterBasicSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "ClusterBasicSettings", @@ -150,7 +288,26 @@ func (m *Cluster) Validate() error { } } - if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterAdvanceSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "ClusterAdvanceSettings", @@ -160,7 +317,26 @@ func (m *Cluster) Validate() error { } } - if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterValidationError{ field: "NodeSettings", @@ -171,19 +347,27 @@ func (m *Cluster) Validate() error { } if _, ok := _Cluster_Status_InLookup[m.GetStatus()]; !ok { - return ClusterValidationError{ + err := ClusterValidationError{ field: "Status", reason: "value must be in list [CREATING RUNNING DELETING FALURE INITIALIZATION]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Updater if _, ok := _Cluster_NetworkType_InLookup[m.GetNetworkType()]; !ok { - return ClusterValidationError{ + err := ClusterValidationError{ field: "NetworkType", reason: "value must be in list [underlay overlay ]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AutoGenerateMasterNodes @@ -191,7 +375,26 @@ func (m *Cluster) Validate() error { for idx, item := range m.GetTemplate() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("Template[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterValidationError{ + field: fmt.Sprintf("Template[%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 ClusterValidationError{ field: fmt.Sprintf("Template[%v]", idx), @@ -229,9 +432,29 @@ func (m *Cluster) Validate() error { // no validation rules for ClusterIamRole + if len(errors) > 0 { + return ClusterMultiError(errors) + } + return nil } +// ClusterMultiError is an error wrapping multiple validation errors returned +// by Cluster.ValidateAll() if the designated constraints aren't met. +type ClusterMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterMultiError) 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 ClusterMultiError) AllErrors() []error { return m } + // ClusterValidationError is the validation error returned by Cluster.Validate // if the designated constraints aren't met. type ClusterValidationError struct { @@ -301,12 +524,26 @@ var _Cluster_NetworkType_InLookup = map[string]struct{}{ } // Validate checks the field values on Node with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. func (m *Node) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Node 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 NodeMultiError, or nil if none found. +func (m *Node) ValidateAll() error { + return m.validate(true) +} + +func (m *Node) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeID // no validation rules for InnerIP @@ -353,9 +590,29 @@ func (m *Node) Validate() error { // no validation rules for ChargeType + if len(errors) > 0 { + return NodeMultiError(errors) + } + return nil } +// NodeMultiError is an error wrapping multiple validation errors returned by +// Node.ValidateAll() if the designated constraints aren't met. +type NodeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeMultiError) 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 NodeMultiError) AllErrors() []error { return m } + // NodeValidationError is the validation error returned by Node.Validate if the // designated constraints aren't met. type NodeValidationError struct { @@ -411,13 +668,27 @@ var _ interface { } = NodeValidationError{} // Validate checks the field values on NetworkSetting with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *NetworkSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NetworkSetting 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 NetworkSettingMultiError, +// or nil if none found. +func (m *NetworkSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *NetworkSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterIPv4CIDR // no validation rules for ServiceIPv4CIDR @@ -428,7 +699,26 @@ func (m *NetworkSetting) Validate() error { // no validation rules for EnableVPCCni - if v, ok := interface{}(m.GetSubnetSource()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSubnetSource()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NetworkSettingValidationError{ + field: "SubnetSource", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NetworkSettingValidationError{ + field: "SubnetSource", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSubnetSource()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NetworkSettingValidationError{ field: "SubnetSource", @@ -454,9 +744,30 @@ func (m *NetworkSetting) Validate() error { // no validation rules for NetworkMode + if len(errors) > 0 { + return NetworkSettingMultiError(errors) + } + return nil } +// NetworkSettingMultiError is an error wrapping multiple validation errors +// returned by NetworkSetting.ValidateAll() if the designated constraints +// aren't met. +type NetworkSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NetworkSettingMultiError) 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 NetworkSettingMultiError) AllErrors() []error { return m } + // NetworkSettingValidationError is the validation error returned by // NetworkSetting.Validate if the designated constraints aren't met. type NetworkSettingValidationError struct { @@ -512,17 +823,50 @@ var _ interface { } = NetworkSettingValidationError{} // Validate checks the field values on SubnetSource with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *SubnetSource) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SubnetSource 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 SubnetSourceMultiError, or +// nil if none found. +func (m *SubnetSource) ValidateAll() error { + return m.validate(true) +} + +func (m *SubnetSource) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetNew() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubnetSourceValidationError{ + field: fmt.Sprintf("New[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubnetSourceValidationError{ + field: fmt.Sprintf("New[%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 SubnetSourceValidationError{ field: fmt.Sprintf("New[%v]", idx), @@ -534,7 +878,26 @@ func (m *SubnetSource) Validate() error { } - if v, ok := interface{}(m.GetExisted()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExisted()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubnetSourceValidationError{ + field: "Existed", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubnetSourceValidationError{ + field: "Existed", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExisted()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SubnetSourceValidationError{ field: "Existed", @@ -544,9 +907,29 @@ func (m *SubnetSource) Validate() error { } } + if len(errors) > 0 { + return SubnetSourceMultiError(errors) + } + return nil } +// SubnetSourceMultiError is an error wrapping multiple validation errors +// returned by SubnetSource.ValidateAll() if the designated constraints aren't met. +type SubnetSourceMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SubnetSourceMultiError) 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 SubnetSourceMultiError) AllErrors() []error { return m } + // SubnetSourceValidationError is the validation error returned by // SubnetSource.Validate if the designated constraints aren't met. type SubnetSourceValidationError struct { @@ -602,16 +985,51 @@ var _ interface { } = SubnetSourceValidationError{} // Validate checks the field values on ExistedSubnetIDs with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *ExistedSubnetIDs) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ExistedSubnetIDs 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 +// ExistedSubnetIDsMultiError, or nil if none found. +func (m *ExistedSubnetIDs) ValidateAll() error { + return m.validate(true) +} + +func (m *ExistedSubnetIDs) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return ExistedSubnetIDsMultiError(errors) + } + return nil } +// ExistedSubnetIDsMultiError is an error wrapping multiple validation errors +// returned by ExistedSubnetIDs.ValidateAll() if the designated constraints +// aren't met. +type ExistedSubnetIDsMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ExistedSubnetIDsMultiError) 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 ExistedSubnetIDsMultiError) AllErrors() []error { return m } + // ExistedSubnetIDsValidationError is the validation error returned by // ExistedSubnetIDs.Validate if the designated constraints aren't met. type ExistedSubnetIDsValidationError struct { @@ -667,21 +1085,56 @@ var _ interface { } = ExistedSubnetIDsValidationError{} // Validate checks the field values on NewSubnet with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *NewSubnet) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NewSubnet 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 NewSubnetMultiError, or nil +// if none found. +func (m *NewSubnet) ValidateAll() error { + return m.validate(true) +} + +func (m *NewSubnet) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Mask // no validation rules for Zone // no validation rules for IpCnt + if len(errors) > 0 { + return NewSubnetMultiError(errors) + } + return nil } +// NewSubnetMultiError is an error wrapping multiple validation errors returned +// by NewSubnet.ValidateAll() if the designated constraints aren't met. +type NewSubnetMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NewSubnetMultiError) 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 NewSubnetMultiError) AllErrors() []error { return m } + // NewSubnetValidationError is the validation error returned by // NewSubnet.Validate if the designated constraints aren't met. type NewSubnetValidationError struct { @@ -738,12 +1191,26 @@ var _ interface { // Validate checks the field values on ClusterBasicSetting with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ClusterBasicSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterBasicSetting 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 +// ClusterBasicSettingMultiError, or nil if none found. +func (m *ClusterBasicSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterBasicSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for OS // no validation rules for Version @@ -758,7 +1225,26 @@ func (m *ClusterBasicSetting) Validate() error { // no validation rules for IsAutoUpgradeClusterLevel - if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterBasicSettingValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterBasicSettingValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterBasicSettingValidationError{ field: "Area", @@ -768,7 +1254,26 @@ func (m *ClusterBasicSetting) Validate() error { } } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterBasicSettingValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterBasicSettingValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterBasicSettingValidationError{ field: "Module", @@ -778,9 +1283,30 @@ func (m *ClusterBasicSetting) Validate() error { } } + if len(errors) > 0 { + return ClusterBasicSettingMultiError(errors) + } + return nil } +// ClusterBasicSettingMultiError is an error wrapping multiple validation +// errors returned by ClusterBasicSetting.ValidateAll() if the designated +// constraints aren't met. +type ClusterBasicSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterBasicSettingMultiError) 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 ClusterBasicSettingMultiError) AllErrors() []error { return m } + // ClusterBasicSettingValidationError is the validation error returned by // ClusterBasicSetting.Validate if the designated constraints aren't met. type ClusterBasicSettingValidationError struct { @@ -839,12 +1365,26 @@ var _ interface { // Validate checks the field values on ClusterAdvanceSetting with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ClusterAdvanceSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterAdvanceSetting 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 +// ClusterAdvanceSettingMultiError, or nil if none found. +func (m *ClusterAdvanceSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterAdvanceSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IPVS // no validation rules for ContainerRuntime @@ -861,7 +1401,26 @@ func (m *ClusterAdvanceSetting) Validate() error { // no validation rules for EnableHa - if v, ok := interface{}(m.GetClusterConnectSetting()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterConnectSetting()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterAdvanceSettingValidationError{ + field: "ClusterConnectSetting", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterAdvanceSettingValidationError{ + field: "ClusterConnectSetting", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterConnectSetting()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterAdvanceSettingValidationError{ field: "ClusterConnectSetting", @@ -871,9 +1430,30 @@ func (m *ClusterAdvanceSetting) Validate() error { } } + if len(errors) > 0 { + return ClusterAdvanceSettingMultiError(errors) + } + return nil } +// ClusterAdvanceSettingMultiError is an error wrapping multiple validation +// errors returned by ClusterAdvanceSetting.ValidateAll() if the designated +// constraints aren't met. +type ClusterAdvanceSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterAdvanceSettingMultiError) 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 ClusterAdvanceSettingMultiError) AllErrors() []error { return m } + // ClusterAdvanceSettingValidationError is the validation error returned by // ClusterAdvanceSetting.Validate if the designated constraints aren't met. type ClusterAdvanceSettingValidationError struct { @@ -932,12 +1512,26 @@ var _ interface { // Validate checks the field values on ClusterConnectSetting with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ClusterConnectSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterConnectSetting 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 +// ClusterConnectSettingMultiError, or nil if none found. +func (m *ClusterConnectSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterConnectSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsExtranet // no validation rules for SubnetId @@ -946,7 +1540,26 @@ func (m *ClusterConnectSetting) Validate() error { // no validation rules for SecurityGroup - if v, ok := interface{}(m.GetInternet()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetInternet()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterConnectSettingValidationError{ + field: "Internet", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterConnectSettingValidationError{ + field: "Internet", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetInternet()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterConnectSettingValidationError{ field: "Internet", @@ -956,9 +1569,30 @@ func (m *ClusterConnectSetting) Validate() error { } } + if len(errors) > 0 { + return ClusterConnectSettingMultiError(errors) + } + return nil } +// ClusterConnectSettingMultiError is an error wrapping multiple validation +// errors returned by ClusterConnectSetting.ValidateAll() if the designated +// constraints aren't met. +type ClusterConnectSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterConnectSettingMultiError) 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 ClusterConnectSettingMultiError) AllErrors() []error { return m } + // ClusterConnectSettingValidationError is the validation error returned by // ClusterConnectSetting.Validate if the designated constraints aren't met. type ClusterConnectSettingValidationError struct { @@ -1016,13 +1650,27 @@ var _ interface { } = ClusterConnectSettingValidationError{} // Validate checks the field values on NodeSetting with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *NodeSetting) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeSetting 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 NodeSettingMultiError, or +// nil if none found. +func (m *NodeSetting) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeSetting) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for DockerGraphPath // no validation rules for MountTarget @@ -1036,7 +1684,26 @@ func (m *NodeSetting) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: fmt.Sprintf("Taints[%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 NodeSettingValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -1048,7 +1715,26 @@ func (m *NodeSetting) Validate() error { } - if v, ok := interface{}(m.GetMasterLogin()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetMasterLogin()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: "MasterLogin", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: "MasterLogin", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMasterLogin()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeSettingValidationError{ field: "MasterLogin", @@ -1058,7 +1744,26 @@ func (m *NodeSetting) Validate() error { } } - if v, ok := interface{}(m.GetWorkerLogin()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWorkerLogin()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: "WorkerLogin", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeSettingValidationError{ + field: "WorkerLogin", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWorkerLogin()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeSettingValidationError{ field: "WorkerLogin", @@ -1068,9 +1773,29 @@ func (m *NodeSetting) Validate() error { } } + if len(errors) > 0 { + return NodeSettingMultiError(errors) + } + return nil } +// NodeSettingMultiError is an error wrapping multiple validation errors +// returned by NodeSetting.ValidateAll() if the designated constraints aren't met. +type NodeSettingMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeSettingMultiError) 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 NodeSettingMultiError) AllErrors() []error { return m } + // NodeSettingValidationError is the validation error returned by // NodeSetting.Validate if the designated constraints aren't met. type NodeSettingValidationError struct { @@ -1126,18 +1851,51 @@ var _ interface { } = NodeSettingValidationError{} // Validate checks the field values on NodeLoginInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *NodeLoginInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeLoginInfo 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 NodeLoginInfoMultiError, or +// nil if none found. +func (m *NodeLoginInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeLoginInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for InitLoginUsername // no validation rules for InitLoginPassword - if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetKeyPair()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeLoginInfoValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeLoginInfoValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeLoginInfoValidationError{ field: "KeyPair", @@ -1147,9 +1905,30 @@ func (m *NodeLoginInfo) Validate() error { } } + if len(errors) > 0 { + return NodeLoginInfoMultiError(errors) + } + return nil } +// NodeLoginInfoMultiError is an error wrapping multiple validation errors +// returned by NodeLoginInfo.ValidateAll() if the designated constraints +// aren't met. +type NodeLoginInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeLoginInfoMultiError) 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 NodeLoginInfoMultiError) AllErrors() []error { return m } + // NodeLoginInfoValidationError is the validation error returned by // NodeLoginInfo.Validate if the designated constraints aren't met. type NodeLoginInfoValidationError struct { @@ -1205,13 +1984,27 @@ var _ interface { } = NodeLoginInfoValidationError{} // Validate checks the field values on ClusterCredential with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *ClusterCredential) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterCredential 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 +// ClusterCredentialMultiError, or nil if none found. +func (m *ClusterCredential) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterCredential) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ServerKey // no validation rules for ClusterID @@ -1236,9 +2029,30 @@ func (m *ClusterCredential) Validate() error { // no validation rules for ClientKey + if len(errors) > 0 { + return ClusterCredentialMultiError(errors) + } + return nil } +// ClusterCredentialMultiError is an error wrapping multiple validation errors +// returned by ClusterCredential.ValidateAll() if the designated constraints +// aren't met. +type ClusterCredentialMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterCredentialMultiError) 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 ClusterCredentialMultiError) AllErrors() []error { return m } + // ClusterCredentialValidationError is the validation error returned by // ClusterCredential.Validate if the designated constraints aren't met. type ClusterCredentialValidationError struct { @@ -1296,12 +2110,27 @@ var _ interface { } = ClusterCredentialValidationError{} // Validate checks the field values on Namespace with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *Namespace) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Namespace 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 NamespaceMultiError, or nil +// if none found. +func (m *Namespace) ValidateAll() error { + return m.validate(true) +} + +func (m *Namespace) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for FederationClusterID @@ -1321,7 +2150,26 @@ func (m *Namespace) Validate() error { for idx, item := range m.GetQuotaList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NamespaceValidationError{ + field: fmt.Sprintf("QuotaList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NamespaceValidationError{ + field: fmt.Sprintf("QuotaList[%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 NamespaceValidationError{ field: fmt.Sprintf("QuotaList[%v]", idx), @@ -1333,9 +2181,29 @@ func (m *Namespace) Validate() error { } + if len(errors) > 0 { + return NamespaceMultiError(errors) + } + return nil } +// NamespaceMultiError is an error wrapping multiple validation errors returned +// by Namespace.ValidateAll() if the designated constraints aren't met. +type NamespaceMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NamespaceMultiError) 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 NamespaceMultiError) AllErrors() []error { return m } + // NamespaceValidationError is the validation error returned by // Namespace.Validate if the designated constraints aren't met. type NamespaceValidationError struct { @@ -1391,13 +2259,27 @@ var _ interface { } = NamespaceValidationError{} // Validate checks the field values on ResourceQuota with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *ResourceQuota) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ResourceQuota 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 ResourceQuotaMultiError, or +// nil if none found. +func (m *ResourceQuota) ValidateAll() error { + return m.validate(true) +} + +func (m *ResourceQuota) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Namespace // no validation rules for FederationClusterID @@ -1416,9 +2298,30 @@ func (m *ResourceQuota) Validate() error { // no validation rules for Message + if len(errors) > 0 { + return ResourceQuotaMultiError(errors) + } + return nil } +// ResourceQuotaMultiError is an error wrapping multiple validation errors +// returned by ResourceQuota.ValidateAll() if the designated constraints +// aren't met. +type ResourceQuotaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ResourceQuotaMultiError) 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 ResourceQuotaMultiError) AllErrors() []error { return m } + // ResourceQuotaValidationError is the validation error returned by // ResourceQuota.Validate if the designated constraints aren't met. type ResourceQuotaValidationError struct { @@ -1474,12 +2377,27 @@ var _ interface { } = ResourceQuotaValidationError{} // Validate checks the field values on Credential with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *Credential) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Credential 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 CredentialMultiError, or +// nil if none found. +func (m *Credential) ValidateAll() error { + return m.validate(true) +} + +func (m *Credential) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Key // no validation rules for Secret @@ -1498,9 +2416,29 @@ func (m *Credential) Validate() error { // no validation rules for GkeProjectID + if len(errors) > 0 { + return CredentialMultiError(errors) + } + return nil } +// CredentialMultiError is an error wrapping multiple validation errors +// returned by Credential.ValidateAll() if the designated constraints aren't met. +type CredentialMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CredentialMultiError) 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 CredentialMultiError) AllErrors() []error { return m } + // CredentialValidationError is the validation error returned by // Credential.Validate if the designated constraints aren't met. type CredentialValidationError struct { @@ -1556,13 +2494,27 @@ var _ interface { } = CredentialValidationError{} // Validate checks the field values on BKOpsPlugin with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *BKOpsPlugin) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BKOpsPlugin 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 BKOpsPluginMultiError, or +// nil if none found. +func (m *BKOpsPlugin) ValidateAll() error { + return m.validate(true) +} + +func (m *BKOpsPlugin) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for System // no validation rules for Link @@ -1571,9 +2523,29 @@ func (m *BKOpsPlugin) Validate() error { // no validation rules for AllowSkipWhenFailed + if len(errors) > 0 { + return BKOpsPluginMultiError(errors) + } + return nil } +// BKOpsPluginMultiError is an error wrapping multiple validation errors +// returned by BKOpsPlugin.ValidateAll() if the designated constraints aren't met. +type BKOpsPluginMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BKOpsPluginMultiError) 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 BKOpsPluginMultiError) AllErrors() []error { return m } + // BKOpsPluginValidationError is the validation error returned by // BKOpsPlugin.Validate if the designated constraints aren't met. type BKOpsPluginValidationError struct { @@ -1629,32 +2601,95 @@ var _ interface { } = BKOpsPluginValidationError{} // Validate checks the field values on Action with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *Action) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Action 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 ActionMultiError, or nil if none found. +func (m *Action) ValidateAll() error { + return m.validate(true) +} + +func (m *Action) validate(all bool) error { if m == nil { return nil } - for key, val := range m.GetPlugins() { - _ = val + var errors []error - // no validation rules for Plugins[key] + { + sorted_keys := make([]string, len(m.GetPlugins())) + i := 0 + for key := range m.GetPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetPlugins()[key] + _ = val - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ActionValidationError{ - field: fmt.Sprintf("Plugins[%v]", key), - reason: "embedded message failed validation", - cause: err, + // no validation rules for Plugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ActionValidationError{ + field: fmt.Sprintf("Plugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ActionValidationError{ + field: fmt.Sprintf("Plugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ActionValidationError{ + field: fmt.Sprintf("Plugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } + } + } + if len(errors) > 0 { + return ActionMultiError(errors) } return nil } +// ActionMultiError is an error wrapping multiple validation errors returned by +// Action.ValidateAll() if the designated constraints aren't met. +type ActionMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ActionMultiError) 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 ActionMultiError) AllErrors() []error { return m } + // ActionValidationError is the validation error returned by Action.Validate if // the designated constraints aren't met. type ActionValidationError struct { @@ -1710,13 +2745,47 @@ var _ interface { } = ActionValidationError{} // Validate checks the field values on ClusterMgr with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *ClusterMgr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterMgr 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 ClusterMgrMultiError, or +// nil if none found. +func (m *ClusterMgr) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterMgr) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetCreateCluster()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetCreateCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "CreateCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "CreateCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreateCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "CreateCluster", @@ -1726,7 +2795,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetDeleteCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "DeleteCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "DeleteCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "DeleteCluster", @@ -1736,7 +2824,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetAddNodesToCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAddNodesToCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "AddNodesToCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "AddNodesToCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAddNodesToCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "AddNodesToCluster", @@ -1746,7 +2853,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetDeleteNodesFromCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteNodesFromCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "DeleteNodesFromCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "DeleteNodesFromCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteNodesFromCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "DeleteNodesFromCluster", @@ -1756,7 +2882,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetImportCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetImportCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "ImportCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "ImportCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetImportCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "ImportCluster", @@ -1766,7 +2911,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetCommonMixedAction()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCommonMixedAction()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "CommonMixedAction", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "CommonMixedAction", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCommonMixedAction()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "CommonMixedAction", @@ -1776,7 +2940,26 @@ func (m *ClusterMgr) Validate() error { } } - if v, ok := interface{}(m.GetCheckExternalNodeEmptyAction()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCheckExternalNodeEmptyAction()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "CheckExternalNodeEmptyAction", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: "CheckExternalNodeEmptyAction", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCheckExternalNodeEmptyAction()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterMgrValidationError{ field: "CheckExternalNodeEmptyAction", @@ -1789,7 +2972,26 @@ func (m *ClusterMgr) Validate() error { for idx, item := range m.GetManagedConfig() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: fmt.Sprintf("ManagedConfig[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterMgrValidationError{ + field: fmt.Sprintf("ManagedConfig[%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 ClusterMgrValidationError{ field: fmt.Sprintf("ManagedConfig[%v]", idx), @@ -1801,9 +3003,29 @@ func (m *ClusterMgr) Validate() error { } + if len(errors) > 0 { + return ClusterMgrMultiError(errors) + } + return nil } +// ClusterMgrMultiError is an error wrapping multiple validation errors +// returned by ClusterMgr.ValidateAll() if the designated constraints aren't met. +type ClusterMgrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterMgrMultiError) 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 ClusterMgrMultiError) AllErrors() []error { return m } + // ClusterMgrValidationError is the validation error returned by // ClusterMgr.Validate if the designated constraints aren't met. type ClusterMgrValidationError struct { @@ -1859,20 +3081,55 @@ var _ interface { } = ClusterMgrValidationError{} // Validate checks the field values on ManagedConfig with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *ManagedConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ManagedConfig 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 ManagedConfigMultiError, or +// nil if none found. +func (m *ManagedConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *ManagedConfig) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Spec // no validation rules for Desc + if len(errors) > 0 { + return ManagedConfigMultiError(errors) + } + return nil } +// ManagedConfigMultiError is an error wrapping multiple validation errors +// returned by ManagedConfig.ValidateAll() if the designated constraints +// aren't met. +type ManagedConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ManagedConfigMultiError) 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 ManagedConfigMultiError) AllErrors() []error { return m } + // ManagedConfigValidationError is the validation error returned by // ManagedConfig.Validate if the designated constraints aren't met. type ManagedConfigValidationError struct { @@ -1928,14 +3185,47 @@ var _ interface { } = ManagedConfigValidationError{} // Validate checks the field values on NodeGroupMgr with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *NodeGroupMgr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeGroupMgr 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 NodeGroupMgrMultiError, or +// nil if none found. +func (m *NodeGroupMgr) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeGroupMgr) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetCreateNodeGroup()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetCreateNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "CreateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "CreateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreateNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "CreateNodeGroup", @@ -1945,7 +3235,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetDeleteNodeGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "DeleteNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "DeleteNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "DeleteNodeGroup", @@ -1955,7 +3264,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetMoveNodesToGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetMoveNodesToGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "MoveNodesToGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "MoveNodesToGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMoveNodesToGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "MoveNodesToGroup", @@ -1965,7 +3293,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetRemoveNodesFromGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRemoveNodesFromGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "RemoveNodesFromGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "RemoveNodesFromGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRemoveNodesFromGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "RemoveNodesFromGroup", @@ -1975,7 +3322,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetCleanNodesInGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCleanNodesInGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "CleanNodesInGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "CleanNodesInGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCleanNodesInGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "CleanNodesInGroup", @@ -1985,7 +3351,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetUpdateDesiredNodes()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetUpdateDesiredNodes()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "UpdateDesiredNodes", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "UpdateDesiredNodes", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdateDesiredNodes()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "UpdateDesiredNodes", @@ -1995,7 +3380,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetAddExternalNodesToCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAddExternalNodesToCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "AddExternalNodesToCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "AddExternalNodesToCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAddExternalNodesToCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "AddExternalNodesToCluster", @@ -2005,7 +3409,26 @@ func (m *NodeGroupMgr) Validate() error { } } - if v, ok := interface{}(m.GetDeleteExternalNodesFromCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteExternalNodesFromCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "DeleteExternalNodesFromCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupMgrValidationError{ + field: "DeleteExternalNodesFromCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteExternalNodesFromCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupMgrValidationError{ field: "DeleteExternalNodesFromCluster", @@ -2015,9 +3438,29 @@ func (m *NodeGroupMgr) Validate() error { } } + if len(errors) > 0 { + return NodeGroupMgrMultiError(errors) + } + return nil } +// NodeGroupMgrMultiError is an error wrapping multiple validation errors +// returned by NodeGroupMgr.ValidateAll() if the designated constraints aren't met. +type NodeGroupMgrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeGroupMgrMultiError) 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 NodeGroupMgrMultiError) AllErrors() []error { return m } + // NodeGroupMgrValidationError is the validation error returned by // NodeGroupMgr.Validate if the designated constraints aren't met. type NodeGroupMgrValidationError struct { @@ -2073,17 +3516,51 @@ var _ interface { } = NodeGroupMgrValidationError{} // Validate checks the field values on OSInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *OSInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OSInfo 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 OSInfoMultiError, or nil if none found. +func (m *OSInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *OSInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Regions + if len(errors) > 0 { + return OSInfoMultiError(errors) + } + return nil } +// OSInfoMultiError is an error wrapping multiple validation errors returned by +// OSInfo.ValidateAll() if the designated constraints aren't met. +type OSInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OSInfoMultiError) 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 OSInfoMultiError) AllErrors() []error { return m } + // OSInfoValidationError is the validation error returned by OSInfo.Validate if // the designated constraints aren't met. type OSInfoValidationError struct { @@ -2139,12 +3616,26 @@ var _ interface { } = OSInfoValidationError{} // Validate checks the field values on Account with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *Account) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Account 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 AccountMultiError, or nil if none found. +func (m *Account) ValidateAll() error { + return m.validate(true) +} + +func (m *Account) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for SecretID // no validation rules for SecretKey @@ -2163,9 +3654,29 @@ func (m *Account) Validate() error { // no validation rules for GkeProjectID + if len(errors) > 0 { + return AccountMultiError(errors) + } + return nil } +// AccountMultiError is an error wrapping multiple validation errors returned +// by Account.ValidateAll() if the designated constraints aren't met. +type AccountMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AccountMultiError) 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 AccountMultiError) AllErrors() []error { return m } + // AccountValidationError is the validation error returned by Account.Validate // if the designated constraints aren't met. type AccountValidationError struct { @@ -2221,13 +3732,27 @@ var _ interface { } = AccountValidationError{} // Validate checks the field values on CloudAccount with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *CloudAccount) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudAccount 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 CloudAccountMultiError, or +// nil if none found. +func (m *CloudAccount) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudAccount) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for ProjectID @@ -2238,7 +3763,26 @@ func (m *CloudAccount) Validate() error { // no validation rules for Desc - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudAccountValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudAccountValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudAccountValidationError{ field: "Account", @@ -2258,9 +3802,29 @@ func (m *CloudAccount) Validate() error { // no validation rules for UpdateTime + if len(errors) > 0 { + return CloudAccountMultiError(errors) + } + return nil } +// CloudAccountMultiError is an error wrapping multiple validation errors +// returned by CloudAccount.ValidateAll() if the designated constraints aren't met. +type CloudAccountMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudAccountMultiError) 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 CloudAccountMultiError) AllErrors() []error { return m } + // CloudAccountValidationError is the validation error returned by // CloudAccount.Validate if the designated constraints aren't met. type CloudAccountValidationError struct { @@ -2317,36 +3881,81 @@ var _ interface { // Validate checks the field values on CreateCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudAccountRequest 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 +// CreateCloudAccountRequestMultiError, or nil if none found. +func (m *CreateCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetAccountName()) < 1 { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "AccountName", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Desc - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudAccountRequestValidationError{ field: "Account", @@ -2356,7 +3965,26 @@ func (m *CreateCloudAccountRequest) Validate() error { } } - if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEnable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudAccountRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudAccountRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudAccountRequestValidationError{ field: "Enable", @@ -2367,22 +3995,51 @@ func (m *CreateCloudAccountRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 1024 { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) < 2 { - return CreateCloudAccountRequestValidationError{ + err := CreateCloudAccountRequestValidationError{ field: "ProjectID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return CreateCloudAccountRequestMultiError(errors) } return nil } +// CreateCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by CreateCloudAccountRequest.ValidateAll() if the +// designated constraints aren't met. +type CreateCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudAccountRequestMultiError) 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 CreateCloudAccountRequestMultiError) AllErrors() []error { return m } + // CreateCloudAccountRequestValidationError is the validation error returned by // CreateCloudAccountRequest.Validate if the designated constraints aren't met. type CreateCloudAccountRequestValidationError struct { @@ -2443,19 +4100,52 @@ var _CreateCloudAccountRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z // Validate checks the field values on CreateCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudAccountResponse 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 +// CreateCloudAccountResponseMultiError, or nil if none found. +func (m *CreateCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudAccountResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudAccountResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudAccountResponseValidationError{ field: "Data", @@ -2465,9 +4155,30 @@ func (m *CreateCloudAccountResponse) Validate() error { } } + if len(errors) > 0 { + return CreateCloudAccountResponseMultiError(errors) + } + return nil } +// CreateCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by CreateCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type CreateCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudAccountResponseMultiError) 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 CreateCloudAccountResponseMultiError) AllErrors() []error { return m } + // CreateCloudAccountResponseValidationError is the validation error returned // by CreateCloudAccountResponse.Validate if the designated constraints aren't met. type CreateCloudAccountResponseValidationError struct { @@ -2526,45 +4237,94 @@ var _ interface { // Validate checks the field values on UpdateCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudAccountRequest 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 +// UpdateCloudAccountRequestMultiError, or nil if none found. +func (m *UpdateCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetAccountID()); l < 2 || l > 1024 { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "AccountID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudAccountRequest_AccountID_Pattern.MatchString(m.GetAccountID()) { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "AccountID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountName // no validation rules for Desc - if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEnable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudAccountRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudAccountRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudAccountRequestValidationError{ field: "Enable", @@ -2577,13 +4337,36 @@ func (m *UpdateCloudAccountRequest) Validate() error { // no validation rules for ProjectID if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return UpdateCloudAccountRequestValidationError{ + err := UpdateCloudAccountRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudAccountRequestValidationError{ field: "Account", @@ -2593,9 +4376,30 @@ func (m *UpdateCloudAccountRequest) Validate() error { } } + if len(errors) > 0 { + return UpdateCloudAccountRequestMultiError(errors) + } + return nil } +// UpdateCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateCloudAccountRequest.ValidateAll() if the +// designated constraints aren't met. +type UpdateCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudAccountRequestMultiError) 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 UpdateCloudAccountRequestMultiError) AllErrors() []error { return m } + // UpdateCloudAccountRequestValidationError is the validation error returned by // UpdateCloudAccountRequest.Validate if the designated constraints aren't met. type UpdateCloudAccountRequestValidationError struct { @@ -2658,21 +4462,56 @@ var _UpdateCloudAccountRequest_AccountID_Pattern = regexp.MustCompile("^[0-9a-zA // Validate checks the field values on UpdateCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudAccountResponse 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 +// UpdateCloudAccountResponseMultiError, or nil if none found. +func (m *UpdateCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return UpdateCloudAccountResponseMultiError(errors) + } + return nil } +// UpdateCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type UpdateCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudAccountResponseMultiError) 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 UpdateCloudAccountResponseMultiError) AllErrors() []error { return m } + // UpdateCloudAccountResponseValidationError is the validation error returned // by UpdateCloudAccountResponse.Validate if the designated constraints aren't met. type UpdateCloudAccountResponseValidationError struct { @@ -2731,29 +4570,70 @@ var _ interface { // Validate checks the field values on MigrateCloudAccountRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *MigrateCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MigrateCloudAccountRequest 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 +// MigrateCloudAccountRequestMultiError, or nil if none found. +func (m *MigrateCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *MigrateCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return MigrateCloudAccountRequestValidationError{ + err := MigrateCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_MigrateCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return MigrateCloudAccountRequestValidationError{ + err := MigrateCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountIDs - if v, ok := interface{}(m.GetEncrypt()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEncrypt()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MigrateCloudAccountRequestValidationError{ + field: "Encrypt", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MigrateCloudAccountRequestValidationError{ + field: "Encrypt", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEncrypt()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return MigrateCloudAccountRequestValidationError{ field: "Encrypt", @@ -2765,9 +4645,30 @@ func (m *MigrateCloudAccountRequest) Validate() error { // no validation rules for All + if len(errors) > 0 { + return MigrateCloudAccountRequestMultiError(errors) + } + return nil } +// MigrateCloudAccountRequestMultiError is an error wrapping multiple +// validation errors returned by MigrateCloudAccountRequest.ValidateAll() if +// the designated constraints aren't met. +type MigrateCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MigrateCloudAccountRequestMultiError) 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 MigrateCloudAccountRequestMultiError) AllErrors() []error { return m } + // MigrateCloudAccountRequestValidationError is the validation error returned // by MigrateCloudAccountRequest.Validate if the designated constraints aren't met. type MigrateCloudAccountRequestValidationError struct { @@ -2827,22 +4728,57 @@ var _ interface { var _MigrateCloudAccountRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on OriginEncrypt with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *OriginEncrypt) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OriginEncrypt 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 OriginEncryptMultiError, or +// nil if none found. +func (m *OriginEncrypt) ValidateAll() error { + return m.validate(true) +} + +func (m *OriginEncrypt) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for EncryptType // no validation rules for Kv // no validation rules for Iv + if len(errors) > 0 { + return OriginEncryptMultiError(errors) + } + return nil } +// OriginEncryptMultiError is an error wrapping multiple validation errors +// returned by OriginEncrypt.ValidateAll() if the designated constraints +// aren't met. +type OriginEncryptMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OriginEncryptMultiError) 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 OriginEncryptMultiError) AllErrors() []error { return m } + // OriginEncryptValidationError is the validation error returned by // OriginEncrypt.Validate if the designated constraints aren't met. type OriginEncryptValidationError struct { @@ -2899,21 +4835,56 @@ var _ interface { // Validate checks the field values on MigrateCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *MigrateCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MigrateCloudAccountResponse 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 +// MigrateCloudAccountResponseMultiError, or nil if none found. +func (m *MigrateCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *MigrateCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return MigrateCloudAccountResponseMultiError(errors) + } + return nil } +// MigrateCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by MigrateCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type MigrateCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MigrateCloudAccountResponseMultiError) 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 MigrateCloudAccountResponseMultiError) AllErrors() []error { return m } + // MigrateCloudAccountResponseValidationError is the validation error returned // by MigrateCloudAccountResponse.Validate if the designated constraints // aren't met. @@ -2973,43 +4944,94 @@ var _ interface { // Validate checks the field values on DeleteCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudAccountRequest 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 +// DeleteCloudAccountRequestMultiError, or nil if none found. +func (m *DeleteCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return DeleteCloudAccountRequestValidationError{ + err := DeleteCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return DeleteCloudAccountRequestValidationError{ + err := DeleteCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetAccountID()); l < 2 || l > 1024 { - return DeleteCloudAccountRequestValidationError{ + err := DeleteCloudAccountRequestValidationError{ field: "AccountID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudAccountRequest_AccountID_Pattern.MatchString(m.GetAccountID()) { - return DeleteCloudAccountRequestValidationError{ + err := DeleteCloudAccountRequestValidationError{ field: "AccountID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DeleteCloudAccountRequestMultiError(errors) } return nil } +// DeleteCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteCloudAccountRequest.ValidateAll() if the +// designated constraints aren't met. +type DeleteCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudAccountRequestMultiError) 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 DeleteCloudAccountRequestMultiError) AllErrors() []error { return m } + // DeleteCloudAccountRequestValidationError is the validation error returned by // DeleteCloudAccountRequest.Validate if the designated constraints aren't met. type DeleteCloudAccountRequestValidationError struct { @@ -3072,21 +5094,56 @@ var _DeleteCloudAccountRequest_AccountID_Pattern = regexp.MustCompile("^[0-9a-zA // Validate checks the field values on DeleteCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudAccountResponse 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 +// DeleteCloudAccountResponseMultiError, or nil if none found. +func (m *DeleteCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return DeleteCloudAccountResponseMultiError(errors) + } + return nil } +// DeleteCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by DeleteCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type DeleteCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudAccountResponseMultiError) 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 DeleteCloudAccountResponseMultiError) AllErrors() []error { return m } + // DeleteCloudAccountResponseValidationError is the validation error returned // by DeleteCloudAccountResponse.Validate if the designated constraints aren't met. type DeleteCloudAccountResponseValidationError struct { @@ -3145,19 +5202,54 @@ var _ interface { // Validate checks the field values on ListCloudAccountPermRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudAccountPermRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudAccountPermRequest 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 +// ListCloudAccountPermRequestMultiError, or nil if none found. +func (m *ListCloudAccountPermRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudAccountPermRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for AccountName + if len(errors) > 0 { + return ListCloudAccountPermRequestMultiError(errors) + } + return nil } +// ListCloudAccountPermRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudAccountPermRequest.ValidateAll() if +// the designated constraints aren't met. +type ListCloudAccountPermRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudAccountPermRequestMultiError) 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 ListCloudAccountPermRequestMultiError) AllErrors() []error { return m } + // ListCloudAccountPermRequestValidationError is the validation error returned // by ListCloudAccountPermRequest.Validate if the designated constraints // aren't met. @@ -3217,12 +5309,26 @@ var _ interface { // Validate checks the field values on ListCloudAccountPermResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudAccountPermResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudAccountPermResponse 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 +// ListCloudAccountPermResponseMultiError, or nil if none found. +func (m *ListCloudAccountPermResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudAccountPermResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -3232,7 +5338,26 @@ func (m *ListCloudAccountPermResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudAccountPermResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudAccountPermResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudAccountPermResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -3244,9 +5369,30 @@ func (m *ListCloudAccountPermResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudAccountPermResponseMultiError(errors) + } + return nil } +// ListCloudAccountPermResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudAccountPermResponse.ValidateAll() if +// the designated constraints aren't met. +type ListCloudAccountPermResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudAccountPermResponseMultiError) 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 ListCloudAccountPermResponseMultiError) AllErrors() []error { return m } + // ListCloudAccountPermResponseValidationError is the validation error returned // by ListCloudAccountPermResponse.Validate if the designated constraints // aren't met. @@ -3306,17 +5452,35 @@ var _ interface { // Validate checks the field values on ListCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudAccountRequest 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 +// ListCloudAccountRequestMultiError, or nil if none found. +func (m *ListCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 1024 { - return ListCloudAccountRequestValidationError{ + err := ListCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID @@ -3325,9 +5489,30 @@ func (m *ListCloudAccountRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return ListCloudAccountRequestMultiError(errors) + } + return nil } +// ListCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudAccountRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudAccountRequestMultiError) 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 ListCloudAccountRequestMultiError) AllErrors() []error { return m } + // ListCloudAccountRequestValidationError is the validation error returned by // ListCloudAccountRequest.Validate if the designated constraints aren't met. type ListCloudAccountRequestValidationError struct { @@ -3386,29 +5571,70 @@ var _ interface { // Validate checks the field values on VerifyCloudAccountRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *VerifyCloudAccountRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on VerifyCloudAccountRequest 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 +// VerifyCloudAccountRequestMultiError, or nil if none found. +func (m *VerifyCloudAccountRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *VerifyCloudAccountRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 1024 { - return VerifyCloudAccountRequestValidationError{ + err := VerifyCloudAccountRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_VerifyCloudAccountRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return VerifyCloudAccountRequestValidationError{ + err := VerifyCloudAccountRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Desc - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, VerifyCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, VerifyCloudAccountRequestValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return VerifyCloudAccountRequestValidationError{ field: "Account", @@ -3418,9 +5644,30 @@ func (m *VerifyCloudAccountRequest) Validate() error { } } + if len(errors) > 0 { + return VerifyCloudAccountRequestMultiError(errors) + } + return nil } +// VerifyCloudAccountRequestMultiError is an error wrapping multiple validation +// errors returned by VerifyCloudAccountRequest.ValidateAll() if the +// designated constraints aren't met. +type VerifyCloudAccountRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m VerifyCloudAccountRequestMultiError) 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 VerifyCloudAccountRequestMultiError) AllErrors() []error { return m } + // VerifyCloudAccountRequestValidationError is the validation error returned by // VerifyCloudAccountRequest.Validate if the designated constraints aren't met. type VerifyCloudAccountRequestValidationError struct { @@ -3481,21 +5728,56 @@ var _VerifyCloudAccountRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z // Validate checks the field values on VerifyCloudAccountResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *VerifyCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on VerifyCloudAccountResponse 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 +// VerifyCloudAccountResponseMultiError, or nil if none found. +func (m *VerifyCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *VerifyCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return VerifyCloudAccountResponseMultiError(errors) + } + return nil } +// VerifyCloudAccountResponseMultiError is an error wrapping multiple +// validation errors returned by VerifyCloudAccountResponse.ValidateAll() if +// the designated constraints aren't met. +type VerifyCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m VerifyCloudAccountResponseMultiError) 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 VerifyCloudAccountResponseMultiError) AllErrors() []error { return m } + // VerifyCloudAccountResponseValidationError is the validation error returned // by VerifyCloudAccountResponse.Validate if the designated constraints aren't met. type VerifyCloudAccountResponseValidationError struct { @@ -3553,14 +5835,47 @@ var _ interface { } = VerifyCloudAccountResponseValidationError{} // Validate checks the field values on CloudAccountInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *CloudAccountInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudAccountInfo 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 +// CloudAccountInfoMultiError, or nil if none found. +func (m *CloudAccountInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudAccountInfo) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetAccount()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudAccountInfoValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudAccountInfoValidationError{ + field: "Account", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAccount()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudAccountInfoValidationError{ field: "Account", @@ -3570,9 +5885,30 @@ func (m *CloudAccountInfo) Validate() error { } } + if len(errors) > 0 { + return CloudAccountInfoMultiError(errors) + } + return nil } +// CloudAccountInfoMultiError is an error wrapping multiple validation errors +// returned by CloudAccountInfo.ValidateAll() if the designated constraints +// aren't met. +type CloudAccountInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudAccountInfoMultiError) 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 CloudAccountInfoMultiError) AllErrors() []error { return m } + // CloudAccountInfoValidationError is the validation error returned by // CloudAccountInfo.Validate if the designated constraints aren't met. type CloudAccountInfoValidationError struct { @@ -3629,12 +5965,26 @@ var _ interface { // Validate checks the field values on ListCloudAccountResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudAccountResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudAccountResponse 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 +// ListCloudAccountResponseMultiError, or nil if none found. +func (m *ListCloudAccountResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudAccountResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -3644,7 +5994,26 @@ func (m *ListCloudAccountResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudAccountResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudAccountResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudAccountResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -3656,7 +6025,26 @@ func (m *ListCloudAccountResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudAccountResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudAccountResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCloudAccountResponseValidationError{ field: "WebAnnotations", @@ -3666,9 +6054,30 @@ func (m *ListCloudAccountResponse) Validate() error { } } + if len(errors) > 0 { + return ListCloudAccountResponseMultiError(errors) + } + return nil } +// ListCloudAccountResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudAccountResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudAccountResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudAccountResponseMultiError) 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 ListCloudAccountResponseMultiError) AllErrors() []error { return m } + // ListCloudAccountResponseValidationError is the validation error returned by // ListCloudAccountResponse.Validate if the designated constraints aren't met. type ListCloudAccountResponseValidationError struct { @@ -3726,12 +6135,27 @@ var _ interface { } = ListCloudAccountResponseValidationError{} // Validate checks the field values on CloudVPC with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *CloudVPC) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudVPC 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 CloudVPCMultiError, or nil +// if none found. +func (m *CloudVPC) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudVPC) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Region @@ -3760,7 +6184,26 @@ func (m *CloudVPC) Validate() error { // no validation rules for BusinessID - if v, ok := interface{}(m.GetOverlay()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetOverlay()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudVPCValidationError{ + field: "Overlay", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudVPCValidationError{ + field: "Overlay", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOverlay()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudVPCValidationError{ field: "Overlay", @@ -3770,7 +6213,26 @@ func (m *CloudVPC) Validate() error { } } - if v, ok := interface{}(m.GetUnderlay()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetUnderlay()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudVPCValidationError{ + field: "Underlay", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudVPCValidationError{ + field: "Underlay", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUnderlay()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudVPCValidationError{ field: "Underlay", @@ -3780,9 +6242,29 @@ func (m *CloudVPC) Validate() error { } } + if len(errors) > 0 { + return CloudVPCMultiError(errors) + } + return nil } +// CloudVPCMultiError is an error wrapping multiple validation errors returned +// by CloudVPC.ValidateAll() if the designated constraints aren't met. +type CloudVPCMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudVPCMultiError) 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 CloudVPCMultiError) AllErrors() []error { return m } + // CloudVPCValidationError is the validation error returned by // CloudVPC.Validate if the designated constraints aren't met. type CloudVPCValidationError struct { @@ -3838,16 +6320,49 @@ var _ interface { } = CloudVPCValidationError{} // Validate checks the field values on Cidr with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. func (m *Cidr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Cidr 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 CidrMultiError, or nil if none found. +func (m *Cidr) ValidateAll() error { + return m.validate(true) +} + +func (m *Cidr) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetCidrs() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CidrValidationError{ + field: fmt.Sprintf("Cidrs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CidrValidationError{ + field: fmt.Sprintf("Cidrs[%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 CidrValidationError{ field: fmt.Sprintf("Cidrs[%v]", idx), @@ -3861,9 +6376,29 @@ func (m *Cidr) Validate() error { // no validation rules for ReservedIPNum + if len(errors) > 0 { + return CidrMultiError(errors) + } + return nil } +// CidrMultiError is an error wrapping multiple validation errors returned by +// Cidr.ValidateAll() if the designated constraints aren't met. +type CidrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CidrMultiError) 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 CidrMultiError) AllErrors() []error { return m } + // CidrValidationError is the validation error returned by Cidr.Validate if the // designated constraints aren't met. type CidrValidationError struct { @@ -3919,19 +6454,54 @@ var _ interface { } = CidrValidationError{} // Validate checks the field values on CidrState with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *CidrState) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CidrState 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 CidrStateMultiError, or nil +// if none found. +func (m *CidrState) ValidateAll() error { + return m.validate(true) +} + +func (m *CidrState) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Cidr // no validation rules for Block + if len(errors) > 0 { + return CidrStateMultiError(errors) + } + return nil } +// CidrStateMultiError is an error wrapping multiple validation errors returned +// by CidrState.ValidateAll() if the designated constraints aren't met. +type CidrStateMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CidrStateMultiError) 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 CidrStateMultiError) AllErrors() []error { return m } + // CidrStateValidationError is the validation error returned by // CidrState.Validate if the designated constraints aren't met. type CidrStateValidationError struct { @@ -3988,98 +6558,175 @@ var _ interface { // Validate checks the field values on CreateCloudVPCRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudVPCRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudVPCRequest 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 +// CreateCloudVPCRequestMultiError, or nil if none found. +func (m *CreateCloudVPCRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudVPCRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudVPCRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateCloudVPCRequest_NetworkType_InLookup[m.GetNetworkType()]; !ok { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "NetworkType", reason: "value must be in list [overlay underlay]", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetRegion()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "Region", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudVPCRequest_Region_Pattern.MatchString(m.GetRegion()) { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for RegionName if l := utf8.RuneCountInString(m.GetVpcName()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "VpcName", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudVPCRequest_VpcName_Pattern.MatchString(m.GetVpcName()) { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "VpcName", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetVpcID()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "VpcID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudVPCRequest_VpcID_Pattern.MatchString(m.GetVpcID()) { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "VpcID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateCloudVPCRequest_Available_InLookup[m.GetAvailable()]; !ok { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "Available", reason: "value must be in list [true false]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Extra if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 100 { - return CreateCloudVPCRequestValidationError{ + err := CreateCloudVPCRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ReservedIPNum // no validation rules for BusinessID - if v, ok := interface{}(m.GetOverlay()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetOverlay()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudVPCRequestValidationError{ + field: "Overlay", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudVPCRequestValidationError{ + field: "Overlay", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOverlay()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudVPCRequestValidationError{ field: "Overlay", @@ -4089,7 +6736,26 @@ func (m *CreateCloudVPCRequest) Validate() error { } } - if v, ok := interface{}(m.GetUnderlay()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetUnderlay()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudVPCRequestValidationError{ + field: "Underlay", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudVPCRequestValidationError{ + field: "Underlay", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUnderlay()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudVPCRequestValidationError{ field: "Underlay", @@ -4099,9 +6765,30 @@ func (m *CreateCloudVPCRequest) Validate() error { } } + if len(errors) > 0 { + return CreateCloudVPCRequestMultiError(errors) + } + return nil } +// CreateCloudVPCRequestMultiError is an error wrapping multiple validation +// errors returned by CreateCloudVPCRequest.ValidateAll() if the designated +// constraints aren't met. +type CreateCloudVPCRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudVPCRequestMultiError) 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 CreateCloudVPCRequestMultiError) AllErrors() []error { return m } + // CreateCloudVPCRequestValidationError is the validation error returned by // CreateCloudVPCRequest.Validate if the designated constraints aren't met. type CreateCloudVPCRequestValidationError struct { @@ -4178,21 +6865,56 @@ var _CreateCloudVPCRequest_Available_InLookup = map[string]struct{}{ // Validate checks the field values on CreateCloudVPCResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudVPCResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudVPCResponse 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 +// CreateCloudVPCResponseMultiError, or nil if none found. +func (m *CreateCloudVPCResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudVPCResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return CreateCloudVPCResponseMultiError(errors) + } + return nil } +// CreateCloudVPCResponseMultiError is an error wrapping multiple validation +// errors returned by CreateCloudVPCResponse.ValidateAll() if the designated +// constraints aren't met. +type CreateCloudVPCResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudVPCResponseMultiError) 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 CreateCloudVPCResponseMultiError) AllErrors() []error { return m } + // CreateCloudVPCResponseValidationError is the validation error returned by // CreateCloudVPCResponse.Validate if the designated constraints aren't met. type CreateCloudVPCResponseValidationError struct { @@ -4251,24 +6973,46 @@ var _ interface { // Validate checks the field values on UpdateCloudVPCRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudVPCRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudVPCRequest 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 +// UpdateCloudVPCRequestMultiError, or nil if none found. +func (m *UpdateCloudVPCRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudVPCRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 100 { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudVPCRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for NetworkType @@ -4280,34 +7024,69 @@ func (m *UpdateCloudVPCRequest) Validate() error { // no validation rules for VpcName if l := utf8.RuneCountInString(m.GetVpcID()); l < 2 || l > 100 { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "VpcID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateCloudVPCRequest_VpcID_Pattern.MatchString(m.GetVpcID()) { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "VpcID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _UpdateCloudVPCRequest_Available_InLookup[m.GetAvailable()]; !ok { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "Available", reason: "value must be in list [ true false]", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 100 { - return UpdateCloudVPCRequestValidationError{ + err := UpdateCloudVPCRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetReservedIPNum()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetReservedIPNum()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "ReservedIPNum", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "ReservedIPNum", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetReservedIPNum()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudVPCRequestValidationError{ field: "ReservedIPNum", @@ -4317,7 +7096,26 @@ func (m *UpdateCloudVPCRequest) Validate() error { } } - if v, ok := interface{}(m.GetBusinessID()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetBusinessID()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "BusinessID", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "BusinessID", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetBusinessID()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudVPCRequestValidationError{ field: "BusinessID", @@ -4327,7 +7125,26 @@ func (m *UpdateCloudVPCRequest) Validate() error { } } - if v, ok := interface{}(m.GetOverlay()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetOverlay()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "Overlay", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "Overlay", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOverlay()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudVPCRequestValidationError{ field: "Overlay", @@ -4337,7 +7154,26 @@ func (m *UpdateCloudVPCRequest) Validate() error { } } - if v, ok := interface{}(m.GetUnderlay()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetUnderlay()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "Underlay", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudVPCRequestValidationError{ + field: "Underlay", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUnderlay()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudVPCRequestValidationError{ field: "Underlay", @@ -4347,9 +7183,30 @@ func (m *UpdateCloudVPCRequest) Validate() error { } } + if len(errors) > 0 { + return UpdateCloudVPCRequestMultiError(errors) + } + return nil } +// UpdateCloudVPCRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateCloudVPCRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateCloudVPCRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudVPCRequestMultiError) 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 UpdateCloudVPCRequestMultiError) AllErrors() []error { return m } + // UpdateCloudVPCRequestValidationError is the validation error returned by // UpdateCloudVPCRequest.Validate if the designated constraints aren't met. type UpdateCloudVPCRequestValidationError struct { @@ -4418,19 +7275,52 @@ var _UpdateCloudVPCRequest_Available_InLookup = map[string]struct{}{ // Validate checks the field values on UpdateCloudVPCResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudVPCResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudVPCResponse 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 +// UpdateCloudVPCResponseMultiError, or nil if none found. +func (m *UpdateCloudVPCResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudVPCResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudVPCResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudVPCResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudVPCResponseValidationError{ field: "Data", @@ -4440,9 +7330,30 @@ func (m *UpdateCloudVPCResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateCloudVPCResponseMultiError(errors) + } + return nil } +// UpdateCloudVPCResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateCloudVPCResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateCloudVPCResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudVPCResponseMultiError) 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 UpdateCloudVPCResponseMultiError) AllErrors() []error { return m } + // UpdateCloudVPCResponseValidationError is the validation error returned by // UpdateCloudVPCResponse.Validate if the designated constraints aren't met. type UpdateCloudVPCResponseValidationError struct { @@ -4501,43 +7412,94 @@ var _ interface { // Validate checks the field values on DeleteCloudVPCRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudVPCRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudVPCRequest 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 +// DeleteCloudVPCRequestMultiError, or nil if none found. +func (m *DeleteCloudVPCRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudVPCRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 100 { - return DeleteCloudVPCRequestValidationError{ + err := DeleteCloudVPCRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudVPCRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return DeleteCloudVPCRequestValidationError{ + err := DeleteCloudVPCRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetVpcID()); l < 2 || l > 100 { - return DeleteCloudVPCRequestValidationError{ + err := DeleteCloudVPCRequestValidationError{ field: "VpcID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudVPCRequest_VpcID_Pattern.MatchString(m.GetVpcID()) { - return DeleteCloudVPCRequestValidationError{ + err := DeleteCloudVPCRequestValidationError{ field: "VpcID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DeleteCloudVPCRequestMultiError(errors) } return nil } +// DeleteCloudVPCRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteCloudVPCRequest.ValidateAll() if the designated +// constraints aren't met. +type DeleteCloudVPCRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudVPCRequestMultiError) 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 DeleteCloudVPCRequestMultiError) AllErrors() []error { return m } + // DeleteCloudVPCRequestValidationError is the validation error returned by // DeleteCloudVPCRequest.Validate if the designated constraints aren't met. type DeleteCloudVPCRequestValidationError struct { @@ -4600,19 +7562,52 @@ var _DeleteCloudVPCRequest_VpcID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on DeleteCloudVPCResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudVPCResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudVPCResponse 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 +// DeleteCloudVPCResponseMultiError, or nil if none found. +func (m *DeleteCloudVPCResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudVPCResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteCloudVPCResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteCloudVPCResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteCloudVPCResponseValidationError{ field: "Data", @@ -4622,9 +7617,30 @@ func (m *DeleteCloudVPCResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteCloudVPCResponseMultiError(errors) + } + return nil } +// DeleteCloudVPCResponseMultiError is an error wrapping multiple validation +// errors returned by DeleteCloudVPCResponse.ValidateAll() if the designated +// constraints aren't met. +type DeleteCloudVPCResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudVPCResponseMultiError) 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 DeleteCloudVPCResponseMultiError) AllErrors() []error { return m } + // DeleteCloudVPCResponseValidationError is the validation error returned by // DeleteCloudVPCResponse.Validate if the designated constraints aren't met. type DeleteCloudVPCResponseValidationError struct { @@ -4683,17 +7699,35 @@ var _ interface { // Validate checks the field values on ListCloudVPCRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudVPCRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudVPCRequest 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 +// ListCloudVPCRequestMultiError, or nil if none found. +func (m *ListCloudVPCRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudVPCRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 20 { - return ListCloudVPCRequestValidationError{ + err := ListCloudVPCRequestValidationError{ field: "CloudID", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -4701,17 +7735,42 @@ func (m *ListCloudVPCRequest) Validate() error { // no validation rules for VpcID if _, ok := _ListCloudVPCRequest_NetworkType_InLookup[m.GetNetworkType()]; !ok { - return ListCloudVPCRequestValidationError{ + err := ListCloudVPCRequestValidationError{ field: "NetworkType", reason: "value must be in list [overlay underlay]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for BusinessID + if len(errors) > 0 { + return ListCloudVPCRequestMultiError(errors) + } + return nil } +// ListCloudVPCRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudVPCRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudVPCRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudVPCRequestMultiError) 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 ListCloudVPCRequestMultiError) AllErrors() []error { return m } + // ListCloudVPCRequestValidationError is the validation error returned by // ListCloudVPCRequest.Validate if the designated constraints aren't met. type ListCloudVPCRequestValidationError struct { @@ -4775,12 +7834,26 @@ var _ListCloudVPCRequest_NetworkType_InLookup = map[string]struct{}{ // Validate checks the field values on ListCloudVPCResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudVPCResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudVPCResponse 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 +// ListCloudVPCResponseMultiError, or nil if none found. +func (m *ListCloudVPCResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudVPCResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -4790,7 +7863,26 @@ func (m *ListCloudVPCResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudVPCResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudVPCResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudVPCResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -4802,9 +7894,30 @@ func (m *ListCloudVPCResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudVPCResponseMultiError(errors) + } + return nil } +// ListCloudVPCResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudVPCResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudVPCResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudVPCResponseMultiError) 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 ListCloudVPCResponseMultiError) AllErrors() []error { return m } + // ListCloudVPCResponseValidationError is the validation error returned by // ListCloudVPCResponse.Validate if the designated constraints aren't met. type ListCloudVPCResponseValidationError struct { @@ -4862,13 +7975,27 @@ var _ interface { } = ListCloudVPCResponseValidationError{} // Validate checks the field values on CloudVPCResp with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *CloudVPCResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudVPCResp 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 CloudVPCRespMultiError, or +// nil if none found. +func (m *CloudVPCResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudVPCResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Region @@ -4889,7 +8016,26 @@ func (m *CloudVPCResp) Validate() error { // no validation rules for AvailableIPNum - if v, ok := interface{}(m.GetOverlay()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetOverlay()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudVPCRespValidationError{ + field: "Overlay", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudVPCRespValidationError{ + field: "Overlay", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOverlay()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudVPCRespValidationError{ field: "Overlay", @@ -4899,7 +8045,26 @@ func (m *CloudVPCResp) Validate() error { } } - if v, ok := interface{}(m.GetUnderlay()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetUnderlay()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudVPCRespValidationError{ + field: "Underlay", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudVPCRespValidationError{ + field: "Underlay", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUnderlay()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudVPCRespValidationError{ field: "Underlay", @@ -4911,9 +8076,29 @@ func (m *CloudVPCResp) Validate() error { // no validation rules for BusinessID + if len(errors) > 0 { + return CloudVPCRespMultiError(errors) + } + return nil } +// CloudVPCRespMultiError is an error wrapping multiple validation errors +// returned by CloudVPCResp.ValidateAll() if the designated constraints aren't met. +type CloudVPCRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudVPCRespMultiError) 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 CloudVPCRespMultiError) AllErrors() []error { return m } + // CloudVPCRespValidationError is the validation error returned by // CloudVPCResp.Validate if the designated constraints aren't met. type CloudVPCRespValidationError struct { @@ -4969,17 +8154,50 @@ var _ interface { } = CloudVPCRespValidationError{} // Validate checks the field values on CidrDetailInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *CidrDetailInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CidrDetailInfo 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 CidrDetailInfoMultiError, +// or nil if none found. +func (m *CidrDetailInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *CidrDetailInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetCidrs() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CidrDetailInfoValidationError{ + field: fmt.Sprintf("Cidrs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CidrDetailInfoValidationError{ + field: fmt.Sprintf("Cidrs[%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 CidrDetailInfoValidationError{ field: fmt.Sprintf("Cidrs[%v]", idx), @@ -4995,9 +8213,30 @@ func (m *CidrDetailInfo) Validate() error { // no validation rules for AvailableIPNum + if len(errors) > 0 { + return CidrDetailInfoMultiError(errors) + } + return nil } +// CidrDetailInfoMultiError is an error wrapping multiple validation errors +// returned by CidrDetailInfo.ValidateAll() if the designated constraints +// aren't met. +type CidrDetailInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CidrDetailInfoMultiError) 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 CidrDetailInfoMultiError) AllErrors() []error { return m } + // CidrDetailInfoValidationError is the validation error returned by // CidrDetailInfo.Validate if the designated constraints aren't met. type CidrDetailInfoValidationError struct { @@ -5054,22 +8293,61 @@ var _ interface { // Validate checks the field values on ListCloudRegionsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRegionsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRegionsRequest 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 +// ListCloudRegionsRequestMultiError, or nil if none found. +func (m *ListCloudRegionsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRegionsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 20 { - return ListCloudRegionsRequestValidationError{ + err := ListCloudRegionsRequestValidationError{ field: "CloudID", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListCloudRegionsRequestMultiError(errors) } return nil } +// ListCloudRegionsRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudRegionsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudRegionsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRegionsRequestMultiError) 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 ListCloudRegionsRequestMultiError) AllErrors() []error { return m } + // ListCloudRegionsRequestValidationError is the validation error returned by // ListCloudRegionsRequest.Validate if the designated constraints aren't met. type ListCloudRegionsRequestValidationError struct { @@ -5128,12 +8406,26 @@ var _ interface { // Validate checks the field values on ListCloudRegionsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRegionsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRegionsResponse 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 +// ListCloudRegionsResponseMultiError, or nil if none found. +func (m *ListCloudRegionsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRegionsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -5143,7 +8435,26 @@ func (m *ListCloudRegionsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudRegionsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudRegionsResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudRegionsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -5155,9 +8466,30 @@ func (m *ListCloudRegionsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudRegionsResponseMultiError(errors) + } + return nil } +// ListCloudRegionsResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudRegionsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudRegionsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRegionsResponseMultiError) 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 ListCloudRegionsResponseMultiError) AllErrors() []error { return m } + // ListCloudRegionsResponseValidationError is the validation error returned by // ListCloudRegionsResponse.Validate if the designated constraints aren't met. type ListCloudRegionsResponseValidationError struct { @@ -5215,22 +8547,56 @@ var _ interface { } = ListCloudRegionsResponseValidationError{} // Validate checks the field values on CloudRegion with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *CloudRegion) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudRegion 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 CloudRegionMultiError, or +// nil if none found. +func (m *CloudRegion) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudRegion) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for RegionName // no validation rules for Region + if len(errors) > 0 { + return CloudRegionMultiError(errors) + } + return nil } +// CloudRegionMultiError is an error wrapping multiple validation errors +// returned by CloudRegion.ValidateAll() if the designated constraints aren't met. +type CloudRegionMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudRegionMultiError) 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 CloudRegionMultiError) AllErrors() []error { return m } + // CloudRegionValidationError is the validation error returned by // CloudRegion.Validate if the designated constraints aren't met. type CloudRegionValidationError struct { @@ -5286,18 +8652,53 @@ var _ interface { } = CloudRegionValidationError{} // Validate checks the field values on GetVPCCidrRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *GetVPCCidrRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetVPCCidrRequest 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 +// GetVPCCidrRequestMultiError, or nil if none found. +func (m *GetVPCCidrRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetVPCCidrRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for VpcID + if len(errors) > 0 { + return GetVPCCidrRequestMultiError(errors) + } + return nil } +// GetVPCCidrRequestMultiError is an error wrapping multiple validation errors +// returned by GetVPCCidrRequest.ValidateAll() if the designated constraints +// aren't met. +type GetVPCCidrRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetVPCCidrRequestMultiError) 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 GetVPCCidrRequestMultiError) AllErrors() []error { return m } + // GetVPCCidrRequestValidationError is the validation error returned by // GetVPCCidrRequest.Validate if the designated constraints aren't met. type GetVPCCidrRequestValidationError struct { @@ -5356,12 +8757,26 @@ var _ interface { // Validate checks the field values on GetVPCCidrResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetVPCCidrResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetVPCCidrResponse 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 +// GetVPCCidrResponseMultiError, or nil if none found. +func (m *GetVPCCidrResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetVPCCidrResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -5371,7 +8786,26 @@ func (m *GetVPCCidrResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetVPCCidrResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetVPCCidrResponseValidationError{ + field: fmt.Sprintf("Data[%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 GetVPCCidrResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -5383,9 +8817,30 @@ func (m *GetVPCCidrResponse) Validate() error { } + if len(errors) > 0 { + return GetVPCCidrResponseMultiError(errors) + } + return nil } +// GetVPCCidrResponseMultiError is an error wrapping multiple validation errors +// returned by GetVPCCidrResponse.ValidateAll() if the designated constraints +// aren't met. +type GetVPCCidrResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetVPCCidrResponseMultiError) 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 GetVPCCidrResponseMultiError) AllErrors() []error { return m } + // GetVPCCidrResponseValidationError is the validation error returned by // GetVPCCidrResponse.Validate if the designated constraints aren't met. type GetVPCCidrResponseValidationError struct { @@ -5443,12 +8898,26 @@ var _ interface { } = GetVPCCidrResponseValidationError{} // Validate checks the field values on VPCCidr with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *VPCCidr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on VPCCidr 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 VPCCidrMultiError, or nil if none found. +func (m *VPCCidr) ValidateAll() error { + return m.validate(true) +} + +func (m *VPCCidr) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Vpc // no validation rules for Cidr @@ -5457,9 +8926,29 @@ func (m *VPCCidr) Validate() error { // no validation rules for Status + if len(errors) > 0 { + return VPCCidrMultiError(errors) + } + return nil } +// VPCCidrMultiError is an error wrapping multiple validation errors returned +// by VPCCidr.ValidateAll() if the designated constraints aren't met. +type VPCCidrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m VPCCidrMultiError) 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 VPCCidrMultiError) AllErrors() []error { return m } + // VPCCidrValidationError is the validation error returned by VPCCidr.Validate // if the designated constraints aren't met. type VPCCidrValidationError struct { @@ -5515,53 +9004,144 @@ var _ interface { } = VPCCidrValidationError{} // Validate checks the field values on Cloud with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *Cloud) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Cloud 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 CloudMultiError, or nil if none found. +func (m *Cloud) ValidateAll() error { + return m.validate(true) +} + +func (m *Cloud) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Name // no validation rules for Editable - for key, val := range m.GetOpsPlugins() { - _ = val - - // no validation rules for OpsPlugins[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CloudValidationError{ - field: fmt.Sprintf("OpsPlugins[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetOpsPlugins())) + i := 0 + for key := range m.GetOpsPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetOpsPlugins()[key] + _ = val + + // no validation rules for OpsPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CloudValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraPlugins() { - _ = val + { + sorted_keys := make([]string, len(m.GetExtraPlugins())) + i := 0 + for key := range m.GetExtraPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraPlugins()[key] + _ = val + + // no validation rules for ExtraPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CloudValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ExtraPlugins[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudCredential()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "CloudCredential", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return CloudValidationError{ - field: fmt.Sprintf("ExtraPlugins[%v]", key), + errors = append(errors, CloudValidationError{ + field: "CloudCredential", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "CloudCredential", @@ -5571,7 +9151,26 @@ func (m *Cloud) Validate() error { } } - if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetOsManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "OsManagement", @@ -5581,7 +9180,26 @@ func (m *Cloud) Validate() error { } } - if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "ClusterManagement", @@ -5591,7 +9209,26 @@ func (m *Cloud) Validate() error { } } - if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeGroupManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "NodeGroupManagement", @@ -5619,7 +9256,26 @@ func (m *Cloud) Validate() error { // no validation rules for Enable - if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "NetworkInfo", @@ -5629,7 +9285,26 @@ func (m *Cloud) Validate() error { } } - if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetConfInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudValidationError{ field: "ConfInfo", @@ -5641,9 +9316,29 @@ func (m *Cloud) Validate() error { // no validation rules for PlatformInfo + if len(errors) > 0 { + return CloudMultiError(errors) + } + return nil } +// CloudMultiError is an error wrapping multiple validation errors returned by +// Cloud.ValidateAll() if the designated constraints aren't met. +type CloudMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudMultiError) 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 CloudMultiError) AllErrors() []error { return m } + // CloudValidationError is the validation error returned by Cloud.Validate if // the designated constraints aren't met. type CloudValidationError struct { @@ -5699,13 +9394,27 @@ var _ interface { } = CloudValidationError{} // Validate checks the field values on CloudConfigInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *CloudConfigInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudConfigInfo 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 +// CloudConfigInfoMultiError, or nil if none found. +func (m *CloudConfigInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudConfigInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudInternalEnable // no validation rules for CloudDomain @@ -5722,9 +9431,30 @@ func (m *CloudConfigInfo) Validate() error { // no validation rules for DisableCheckGroupResource + if len(errors) > 0 { + return CloudConfigInfoMultiError(errors) + } + return nil } +// CloudConfigInfoMultiError is an error wrapping multiple validation errors +// returned by CloudConfigInfo.ValidateAll() if the designated constraints +// aren't met. +type CloudConfigInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudConfigInfoMultiError) 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 CloudConfigInfoMultiError) AllErrors() []error { return m } + // CloudConfigInfoValidationError is the validation error returned by // CloudConfigInfo.Validate if the designated constraints aren't met. type CloudConfigInfoValidationError struct { @@ -5780,17 +9510,50 @@ var _ interface { } = CloudConfigInfoValidationError{} // Validate checks the field values on CloudNetworkInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *CloudNetworkInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudNetworkInfo 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 +// CloudNetworkInfoMultiError, or nil if none found. +func (m *CloudNetworkInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudNetworkInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetCidrSteps() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudNetworkInfoValidationError{ + field: fmt.Sprintf("CidrSteps[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudNetworkInfoValidationError{ + field: fmt.Sprintf("CidrSteps[%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 CloudNetworkInfoValidationError{ field: fmt.Sprintf("CidrSteps[%v]", idx), @@ -5807,7 +9570,26 @@ func (m *CloudNetworkInfo) Validate() error { for idx, item := range m.GetVpcCniModes() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudNetworkInfoValidationError{ + field: fmt.Sprintf("VpcCniModes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudNetworkInfoValidationError{ + field: fmt.Sprintf("VpcCniModes[%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 CloudNetworkInfoValidationError{ field: fmt.Sprintf("VpcCniModes[%v]", idx), @@ -5819,9 +9601,30 @@ func (m *CloudNetworkInfo) Validate() error { } + if len(errors) > 0 { + return CloudNetworkInfoMultiError(errors) + } + return nil } +// CloudNetworkInfoMultiError is an error wrapping multiple validation errors +// returned by CloudNetworkInfo.ValidateAll() if the designated constraints +// aren't met. +type CloudNetworkInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudNetworkInfoMultiError) 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 CloudNetworkInfoMultiError) AllErrors() []error { return m } + // CloudNetworkInfoValidationError is the validation error returned by // CloudNetworkInfo.Validate if the designated constraints aren't met. type CloudNetworkInfoValidationError struct { @@ -5877,20 +9680,54 @@ var _ interface { } = CloudNetworkInfoValidationError{} // Validate checks the field values on EnvCidrStep with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *EnvCidrStep) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on EnvCidrStep 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 EnvCidrStepMultiError, or +// nil if none found. +func (m *EnvCidrStep) ValidateAll() error { + return m.validate(true) +} + +func (m *EnvCidrStep) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Env // no validation rules for Step + if len(errors) > 0 { + return EnvCidrStepMultiError(errors) + } + return nil } +// EnvCidrStepMultiError is an error wrapping multiple validation errors +// returned by EnvCidrStep.ValidateAll() if the designated constraints aren't met. +type EnvCidrStepMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m EnvCidrStepMultiError) 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 EnvCidrStepMultiError) AllErrors() []error { return m } + // EnvCidrStepValidationError is the validation error returned by // EnvCidrStep.Validate if the designated constraints aren't met. type EnvCidrStepValidationError struct { @@ -5946,22 +9783,56 @@ var _ interface { } = EnvCidrStepValidationError{} // Validate checks the field values on NetworkMode with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *NetworkMode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NetworkMode 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 NetworkModeMultiError, or +// nil if none found. +func (m *NetworkMode) ValidateAll() error { + return m.validate(true) +} + +func (m *NetworkMode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Mode // no validation rules for Default // no validation rules for Name + if len(errors) > 0 { + return NetworkModeMultiError(errors) + } + return nil } +// NetworkModeMultiError is an error wrapping multiple validation errors +// returned by NetworkMode.ValidateAll() if the designated constraints aren't met. +type NetworkModeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NetworkModeMultiError) 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 NetworkModeMultiError) AllErrors() []error { return m } + // NetworkModeValidationError is the validation error returned by // NetworkMode.Validate if the designated constraints aren't met. type NetworkModeValidationError struct { @@ -6017,12 +9888,27 @@ var _ interface { } = NetworkModeValidationError{} // Validate checks the field values on NodeGroup with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *NodeGroup) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeGroup 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 NodeGroupMultiError, or nil +// if none found. +func (m *NodeGroup) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeGroup) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeGroupID // no validation rules for Name @@ -6033,7 +9919,26 @@ func (m *NodeGroup) Validate() error { // no validation rules for EnableAutoscale - if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAutoScaling()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupValidationError{ field: "AutoScaling", @@ -6043,7 +9948,26 @@ func (m *NodeGroup) Validate() error { } } - if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLaunchTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupValidationError{ field: "LaunchTemplate", @@ -6072,22 +9996,49 @@ func (m *NodeGroup) Validate() error { // no validation rules for Provider if _, ok := _NodeGroup_Status_InLookup[m.GetStatus()]; !ok { - return NodeGroupValidationError{ + err := NodeGroupValidationError{ field: "Status", reason: "value must be in list [CREATING RUNNING DELETING FALURE INITIALIZATION DELETED]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ConsumerID if m.GetNodeTemplate() == nil { - return NodeGroupValidationError{ + err := NodeGroupValidationError{ field: "NodeTemplate", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupValidationError{ field: "NodeTemplate", @@ -6103,7 +10054,26 @@ func (m *NodeGroup) Validate() error { // no validation rules for NodeGroupType - if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeGroupValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeGroupValidationError{ field: "Area", @@ -6115,9 +10085,29 @@ func (m *NodeGroup) Validate() error { // no validation rules for ExtraInfo + if len(errors) > 0 { + return NodeGroupMultiError(errors) + } + return nil } +// NodeGroupMultiError is an error wrapping multiple validation errors returned +// by NodeGroup.ValidateAll() if the designated constraints aren't met. +type NodeGroupMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeGroupMultiError) 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 NodeGroupMultiError) AllErrors() []error { return m } + // NodeGroupValidationError is the validation error returned by // NodeGroup.Validate if the designated constraints aren't met. type NodeGroupValidationError struct { @@ -6182,19 +10172,54 @@ var _NodeGroup_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on CloudArea with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *CloudArea) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudArea 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 CloudAreaMultiError, or nil +// if none found. +func (m *CloudArea) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudArea) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for BkCloudID // no validation rules for BkCloudName + if len(errors) > 0 { + return CloudAreaMultiError(errors) + } + return nil } +// CloudAreaMultiError is an error wrapping multiple validation errors returned +// by CloudArea.ValidateAll() if the designated constraints aren't met. +type CloudAreaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudAreaMultiError) 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 CloudAreaMultiError) AllErrors() []error { return m } + // CloudAreaValidationError is the validation error returned by // CloudArea.Validate if the designated constraints aren't met. type CloudAreaValidationError struct { @@ -6250,29 +10275,51 @@ var _ interface { } = CloudAreaValidationError{} // Validate checks the field values on AutoScalingGroup with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *AutoScalingGroup) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AutoScalingGroup 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 +// AutoScalingGroupMultiError, or nil if none found. +func (m *AutoScalingGroup) ValidateAll() error { + return m.validate(true) +} + +func (m *AutoScalingGroup) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for AutoScalingID // no validation rules for AutoScalingName if val := m.GetMinSize(); val < 0 || val > 1000 { - return AutoScalingGroupValidationError{ + err := AutoScalingGroupValidationError{ field: "MinSize", reason: "value must be inside range [0, 1000]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxSize(); val < 0 || val > 1000 { - return AutoScalingGroupValidationError{ + err := AutoScalingGroupValidationError{ field: "MaxSize", reason: "value must be inside range [0, 1000]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DesiredSize @@ -6292,7 +10339,26 @@ func (m *AutoScalingGroup) Validate() error { for idx, item := range m.GetTimeRanges() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AutoScalingGroupValidationError{ + field: fmt.Sprintf("TimeRanges[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AutoScalingGroupValidationError{ + field: fmt.Sprintf("TimeRanges[%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 AutoScalingGroupValidationError{ field: fmt.Sprintf("TimeRanges[%v]", idx), @@ -6308,9 +10374,30 @@ func (m *AutoScalingGroup) Validate() error { // no validation rules for ServiceRole + if len(errors) > 0 { + return AutoScalingGroupMultiError(errors) + } + return nil } +// AutoScalingGroupMultiError is an error wrapping multiple validation errors +// returned by AutoScalingGroup.ValidateAll() if the designated constraints +// aren't met. +type AutoScalingGroupMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AutoScalingGroupMultiError) 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 AutoScalingGroupMultiError) AllErrors() []error { return m } + // AutoScalingGroupValidationError is the validation error returned by // AutoScalingGroup.Validate if the designated constraints aren't met. type AutoScalingGroupValidationError struct { @@ -6366,33 +10453,76 @@ var _ interface { } = AutoScalingGroupValidationError{} // Validate checks the field values on TimeRange with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *TimeRange) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TimeRange 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 TimeRangeMultiError, or nil +// if none found. +func (m *TimeRange) ValidateAll() error { + return m.validate(true) +} + +func (m *TimeRange) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetName()); l < 2 || l > 1024 { - return TimeRangeValidationError{ + err := TimeRangeValidationError{ field: "Name", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetSchedule()); l < 2 || l > 1024 { - return TimeRangeValidationError{ + err := TimeRangeValidationError{ field: "Schedule", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Zone // no validation rules for DesiredNum + if len(errors) > 0 { + return TimeRangeMultiError(errors) + } + return nil } +// TimeRangeMultiError is an error wrapping multiple validation errors returned +// by TimeRange.ValidateAll() if the designated constraints aren't met. +type TimeRangeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TimeRangeMultiError) 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 TimeRangeMultiError) AllErrors() []error { return m } + // TimeRangeValidationError is the validation error returned by // TimeRange.Validate if the designated constraints aren't met. type TimeRangeValidationError struct { @@ -6448,19 +10578,54 @@ var _ interface { } = TimeRangeValidationError{} // Validate checks the field values on DataDisk with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *DataDisk) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DataDisk 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 DataDiskMultiError, or nil +// if none found. +func (m *DataDisk) ValidateAll() error { + return m.validate(true) +} + +func (m *DataDisk) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for DiskType // no validation rules for DiskSize + if len(errors) > 0 { + return DataDiskMultiError(errors) + } + return nil } +// DataDiskMultiError is an error wrapping multiple validation errors returned +// by DataDisk.ValidateAll() if the designated constraints aren't met. +type DataDiskMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DataDiskMultiError) 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 DataDiskMultiError) AllErrors() []error { return m } + // DataDiskValidationError is the validation error returned by // DataDisk.Validate if the designated constraints aren't met. type DataDiskValidationError struct { @@ -6516,13 +10681,27 @@ var _ interface { } = DataDiskValidationError{} // Validate checks the field values on CloudDataDisk with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *CloudDataDisk) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudDataDisk 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 CloudDataDiskMultiError, or +// nil if none found. +func (m *CloudDataDisk) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudDataDisk) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for DiskType // no validation rules for DiskSize @@ -6535,9 +10714,30 @@ func (m *CloudDataDisk) Validate() error { // no validation rules for DiskPartition + if len(errors) > 0 { + return CloudDataDiskMultiError(errors) + } + return nil } +// CloudDataDiskMultiError is an error wrapping multiple validation errors +// returned by CloudDataDisk.ValidateAll() if the designated constraints +// aren't met. +type CloudDataDiskMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudDataDiskMultiError) 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 CloudDataDiskMultiError) AllErrors() []error { return m } + // CloudDataDiskValidationError is the validation error returned by // CloudDataDisk.Validate if the designated constraints aren't met. type CloudDataDiskValidationError struct { @@ -6594,12 +10794,26 @@ var _ interface { // Validate checks the field values on InternetAccessible with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InternetAccessible) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InternetAccessible 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 +// InternetAccessibleMultiError, or nil if none found. +func (m *InternetAccessible) ValidateAll() error { + return m.validate(true) +} + +func (m *InternetAccessible) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for InternetChargeType // no validation rules for InternetMaxBandwidth @@ -6608,9 +10822,32 @@ func (m *InternetAccessible) Validate() error { // no validation rules for BandwidthPackageId + // no validation rules for PublicIP + + if len(errors) > 0 { + return InternetAccessibleMultiError(errors) + } + return nil } +// InternetAccessibleMultiError is an error wrapping multiple validation errors +// returned by InternetAccessible.ValidateAll() if the designated constraints +// aren't met. +type InternetAccessibleMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InternetAccessibleMultiError) 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 InternetAccessibleMultiError) AllErrors() []error { return m } + // InternetAccessibleValidationError is the validation error returned by // InternetAccessible.Validate if the designated constraints aren't met. type InternetAccessibleValidationError struct { @@ -6669,12 +10906,26 @@ var _ interface { // Validate checks the field values on InstanceTemplateConfig with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InstanceTemplateConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InstanceTemplateConfig 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 +// InstanceTemplateConfigMultiError, or nil if none found. +func (m *InstanceTemplateConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *InstanceTemplateConfig) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Region // no validation rules for Zone @@ -6694,13 +10945,36 @@ func (m *InstanceTemplateConfig) Validate() error { // no validation rules for InstanceType if _, ok := _InstanceTemplateConfig_InstanceChargeType_InLookup[m.GetInstanceChargeType()]; !ok { - return InstanceTemplateConfigValidationError{ + err := InstanceTemplateConfigValidationError{ field: "InstanceChargeType", reason: "value must be in list [PREPAID POSTPAID_BY_HOUR SPOTPAID]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSystemDisk()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: "SystemDisk", @@ -6713,7 +10987,26 @@ func (m *InstanceTemplateConfig) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: fmt.Sprintf("DataDisks[%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 InstanceTemplateConfigValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -6725,7 +11018,26 @@ func (m *InstanceTemplateConfig) Validate() error { } - if v, ok := interface{}(m.GetImageInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetImageInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "ImageInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "ImageInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetImageInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: "ImageInfo", @@ -6744,7 +11056,26 @@ func (m *InstanceTemplateConfig) Validate() error { for idx, item := range m.GetCloudDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: fmt.Sprintf("CloudDataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: fmt.Sprintf("CloudDataDisks[%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 InstanceTemplateConfigValidationError{ field: fmt.Sprintf("CloudDataDisks[%v]", idx), @@ -6758,7 +11089,26 @@ func (m *InstanceTemplateConfig) Validate() error { // no validation rules for InitLoginUsername - if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetKeyPair()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: "KeyPair", @@ -6772,7 +11122,26 @@ func (m *InstanceTemplateConfig) Validate() error { // no validation rules for NodeRole - if v, ok := interface{}(m.GetCharge()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCharge()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "Charge", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "Charge", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCharge()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: "Charge", @@ -6782,7 +11151,26 @@ func (m *InstanceTemplateConfig) Validate() error { } } - if v, ok := interface{}(m.GetInternetAccess()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetInternetAccess()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "InternetAccess", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTemplateConfigValidationError{ + field: "InternetAccess", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetInternetAccess()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTemplateConfigValidationError{ field: "InternetAccess", @@ -6792,9 +11180,30 @@ func (m *InstanceTemplateConfig) Validate() error { } } + if len(errors) > 0 { + return InstanceTemplateConfigMultiError(errors) + } + return nil } +// InstanceTemplateConfigMultiError is an error wrapping multiple validation +// errors returned by InstanceTemplateConfig.ValidateAll() if the designated +// constraints aren't met. +type InstanceTemplateConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InstanceTemplateConfigMultiError) 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 InstanceTemplateConfigMultiError) AllErrors() []error { return m } + // InstanceTemplateConfigValidationError is the validation error returned by // InstanceTemplateConfig.Validate if the designated constraints aren't met. type InstanceTemplateConfigValidationError struct { @@ -6859,19 +11268,54 @@ var _InstanceTemplateConfig_InstanceChargeType_InLookup = map[string]struct{}{ // Validate checks the field values on InstanceChargePrepaid with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InstanceChargePrepaid) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InstanceChargePrepaid 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 +// InstanceChargePrepaidMultiError, or nil if none found. +func (m *InstanceChargePrepaid) ValidateAll() error { + return m.validate(true) +} + +func (m *InstanceChargePrepaid) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Period // no validation rules for RenewFlag + if len(errors) > 0 { + return InstanceChargePrepaidMultiError(errors) + } + return nil } +// InstanceChargePrepaidMultiError is an error wrapping multiple validation +// errors returned by InstanceChargePrepaid.ValidateAll() if the designated +// constraints aren't met. +type InstanceChargePrepaidMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InstanceChargePrepaidMultiError) 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 InstanceChargePrepaidMultiError) AllErrors() []error { return m } + // InstanceChargePrepaidValidationError is the validation error returned by // InstanceChargePrepaid.Validate if the designated constraints aren't met. type InstanceChargePrepaidValidationError struct { @@ -6930,12 +11374,26 @@ var _ interface { // Validate checks the field values on LaunchConfiguration with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *LaunchConfiguration) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on LaunchConfiguration 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 +// LaunchConfigurationMultiError, or nil if none found. +func (m *LaunchConfiguration) ValidateAll() error { + return m.validate(true) +} + +func (m *LaunchConfiguration) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for LaunchConfigurationID // no validation rules for LaunchConfigureName @@ -6952,7 +11410,26 @@ func (m *LaunchConfiguration) Validate() error { // no validation rules for InstanceChargeType - if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSystemDisk()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "SystemDisk", @@ -6965,7 +11442,26 @@ func (m *LaunchConfiguration) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: fmt.Sprintf("DataDisks[%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 LaunchConfigurationValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -6977,7 +11473,26 @@ func (m *LaunchConfiguration) Validate() error { } - if v, ok := interface{}(m.GetInternetAccess()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetInternetAccess()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "InternetAccess", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "InternetAccess", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetInternetAccess()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "InternetAccess", @@ -6989,7 +11504,26 @@ func (m *LaunchConfiguration) Validate() error { // no validation rules for InitLoginPassword - if v, ok := interface{}(m.GetImageInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetImageInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "ImageInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "ImageInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetImageInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "ImageInfo", @@ -7009,7 +11543,26 @@ func (m *LaunchConfiguration) Validate() error { // no validation rules for Selector - if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetKeyPair()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "KeyPair", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetKeyPair()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "KeyPair", @@ -7019,7 +11572,26 @@ func (m *LaunchConfiguration) Validate() error { } } - if v, ok := interface{}(m.GetCharge()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCharge()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "Charge", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LaunchConfigurationValidationError{ + field: "Charge", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCharge()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return LaunchConfigurationValidationError{ field: "Charge", @@ -7029,9 +11601,30 @@ func (m *LaunchConfiguration) Validate() error { } } + if len(errors) > 0 { + return LaunchConfigurationMultiError(errors) + } + return nil } +// LaunchConfigurationMultiError is an error wrapping multiple validation +// errors returned by LaunchConfiguration.ValidateAll() if the designated +// constraints aren't met. +type LaunchConfigurationMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m LaunchConfigurationMultiError) 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 LaunchConfigurationMultiError) AllErrors() []error { return m } + // LaunchConfigurationValidationError is the validation error returned by // LaunchConfiguration.Validate if the designated constraints aren't met. type LaunchConfigurationValidationError struct { @@ -7089,21 +11682,55 @@ var _ interface { } = LaunchConfigurationValidationError{} // Validate checks the field values on KeyInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *KeyInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KeyInfo 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 KeyInfoMultiError, or nil if none found. +func (m *KeyInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *KeyInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for KeyID // no validation rules for KeySecret // no validation rules for KeyPublic + if len(errors) > 0 { + return KeyInfoMultiError(errors) + } + return nil } +// KeyInfoMultiError is an error wrapping multiple validation errors returned +// by KeyInfo.ValidateAll() if the designated constraints aren't met. +type KeyInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KeyInfoMultiError) 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 KeyInfoMultiError) AllErrors() []error { return m } + // KeyInfoValidationError is the validation error returned by KeyInfo.Validate // if the designated constraints aren't met. type KeyInfoValidationError struct { @@ -7159,21 +11786,56 @@ var _ interface { } = KeyInfoValidationError{} // Validate checks the field values on ImageInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *ImageInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ImageInfo 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 ImageInfoMultiError, or nil +// if none found. +func (m *ImageInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ImageInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ImageID // no validation rules for ImageName // no validation rules for ImageType + if len(errors) > 0 { + return ImageInfoMultiError(errors) + } + return nil } +// ImageInfoMultiError is an error wrapping multiple validation errors returned +// by ImageInfo.ValidateAll() if the designated constraints aren't met. +type ImageInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ImageInfoMultiError) 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 ImageInfoMultiError) AllErrors() []error { return m } + // ImageInfoValidationError is the validation error returned by // ImageInfo.Validate if the designated constraints aren't met. type ImageInfoValidationError struct { @@ -7230,12 +11892,26 @@ var _ interface { // Validate checks the field values on ClusterAutoScalingOption with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ClusterAutoScalingOption) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterAutoScalingOption 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 +// ClusterAutoScalingOptionMultiError, or nil if none found. +func (m *ClusterAutoScalingOption) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterAutoScalingOption) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsScaleDownEnable // no validation rules for Expander @@ -7304,7 +11980,26 @@ func (m *ClusterAutoScalingOption) Validate() error { // no validation rules for BufferResourceMemRatio - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterAutoScalingOptionValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterAutoScalingOptionValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterAutoScalingOptionValidationError{ field: "Module", @@ -7314,7 +12009,26 @@ func (m *ClusterAutoScalingOption) Validate() error { } } - if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebhook()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterAutoScalingOptionValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterAutoScalingOptionValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ClusterAutoScalingOptionValidationError{ field: "Webhook", @@ -7327,17 +12041,42 @@ func (m *ClusterAutoScalingOption) Validate() error { // no validation rules for ExpendablePodsPriorityCutoff if m.GetNewPodScaleUpDelay() < 0 { - return ClusterAutoScalingOptionValidationError{ + err := ClusterAutoScalingOptionValidationError{ field: "NewPodScaleUpDelay", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DevicePoolProvider + if len(errors) > 0 { + return ClusterAutoScalingOptionMultiError(errors) + } + return nil } +// ClusterAutoScalingOptionMultiError is an error wrapping multiple validation +// errors returned by ClusterAutoScalingOption.ValidateAll() if the designated +// constraints aren't met. +type ClusterAutoScalingOptionMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterAutoScalingOptionMultiError) 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 ClusterAutoScalingOptionMultiError) AllErrors() []error { return m } + // ClusterAutoScalingOptionValidationError is the validation error returned by // ClusterAutoScalingOption.Validate if the designated constraints aren't met. type ClusterAutoScalingOptionValidationError struct { @@ -7395,22 +12134,56 @@ var _ interface { } = ClusterAutoScalingOptionValidationError{} // Validate checks the field values on WebhookMode with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *WebhookMode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WebhookMode 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 WebhookModeMultiError, or +// nil if none found. +func (m *WebhookMode) ValidateAll() error { + return m.validate(true) +} + +func (m *WebhookMode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Mode // no validation rules for Server // no validation rules for Token + if len(errors) > 0 { + return WebhookModeMultiError(errors) + } + return nil } +// WebhookModeMultiError is an error wrapping multiple validation errors +// returned by WebhookMode.ValidateAll() if the designated constraints aren't met. +type WebhookModeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WebhookModeMultiError) 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 WebhookModeMultiError) AllErrors() []error { return m } + // WebhookModeValidationError is the validation error returned by // WebhookMode.Validate if the designated constraints aren't met. type WebhookModeValidationError struct { @@ -7466,21 +12239,55 @@ var _ interface { } = WebhookModeValidationError{} // Validate checks the field values on Taint with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *Taint) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Taint 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 TaintMultiError, or nil if none found. +func (m *Taint) ValidateAll() error { + return m.validate(true) +} + +func (m *Taint) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Key // no validation rules for Value // no validation rules for Effect + if len(errors) > 0 { + return TaintMultiError(errors) + } + return nil } +// TaintMultiError is an error wrapping multiple validation errors returned by +// Taint.ValidateAll() if the designated constraints aren't met. +type TaintMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaintMultiError) 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 TaintMultiError) AllErrors() []error { return m } + // TaintValidationError is the validation error returned by Taint.Validate if // the designated constraints aren't met. type TaintValidationError struct { @@ -7536,13 +12343,27 @@ var _ interface { } = TaintValidationError{} // Validate checks the field values on NodeTemplate with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *NodeTemplate) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeTemplate 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 NodeTemplateMultiError, or +// nil if none found. +func (m *NodeTemplate) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeTemplate) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeTemplateID // no validation rules for Name @@ -7554,7 +12375,26 @@ func (m *NodeTemplate) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: fmt.Sprintf("Taints[%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 NodeTemplateValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -7577,7 +12417,26 @@ func (m *NodeTemplate) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: fmt.Sprintf("DataDisks[%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 NodeTemplateValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -7593,7 +12452,26 @@ func (m *NodeTemplate) Validate() error { // no validation rules for PreStartUserScript - if v, ok := interface{}(m.GetBcsScaleOutAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetBcsScaleOutAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "BcsScaleOutAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "BcsScaleOutAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetBcsScaleOutAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "BcsScaleOutAddons", @@ -7603,7 +12481,26 @@ func (m *NodeTemplate) Validate() error { } } - if v, ok := interface{}(m.GetBcsScaleInAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetBcsScaleInAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "BcsScaleInAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "BcsScaleInAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetBcsScaleInAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "BcsScaleInAddons", @@ -7613,7 +12510,26 @@ func (m *NodeTemplate) Validate() error { } } - if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleOutExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "ScaleOutExtraAddons", @@ -7623,7 +12539,26 @@ func (m *NodeTemplate) Validate() error { } } - if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "ScaleInExtraAddons", @@ -7645,7 +12580,26 @@ func (m *NodeTemplate) Validate() error { // no validation rules for Desc - if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRuntime()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "Runtime", @@ -7655,7 +12609,26 @@ func (m *NodeTemplate) Validate() error { } } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTemplateValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeTemplateValidationError{ field: "Module", @@ -7679,9 +12652,29 @@ func (m *NodeTemplate) Validate() error { // no validation rules for AllowSkipScaleInWhenFailed + if len(errors) > 0 { + return NodeTemplateMultiError(errors) + } + return nil } +// NodeTemplateMultiError is an error wrapping multiple validation errors +// returned by NodeTemplate.ValidateAll() if the designated constraints aren't met. +type NodeTemplateMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeTemplateMultiError) 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 NodeTemplateMultiError) AllErrors() []error { return m } + // NodeTemplateValidationError is the validation error returned by // NodeTemplate.Validate if the designated constraints aren't met. type NodeTemplateValidationError struct { @@ -7737,13 +12730,27 @@ var _ interface { } = NodeTemplateValidationError{} // Validate checks the field values on ClusterModule with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *ClusterModule) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterModule 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 ClusterModuleMultiError, or +// nil if none found. +func (m *ClusterModule) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterModule) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for MasterModuleID // no validation rules for MasterModuleName @@ -7752,9 +12759,30 @@ func (m *ClusterModule) Validate() error { // no validation rules for WorkerModuleName + if len(errors) > 0 { + return ClusterModuleMultiError(errors) + } + return nil } +// ClusterModuleMultiError is an error wrapping multiple validation errors +// returned by ClusterModule.ValidateAll() if the designated constraints +// aren't met. +type ClusterModuleMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterModuleMultiError) 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 ClusterModuleMultiError) AllErrors() []error { return m } + // ClusterModuleValidationError is the validation error returned by // ClusterModule.Validate if the designated constraints aren't met. type ClusterModuleValidationError struct { @@ -7810,12 +12838,27 @@ var _ interface { } = ClusterModuleValidationError{} // Validate checks the field values on ModuleInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *ModuleInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ModuleInfo 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 ModuleInfoMultiError, or +// nil if none found. +func (m *ModuleInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ModuleInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScaleOutModuleID // no validation rules for ScaleInModuleID @@ -7828,9 +12871,29 @@ func (m *ModuleInfo) Validate() error { // no validation rules for ScaleInModuleName + if len(errors) > 0 { + return ModuleInfoMultiError(errors) + } + return nil } +// ModuleInfoMultiError is an error wrapping multiple validation errors +// returned by ModuleInfo.ValidateAll() if the designated constraints aren't met. +type ModuleInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ModuleInfoMultiError) 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 ModuleInfoMultiError) AllErrors() []error { return m } + // ModuleInfoValidationError is the validation error returned by // ModuleInfo.Validate if the designated constraints aren't met. type ModuleInfoValidationError struct { @@ -7886,20 +12949,54 @@ var _ interface { } = ModuleInfoValidationError{} // Validate checks the field values on RunTimeInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *RunTimeInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RunTimeInfo 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 RunTimeInfoMultiError, or +// nil if none found. +func (m *RunTimeInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *RunTimeInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ContainerRuntime // no validation rules for RuntimeVersion + if len(errors) > 0 { + return RunTimeInfoMultiError(errors) + } + return nil } +// RunTimeInfoMultiError is an error wrapping multiple validation errors +// returned by RunTimeInfo.ValidateAll() if the designated constraints aren't met. +type RunTimeInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RunTimeInfoMultiError) 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 RunTimeInfoMultiError) AllErrors() []error { return m } + // RunTimeInfoValidationError is the validation error returned by // RunTimeInfo.Validate if the designated constraints aren't met. type RunTimeInfoValidationError struct { @@ -7956,31 +13053,57 @@ var _ interface { // Validate checks the field values on CreateNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeTemplateRequest 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 +// CreateNodeTemplateRequestMultiError, or nil if none found. +func (m *CreateNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetProjectID()); l < 1 || l > 2048 { - return CreateNodeTemplateRequestValidationError{ + err := CreateNodeTemplateRequestValidationError{ field: "ProjectID", reason: "value length must be between 1 and 2048 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateNodeTemplateRequest_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return CreateNodeTemplateRequestValidationError{ + err := CreateNodeTemplateRequestValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetName()) < 1 { - return CreateNodeTemplateRequestValidationError{ + err := CreateNodeTemplateRequestValidationError{ field: "Name", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Desc @@ -7990,7 +13113,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("Taints[%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 CreateNodeTemplateRequestValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -8013,7 +13155,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("DataDisks[%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 CreateNodeTemplateRequestValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -8029,7 +13190,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { // no validation rules for PreStartUserScript - if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleOutExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "ScaleOutExtraAddons", @@ -8039,7 +13219,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "ScaleInExtraAddons", @@ -8052,13 +13251,36 @@ func (m *CreateNodeTemplateRequest) Validate() error { // no validation rules for NodeOS if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 1024 { - return CreateNodeTemplateRequestValidationError{ + err := CreateNodeTemplateRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRuntime()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "Runtime", @@ -8068,7 +13290,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "Module", @@ -8078,7 +13319,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInPreScript()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInPreScript()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInPreScript", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInPreScript", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInPreScript()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "ScaleInPreScript", @@ -8088,7 +13348,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInPostScript()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInPostScript()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInPostScript", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "ScaleInPostScript", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInPostScript()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "ScaleInPostScript", @@ -8098,7 +13377,26 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Annotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateRequestValidationError{ + field: "Annotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateRequestValidationError{ field: "Annotations", @@ -8108,9 +13406,30 @@ func (m *CreateNodeTemplateRequest) Validate() error { } } + if len(errors) > 0 { + return CreateNodeTemplateRequestMultiError(errors) + } + return nil } +// CreateNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by CreateNodeTemplateRequest.ValidateAll() if the +// designated constraints aren't met. +type CreateNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeTemplateRequestMultiError) 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 CreateNodeTemplateRequestMultiError) AllErrors() []error { return m } + // CreateNodeTemplateRequestValidationError is the validation error returned by // CreateNodeTemplateRequest.Validate if the designated constraints aren't met. type CreateNodeTemplateRequestValidationError struct { @@ -8171,19 +13490,52 @@ var _CreateNodeTemplateRequest_ProjectID_Pattern = regexp.MustCompile("^[0-9a-zA // Validate checks the field values on CreateNodeTemplateResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeTemplateResponse 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 +// CreateNodeTemplateResponseMultiError, or nil if none found. +func (m *CreateNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeTemplateResponseValidationError{ field: "WebAnnotations", @@ -8193,9 +13545,30 @@ func (m *CreateNodeTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return CreateNodeTemplateResponseMultiError(errors) + } + return nil } +// CreateNodeTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by CreateNodeTemplateResponse.ValidateAll() if +// the designated constraints aren't met. +type CreateNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeTemplateResponseMultiError) 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 CreateNodeTemplateResponseMultiError) AllErrors() []error { return m } + // CreateNodeTemplateResponseValidationError is the validation error returned // by CreateNodeTemplateResponse.Validate if the designated constraints aren't met. type CreateNodeTemplateResponseValidationError struct { @@ -8254,12 +13627,26 @@ var _ interface { // Validate checks the field values on UpdateNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeTemplateRequest 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 +// UpdateNodeTemplateRequestMultiError, or nil if none found. +func (m *UpdateNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NodeTemplateID @@ -8273,7 +13660,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("Taints[%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 UpdateNodeTemplateRequestValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -8291,7 +13697,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { // no validation rules for UserScript - if v, ok := interface{}(m.GetUnSchedulable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetUnSchedulable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "UnSchedulable", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "UnSchedulable", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUnSchedulable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "UnSchedulable", @@ -8304,7 +13729,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: fmt.Sprintf("DataDisks[%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 UpdateNodeTemplateRequestValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -8320,7 +13764,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { // no validation rules for PreStartUserScript - if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleOutExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleOutExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleOutExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "ScaleOutExtraAddons", @@ -8330,7 +13793,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInExtraAddons()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInExtraAddons", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInExtraAddons()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "ScaleInExtraAddons", @@ -8343,13 +13825,36 @@ func (m *UpdateNodeTemplateRequest) Validate() error { // no validation rules for NodeOS if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return UpdateNodeTemplateRequestValidationError{ + err := UpdateNodeTemplateRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRuntime()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Runtime", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRuntime()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "Runtime", @@ -8359,7 +13864,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "Module", @@ -8369,7 +13893,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInPreScript()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInPreScript()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInPreScript", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInPreScript", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInPreScript()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "ScaleInPreScript", @@ -8379,7 +13922,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetScaleInPostScript()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleInPostScript()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInPostScript", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "ScaleInPostScript", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleInPostScript()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "ScaleInPostScript", @@ -8389,7 +13951,26 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Annotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateRequestValidationError{ + field: "Annotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateRequestValidationError{ field: "Annotations", @@ -8399,9 +13980,30 @@ func (m *UpdateNodeTemplateRequest) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeTemplateRequestMultiError(errors) + } + return nil } +// UpdateNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeTemplateRequest.ValidateAll() if the +// designated constraints aren't met. +type UpdateNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeTemplateRequestMultiError) 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 UpdateNodeTemplateRequestMultiError) AllErrors() []error { return m } + // UpdateNodeTemplateRequestValidationError is the validation error returned by // UpdateNodeTemplateRequest.Validate if the designated constraints aren't met. type UpdateNodeTemplateRequestValidationError struct { @@ -8460,19 +14062,52 @@ var _ interface { // Validate checks the field values on UpdateNodeTemplateResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeTemplateResponse 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 +// UpdateNodeTemplateResponseMultiError, or nil if none found. +func (m *UpdateNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTemplateResponseValidationError{ field: "WebAnnotations", @@ -8482,9 +14117,30 @@ func (m *UpdateNodeTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeTemplateResponseMultiError(errors) + } + return nil } +// UpdateNodeTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateNodeTemplateResponse.ValidateAll() if +// the designated constraints aren't met. +type UpdateNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeTemplateResponseMultiError) 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 UpdateNodeTemplateResponseMultiError) AllErrors() []error { return m } + // UpdateNodeTemplateResponseValidationError is the validation error returned // by UpdateNodeTemplateResponse.Validate if the designated constraints aren't met. type UpdateNodeTemplateResponseValidationError struct { @@ -8543,19 +14199,54 @@ var _ interface { // Validate checks the field values on DeleteNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeTemplateRequest 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 +// DeleteNodeTemplateRequestMultiError, or nil if none found. +func (m *DeleteNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NodeTemplateID + if len(errors) > 0 { + return DeleteNodeTemplateRequestMultiError(errors) + } + return nil } +// DeleteNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteNodeTemplateRequest.ValidateAll() if the +// designated constraints aren't met. +type DeleteNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeTemplateRequestMultiError) 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 DeleteNodeTemplateRequestMultiError) AllErrors() []error { return m } + // DeleteNodeTemplateRequestValidationError is the validation error returned by // DeleteNodeTemplateRequest.Validate if the designated constraints aren't met. type DeleteNodeTemplateRequestValidationError struct { @@ -8614,19 +14305,52 @@ var _ interface { // Validate checks the field values on DeleteNodeTemplateResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeTemplateResponse 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 +// DeleteNodeTemplateResponseMultiError, or nil if none found. +func (m *DeleteNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeTemplateResponseValidationError{ field: "WebAnnotations", @@ -8636,9 +14360,30 @@ func (m *DeleteNodeTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteNodeTemplateResponseMultiError(errors) + } + return nil } +// DeleteNodeTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by DeleteNodeTemplateResponse.ValidateAll() if +// the designated constraints aren't met. +type DeleteNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeTemplateResponseMultiError) 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 DeleteNodeTemplateResponseMultiError) AllErrors() []error { return m } + // DeleteNodeTemplateResponseValidationError is the validation error returned // by DeleteNodeTemplateResponse.Validate if the designated constraints aren't met. type DeleteNodeTemplateResponseValidationError struct { @@ -8697,19 +14442,54 @@ var _ interface { // Validate checks the field values on GetNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeTemplateRequest 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 +// GetNodeTemplateRequestMultiError, or nil if none found. +func (m *GetNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NodeTemplateID + if len(errors) > 0 { + return GetNodeTemplateRequestMultiError(errors) + } + return nil } +// GetNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by GetNodeTemplateRequest.ValidateAll() if the designated +// constraints aren't met. +type GetNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeTemplateRequestMultiError) 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 GetNodeTemplateRequestMultiError) AllErrors() []error { return m } + // GetNodeTemplateRequestValidationError is the validation error returned by // GetNodeTemplateRequest.Validate if the designated constraints aren't met. type GetNodeTemplateRequestValidationError struct { @@ -8768,19 +14548,52 @@ var _ interface { // Validate checks the field values on GetNodeTemplateResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeTemplateResponse 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 +// GetNodeTemplateResponseMultiError, or nil if none found. +func (m *GetNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeTemplateResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeTemplateResponseValidationError{ field: "Data", @@ -8790,7 +14603,26 @@ func (m *GetNodeTemplateResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeTemplateResponseValidationError{ field: "WebAnnotations", @@ -8800,9 +14632,30 @@ func (m *GetNodeTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return GetNodeTemplateResponseMultiError(errors) + } + return nil } +// GetNodeTemplateResponseMultiError is an error wrapping multiple validation +// errors returned by GetNodeTemplateResponse.ValidateAll() if the designated +// constraints aren't met. +type GetNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeTemplateResponseMultiError) 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 GetNodeTemplateResponseMultiError) AllErrors() []error { return m } + // GetNodeTemplateResponseValidationError is the validation error returned by // GetNodeTemplateResponse.Validate if the designated constraints aren't met. type GetNodeTemplateResponseValidationError struct { @@ -8861,19 +14714,54 @@ var _ interface { // Validate checks the field values on ListNodeTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodeTemplateRequest 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 +// ListNodeTemplateRequestMultiError, or nil if none found. +func (m *ListNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NodeTemplateID + if len(errors) > 0 { + return ListNodeTemplateRequestMultiError(errors) + } + return nil } +// ListNodeTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by ListNodeTemplateRequest.ValidateAll() if the designated +// constraints aren't met. +type ListNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodeTemplateRequestMultiError) 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 ListNodeTemplateRequestMultiError) AllErrors() []error { return m } + // ListNodeTemplateRequestValidationError is the validation error returned by // ListNodeTemplateRequest.Validate if the designated constraints aren't met. type ListNodeTemplateRequestValidationError struct { @@ -8932,12 +14820,26 @@ var _ interface { // Validate checks the field values on ListNodeTemplateResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodeTemplateResponse 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 +// ListNodeTemplateResponseMultiError, or nil if none found. +func (m *ListNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -8947,7 +14849,26 @@ func (m *ListNodeTemplateResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodeTemplateResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodeTemplateResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListNodeTemplateResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -8959,9 +14880,30 @@ func (m *ListNodeTemplateResponse) Validate() error { } + if len(errors) > 0 { + return ListNodeTemplateResponseMultiError(errors) + } + return nil } +// ListNodeTemplateResponseMultiError is an error wrapping multiple validation +// errors returned by ListNodeTemplateResponse.ValidateAll() if the designated +// constraints aren't met. +type ListNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodeTemplateResponseMultiError) 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 ListNodeTemplateResponseMultiError) AllErrors() []error { return m } + // ListNodeTemplateResponseValidationError is the validation error returned by // ListNodeTemplateResponse.Validate if the designated constraints aren't met. type ListNodeTemplateResponseValidationError struct { @@ -9019,12 +14961,26 @@ var _ interface { } = ListNodeTemplateResponseValidationError{} // Validate checks the field values on Project with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *Project) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Project 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 ProjectMultiError, or nil if none found. +func (m *Project) ValidateAll() error { + return m.validate(true) +} + +func (m *Project) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for Name @@ -9063,30 +15019,79 @@ func (m *Project) Validate() error { // no validation rules for IsSecret - for key, val := range m.GetCredentials() { - _ = val - - // no validation rules for Credentials[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ProjectValidationError{ - field: fmt.Sprintf("Credentials[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetCredentials())) + i := 0 + for key := range m.GetCredentials() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetCredentials()[key] + _ = val + + // no validation rules for Credentials[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ProjectValidationError{ + field: fmt.Sprintf("Credentials[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ProjectValidationError{ + field: fmt.Sprintf("Credentials[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ProjectValidationError{ + field: fmt.Sprintf("Credentials[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for CreatTime // no validation rules for UpdateTime + if len(errors) > 0 { + return ProjectMultiError(errors) + } + return nil } +// ProjectMultiError is an error wrapping multiple validation errors returned +// by Project.ValidateAll() if the designated constraints aren't met. +type ProjectMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ProjectMultiError) 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 ProjectMultiError) AllErrors() []error { return m } + // ProjectValidationError is the validation error returned by Project.Validate // if the designated constraints aren't met. type ProjectValidationError struct { @@ -9142,21 +15147,39 @@ var _ interface { } = ProjectValidationError{} // Validate checks the field values on Task with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. func (m *Task) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Task 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 TaskMultiError, or nil if none found. +func (m *Task) ValidateAll() error { + return m.validate(true) +} + +func (m *Task) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TaskID // no validation rules for TaskType if _, ok := _Task_Status_InLookup[m.GetStatus()]; !ok { - return TaskValidationError{ + err := TaskValidationError{ field: "Status", reason: "value must be in list [INITIALIZING RUNNING SUCCESS FAILURE TIMEOUT FORCETERMINATE]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Message @@ -9169,21 +15192,50 @@ func (m *Task) Validate() error { // no validation rules for CurrentStep - for key, val := range m.GetSteps() { - _ = val - - // no validation rules for Steps[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return TaskValidationError{ - field: fmt.Sprintf("Steps[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetSteps())) + i := 0 + for key := range m.GetSteps() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetSteps()[key] + _ = val + + // no validation rules for Steps[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TaskValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TaskValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return TaskValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for ClusterID @@ -9204,9 +15256,29 @@ func (m *Task) Validate() error { // no validation rules for NodeGroupID + if len(errors) > 0 { + return TaskMultiError(errors) + } + return nil } +// TaskMultiError is an error wrapping multiple validation errors returned by +// Task.ValidateAll() if the designated constraints aren't met. +type TaskMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaskMultiError) 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 TaskMultiError) AllErrors() []error { return m } + // TaskValidationError is the validation error returned by Task.Validate if the // designated constraints aren't met. type TaskValidationError struct { @@ -9271,12 +15343,26 @@ var _Task_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on Step with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. func (m *Step) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Step 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 StepMultiError, or nil if none found. +func (m *Step) ValidateAll() error { + return m.validate(true) +} + +func (m *Step) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for System @@ -9294,10 +15380,14 @@ func (m *Step) Validate() error { // no validation rules for ExecutionTime if _, ok := _Step_Status_InLookup[m.GetStatus()]; !ok { - return StepValidationError{ + err := StepValidationError{ field: "Status", reason: "value must be in list [NOTSTARTED RUNNING SUCCESS FAILURE TIMEOUT FORCETERMINATE]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Message @@ -9314,9 +15404,29 @@ func (m *Step) Validate() error { // no validation rules for AllowSkip + if len(errors) > 0 { + return StepMultiError(errors) + } + return nil } +// StepMultiError is an error wrapping multiple validation errors returned by +// Step.ValidateAll() if the designated constraints aren't met. +type StepMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m StepMultiError) 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 StepMultiError) AllErrors() []error { return m } + // StepValidationError is the validation error returned by Step.Validate if the // designated constraints aren't met. type StepValidationError struct { @@ -9381,12 +15491,26 @@ var _Step_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on TkeCidr with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *TkeCidr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TkeCidr 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 TkeCidrMultiError, or nil if none found. +func (m *TkeCidr) ValidateAll() error { + return m.validate(true) +} + +func (m *TkeCidr) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for VPC // no validation rules for CIDR @@ -9401,9 +15525,29 @@ func (m *TkeCidr) Validate() error { // no validation rules for UpdateTime + if len(errors) > 0 { + return TkeCidrMultiError(errors) + } + return nil } +// TkeCidrMultiError is an error wrapping multiple validation errors returned +// by TkeCidr.ValidateAll() if the designated constraints aren't met. +type TkeCidrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TkeCidrMultiError) 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 TkeCidrMultiError) AllErrors() []error { return m } + // TkeCidrValidationError is the validation error returned by TkeCidr.Validate // if the designated constraints aren't met. type TkeCidrValidationError struct { @@ -9459,13 +15603,27 @@ var _ interface { } = TkeCidrValidationError{} // Validate checks the field values on TkeCidrCount with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *TkeCidrCount) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TkeCidrCount 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 TkeCidrCountMultiError, or +// nil if none found. +func (m *TkeCidrCount) ValidateAll() error { + return m.validate(true) +} + +func (m *TkeCidrCount) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Count // no validation rules for VPC @@ -9474,9 +15632,29 @@ func (m *TkeCidrCount) Validate() error { // no validation rules for Status + if len(errors) > 0 { + return TkeCidrCountMultiError(errors) + } + return nil } +// TkeCidrCountMultiError is an error wrapping multiple validation errors +// returned by TkeCidrCount.ValidateAll() if the designated constraints aren't met. +type TkeCidrCountMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TkeCidrCountMultiError) 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 TkeCidrCountMultiError) AllErrors() []error { return m } + // TkeCidrCountValidationError is the validation error returned by // TkeCidrCount.Validate if the designated constraints aren't met. type TkeCidrCountValidationError struct { @@ -9532,151 +15710,270 @@ var _ interface { } = TkeCidrCountValidationError{} // Validate checks the field values on CreateClusterReq with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *CreateClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateClusterReq 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 +// CreateClusterReqMultiError, or nil if none found. +func (m *CreateClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID if l := utf8.RuneCountInString(m.GetClusterName()); l < 1 || l > 1024 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ClusterName", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProvider()) > 32 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Provider", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetRegion()); l < 1 || l > 100 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Region", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateClusterReq_Region_Pattern.MatchString(m.GetRegion()) { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } - if utf8.RuneCountInString(m.GetVpcID()) > 32 { - return CreateClusterReqValidationError{ + if utf8.RuneCountInString(m.GetVpcID()) > 40 { + err := CreateClusterReqValidationError{ field: "VpcID", - reason: "value length must be at most 32 runes", + reason: "value length must be at most 40 runes", + } + if !all { + return err } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 100 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateClusterReq_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetBusinessID()) > 100 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "BusinessID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateClusterReq_BusinessID_Pattern.MatchString(m.GetBusinessID()) { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "BusinessID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateClusterReq_Environment_InLookup[m.GetEnvironment()]; !ok { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Environment", reason: "value must be in list [stag debug prod]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateClusterReq_EngineType_InLookup[m.GetEngineType()]; !ok { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "EngineType", reason: "value must be in list [k8s mesos]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsExclusive - if _, ok := _CreateClusterReq_ClusterType_InLookup[m.GetClusterType()]; !ok { - return CreateClusterReqValidationError{ - field: "ClusterType", - reason: "value must be in list [federation single]", - } - } + // no validation rules for ClusterType // no validation rules for FederationClusterID if len(m.GetLabels()) > 20 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Labels", reason: "value must contain no more than 20 pair(s)", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyCreateInfo - for key, val := range m.GetBcsAddons() { - _ = val - - // no validation rules for BcsAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CreateClusterReqValidationError{ - field: fmt.Sprintf("BcsAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetBcsAddons())) + i := 0 + for key := range m.GetBcsAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetBcsAddons()[key] + _ = val + + // no validation rules for BcsAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraAddons() { - _ = val - - // no validation rules for ExtraAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CreateClusterReqValidationError{ - field: fmt.Sprintf("ExtraAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetExtraAddons())) + i := 0 + for key := range m.GetExtraAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraAddons()[key] + _ = val + + // no validation rules for ExtraAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for CloudID @@ -9684,10 +15981,14 @@ func (m *CreateClusterReq) Validate() error { // no validation rules for ManageType if m.GetNetworkSettings() == nil { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "NetworkSettings", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } if a := m.GetNetworkSettings(); a != nil { @@ -9695,17 +15996,40 @@ func (m *CreateClusterReq) Validate() error { } if m.GetClusterBasicSettings() == nil { - return CreateClusterReqValidationError{ + err := CreateClusterReqValidationError{ field: "ClusterBasicSettings", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } if a := m.GetClusterBasicSettings(); a != nil { } - if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterAdvanceSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterReqValidationError{ field: "ClusterAdvanceSettings", @@ -9715,7 +16039,26 @@ func (m *CreateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterReqValidationError{ field: "NodeSettings", @@ -9736,7 +16079,26 @@ func (m *CreateClusterReq) Validate() error { for idx, item := range m.GetInstances() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("Instances[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("Instances[%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 CreateClusterReqValidationError{ field: fmt.Sprintf("Instances[%v]", idx), @@ -9769,7 +16131,26 @@ func (m *CreateClusterReq) Validate() error { for idx, item := range m.GetNodeGroups() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("NodeGroups[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterReqValidationError{ + field: fmt.Sprintf("NodeGroups[%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 CreateClusterReqValidationError{ field: fmt.Sprintf("NodeGroups[%v]", idx), @@ -9785,9 +16166,30 @@ func (m *CreateClusterReq) Validate() error { // no validation rules for ClusterIamRole + if len(errors) > 0 { + return CreateClusterReqMultiError(errors) + } + return nil } +// CreateClusterReqMultiError is an error wrapping multiple validation errors +// returned by CreateClusterReq.ValidateAll() if the designated constraints +// aren't met. +type CreateClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateClusterReqMultiError) 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 CreateClusterReqMultiError) AllErrors() []error { return m } + // CreateClusterReqValidationError is the validation error returned by // CreateClusterReq.Validate if the designated constraints aren't met. type CreateClusterReqValidationError struct { @@ -9859,26 +16261,54 @@ var _CreateClusterReq_EngineType_InLookup = map[string]struct{}{ "mesos": {}, } -var _CreateClusterReq_ClusterType_InLookup = map[string]struct{}{ - "federation": {}, - "single": {}, -} - // Validate checks the field values on CreateClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *CreateClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateClusterResp 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 +// CreateClusterRespMultiError, or nil if none found. +func (m *CreateClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterRespValidationError{ field: "Data", @@ -9888,7 +16318,26 @@ func (m *CreateClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterRespValidationError{ field: "Task", @@ -9898,7 +16347,26 @@ func (m *CreateClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateClusterRespValidationError{ field: "WebAnnotations", @@ -9908,9 +16376,30 @@ func (m *CreateClusterResp) Validate() error { } } + if len(errors) > 0 { + return CreateClusterRespMultiError(errors) + } + return nil } +// CreateClusterRespMultiError is an error wrapping multiple validation errors +// returned by CreateClusterResp.ValidateAll() if the designated constraints +// aren't met. +type CreateClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateClusterRespMultiError) 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 CreateClusterRespMultiError) AllErrors() []error { return m } + // CreateClusterRespValidationError is the validation error returned by // CreateClusterResp.Validate if the designated constraints aren't met. type CreateClusterRespValidationError struct { @@ -9969,34 +16458,79 @@ var _ interface { // Validate checks the field values on AddSubnetToClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *AddSubnetToClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddSubnetToClusterReq 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 +// AddSubnetToClusterReqMultiError, or nil if none found. +func (m *AddSubnetToClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *AddSubnetToClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return AddSubnetToClusterReqValidationError{ + err := AddSubnetToClusterReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return AddSubnetToClusterReqValidationError{ + err := AddSubnetToClusterReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_AddSubnetToClusterReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return AddSubnetToClusterReqValidationError{ + err := AddSubnetToClusterReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetSubnet()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSubnet()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddSubnetToClusterReqValidationError{ + field: "Subnet", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddSubnetToClusterReqValidationError{ + field: "Subnet", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSubnet()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AddSubnetToClusterReqValidationError{ field: "Subnet", @@ -10008,9 +16542,30 @@ func (m *AddSubnetToClusterReq) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return AddSubnetToClusterReqMultiError(errors) + } + return nil } +// AddSubnetToClusterReqMultiError is an error wrapping multiple validation +// errors returned by AddSubnetToClusterReq.ValidateAll() if the designated +// constraints aren't met. +type AddSubnetToClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddSubnetToClusterReqMultiError) 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 AddSubnetToClusterReqMultiError) AllErrors() []error { return m } + // AddSubnetToClusterReqValidationError is the validation error returned by // AddSubnetToClusterReq.Validate if the designated constraints aren't met. type AddSubnetToClusterReqValidationError struct { @@ -10071,19 +16626,52 @@ var _AddSubnetToClusterReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-] // Validate checks the field values on AddSubnetToClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *AddSubnetToClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddSubnetToClusterResp 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 +// AddSubnetToClusterRespMultiError, or nil if none found. +func (m *AddSubnetToClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *AddSubnetToClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddSubnetToClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddSubnetToClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AddSubnetToClusterRespValidationError{ field: "WebAnnotations", @@ -10093,9 +16681,30 @@ func (m *AddSubnetToClusterResp) Validate() error { } } + if len(errors) > 0 { + return AddSubnetToClusterRespMultiError(errors) + } + return nil } +// AddSubnetToClusterRespMultiError is an error wrapping multiple validation +// errors returned by AddSubnetToClusterResp.ValidateAll() if the designated +// constraints aren't met. +type AddSubnetToClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddSubnetToClusterRespMultiError) 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 AddSubnetToClusterRespMultiError) AllErrors() []error { return m } + // AddSubnetToClusterRespValidationError is the validation error returned by // AddSubnetToClusterResp.Validate if the designated constraints aren't met. type AddSubnetToClusterRespValidationError struct { @@ -10154,36 +16763,81 @@ var _ interface { // Validate checks the field values on SwitchClusterUnderlayNetworkReq with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *SwitchClusterUnderlayNetworkReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SwitchClusterUnderlayNetworkReq 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 +// SwitchClusterUnderlayNetworkReqMultiError, or nil if none found. +func (m *SwitchClusterUnderlayNetworkReq) ValidateAll() error { + return m.validate(true) +} + +func (m *SwitchClusterUnderlayNetworkReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return SwitchClusterUnderlayNetworkReqValidationError{ + err := SwitchClusterUnderlayNetworkReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return SwitchClusterUnderlayNetworkReqValidationError{ + err := SwitchClusterUnderlayNetworkReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_SwitchClusterUnderlayNetworkReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return SwitchClusterUnderlayNetworkReqValidationError{ + err := SwitchClusterUnderlayNetworkReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Disable - if v, ok := interface{}(m.GetSubnet()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSubnet()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SwitchClusterUnderlayNetworkReqValidationError{ + field: "Subnet", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SwitchClusterUnderlayNetworkReqValidationError{ + field: "Subnet", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSubnet()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SwitchClusterUnderlayNetworkReqValidationError{ field: "Subnet", @@ -10199,9 +16853,30 @@ func (m *SwitchClusterUnderlayNetworkReq) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return SwitchClusterUnderlayNetworkReqMultiError(errors) + } + return nil } +// SwitchClusterUnderlayNetworkReqMultiError is an error wrapping multiple +// validation errors returned by SwitchClusterUnderlayNetworkReq.ValidateAll() +// if the designated constraints aren't met. +type SwitchClusterUnderlayNetworkReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SwitchClusterUnderlayNetworkReqMultiError) 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 SwitchClusterUnderlayNetworkReqMultiError) AllErrors() []error { return m } + // SwitchClusterUnderlayNetworkReqValidationError is the validation error // returned by SwitchClusterUnderlayNetworkReq.Validate if the designated // constraints aren't met. @@ -10263,19 +16938,53 @@ var _SwitchClusterUnderlayNetworkReq_ClusterID_Pattern = regexp.MustCompile("^[0 // Validate checks the field values on SwitchClusterUnderlayNetworkResp with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *SwitchClusterUnderlayNetworkResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SwitchClusterUnderlayNetworkResp 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 +// SwitchClusterUnderlayNetworkRespMultiError, or nil if none found. +func (m *SwitchClusterUnderlayNetworkResp) ValidateAll() error { + return m.validate(true) +} + +func (m *SwitchClusterUnderlayNetworkResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SwitchClusterUnderlayNetworkRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SwitchClusterUnderlayNetworkRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SwitchClusterUnderlayNetworkRespValidationError{ field: "Task", @@ -10285,7 +16994,26 @@ func (m *SwitchClusterUnderlayNetworkResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SwitchClusterUnderlayNetworkRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SwitchClusterUnderlayNetworkRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SwitchClusterUnderlayNetworkRespValidationError{ field: "WebAnnotations", @@ -10295,7 +17023,26 @@ func (m *SwitchClusterUnderlayNetworkResp) Validate() error { } } - if v, ok := interface{}(m.GetCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SwitchClusterUnderlayNetworkRespValidationError{ + field: "Cluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SwitchClusterUnderlayNetworkRespValidationError{ + field: "Cluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SwitchClusterUnderlayNetworkRespValidationError{ field: "Cluster", @@ -10305,9 +17052,31 @@ func (m *SwitchClusterUnderlayNetworkResp) Validate() error { } } + if len(errors) > 0 { + return SwitchClusterUnderlayNetworkRespMultiError(errors) + } + return nil } +// SwitchClusterUnderlayNetworkRespMultiError is an error wrapping multiple +// validation errors returned by +// SwitchClusterUnderlayNetworkResp.ValidateAll() if the designated +// constraints aren't met. +type SwitchClusterUnderlayNetworkRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SwitchClusterUnderlayNetworkRespMultiError) 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 SwitchClusterUnderlayNetworkRespMultiError) AllErrors() []error { return m } + // SwitchClusterUnderlayNetworkRespValidationError is the validation error // returned by SwitchClusterUnderlayNetworkResp.Validate if the designated // constraints aren't met. @@ -10367,126 +17136,219 @@ var _ interface { // Validate checks the field values on CreateVirtualClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateVirtualClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateVirtualClusterReq 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 +// CreateVirtualClusterReqMultiError, or nil if none found. +func (m *CreateVirtualClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateVirtualClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID if l := utf8.RuneCountInString(m.GetClusterName()); l < 1 || l > 1024 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "ClusterName", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProvider()) > 32 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Provider", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetRegion()); l < 1 || l > 100 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Region", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateVirtualClusterReq_Region_Pattern.MatchString(m.GetRegion()) { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetVpcID()) > 32 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "VpcID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 100 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateVirtualClusterReq_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetBusinessID()) > 100 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "BusinessID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateVirtualClusterReq_BusinessID_Pattern.MatchString(m.GetBusinessID()) { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "BusinessID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateVirtualClusterReq_Environment_InLookup[m.GetEnvironment()]; !ok { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Environment", reason: "value must be in list [stag debug prod]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _CreateVirtualClusterReq_EngineType_InLookup[m.GetEngineType()]; !ok { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "EngineType", reason: "value must be in list [k8s mesos]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsExclusive if _, ok := _CreateVirtualClusterReq_ClusterType_InLookup[m.GetClusterType()]; !ok { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "ClusterType", reason: "value must be in list [federation single virtual]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for HostClusterID if _, ok := _CreateVirtualClusterReq_HostClusterNetwork_InLookup[m.GetHostClusterNetwork()]; !ok { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "HostClusterNetwork", reason: "value must be in list [devnet idc ]", } + if !all { + return err + } + errors = append(errors, err) } if len(m.GetLabels()) > 20 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Labels", reason: "value must contain no more than 20 pair(s)", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateVirtualClusterReqValidationError{ + err := CreateVirtualClusterReqValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyCreateInfo - if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "NetworkSettings", @@ -10496,7 +17358,26 @@ func (m *CreateVirtualClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterBasicSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "ClusterBasicSettings", @@ -10506,7 +17387,26 @@ func (m *CreateVirtualClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterAdvanceSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "ClusterAdvanceSettings", @@ -10516,7 +17416,26 @@ func (m *CreateVirtualClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "NodeSettings", @@ -10530,7 +17449,26 @@ func (m *CreateVirtualClusterReq) Validate() error { // no validation rules for Description - if v, ok := interface{}(m.GetNs()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNs()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "Ns", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterReqValidationError{ + field: "Ns", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNs()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterReqValidationError{ field: "Ns", @@ -10542,9 +17480,30 @@ func (m *CreateVirtualClusterReq) Validate() error { // no validation rules for ProjectCode + if len(errors) > 0 { + return CreateVirtualClusterReqMultiError(errors) + } + return nil } +// CreateVirtualClusterReqMultiError is an error wrapping multiple validation +// errors returned by CreateVirtualClusterReq.ValidateAll() if the designated +// constraints aren't met. +type CreateVirtualClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateVirtualClusterReqMultiError) 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 CreateVirtualClusterReqMultiError) AllErrors() []error { return m } + // CreateVirtualClusterReqValidationError is the validation error returned by // CreateVirtualClusterReq.Validate if the designated constraints aren't met. type CreateVirtualClusterReqValidationError struct { @@ -10631,20 +17590,53 @@ var _CreateVirtualClusterReq_HostClusterNetwork_InLookup = map[string]struct{}{ } // Validate checks the field values on NamespaceInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *NamespaceInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NamespaceInfo 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 NamespaceInfoMultiError, or +// nil if none found. +func (m *NamespaceInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *NamespaceInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for Labels // no validation rules for Annotations - if v, ok := interface{}(m.GetQuota()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetQuota()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NamespaceInfoValidationError{ + field: "Quota", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NamespaceInfoValidationError{ + field: "Quota", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetQuota()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NamespaceInfoValidationError{ field: "Quota", @@ -10654,9 +17646,30 @@ func (m *NamespaceInfo) Validate() error { } } + if len(errors) > 0 { + return NamespaceInfoMultiError(errors) + } + return nil } +// NamespaceInfoMultiError is an error wrapping multiple validation errors +// returned by NamespaceInfo.ValidateAll() if the designated constraints +// aren't met. +type NamespaceInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NamespaceInfoMultiError) 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 NamespaceInfoMultiError) AllErrors() []error { return m } + // NamespaceInfoValidationError is the validation error returned by // NamespaceInfo.Validate if the designated constraints aren't met. type NamespaceInfoValidationError struct { @@ -10712,13 +17725,27 @@ var _ interface { } = NamespaceInfoValidationError{} // Validate checks the field values on NamespaceQuota with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *NamespaceQuota) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NamespaceQuota 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 NamespaceQuotaMultiError, +// or nil if none found. +func (m *NamespaceQuota) ValidateAll() error { + return m.validate(true) +} + +func (m *NamespaceQuota) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CpuRequests // no validation rules for CpuLimits @@ -10727,9 +17754,30 @@ func (m *NamespaceQuota) Validate() error { // no validation rules for MemoryLimits + if len(errors) > 0 { + return NamespaceQuotaMultiError(errors) + } + return nil } +// NamespaceQuotaMultiError is an error wrapping multiple validation errors +// returned by NamespaceQuota.ValidateAll() if the designated constraints +// aren't met. +type NamespaceQuotaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NamespaceQuotaMultiError) 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 NamespaceQuotaMultiError) AllErrors() []error { return m } + // NamespaceQuotaValidationError is the validation error returned by // NamespaceQuota.Validate if the designated constraints aren't met. type NamespaceQuotaValidationError struct { @@ -10786,19 +17834,52 @@ var _ interface { // Validate checks the field values on CreateVirtualClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateVirtualClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateVirtualClusterResp 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 +// CreateVirtualClusterRespMultiError, or nil if none found. +func (m *CreateVirtualClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateVirtualClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterRespValidationError{ field: "Data", @@ -10808,7 +17889,26 @@ func (m *CreateVirtualClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterRespValidationError{ field: "Task", @@ -10818,7 +17918,26 @@ func (m *CreateVirtualClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateVirtualClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateVirtualClusterRespValidationError{ field: "WebAnnotations", @@ -10828,9 +17947,30 @@ func (m *CreateVirtualClusterResp) Validate() error { } } + if len(errors) > 0 { + return CreateVirtualClusterRespMultiError(errors) + } + return nil } +// CreateVirtualClusterRespMultiError is an error wrapping multiple validation +// errors returned by CreateVirtualClusterResp.ValidateAll() if the designated +// constraints aren't met. +type CreateVirtualClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateVirtualClusterRespMultiError) 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 CreateVirtualClusterRespMultiError) AllErrors() []error { return m } + // CreateVirtualClusterRespValidationError is the validation error returned by // CreateVirtualClusterResp.Validate if the designated constraints aren't met. type CreateVirtualClusterRespValidationError struct { @@ -10888,23 +18028,62 @@ var _ interface { } = CreateVirtualClusterRespValidationError{} // Validate checks the field values on KubeConfigReq with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *KubeConfigReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KubeConfigReq 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 KubeConfigReqMultiError, or +// nil if none found. +func (m *KubeConfigReq) ValidateAll() error { + return m.validate(true) +} + +func (m *KubeConfigReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetKubeConfig()) < 1 { - return KubeConfigReqValidationError{ + err := KubeConfigReqValidationError{ field: "KubeConfig", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return KubeConfigReqMultiError(errors) } return nil } +// KubeConfigReqMultiError is an error wrapping multiple validation errors +// returned by KubeConfigReq.ValidateAll() if the designated constraints +// aren't met. +type KubeConfigReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KubeConfigReqMultiError) 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 KubeConfigReqMultiError) AllErrors() []error { return m } + // KubeConfigReqValidationError is the validation error returned by // KubeConfigReq.Validate if the designated constraints aren't met. type KubeConfigReqValidationError struct { @@ -10961,49 +18140,100 @@ var _ interface { // Validate checks the field values on KubeConfigConnectReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *KubeConfigConnectReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KubeConfigConnectReq 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 +// KubeConfigConnectReqMultiError, or nil if none found. +func (m *KubeConfigConnectReq) ValidateAll() error { + return m.validate(true) +} + +func (m *KubeConfigConnectReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID // no validation rules for IsExtranet if l := utf8.RuneCountInString(m.GetCloudID()); l < 1 || l > 1024 { - return KubeConfigConnectReqValidationError{ + err := KubeConfigConnectReqValidationError{ field: "CloudID", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetAccountID()) > 1024 { - return KubeConfigConnectReqValidationError{ + err := KubeConfigConnectReqValidationError{ field: "AccountID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return KubeConfigConnectReqValidationError{ + err := KubeConfigConnectReqValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_KubeConfigConnectReq_Region_Pattern.MatchString(m.GetRegion()) { - return KubeConfigConnectReqValidationError{ + err := KubeConfigConnectReqValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ResourceGroupName + if len(errors) > 0 { + return KubeConfigConnectReqMultiError(errors) + } + return nil } +// KubeConfigConnectReqMultiError is an error wrapping multiple validation +// errors returned by KubeConfigConnectReq.ValidateAll() if the designated +// constraints aren't met. +type KubeConfigConnectReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KubeConfigConnectReqMultiError) 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 KubeConfigConnectReqMultiError) AllErrors() []error { return m } + // KubeConfigConnectReqValidationError is the validation error returned by // KubeConfigConnectReq.Validate if the designated constraints aren't met. type KubeConfigConnectReqValidationError struct { @@ -11063,22 +18293,57 @@ var _ interface { var _KubeConfigConnectReq_Region_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on KubeConfigResp with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *KubeConfigResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KubeConfigResp 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 KubeConfigRespMultiError, +// or nil if none found. +func (m *KubeConfigResp) ValidateAll() error { + return m.validate(true) +} + +func (m *KubeConfigResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return KubeConfigRespMultiError(errors) + } + return nil } +// KubeConfigRespMultiError is an error wrapping multiple validation errors +// returned by KubeConfigResp.ValidateAll() if the designated constraints +// aren't met. +type KubeConfigRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KubeConfigRespMultiError) 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 KubeConfigRespMultiError) AllErrors() []error { return m } + // KubeConfigRespValidationError is the validation error returned by // KubeConfigResp.Validate if the designated constraints aren't met. type KubeConfigRespValidationError struct { @@ -11135,21 +18400,56 @@ var _ interface { // Validate checks the field values on KubeConfigConnectResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *KubeConfigConnectResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KubeConfigConnectResp 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 +// KubeConfigConnectRespMultiError, or nil if none found. +func (m *KubeConfigConnectResp) ValidateAll() error { + return m.validate(true) +} + +func (m *KubeConfigConnectResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return KubeConfigConnectRespMultiError(errors) + } + return nil } +// KubeConfigConnectRespMultiError is an error wrapping multiple validation +// errors returned by KubeConfigConnectResp.ValidateAll() if the designated +// constraints aren't met. +type KubeConfigConnectRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KubeConfigConnectRespMultiError) 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 KubeConfigConnectRespMultiError) AllErrors() []error { return m } + // KubeConfigConnectRespValidationError is the validation error returned by // KubeConfigConnectResp.Validate if the designated constraints aren't met. type KubeConfigConnectRespValidationError struct { @@ -11207,13 +18507,27 @@ var _ interface { } = KubeConfigConnectRespValidationError{} // Validate checks the field values on ImportCloudMode with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *ImportCloudMode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ImportCloudMode 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 +// ImportCloudModeMultiError, or nil if none found. +func (m *ImportCloudMode) ValidateAll() error { + return m.validate(true) +} + +func (m *ImportCloudMode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for KubeConfig @@ -11222,9 +18536,30 @@ func (m *ImportCloudMode) Validate() error { // no validation rules for ResourceGroup + if len(errors) > 0 { + return ImportCloudModeMultiError(errors) + } + return nil } +// ImportCloudModeMultiError is an error wrapping multiple validation errors +// returned by ImportCloudMode.ValidateAll() if the designated constraints +// aren't met. +type ImportCloudModeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ImportCloudModeMultiError) 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 ImportCloudModeMultiError) AllErrors() []error { return m } + // ImportCloudModeValidationError is the validation error returned by // ImportCloudMode.Validate if the designated constraints aren't met. type ImportCloudModeValidationError struct { @@ -11280,88 +18615,161 @@ var _ interface { } = ImportCloudModeValidationError{} // Validate checks the field values on ImportClusterReq with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *ImportClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ImportClusterReq 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 +// ImportClusterReqMultiError, or nil if none found. +func (m *ImportClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ImportClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID if l := utf8.RuneCountInString(m.GetClusterName()); l < 1 || l > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "ClusterName", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Description if l := utf8.RuneCountInString(m.GetProvider()); l < 1 || l > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Provider", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if !_ImportClusterReq_Region_Pattern.MatchString(m.GetRegion()) { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetProjectID()); l < 1 || l > 100 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "ProjectID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_ImportClusterReq_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetBusinessID()); l < 1 || l > 100 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "BusinessID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_ImportClusterReq_BusinessID_Pattern.MatchString(m.GetBusinessID()) { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "BusinessID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _ImportClusterReq_Environment_InLookup[m.GetEnvironment()]; !ok { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Environment", reason: "value must be in list [stag debug prod]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _ImportClusterReq_EngineType_InLookup[m.GetEngineType()]; !ok { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "EngineType", reason: "value must be in list [k8s mesos ]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetIsExclusive()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIsExclusive()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ImportClusterReqValidationError{ + field: "IsExclusive", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ImportClusterReqValidationError{ + field: "IsExclusive", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIsExclusive()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ImportClusterReqValidationError{ field: "IsExclusive", @@ -11372,31 +18780,47 @@ func (m *ImportClusterReq) Validate() error { } if _, ok := _ImportClusterReq_ClusterType_InLookup[m.GetClusterType()]; !ok { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "ClusterType", reason: "value must be in list [federation single ]", } + if !all { + return err + } + errors = append(errors, err) } if len(m.GetLabels()) > 20 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Labels", reason: "value must contain no more than 20 pair(s)", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 1 || l > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Creator", reason: "value length must be between 1 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if m.GetCloudMode() == nil { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "CloudMode", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } if a := m.GetCloudMode(); a != nil { @@ -11416,20 +18840,47 @@ func (m *ImportClusterReq) Validate() error { // no validation rules for IsShared if utf8.RuneCountInString(m.GetVersion()) > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "Version", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetAccountID()) > 1024 { - return ImportClusterReqValidationError{ + err := ImportClusterReqValidationError{ field: "AccountID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ImportClusterReqValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ImportClusterReqValidationError{ + field: "Area", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ImportClusterReqValidationError{ field: "Area", @@ -11439,9 +18890,30 @@ func (m *ImportClusterReq) Validate() error { } } + if len(errors) > 0 { + return ImportClusterReqMultiError(errors) + } + return nil } +// ImportClusterReqMultiError is an error wrapping multiple validation errors +// returned by ImportClusterReq.ValidateAll() if the designated constraints +// aren't met. +type ImportClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ImportClusterReqMultiError) 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 ImportClusterReqMultiError) AllErrors() []error { return m } + // ImportClusterReqValidationError is the validation error returned by // ImportClusterReq.Validate if the designated constraints aren't met. type ImportClusterReqValidationError struct { @@ -11521,20 +18993,53 @@ var _ImportClusterReq_ClusterType_InLookup = map[string]struct{}{ } // Validate checks the field values on ImportClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *ImportClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ImportClusterResp 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 +// ImportClusterRespMultiError, or nil if none found. +func (m *ImportClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ImportClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ImportClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ImportClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ImportClusterRespValidationError{ field: "Data", @@ -11544,9 +19049,30 @@ func (m *ImportClusterResp) Validate() error { } } + if len(errors) > 0 { + return ImportClusterRespMultiError(errors) + } + return nil } +// ImportClusterRespMultiError is an error wrapping multiple validation errors +// returned by ImportClusterResp.ValidateAll() if the designated constraints +// aren't met. +type ImportClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ImportClusterRespMultiError) 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 ImportClusterRespMultiError) AllErrors() []error { return m } + // ImportClusterRespValidationError is the validation error returned by // ImportClusterResp.Validate if the designated constraints aren't met. type ImportClusterRespValidationError struct { @@ -11605,40 +19131,87 @@ var _ interface { // Validate checks the field values on DeleteVirtualClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteVirtualClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteVirtualClusterReq 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 +// DeleteVirtualClusterReqMultiError, or nil if none found. +func (m *DeleteVirtualClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteVirtualClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return DeleteVirtualClusterReqValidationError{ + err := DeleteVirtualClusterReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return DeleteVirtualClusterReqValidationError{ + err := DeleteVirtualClusterReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteVirtualClusterReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return DeleteVirtualClusterReqValidationError{ + err := DeleteVirtualClusterReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyDeleteInfo // no validation rules for Operator + if len(errors) > 0 { + return DeleteVirtualClusterReqMultiError(errors) + } + return nil } +// DeleteVirtualClusterReqMultiError is an error wrapping multiple validation +// errors returned by DeleteVirtualClusterReq.ValidateAll() if the designated +// constraints aren't met. +type DeleteVirtualClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteVirtualClusterReqMultiError) 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 DeleteVirtualClusterReqMultiError) AllErrors() []error { return m } + // DeleteVirtualClusterReqValidationError is the validation error returned by // DeleteVirtualClusterReq.Validate if the designated constraints aren't met. type DeleteVirtualClusterReqValidationError struct { @@ -11699,19 +19272,52 @@ var _DeleteVirtualClusterReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z // Validate checks the field values on DeleteVirtualClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteVirtualClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteVirtualClusterResp 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 +// DeleteVirtualClusterRespMultiError, or nil if none found. +func (m *DeleteVirtualClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteVirtualClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteVirtualClusterRespValidationError{ field: "Data", @@ -11721,7 +19327,26 @@ func (m *DeleteVirtualClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteVirtualClusterRespValidationError{ field: "Task", @@ -11731,7 +19356,26 @@ func (m *DeleteVirtualClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteVirtualClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteVirtualClusterRespValidationError{ field: "WebAnnotations", @@ -11741,9 +19385,30 @@ func (m *DeleteVirtualClusterResp) Validate() error { } } + if len(errors) > 0 { + return DeleteVirtualClusterRespMultiError(errors) + } + return nil } +// DeleteVirtualClusterRespMultiError is an error wrapping multiple validation +// errors returned by DeleteVirtualClusterResp.ValidateAll() if the designated +// constraints aren't met. +type DeleteVirtualClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteVirtualClusterRespMultiError) 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 DeleteVirtualClusterRespMultiError) AllErrors() []error { return m } + // DeleteVirtualClusterRespValidationError is the validation error returned by // DeleteVirtualClusterResp.Validate if the designated constraints aren't met. type DeleteVirtualClusterRespValidationError struct { @@ -11802,34 +19467,79 @@ var _ interface { // Validate checks the field values on UpdateVirtualClusterQuotaReq with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateVirtualClusterQuotaReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateVirtualClusterQuotaReq 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 +// UpdateVirtualClusterQuotaReqMultiError, or nil if none found. +func (m *UpdateVirtualClusterQuotaReq) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateVirtualClusterQuotaReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return UpdateVirtualClusterQuotaReqValidationError{ + err := UpdateVirtualClusterQuotaReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return UpdateVirtualClusterQuotaReqValidationError{ + err := UpdateVirtualClusterQuotaReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateVirtualClusterQuotaReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return UpdateVirtualClusterQuotaReqValidationError{ + err := UpdateVirtualClusterQuotaReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetQuota()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetQuota()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateVirtualClusterQuotaReqValidationError{ + field: "Quota", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateVirtualClusterQuotaReqValidationError{ + field: "Quota", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetQuota()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateVirtualClusterQuotaReqValidationError{ field: "Quota", @@ -11840,15 +19550,40 @@ func (m *UpdateVirtualClusterQuotaReq) Validate() error { } if utf8.RuneCountInString(m.GetUpdater()) > 1024 { - return UpdateVirtualClusterQuotaReqValidationError{ + err := UpdateVirtualClusterQuotaReqValidationError{ field: "Updater", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateVirtualClusterQuotaReqMultiError(errors) } return nil } +// UpdateVirtualClusterQuotaReqMultiError is an error wrapping multiple +// validation errors returned by UpdateVirtualClusterQuotaReq.ValidateAll() if +// the designated constraints aren't met. +type UpdateVirtualClusterQuotaReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateVirtualClusterQuotaReqMultiError) 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 UpdateVirtualClusterQuotaReqMultiError) AllErrors() []error { return m } + // UpdateVirtualClusterQuotaReqValidationError is the validation error returned // by UpdateVirtualClusterQuotaReq.Validate if the designated constraints // aren't met. @@ -11910,19 +19645,52 @@ var _UpdateVirtualClusterQuotaReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a // Validate checks the field values on UpdateVirtualClusterQuotaResp with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateVirtualClusterQuotaResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateVirtualClusterQuotaResp 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 +// UpdateVirtualClusterQuotaRespMultiError, or nil if none found. +func (m *UpdateVirtualClusterQuotaResp) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateVirtualClusterQuotaResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateVirtualClusterQuotaRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateVirtualClusterQuotaRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateVirtualClusterQuotaRespValidationError{ field: "Data", @@ -11932,9 +19700,30 @@ func (m *UpdateVirtualClusterQuotaResp) Validate() error { } } + if len(errors) > 0 { + return UpdateVirtualClusterQuotaRespMultiError(errors) + } + return nil } +// UpdateVirtualClusterQuotaRespMultiError is an error wrapping multiple +// validation errors returned by UpdateVirtualClusterQuotaResp.ValidateAll() +// if the designated constraints aren't met. +type UpdateVirtualClusterQuotaRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateVirtualClusterQuotaRespMultiError) 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 UpdateVirtualClusterQuotaRespMultiError) AllErrors() []error { return m } + // UpdateVirtualClusterQuotaRespValidationError is the validation error // returned by UpdateVirtualClusterQuotaResp.Validate if the designated // constraints aren't met. @@ -11993,32 +19782,58 @@ var _ interface { } = UpdateVirtualClusterQuotaRespValidationError{} // Validate checks the field values on DeleteClusterReq with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *DeleteClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteClusterReq 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 +// DeleteClusterReqMultiError, or nil if none found. +func (m *DeleteClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return DeleteClusterReqValidationError{ + err := DeleteClusterReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return DeleteClusterReqValidationError{ + err := DeleteClusterReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteClusterReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return DeleteClusterReqValidationError{ + err := DeleteClusterReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForced @@ -12031,9 +19846,30 @@ func (m *DeleteClusterReq) Validate() error { // no validation rules for DeleteClusterRecord + if len(errors) > 0 { + return DeleteClusterReqMultiError(errors) + } + return nil } +// DeleteClusterReqMultiError is an error wrapping multiple validation errors +// returned by DeleteClusterReq.ValidateAll() if the designated constraints +// aren't met. +type DeleteClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteClusterReqMultiError) 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 DeleteClusterReqMultiError) AllErrors() []error { return m } + // DeleteClusterReqValidationError is the validation error returned by // DeleteClusterReq.Validate if the designated constraints aren't met. type DeleteClusterReqValidationError struct { @@ -12091,20 +19927,53 @@ var _ interface { var _DeleteClusterReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on DeleteClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *DeleteClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteClusterResp 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 +// DeleteClusterRespMultiError, or nil if none found. +func (m *DeleteClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteClusterRespValidationError{ field: "Data", @@ -12114,7 +19983,26 @@ func (m *DeleteClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteClusterRespValidationError{ field: "Task", @@ -12124,7 +20012,26 @@ func (m *DeleteClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteClusterRespValidationError{ field: "WebAnnotations", @@ -12134,9 +20041,30 @@ func (m *DeleteClusterResp) Validate() error { } } + if len(errors) > 0 { + return DeleteClusterRespMultiError(errors) + } + return nil } +// DeleteClusterRespMultiError is an error wrapping multiple validation errors +// returned by DeleteClusterResp.ValidateAll() if the designated constraints +// aren't met. +type DeleteClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteClusterRespMultiError) 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 DeleteClusterRespMultiError) AllErrors() []error { return m } + // DeleteClusterRespValidationError is the validation error returned by // DeleteClusterResp.Validate if the designated constraints aren't met. type DeleteClusterRespValidationError struct { @@ -12194,57 +20122,110 @@ var _ interface { } = DeleteClusterRespValidationError{} // Validate checks the field values on UpdateClusterReq with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *UpdateClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterReq 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 +// UpdateClusterReqMultiError, or nil if none found. +func (m *UpdateClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterID()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "ClusterID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ClusterName if utf8.RuneCountInString(m.GetProvider()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Provider", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region if utf8.RuneCountInString(m.GetVpcID()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "VpcID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetBusinessID()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "BusinessID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Environment // no validation rules for EngineType - if v, ok := interface{}(m.GetIsExclusive()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIsExclusive()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsExclusive", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsExclusive", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIsExclusive()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "IsExclusive", @@ -12259,65 +20240,154 @@ func (m *UpdateClusterReq) Validate() error { // no validation rules for FederationClusterID if len(m.GetLabels()) > 20 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Labels", reason: "value must contain no more than 20 pair(s)", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetUpdater()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Updater", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _UpdateClusterReq_Status_InLookup[m.GetStatus()]; !ok { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Status", reason: "value must be in list [CREATING RUNNING DELETING FAILURE INITIALIZATION DELETED ]", } - } - - for key, val := range m.GetBcsAddons() { - _ = val - - // no validation rules for BcsAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UpdateClusterReqValidationError{ - field: fmt.Sprintf("BcsAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + if !all { + return err + } + errors = append(errors, err) + } + + { + sorted_keys := make([]string, len(m.GetBcsAddons())) + i := 0 + for key := range m.GetBcsAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetBcsAddons()[key] + _ = val + + // no validation rules for BcsAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateClusterReqValidationError{ + field: fmt.Sprintf("BcsAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraAddons() { - _ = val - - // no validation rules for ExtraAddons[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UpdateClusterReqValidationError{ - field: fmt.Sprintf("ExtraAddons[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetExtraAddons())) + i := 0 + for key := range m.GetExtraAddons() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraAddons()[key] + _ = val + + // no validation rules for ExtraAddons[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateClusterReqValidationError{ + field: fmt.Sprintf("ExtraAddons[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } // no validation rules for SystemID // no validation rules for ManageType - if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "NetworkSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "NetworkSettings", @@ -12327,7 +20397,26 @@ func (m *UpdateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterBasicSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "ClusterBasicSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterBasicSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "ClusterBasicSettings", @@ -12337,7 +20426,26 @@ func (m *UpdateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterAdvanceSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "ClusterAdvanceSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterAdvanceSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "ClusterAdvanceSettings", @@ -12347,7 +20455,26 @@ func (m *UpdateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeSettings()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "NodeSettings", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeSettings()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "NodeSettings", @@ -12365,7 +20492,26 @@ func (m *UpdateClusterReq) Validate() error { // no validation rules for ExtraClusterID - if v, ok := interface{}(m.GetIsCommonCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIsCommonCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsCommonCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsCommonCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIsCommonCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "IsCommonCluster", @@ -12375,7 +20521,26 @@ func (m *UpdateClusterReq) Validate() error { } } - if v, ok := interface{}(m.GetDescription()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDescription()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "Description", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "Description", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDescription()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "Description", @@ -12387,7 +20552,26 @@ func (m *UpdateClusterReq) Validate() error { // no validation rules for ClusterCategory - if v, ok := interface{}(m.GetIsShared()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIsShared()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsShared", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsShared", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIsShared()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "IsShared", @@ -12400,17 +20584,40 @@ func (m *UpdateClusterReq) Validate() error { // no validation rules for CreateTime if utf8.RuneCountInString(m.GetCreator()) > 1024 { - return UpdateClusterReqValidationError{ + err := UpdateClusterReqValidationError{ field: "Creator", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ImportCategory // no validation rules for CloudAccountID - if v, ok := interface{}(m.GetIsMixed()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIsMixed()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsMixed", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterReqValidationError{ + field: "IsMixed", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIsMixed()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterReqValidationError{ field: "IsMixed", @@ -12420,9 +20627,30 @@ func (m *UpdateClusterReq) Validate() error { } } + if len(errors) > 0 { + return UpdateClusterReqMultiError(errors) + } + return nil } +// UpdateClusterReqMultiError is an error wrapping multiple validation errors +// returned by UpdateClusterReq.ValidateAll() if the designated constraints +// aren't met. +type UpdateClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterReqMultiError) 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 UpdateClusterReqMultiError) AllErrors() []error { return m } + // UpdateClusterReqValidationError is the validation error returned by // UpdateClusterReq.Validate if the designated constraints aren't met. type UpdateClusterReqValidationError struct { @@ -12488,20 +20716,53 @@ var _UpdateClusterReq_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on UpdateClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *UpdateClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterResp 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 +// UpdateClusterRespMultiError, or nil if none found. +func (m *UpdateClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterRespValidationError{ field: "Data", @@ -12511,7 +20772,26 @@ func (m *UpdateClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterRespValidationError{ field: "WebAnnotations", @@ -12521,9 +20801,30 @@ func (m *UpdateClusterResp) Validate() error { } } + if len(errors) > 0 { + return UpdateClusterRespMultiError(errors) + } + return nil } +// UpdateClusterRespMultiError is an error wrapping multiple validation errors +// returned by UpdateClusterResp.ValidateAll() if the designated constraints +// aren't met. +type UpdateClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterRespMultiError) 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 UpdateClusterRespMultiError) AllErrors() []error { return m } + // UpdateClusterRespValidationError is the validation error returned by // UpdateClusterResp.Validate if the designated constraints aren't met. type UpdateClusterRespValidationError struct { @@ -12582,24 +20883,63 @@ var _ interface { // Validate checks the field values on RetryCreateClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RetryCreateClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RetryCreateClusterReq 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 +// RetryCreateClusterReqMultiError, or nil if none found. +func (m *RetryCreateClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *RetryCreateClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID if l := utf8.RuneCountInString(m.GetOperator()); l < 1 || l > 100 { - return RetryCreateClusterReqValidationError{ + err := RetryCreateClusterReqValidationError{ field: "Operator", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return RetryCreateClusterReqMultiError(errors) } return nil } +// RetryCreateClusterReqMultiError is an error wrapping multiple validation +// errors returned by RetryCreateClusterReq.ValidateAll() if the designated +// constraints aren't met. +type RetryCreateClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RetryCreateClusterReqMultiError) 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 RetryCreateClusterReqMultiError) AllErrors() []error { return m } + // RetryCreateClusterReqValidationError is the validation error returned by // RetryCreateClusterReq.Validate if the designated constraints aren't met. type RetryCreateClusterReqValidationError struct { @@ -12658,19 +20998,52 @@ var _ interface { // Validate checks the field values on RetryCreateClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RetryCreateClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RetryCreateClusterResp 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 +// RetryCreateClusterRespMultiError, or nil if none found. +func (m *RetryCreateClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *RetryCreateClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RetryCreateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RetryCreateClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RetryCreateClusterRespValidationError{ field: "Data", @@ -12680,7 +21053,26 @@ func (m *RetryCreateClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RetryCreateClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RetryCreateClusterRespValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RetryCreateClusterRespValidationError{ field: "Task", @@ -12690,9 +21082,30 @@ func (m *RetryCreateClusterResp) Validate() error { } } + if len(errors) > 0 { + return RetryCreateClusterRespMultiError(errors) + } + return nil } +// RetryCreateClusterRespMultiError is an error wrapping multiple validation +// errors returned by RetryCreateClusterResp.ValidateAll() if the designated +// constraints aren't met. +type RetryCreateClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RetryCreateClusterRespMultiError) 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 RetryCreateClusterRespMultiError) AllErrors() []error { return m } + // RetryCreateClusterRespValidationError is the validation error returned by // RetryCreateClusterResp.Validate if the designated constraints aren't met. type RetryCreateClusterRespValidationError struct { @@ -12750,39 +21163,86 @@ var _ interface { } = RetryCreateClusterRespValidationError{} // Validate checks the field values on GetClusterReq with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *GetClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClusterReq 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 GetClusterReqMultiError, or +// nil if none found. +func (m *GetClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return GetClusterReqValidationError{ + err := GetClusterReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return GetClusterReqValidationError{ + err := GetClusterReqValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_GetClusterReq_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return GetClusterReqValidationError{ + err := GetClusterReqValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for CloudInfo + if len(errors) > 0 { + return GetClusterReqMultiError(errors) + } + return nil } +// GetClusterReqMultiError is an error wrapping multiple validation errors +// returned by GetClusterReq.ValidateAll() if the designated constraints +// aren't met. +type GetClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClusterReqMultiError) 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 GetClusterReqMultiError) AllErrors() []error { return m } + // GetClusterReqValidationError is the validation error returned by // GetClusterReq.Validate if the designated constraints aren't met. type GetClusterReqValidationError struct { @@ -12840,20 +21300,53 @@ var _ interface { var _GetClusterReq_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on GetClusterResp with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *GetClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClusterResp 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 GetClusterRespMultiError, +// or nil if none found. +func (m *GetClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetClusterRespValidationError{ field: "Data", @@ -12863,7 +21356,26 @@ func (m *GetClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetExtra()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExtra()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "Extra", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "Extra", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExtra()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetClusterRespValidationError{ field: "Extra", @@ -12873,7 +21385,26 @@ func (m *GetClusterResp) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetClusterRespValidationError{ field: "WebAnnotations", @@ -12883,9 +21414,30 @@ func (m *GetClusterResp) Validate() error { } } + if len(errors) > 0 { + return GetClusterRespMultiError(errors) + } + return nil } +// GetClusterRespMultiError is an error wrapping multiple validation errors +// returned by GetClusterResp.ValidateAll() if the designated constraints +// aren't met. +type GetClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClusterRespMultiError) 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 GetClusterRespMultiError) AllErrors() []error { return m } + // GetClusterRespValidationError is the validation error returned by // GetClusterResp.Validate if the designated constraints aren't met. type GetClusterRespValidationError struct { @@ -12941,18 +21493,53 @@ var _ interface { } = GetClusterRespValidationError{} // Validate checks the field values on ExtraClusterInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *ExtraClusterInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ExtraClusterInfo 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 +// ExtraClusterInfoMultiError, or nil if none found. +func (m *ExtraClusterInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ExtraClusterInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProviderType + if len(errors) > 0 { + return ExtraClusterInfoMultiError(errors) + } + return nil } +// ExtraClusterInfoMultiError is an error wrapping multiple validation errors +// returned by ExtraClusterInfo.ValidateAll() if the designated constraints +// aren't met. +type ExtraClusterInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ExtraClusterInfoMultiError) 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 ExtraClusterInfoMultiError) AllErrors() []error { return m } + // ExtraClusterInfoValidationError is the validation error returned by // ExtraClusterInfo.Validate if the designated constraints aren't met. type ExtraClusterInfoValidationError struct { @@ -13008,16 +21595,51 @@ var _ interface { } = ExtraClusterInfoValidationError{} // Validate checks the field values on CheckNodesRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *CheckNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CheckNodesRequest 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 +// CheckNodesRequestMultiError, or nil if none found. +func (m *CheckNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CheckNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return CheckNodesRequestMultiError(errors) + } + return nil } +// CheckNodesRequestMultiError is an error wrapping multiple validation errors +// returned by CheckNodesRequest.ValidateAll() if the designated constraints +// aren't met. +type CheckNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CheckNodesRequestMultiError) 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 CheckNodesRequestMultiError) AllErrors() []error { return m } + // CheckNodesRequestValidationError is the validation error returned by // CheckNodesRequest.Validate if the designated constraints aren't met. type CheckNodesRequestValidationError struct { @@ -13076,38 +21698,102 @@ var _ interface { // Validate checks the field values on CheckNodesResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CheckNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CheckNodesResponse 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 +// CheckNodesResponseMultiError, or nil if none found. +func (m *CheckNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CheckNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - for key, val := range m.GetData() { - _ = val - - // no validation rules for Data[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CheckNodesResponseValidationError{ - field: fmt.Sprintf("Data[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetData())) + i := 0 + for key := range m.GetData() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetData()[key] + _ = val + + // no validation rules for Data[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CheckNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CheckNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CheckNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } + } + } + if len(errors) > 0 { + return CheckNodesResponseMultiError(errors) } return nil } +// CheckNodesResponseMultiError is an error wrapping multiple validation errors +// returned by CheckNodesResponse.ValidateAll() if the designated constraints +// aren't met. +type CheckNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CheckNodesResponseMultiError) 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 CheckNodesResponseMultiError) AllErrors() []error { return m } + // CheckNodesResponseValidationError is the validation error returned by // CheckNodesResponse.Validate if the designated constraints aren't met. type CheckNodesResponseValidationError struct { @@ -13165,21 +21851,56 @@ var _ interface { } = CheckNodesResponseValidationError{} // Validate checks the field values on NodeResult with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *NodeResult) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeResult 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 NodeResultMultiError, or +// nil if none found. +func (m *NodeResult) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeResult) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsExist // no validation rules for ClusterID // no validation rules for ClusterName + if len(errors) > 0 { + return NodeResultMultiError(errors) + } + return nil } +// NodeResultMultiError is an error wrapping multiple validation errors +// returned by NodeResult.ValidateAll() if the designated constraints aren't met. +type NodeResultMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeResultMultiError) 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 NodeResultMultiError) AllErrors() []error { return m } + // NodeResultValidationError is the validation error returned by // NodeResult.Validate if the designated constraints aren't met. type NodeResultValidationError struct { @@ -13236,22 +21957,61 @@ var _ interface { // Validate checks the field values on UnCordonNodeRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UnCordonNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UnCordonNodeRequest 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 +// UnCordonNodeRequestMultiError, or nil if none found. +func (m *UnCordonNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UnCordonNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetClusterID()) < 1 { - return UnCordonNodeRequestValidationError{ + err := UnCordonNodeRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UnCordonNodeRequestMultiError(errors) } return nil } +// UnCordonNodeRequestMultiError is an error wrapping multiple validation +// errors returned by UnCordonNodeRequest.ValidateAll() if the designated +// constraints aren't met. +type UnCordonNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UnCordonNodeRequestMultiError) 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 UnCordonNodeRequestMultiError) AllErrors() []error { return m } + // UnCordonNodeRequestValidationError is the validation error returned by // UnCordonNodeRequest.Validate if the designated constraints aren't met. type UnCordonNodeRequestValidationError struct { @@ -13310,19 +22070,52 @@ var _ interface { // Validate checks the field values on UnCordonNodeResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UnCordonNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UnCordonNodeResponse 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 +// UnCordonNodeResponseMultiError, or nil if none found. +func (m *UnCordonNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UnCordonNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UnCordonNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UnCordonNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UnCordonNodeResponseValidationError{ field: "Data", @@ -13332,9 +22125,30 @@ func (m *UnCordonNodeResponse) Validate() error { } } + if len(errors) > 0 { + return UnCordonNodeResponseMultiError(errors) + } + return nil } +// UnCordonNodeResponseMultiError is an error wrapping multiple validation +// errors returned by UnCordonNodeResponse.ValidateAll() if the designated +// constraints aren't met. +type UnCordonNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UnCordonNodeResponseMultiError) 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 UnCordonNodeResponseMultiError) AllErrors() []error { return m } + // UnCordonNodeResponseValidationError is the validation error returned by // UnCordonNodeResponse.Validate if the designated constraints aren't met. type UnCordonNodeResponseValidationError struct { @@ -13392,23 +22206,62 @@ var _ interface { } = UnCordonNodeResponseValidationError{} // Validate checks the field values on CordonNodeRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *CordonNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CordonNodeRequest 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 +// CordonNodeRequestMultiError, or nil if none found. +func (m *CordonNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CordonNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetClusterID()) < 1 { - return CordonNodeRequestValidationError{ + err := CordonNodeRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return CordonNodeRequestMultiError(errors) } return nil } +// CordonNodeRequestMultiError is an error wrapping multiple validation errors +// returned by CordonNodeRequest.ValidateAll() if the designated constraints +// aren't met. +type CordonNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CordonNodeRequestMultiError) 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 CordonNodeRequestMultiError) AllErrors() []error { return m } + // CordonNodeRequestValidationError is the validation error returned by // CordonNodeRequest.Validate if the designated constraints aren't met. type CordonNodeRequestValidationError struct { @@ -13467,19 +22320,52 @@ var _ interface { // Validate checks the field values on CordonNodeResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CordonNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CordonNodeResponse 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 +// CordonNodeResponseMultiError, or nil if none found. +func (m *CordonNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CordonNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CordonNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CordonNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CordonNodeResponseValidationError{ field: "Data", @@ -13489,9 +22375,30 @@ func (m *CordonNodeResponse) Validate() error { } } + if len(errors) > 0 { + return CordonNodeResponseMultiError(errors) + } + return nil } +// CordonNodeResponseMultiError is an error wrapping multiple validation errors +// returned by CordonNodeResponse.ValidateAll() if the designated constraints +// aren't met. +type CordonNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CordonNodeResponseMultiError) 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 CordonNodeResponseMultiError) AllErrors() []error { return m } + // CordonNodeResponseValidationError is the validation error returned by // CordonNodeResponse.Validate if the designated constraints aren't met. type CordonNodeResponseValidationError struct { @@ -13549,25 +22456,47 @@ var _ interface { } = CordonNodeResponseValidationError{} // Validate checks the field values on UpdateNodeRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *UpdateNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeRequest 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 +// UpdateNodeRequestMultiError, or nil if none found. +func (m *UpdateNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := len(m.GetInnerIPs()); l < 1 || l > 100 { - return UpdateNodeRequestValidationError{ + err := UpdateNodeRequestValidationError{ field: "InnerIPs", reason: "value must contain between 1 and 100 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _UpdateNodeRequest_Status_InLookup[m.GetStatus()]; !ok { - return UpdateNodeRequestValidationError{ + err := UpdateNodeRequestValidationError{ field: "Status", reason: "value must be in list [INITIALIZATION RUNNING DELETING ADD-FAILURE REMOVE-FAILURE]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for NodeGroupID @@ -13575,15 +22504,40 @@ func (m *UpdateNodeRequest) Validate() error { // no validation rules for ClusterID if len(m.GetUpdater()) < 1 { - return UpdateNodeRequestValidationError{ + err := UpdateNodeRequestValidationError{ field: "Updater", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateNodeRequestMultiError(errors) } return nil } +// UpdateNodeRequestMultiError is an error wrapping multiple validation errors +// returned by UpdateNodeRequest.ValidateAll() if the designated constraints +// aren't met. +type UpdateNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeRequestMultiError) 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 UpdateNodeRequestMultiError) AllErrors() []error { return m } + // UpdateNodeRequestValidationError is the validation error returned by // UpdateNodeRequest.Validate if the designated constraints aren't met. type UpdateNodeRequestValidationError struct { @@ -13650,19 +22604,52 @@ var _UpdateNodeRequest_Status_InLookup = map[string]struct{}{ // Validate checks the field values on UpdateNodeResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeResponse 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 +// UpdateNodeResponseMultiError, or nil if none found. +func (m *UpdateNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeResponseValidationError{ field: "Data", @@ -13672,9 +22659,30 @@ func (m *UpdateNodeResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeResponseMultiError(errors) + } + return nil } +// UpdateNodeResponseMultiError is an error wrapping multiple validation errors +// returned by UpdateNodeResponse.ValidateAll() if the designated constraints +// aren't met. +type UpdateNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeResponseMultiError) 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 UpdateNodeResponseMultiError) AllErrors() []error { return m } + // UpdateNodeResponseValidationError is the validation error returned by // UpdateNodeResponse.Validate if the designated constraints aren't met. type UpdateNodeResponseValidationError struct { @@ -13732,15 +22740,50 @@ var _ interface { } = UpdateNodeResponseValidationError{} // Validate checks the field values on NodeStatus with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *NodeStatus) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeStatus 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 NodeStatusMultiError, or +// nil if none found. +func (m *NodeStatus) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeStatus) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return NodeStatusMultiError(errors) + } + return nil } +// NodeStatusMultiError is an error wrapping multiple validation errors +// returned by NodeStatus.ValidateAll() if the designated constraints aren't met. +type NodeStatusMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeStatusMultiError) 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 NodeStatusMultiError) AllErrors() []error { return m } + // NodeStatusValidationError is the validation error returned by // NodeStatus.Validate if the designated constraints aren't met. type NodeStatusValidationError struct { @@ -13797,15 +22840,48 @@ var _ interface { // Validate checks the field values on UpdateClusterModuleRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterModuleRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterModuleRequest 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 +// UpdateClusterModuleRequestMultiError, or nil if none found. +func (m *UpdateClusterModuleRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterModuleRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterModuleRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterModuleRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterModuleRequestValidationError{ field: "Module", @@ -13816,15 +22892,40 @@ func (m *UpdateClusterModuleRequest) Validate() error { } if len(m.GetOperator()) < 1 { - return UpdateClusterModuleRequestValidationError{ + err := UpdateClusterModuleRequestValidationError{ field: "Operator", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateClusterModuleRequestMultiError(errors) } return nil } +// UpdateClusterModuleRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateClusterModuleRequest.ValidateAll() if +// the designated constraints aren't met. +type UpdateClusterModuleRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterModuleRequestMultiError) 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 UpdateClusterModuleRequestMultiError) AllErrors() []error { return m } + // UpdateClusterModuleRequestValidationError is the validation error returned // by UpdateClusterModuleRequest.Validate if the designated constraints aren't met. type UpdateClusterModuleRequestValidationError struct { @@ -13883,19 +22984,52 @@ var _ interface { // Validate checks the field values on UpdateClusterModuleResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterModuleResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterModuleResponse 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 +// UpdateClusterModuleResponseMultiError, or nil if none found. +func (m *UpdateClusterModuleResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterModuleResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateClusterModuleResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateClusterModuleResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateClusterModuleResponseValidationError{ field: "Data", @@ -13905,9 +23039,30 @@ func (m *UpdateClusterModuleResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateClusterModuleResponseMultiError(errors) + } + return nil } +// UpdateClusterModuleResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateClusterModuleResponse.ValidateAll() if +// the designated constraints aren't met. +type UpdateClusterModuleResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterModuleResponseMultiError) 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 UpdateClusterModuleResponseMultiError) AllErrors() []error { return m } + // UpdateClusterModuleResponseValidationError is the validation error returned // by UpdateClusterModuleResponse.Validate if the designated constraints // aren't met. @@ -13967,23 +23122,60 @@ var _ interface { // Validate checks the field values on RecordNodeInfoRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RecordNodeInfoRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RecordNodeInfoRequest 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 +// RecordNodeInfoRequestMultiError, or nil if none found. +func (m *RecordNodeInfoRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *RecordNodeInfoRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := len(m.GetNodes()); l < 1 || l > 1000 { - return RecordNodeInfoRequestValidationError{ + err := RecordNodeInfoRequestValidationError{ field: "Nodes", reason: "value must contain between 1 and 1000 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetNodes() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RecordNodeInfoRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RecordNodeInfoRequestValidationError{ + field: fmt.Sprintf("Nodes[%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 RecordNodeInfoRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), @@ -13995,9 +23187,30 @@ func (m *RecordNodeInfoRequest) Validate() error { } + if len(errors) > 0 { + return RecordNodeInfoRequestMultiError(errors) + } + return nil } +// RecordNodeInfoRequestMultiError is an error wrapping multiple validation +// errors returned by RecordNodeInfoRequest.ValidateAll() if the designated +// constraints aren't met. +type RecordNodeInfoRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RecordNodeInfoRequestMultiError) 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 RecordNodeInfoRequestMultiError) AllErrors() []error { return m } + // RecordNodeInfoRequestValidationError is the validation error returned by // RecordNodeInfoRequest.Validate if the designated constraints aren't met. type RecordNodeInfoRequestValidationError struct { @@ -14055,25 +23268,64 @@ var _ interface { } = RecordNodeInfoRequestValidationError{} // Validate checks the field values on GetNodeRequest with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *GetNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeRequest 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 GetNodeRequestMultiError, +// or nil if none found. +func (m *GetNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if ip := net.ParseIP(m.GetInnerIP()); ip == nil || ip.To4() == nil { - return GetNodeRequestValidationError{ + err := GetNodeRequestValidationError{ field: "InnerIP", reason: "value must be a valid IPv4 address", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ShowPwd + if len(errors) > 0 { + return GetNodeRequestMultiError(errors) + } + return nil } +// GetNodeRequestMultiError is an error wrapping multiple validation errors +// returned by GetNodeRequest.ValidateAll() if the designated constraints +// aren't met. +type GetNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeRequestMultiError) 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 GetNodeRequestMultiError) AllErrors() []error { return m } + // GetNodeRequestValidationError is the validation error returned by // GetNodeRequest.Validate if the designated constraints aren't met. type GetNodeRequestValidationError struct { @@ -14129,13 +23381,27 @@ var _ interface { } = GetNodeRequestValidationError{} // Validate checks the field values on GetNodeResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *GetNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeResponse 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 +// GetNodeResponseMultiError, or nil if none found. +func (m *GetNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -14145,7 +23411,26 @@ func (m *GetNodeResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeResponseValidationError{ + field: fmt.Sprintf("Data[%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 GetNodeResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -14157,9 +23442,30 @@ func (m *GetNodeResponse) Validate() error { } + if len(errors) > 0 { + return GetNodeResponseMultiError(errors) + } + return nil } +// GetNodeResponseMultiError is an error wrapping multiple validation errors +// returned by GetNodeResponse.ValidateAll() if the designated constraints +// aren't met. +type GetNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeResponseMultiError) 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 GetNodeResponseMultiError) AllErrors() []error { return m } + // GetNodeResponseValidationError is the validation error returned by // GetNodeResponse.Validate if the designated constraints aren't met. type GetNodeResponseValidationError struct { @@ -14216,22 +23522,61 @@ var _ interface { // Validate checks the field values on GetNodeInfoRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeInfoRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeInfoRequest 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 +// GetNodeInfoRequestMultiError, or nil if none found. +func (m *GetNodeInfoRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeInfoRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if ip := net.ParseIP(m.GetInnerIP()); ip == nil || ip.To4() == nil { - return GetNodeInfoRequestValidationError{ + err := GetNodeInfoRequestValidationError{ field: "InnerIP", reason: "value must be a valid IPv4 address", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetNodeInfoRequestMultiError(errors) } return nil } +// GetNodeInfoRequestMultiError is an error wrapping multiple validation errors +// returned by GetNodeInfoRequest.ValidateAll() if the designated constraints +// aren't met. +type GetNodeInfoRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeInfoRequestMultiError) 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 GetNodeInfoRequestMultiError) AllErrors() []error { return m } + // GetNodeInfoRequestValidationError is the validation error returned by // GetNodeInfoRequest.Validate if the designated constraints aren't met. type GetNodeInfoRequestValidationError struct { @@ -14290,19 +23635,52 @@ var _ interface { // Validate checks the field values on GetNodeInfoResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeInfoResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeInfoResponse 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 +// GetNodeInfoResponseMultiError, or nil if none found. +func (m *GetNodeInfoResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeInfoResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeInfoResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeInfoResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeInfoResponseValidationError{ field: "Data", @@ -14312,9 +23690,30 @@ func (m *GetNodeInfoResponse) Validate() error { } } + if len(errors) > 0 { + return GetNodeInfoResponseMultiError(errors) + } + return nil } +// GetNodeInfoResponseMultiError is an error wrapping multiple validation +// errors returned by GetNodeInfoResponse.ValidateAll() if the designated +// constraints aren't met. +type GetNodeInfoResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeInfoResponseMultiError) 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 GetNodeInfoResponseMultiError) AllErrors() []error { return m } + // GetNodeInfoResponseValidationError is the validation error returned by // GetNodeInfoResponse.Validate if the designated constraints aren't met. type GetNodeInfoResponseValidationError struct { @@ -14372,12 +23771,27 @@ var _ interface { } = GetNodeInfoResponseValidationError{} // Validate checks the field values on NodeConfig with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *NodeConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeConfig 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 NodeConfigMultiError, or +// nil if none found. +func (m *NodeConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeConfig) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for InstanceType // no validation rules for CPU @@ -14386,9 +23800,29 @@ func (m *NodeConfig) Validate() error { // no validation rules for GPU + if len(errors) > 0 { + return NodeConfigMultiError(errors) + } + return nil } +// NodeConfigMultiError is an error wrapping multiple validation errors +// returned by NodeConfig.ValidateAll() if the designated constraints aren't met. +type NodeConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeConfigMultiError) 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 NodeConfigMultiError) AllErrors() []error { return m } + // NodeConfigValidationError is the validation error returned by // NodeConfig.Validate if the designated constraints aren't met. type NodeConfigValidationError struct { @@ -14444,12 +23878,27 @@ var _ interface { } = NodeConfigValidationError{} // Validate checks the field values on NodeInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *NodeInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeInfo 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 NodeInfoMultiError, or nil +// if none found. +func (m *NodeInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeName // no validation rules for NodeType @@ -14468,7 +23917,26 @@ func (m *NodeInfo) Validate() error { // no validation rules for Status - if v, ok := interface{}(m.GetInstanceConfig()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetInstanceConfig()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "InstanceConfig", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "InstanceConfig", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetInstanceConfig()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeInfoValidationError{ field: "InstanceConfig", @@ -14478,7 +23946,26 @@ func (m *NodeInfo) Validate() error { } } - if v, ok := interface{}(m.GetZoneInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetZoneInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "ZoneInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "ZoneInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetZoneInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeInfoValidationError{ field: "ZoneInfo", @@ -14488,7 +23975,26 @@ func (m *NodeInfo) Validate() error { } } - if v, ok := interface{}(m.GetGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "Group", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "Group", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeInfoValidationError{ field: "Group", @@ -14498,7 +24004,26 @@ func (m *NodeInfo) Validate() error { } } - if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeInfoValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NodeInfoValidationError{ field: "NodeTemplate", @@ -14508,9 +24033,29 @@ func (m *NodeInfo) Validate() error { } } + if len(errors) > 0 { + return NodeInfoMultiError(errors) + } + return nil } +// NodeInfoMultiError is an error wrapping multiple validation errors returned +// by NodeInfo.ValidateAll() if the designated constraints aren't met. +type NodeInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeInfoMultiError) 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 NodeInfoMultiError) AllErrors() []error { return m } + // NodeInfoValidationError is the validation error returned by // NodeInfo.Validate if the designated constraints aren't met. type NodeInfoValidationError struct { @@ -14567,17 +24112,52 @@ var _ interface { // Validate checks the field values on ListCommonClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCommonClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCommonClusterReq 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 +// ListCommonClusterReqMultiError, or nil if none found. +func (m *ListCommonClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCommonClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ShowVCluster + if len(errors) > 0 { + return ListCommonClusterReqMultiError(errors) + } + return nil } +// ListCommonClusterReqMultiError is an error wrapping multiple validation +// errors returned by ListCommonClusterReq.ValidateAll() if the designated +// constraints aren't met. +type ListCommonClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCommonClusterReqMultiError) 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 ListCommonClusterReqMultiError) AllErrors() []error { return m } + // ListCommonClusterReqValidationError is the validation error returned by // ListCommonClusterReq.Validate if the designated constraints aren't met. type ListCommonClusterReqValidationError struct { @@ -14636,12 +24216,26 @@ var _ interface { // Validate checks the field values on ListCommonClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCommonClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCommonClusterResp 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 +// ListCommonClusterRespMultiError, or nil if none found. +func (m *ListCommonClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCommonClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -14651,7 +24245,26 @@ func (m *ListCommonClusterResp) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCommonClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCommonClusterRespValidationError{ + field: fmt.Sprintf("Data[%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 ListCommonClusterRespValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -14663,7 +24276,26 @@ func (m *ListCommonClusterResp) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCommonClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCommonClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCommonClusterRespValidationError{ field: "WebAnnotations", @@ -14673,9 +24305,30 @@ func (m *ListCommonClusterResp) Validate() error { } } + if len(errors) > 0 { + return ListCommonClusterRespMultiError(errors) + } + return nil } +// ListCommonClusterRespMultiError is an error wrapping multiple validation +// errors returned by ListCommonClusterResp.ValidateAll() if the designated +// constraints aren't met. +type ListCommonClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCommonClusterRespMultiError) 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 ListCommonClusterRespMultiError) AllErrors() []error { return m } + // ListCommonClusterRespValidationError is the validation error returned by // ListCommonClusterResp.Validate if the designated constraints aren't met. type ListCommonClusterRespValidationError struct { @@ -14734,38 +24387,85 @@ var _ interface { // Validate checks the field values on ListProjectClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListProjectClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListProjectClusterReq 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 +// ListProjectClusterReqMultiError, or nil if none found. +func (m *ListProjectClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ListProjectClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetProjectID()) > 100 { - return ListProjectClusterReqValidationError{ + err := ListProjectClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return ListProjectClusterReqValidationError{ + err := ListProjectClusterReqValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProvider()) > 32 { - return ListProjectClusterReqValidationError{ + err := ListProjectClusterReqValidationError{ field: "Provider", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Operator + if len(errors) > 0 { + return ListProjectClusterReqMultiError(errors) + } + return nil } +// ListProjectClusterReqMultiError is an error wrapping multiple validation +// errors returned by ListProjectClusterReq.ValidateAll() if the designated +// constraints aren't met. +type ListProjectClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListProjectClusterReqMultiError) 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 ListProjectClusterReqMultiError) AllErrors() []error { return m } + // ListProjectClusterReqValidationError is the validation error returned by // ListProjectClusterReq.Validate if the designated constraints aren't met. type ListProjectClusterReqValidationError struct { @@ -14824,12 +24524,26 @@ var _ interface { // Validate checks the field values on ListProjectClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListProjectClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListProjectClusterResp 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 +// ListProjectClusterRespMultiError, or nil if none found. +func (m *ListProjectClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ListProjectClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -14839,7 +24553,26 @@ func (m *ListProjectClusterResp) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: fmt.Sprintf("Data[%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 ListProjectClusterRespValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -14851,24 +24584,72 @@ func (m *ListProjectClusterResp) Validate() error { } - for key, val := range m.GetClusterExtraInfo() { - _ = val + { + sorted_keys := make([]string, len(m.GetClusterExtraInfo())) + i := 0 + for key := range m.GetClusterExtraInfo() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetClusterExtraInfo()[key] + _ = val + + // no validation rules for ClusterExtraInfo[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListProjectClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ClusterExtraInfo[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListProjectClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return ListProjectClusterRespValidationError{ - field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + errors = append(errors, ListProjectClusterRespValidationError{ + field: "WebAnnotations", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListProjectClusterRespValidationError{ field: "WebAnnotations", @@ -14878,9 +24659,30 @@ func (m *ListProjectClusterResp) Validate() error { } } + if len(errors) > 0 { + return ListProjectClusterRespMultiError(errors) + } + return nil } +// ListProjectClusterRespMultiError is an error wrapping multiple validation +// errors returned by ListProjectClusterResp.ValidateAll() if the designated +// constraints aren't met. +type ListProjectClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListProjectClusterRespMultiError) 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 ListProjectClusterRespMultiError) AllErrors() []error { return m } + // ListProjectClusterRespValidationError is the validation error returned by // ListProjectClusterResp.Validate if the designated constraints aren't met. type ListProjectClusterRespValidationError struct { @@ -14938,53 +24740,91 @@ var _ interface { } = ListProjectClusterRespValidationError{} // Validate checks the field values on ListClusterReq with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *ListClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterReq 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 ListClusterReqMultiError, +// or nil if none found. +func (m *ListClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterName()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "ClusterName", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProvider()) > 32 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Provider", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetVpcID()) > 32 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "VpcID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "ProjectID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetBusinessID()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "BusinessID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Environment @@ -14998,33 +24838,49 @@ func (m *ListClusterReq) Validate() error { // no validation rules for FederationClusterID if _, ok := _ListClusterReq_Status_InLookup[m.GetStatus()]; !ok { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Status", reason: "value must be in list [CREATING RUNNING DELETING FALURE INITIALIZATION DELETED ]", } + if !all { + return err + } + errors = append(errors, err) } if m.GetOffset() < 0 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Offset", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetLimit() > 1000 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "Limit", reason: "value must be less than or equal to 1000", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Operator if utf8.RuneCountInString(m.GetSystemID()) > 100 { - return ListClusterReqValidationError{ + err := ListClusterReqValidationError{ field: "SystemID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ExtraClusterID @@ -15035,9 +24891,30 @@ func (m *ListClusterReq) Validate() error { // no validation rules for All + if len(errors) > 0 { + return ListClusterReqMultiError(errors) + } + return nil } +// ListClusterReqMultiError is an error wrapping multiple validation errors +// returned by ListClusterReq.ValidateAll() if the designated constraints +// aren't met. +type ListClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterReqMultiError) 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 ListClusterReqMultiError) AllErrors() []error { return m } + // ListClusterReqValidationError is the validation error returned by // ListClusterReq.Validate if the designated constraints aren't met. type ListClusterReqValidationError struct { @@ -15103,13 +24980,27 @@ var _ListClusterReq_Status_InLookup = map[string]struct{}{ } // Validate checks the field values on ListClusterResp with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *ListClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterResp 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 +// ListClusterRespMultiError, or nil if none found. +func (m *ListClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -15119,7 +25010,26 @@ func (m *ListClusterResp) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: fmt.Sprintf("Data[%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 ListClusterRespValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -15131,24 +25041,72 @@ func (m *ListClusterResp) Validate() error { } - for key, val := range m.GetClusterExtraInfo() { - _ = val + { + sorted_keys := make([]string, len(m.GetClusterExtraInfo())) + i := 0 + for key := range m.GetClusterExtraInfo() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetClusterExtraInfo()[key] + _ = val + + // no validation rules for ClusterExtraInfo[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListClusterRespValidationError{ + field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ClusterExtraInfo[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterRespValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return ListClusterRespValidationError{ - field: fmt.Sprintf("ClusterExtraInfo[%v]", key), + errors = append(errors, ListClusterRespValidationError{ + field: "WebAnnotations", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListClusterRespValidationError{ field: "WebAnnotations", @@ -15158,9 +25116,30 @@ func (m *ListClusterResp) Validate() error { } } + if len(errors) > 0 { + return ListClusterRespMultiError(errors) + } + return nil } +// ListClusterRespMultiError is an error wrapping multiple validation errors +// returned by ListClusterResp.ValidateAll() if the designated constraints +// aren't met. +type ListClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterRespMultiError) 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 ListClusterRespMultiError) AllErrors() []error { return m } + // ListClusterRespValidationError is the validation error returned by // ListClusterResp.Validate if the designated constraints aren't met. type ListClusterRespValidationError struct { @@ -15216,21 +25195,56 @@ var _ interface { } = ListClusterRespValidationError{} // Validate checks the field values on ExtraInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *ExtraInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ExtraInfo 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 ExtraInfoMultiError, or nil +// if none found. +func (m *ExtraInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ExtraInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CanDeleted // no validation rules for ProviderType // no validation rules for AutoScale + if len(errors) > 0 { + return ExtraInfoMultiError(errors) + } + return nil } +// ExtraInfoMultiError is an error wrapping multiple validation errors returned +// by ExtraInfo.ValidateAll() if the designated constraints aren't met. +type ExtraInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ExtraInfoMultiError) 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 ExtraInfoMultiError) AllErrors() []error { return m } + // ExtraInfoValidationError is the validation error returned by // ExtraInfo.Validate if the designated constraints aren't met. type ExtraInfoValidationError struct { @@ -15286,33 +25300,97 @@ var _ interface { } = ExtraInfoValidationError{} // Validate checks the field values on WebAnnotations with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *WebAnnotations) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WebAnnotations 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 WebAnnotationsMultiError, +// or nil if none found. +func (m *WebAnnotations) ValidateAll() error { + return m.validate(true) +} + +func (m *WebAnnotations) validate(all bool) error { if m == nil { return nil } - for key, val := range m.GetPerms() { - _ = val + var errors []error - // no validation rules for Perms[key] + { + sorted_keys := make([]string, len(m.GetPerms())) + i := 0 + for key := range m.GetPerms() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetPerms()[key] + _ = val - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return WebAnnotationsValidationError{ - field: fmt.Sprintf("Perms[%v]", key), - reason: "embedded message failed validation", - cause: err, + // no validation rules for Perms[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, WebAnnotationsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, WebAnnotationsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return WebAnnotationsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } + } + } + if len(errors) > 0 { + return WebAnnotationsMultiError(errors) } return nil } +// WebAnnotationsMultiError is an error wrapping multiple validation errors +// returned by WebAnnotations.ValidateAll() if the designated constraints +// aren't met. +type WebAnnotationsMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WebAnnotationsMultiError) 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 WebAnnotationsMultiError) AllErrors() []error { return m } + // WebAnnotationsValidationError is the validation error returned by // WebAnnotations.Validate if the designated constraints aren't met. type WebAnnotationsValidationError struct { @@ -15368,14 +25446,47 @@ var _ interface { } = WebAnnotationsValidationError{} // Validate checks the field values on WebAnnotationsV2 with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *WebAnnotationsV2) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WebAnnotationsV2 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 +// WebAnnotationsV2MultiError, or nil if none found. +func (m *WebAnnotationsV2) ValidateAll() error { + return m.validate(true) +} + +func (m *WebAnnotationsV2) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetPerms()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetPerms()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, WebAnnotationsV2ValidationError{ + field: "Perms", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, WebAnnotationsV2ValidationError{ + field: "Perms", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetPerms()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return WebAnnotationsV2ValidationError{ field: "Perms", @@ -15385,9 +25496,30 @@ func (m *WebAnnotationsV2) Validate() error { } } + if len(errors) > 0 { + return WebAnnotationsV2MultiError(errors) + } + return nil } +// WebAnnotationsV2MultiError is an error wrapping multiple validation errors +// returned by WebAnnotationsV2.ValidateAll() if the designated constraints +// aren't met. +type WebAnnotationsV2MultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WebAnnotationsV2MultiError) 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 WebAnnotationsV2MultiError) AllErrors() []error { return m } + // WebAnnotationsV2ValidationError is the validation error returned by // WebAnnotationsV2.Validate if the designated constraints aren't met. type WebAnnotationsV2ValidationError struct { @@ -15444,38 +25576,68 @@ var _ interface { // Validate checks the field values on ListNodesInClusterRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInClusterRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInClusterRequest 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 +// ListNodesInClusterRequestMultiError, or nil if none found. +func (m *ListNodesInClusterRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInClusterRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) > 100 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "Region", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetVpcID()) > 32 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "VpcID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetNodeGroupID()) > 100 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "NodeGroupID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for InstanceType @@ -15483,24 +25645,53 @@ func (m *ListNodesInClusterRequest) Validate() error { // no validation rules for Status if m.GetOffset() < 0 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "Offset", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetLimit() > 5000 { - return ListNodesInClusterRequestValidationError{ + err := ListNodesInClusterRequestValidationError{ field: "Limit", reason: "value must be less than or equal to 5000", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ShowPwd + if len(errors) > 0 { + return ListNodesInClusterRequestMultiError(errors) + } + return nil } +// ListNodesInClusterRequestMultiError is an error wrapping multiple validation +// errors returned by ListNodesInClusterRequest.ValidateAll() if the +// designated constraints aren't met. +type ListNodesInClusterRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInClusterRequestMultiError) 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 ListNodesInClusterRequestMultiError) AllErrors() []error { return m } + // ListNodesInClusterRequestValidationError is the validation error returned by // ListNodesInClusterRequest.Validate if the designated constraints aren't met. type ListNodesInClusterRequestValidationError struct { @@ -15559,12 +25750,26 @@ var _ interface { // Validate checks the field values on ListNodesInClusterResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInClusterResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInClusterResponse 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 +// ListNodesInClusterResponseMultiError, or nil if none found. +func (m *ListNodesInClusterResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInClusterResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -15574,7 +25779,26 @@ func (m *ListNodesInClusterResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInClusterResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListNodesInClusterResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -15586,7 +25810,26 @@ func (m *ListNodesInClusterResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInClusterResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInClusterResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInClusterResponseValidationError{ field: "WebAnnotations", @@ -15596,9 +25839,30 @@ func (m *ListNodesInClusterResponse) Validate() error { } } + if len(errors) > 0 { + return ListNodesInClusterResponseMultiError(errors) + } + return nil } +// ListNodesInClusterResponseMultiError is an error wrapping multiple +// validation errors returned by ListNodesInClusterResponse.ValidateAll() if +// the designated constraints aren't met. +type ListNodesInClusterResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInClusterResponseMultiError) 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 ListNodesInClusterResponseMultiError) AllErrors() []error { return m } + // ListNodesInClusterResponseValidationError is the validation error returned // by ListNodesInClusterResponse.Validate if the designated constraints aren't met. type ListNodesInClusterResponseValidationError struct { @@ -15656,13 +25920,27 @@ var _ interface { } = ListNodesInClusterResponseValidationError{} // Validate checks the field values on ClusterNode with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *ClusterNode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterNode 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 ClusterNodeMultiError, or +// nil if none found. +func (m *ClusterNode) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterNode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeID // no validation rules for InnerIP @@ -15698,7 +25976,26 @@ func (m *ClusterNode) Validate() error { for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ClusterNodeValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ClusterNodeValidationError{ + field: fmt.Sprintf("Taints[%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 ClusterNodeValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -15736,9 +26033,29 @@ func (m *ClusterNode) Validate() error { // no validation rules for FailedReason + if len(errors) > 0 { + return ClusterNodeMultiError(errors) + } + return nil } +// ClusterNodeMultiError is an error wrapping multiple validation errors +// returned by ClusterNode.ValidateAll() if the designated constraints aren't met. +type ClusterNodeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterNodeMultiError) 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 ClusterNodeMultiError) AllErrors() []error { return m } + // ClusterNodeValidationError is the validation error returned by // ClusterNode.Validate if the designated constraints aren't met. type ClusterNodeValidationError struct { @@ -15795,22 +26112,61 @@ var _ interface { // Validate checks the field values on GetClustersMetaDataRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetClustersMetaDataRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClustersMetaDataRequest 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 +// GetClustersMetaDataRequestMultiError, or nil if none found. +func (m *GetClustersMetaDataRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClustersMetaDataRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := len(m.GetClusters()); l < 1 || l > 1000 { - return GetClustersMetaDataRequestValidationError{ + err := GetClustersMetaDataRequestValidationError{ field: "Clusters", reason: "value must contain between 1 and 1000 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetClustersMetaDataRequestMultiError(errors) } return nil } +// GetClustersMetaDataRequestMultiError is an error wrapping multiple +// validation errors returned by GetClustersMetaDataRequest.ValidateAll() if +// the designated constraints aren't met. +type GetClustersMetaDataRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClustersMetaDataRequestMultiError) 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 GetClustersMetaDataRequestMultiError) AllErrors() []error { return m } + // GetClustersMetaDataRequestValidationError is the validation error returned // by GetClustersMetaDataRequest.Validate if the designated constraints aren't met. type GetClustersMetaDataRequestValidationError struct { @@ -15869,12 +26225,26 @@ var _ interface { // Validate checks the field values on GetClustersMetaDataResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetClustersMetaDataResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClustersMetaDataResponse 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 +// GetClustersMetaDataResponseMultiError, or nil if none found. +func (m *GetClustersMetaDataResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClustersMetaDataResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -15884,7 +26254,26 @@ func (m *GetClustersMetaDataResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClustersMetaDataResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClustersMetaDataResponseValidationError{ + field: fmt.Sprintf("Data[%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 GetClustersMetaDataResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -15896,7 +26285,26 @@ func (m *GetClustersMetaDataResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClustersMetaDataResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClustersMetaDataResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetClustersMetaDataResponseValidationError{ field: "WebAnnotations", @@ -15906,9 +26314,30 @@ func (m *GetClustersMetaDataResponse) Validate() error { } } + if len(errors) > 0 { + return GetClustersMetaDataResponseMultiError(errors) + } + return nil } +// GetClustersMetaDataResponseMultiError is an error wrapping multiple +// validation errors returned by GetClustersMetaDataResponse.ValidateAll() if +// the designated constraints aren't met. +type GetClustersMetaDataResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClustersMetaDataResponseMultiError) 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 GetClustersMetaDataResponseMultiError) AllErrors() []error { return m } + // GetClustersMetaDataResponseValidationError is the validation error returned // by GetClustersMetaDataResponse.Validate if the designated constraints // aren't met. @@ -15967,20 +26396,54 @@ var _ interface { } = GetClustersMetaDataResponseValidationError{} // Validate checks the field values on ClusterMeta with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *ClusterMeta) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterMeta 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 ClusterMetaMultiError, or +// nil if none found. +func (m *ClusterMeta) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterMeta) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterId // no validation rules for ClusterNodeNum + if len(errors) > 0 { + return ClusterMetaMultiError(errors) + } + return nil } +// ClusterMetaMultiError is an error wrapping multiple validation errors +// returned by ClusterMeta.ValidateAll() if the designated constraints aren't met. +type ClusterMetaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterMetaMultiError) 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 ClusterMetaMultiError) AllErrors() []error { return m } + // ClusterMetaValidationError is the validation error returned by // ClusterMeta.Validate if the designated constraints aren't met. type ClusterMetaValidationError struct { @@ -16037,22 +26500,61 @@ var _ interface { // Validate checks the field values on ListMastersInClusterRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListMastersInClusterRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListMastersInClusterRequest 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 +// ListMastersInClusterRequestMultiError, or nil if none found. +func (m *ListMastersInClusterRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListMastersInClusterRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return ListMastersInClusterRequestValidationError{ + err := ListMastersInClusterRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListMastersInClusterRequestMultiError(errors) } return nil } +// ListMastersInClusterRequestMultiError is an error wrapping multiple +// validation errors returned by ListMastersInClusterRequest.ValidateAll() if +// the designated constraints aren't met. +type ListMastersInClusterRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListMastersInClusterRequestMultiError) 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 ListMastersInClusterRequestMultiError) AllErrors() []error { return m } + // ListMastersInClusterRequestValidationError is the validation error returned // by ListMastersInClusterRequest.Validate if the designated constraints // aren't met. @@ -16112,12 +26614,26 @@ var _ interface { // Validate checks the field values on ListMastersInClusterResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListMastersInClusterResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListMastersInClusterResponse 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 +// ListMastersInClusterResponseMultiError, or nil if none found. +func (m *ListMastersInClusterResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListMastersInClusterResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -16127,7 +26643,26 @@ func (m *ListMastersInClusterResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListMastersInClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListMastersInClusterResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListMastersInClusterResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -16139,7 +26674,26 @@ func (m *ListMastersInClusterResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListMastersInClusterResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListMastersInClusterResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListMastersInClusterResponseValidationError{ field: "WebAnnotations", @@ -16149,9 +26703,30 @@ func (m *ListMastersInClusterResponse) Validate() error { } } + if len(errors) > 0 { + return ListMastersInClusterResponseMultiError(errors) + } + return nil } +// ListMastersInClusterResponseMultiError is an error wrapping multiple +// validation errors returned by ListMastersInClusterResponse.ValidateAll() if +// the designated constraints aren't met. +type ListMastersInClusterResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListMastersInClusterResponseMultiError) 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 ListMastersInClusterResponseMultiError) AllErrors() []error { return m } + // ListMastersInClusterResponseValidationError is the validation error returned // by ListMastersInClusterResponse.Validate if the designated constraints // aren't met. @@ -16211,22 +26786,61 @@ var _ interface { // Validate checks the field values on GetClusterCredentialReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetClusterCredentialReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClusterCredentialReq 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 +// GetClusterCredentialReqMultiError, or nil if none found. +func (m *GetClusterCredentialReq) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClusterCredentialReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetServerKey()); l < 1 || l > 100 { - return GetClusterCredentialReqValidationError{ + err := GetClusterCredentialReqValidationError{ field: "ServerKey", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetClusterCredentialReqMultiError(errors) } return nil } +// GetClusterCredentialReqMultiError is an error wrapping multiple validation +// errors returned by GetClusterCredentialReq.ValidateAll() if the designated +// constraints aren't met. +type GetClusterCredentialReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClusterCredentialReqMultiError) 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 GetClusterCredentialReqMultiError) AllErrors() []error { return m } + // GetClusterCredentialReqValidationError is the validation error returned by // GetClusterCredentialReq.Validate if the designated constraints aren't met. type GetClusterCredentialReqValidationError struct { @@ -16285,19 +26899,52 @@ var _ interface { // Validate checks the field values on GetClusterCredentialResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetClusterCredentialResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetClusterCredentialResp 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 +// GetClusterCredentialRespMultiError, or nil if none found. +func (m *GetClusterCredentialResp) ValidateAll() error { + return m.validate(true) +} + +func (m *GetClusterCredentialResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetClusterCredentialRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetClusterCredentialRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetClusterCredentialRespValidationError{ field: "Data", @@ -16307,9 +26954,30 @@ func (m *GetClusterCredentialResp) Validate() error { } } + if len(errors) > 0 { + return GetClusterCredentialRespMultiError(errors) + } + return nil } +// GetClusterCredentialRespMultiError is an error wrapping multiple validation +// errors returned by GetClusterCredentialResp.ValidateAll() if the designated +// constraints aren't met. +type GetClusterCredentialRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetClusterCredentialRespMultiError) 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 GetClusterCredentialRespMultiError) AllErrors() []error { return m } + // GetClusterCredentialRespValidationError is the validation error returned by // GetClusterCredentialResp.Validate if the designated constraints aren't met. type GetClusterCredentialRespValidationError struct { @@ -16368,78 +27036,149 @@ var _ interface { // Validate checks the field values on UpdateClusterCredentialReq with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterCredentialReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterCredentialReq 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 +// UpdateClusterCredentialReqMultiError, or nil if none found. +func (m *UpdateClusterCredentialReq) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterCredentialReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetServerKey()); l < 1 || l > 100 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ServerKey", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetClientModule()); l < 1 || l > 100 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClientModule", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetServerAddress()); l < 1 || l > 2048 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ServerAddress", reason: "value length must be between 1 and 2048 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetCaCertData()) > 4096 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "CaCertData", reason: "value length must be at most 4096 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetUserToken()) > 2048 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "UserToken", reason: "value length must be at most 2048 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClusterDomain()) > 2048 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClusterDomain", reason: "value length must be at most 2048 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClientCert()) > 4096 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClientCert", reason: "value length must be at most 4096 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClientKey()) > 4096 { - return UpdateClusterCredentialReqValidationError{ + err := UpdateClusterCredentialReqValidationError{ field: "ClientKey", reason: "value length must be at most 4096 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateClusterCredentialReqMultiError(errors) } return nil } +// UpdateClusterCredentialReqMultiError is an error wrapping multiple +// validation errors returned by UpdateClusterCredentialReq.ValidateAll() if +// the designated constraints aren't met. +type UpdateClusterCredentialReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterCredentialReqMultiError) 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 UpdateClusterCredentialReqMultiError) AllErrors() []error { return m } + // UpdateClusterCredentialReqValidationError is the validation error returned // by UpdateClusterCredentialReq.Validate if the designated constraints aren't met. type UpdateClusterCredentialReqValidationError struct { @@ -16498,21 +27237,56 @@ var _ interface { // Validate checks the field values on UpdateClusterCredentialResp with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateClusterCredentialResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateClusterCredentialResp 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 +// UpdateClusterCredentialRespMultiError, or nil if none found. +func (m *UpdateClusterCredentialResp) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateClusterCredentialResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return UpdateClusterCredentialRespMultiError(errors) + } + return nil } +// UpdateClusterCredentialRespMultiError is an error wrapping multiple +// validation errors returned by UpdateClusterCredentialResp.ValidateAll() if +// the designated constraints aren't met. +type UpdateClusterCredentialRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateClusterCredentialRespMultiError) 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 UpdateClusterCredentialRespMultiError) AllErrors() []error { return m } + // UpdateClusterCredentialRespValidationError is the validation error returned // by UpdateClusterCredentialResp.Validate if the designated constraints // aren't met. @@ -16572,22 +27346,61 @@ var _ interface { // Validate checks the field values on DeleteClusterCredentialReq with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteClusterCredentialReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteClusterCredentialReq 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 +// DeleteClusterCredentialReqMultiError, or nil if none found. +func (m *DeleteClusterCredentialReq) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteClusterCredentialReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetServerKey()); l < 2 || l > 100 { - return DeleteClusterCredentialReqValidationError{ + err := DeleteClusterCredentialReqValidationError{ field: "ServerKey", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DeleteClusterCredentialReqMultiError(errors) } return nil } +// DeleteClusterCredentialReqMultiError is an error wrapping multiple +// validation errors returned by DeleteClusterCredentialReq.ValidateAll() if +// the designated constraints aren't met. +type DeleteClusterCredentialReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteClusterCredentialReqMultiError) 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 DeleteClusterCredentialReqMultiError) AllErrors() []error { return m } + // DeleteClusterCredentialReqValidationError is the validation error returned // by DeleteClusterCredentialReq.Validate if the designated constraints aren't met. type DeleteClusterCredentialReqValidationError struct { @@ -16646,21 +27459,56 @@ var _ interface { // Validate checks the field values on DeleteClusterCredentialResp with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteClusterCredentialResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteClusterCredentialResp 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 +// DeleteClusterCredentialRespMultiError, or nil if none found. +func (m *DeleteClusterCredentialResp) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteClusterCredentialResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return DeleteClusterCredentialRespMultiError(errors) + } + return nil } +// DeleteClusterCredentialRespMultiError is an error wrapping multiple +// validation errors returned by DeleteClusterCredentialResp.ValidateAll() if +// the designated constraints aren't met. +type DeleteClusterCredentialRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteClusterCredentialRespMultiError) 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 DeleteClusterCredentialRespMultiError) AllErrors() []error { return m } + // DeleteClusterCredentialRespValidationError is the validation error returned // by DeleteClusterCredentialResp.Validate if the designated constraints // aren't met. @@ -16720,57 +27568,116 @@ var _ interface { // Validate checks the field values on ListClusterCredentialReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListClusterCredentialReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterCredentialReq 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 +// ListClusterCredentialReqMultiError, or nil if none found. +func (m *ListClusterCredentialReq) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterCredentialReq) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetServerKey()) > 100 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "ServerKey", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClientMode()) > 100 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "ClientMode", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetConnectMode()) > 100 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "ConnectMode", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if m.GetOffset() < 0 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "Offset", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetLimit() > 1000 { - return ListClusterCredentialReqValidationError{ + err := ListClusterCredentialReqValidationError{ field: "Limit", reason: "value must be less than or equal to 1000", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListClusterCredentialReqMultiError(errors) } return nil } +// ListClusterCredentialReqMultiError is an error wrapping multiple validation +// errors returned by ListClusterCredentialReq.ValidateAll() if the designated +// constraints aren't met. +type ListClusterCredentialReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterCredentialReqMultiError) 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 ListClusterCredentialReqMultiError) AllErrors() []error { return m } + // ListClusterCredentialReqValidationError is the validation error returned by // ListClusterCredentialReq.Validate if the designated constraints aren't met. type ListClusterCredentialReqValidationError struct { @@ -16829,12 +27736,26 @@ var _ interface { // Validate checks the field values on ListClusterCredentialResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListClusterCredentialResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterCredentialResp 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 +// ListClusterCredentialRespMultiError, or nil if none found. +func (m *ListClusterCredentialResp) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterCredentialResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -16844,7 +27765,26 @@ func (m *ListClusterCredentialResp) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterCredentialRespValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterCredentialRespValidationError{ + field: fmt.Sprintf("Data[%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 ListClusterCredentialRespValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -16856,9 +27796,30 @@ func (m *ListClusterCredentialResp) Validate() error { } + if len(errors) > 0 { + return ListClusterCredentialRespMultiError(errors) + } + return nil } +// ListClusterCredentialRespMultiError is an error wrapping multiple validation +// errors returned by ListClusterCredentialResp.ValidateAll() if the +// designated constraints aren't met. +type ListClusterCredentialRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterCredentialRespMultiError) 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 ListClusterCredentialRespMultiError) AllErrors() []error { return m } + // ListClusterCredentialRespValidationError is the validation error returned by // ListClusterCredentialResp.Validate if the designated constraints aren't met. type ListClusterCredentialRespValidationError struct { @@ -16917,15 +27878,50 @@ var _ interface { // Validate checks the field values on InitFederationClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InitFederationClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InitFederationClusterReq 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 +// InitFederationClusterReqMultiError, or nil if none found. +func (m *InitFederationClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *InitFederationClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return InitFederationClusterReqMultiError(errors) + } + return nil } +// InitFederationClusterReqMultiError is an error wrapping multiple validation +// errors returned by InitFederationClusterReq.ValidateAll() if the designated +// constraints aren't met. +type InitFederationClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InitFederationClusterReqMultiError) 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 InitFederationClusterReqMultiError) AllErrors() []error { return m } + // InitFederationClusterReqValidationError is the validation error returned by // InitFederationClusterReq.Validate if the designated constraints aren't met. type InitFederationClusterReqValidationError struct { @@ -16984,15 +27980,50 @@ var _ interface { // Validate checks the field values on InitFederationClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *InitFederationClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InitFederationClusterResp 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 +// InitFederationClusterRespMultiError, or nil if none found. +func (m *InitFederationClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *InitFederationClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return InitFederationClusterRespMultiError(errors) + } + return nil } +// InitFederationClusterRespMultiError is an error wrapping multiple validation +// errors returned by InitFederationClusterResp.ValidateAll() if the +// designated constraints aren't met. +type InitFederationClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InitFederationClusterRespMultiError) 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 InitFederationClusterRespMultiError) AllErrors() []error { return m } + // InitFederationClusterRespValidationError is the validation error returned by // InitFederationClusterResp.Validate if the designated constraints aren't met. type InitFederationClusterRespValidationError struct { @@ -17051,19 +28082,54 @@ var _ interface { // Validate checks the field values on AddFederatedClusterReq with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *AddFederatedClusterReq) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddFederatedClusterReq 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 +// AddFederatedClusterReqMultiError, or nil if none found. +func (m *AddFederatedClusterReq) ValidateAll() error { + return m.validate(true) +} + +func (m *AddFederatedClusterReq) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for FederationClusterID // no validation rules for ClusterID + if len(errors) > 0 { + return AddFederatedClusterReqMultiError(errors) + } + return nil } +// AddFederatedClusterReqMultiError is an error wrapping multiple validation +// errors returned by AddFederatedClusterReq.ValidateAll() if the designated +// constraints aren't met. +type AddFederatedClusterReqMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddFederatedClusterReqMultiError) 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 AddFederatedClusterReqMultiError) AllErrors() []error { return m } + // AddFederatedClusterReqValidationError is the validation error returned by // AddFederatedClusterReq.Validate if the designated constraints aren't met. type AddFederatedClusterReqValidationError struct { @@ -17122,21 +28188,56 @@ var _ interface { // Validate checks the field values on AddFederatedClusterResp with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *AddFederatedClusterResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddFederatedClusterResp 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 +// AddFederatedClusterRespMultiError, or nil if none found. +func (m *AddFederatedClusterResp) ValidateAll() error { + return m.validate(true) +} + +func (m *AddFederatedClusterResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return AddFederatedClusterRespMultiError(errors) + } + return nil } +// AddFederatedClusterRespMultiError is an error wrapping multiple validation +// errors returned by AddFederatedClusterResp.ValidateAll() if the designated +// constraints aren't met. +type AddFederatedClusterRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddFederatedClusterRespMultiError) 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 AddFederatedClusterRespMultiError) AllErrors() []error { return m } + // AddFederatedClusterRespValidationError is the validation error returned by // AddFederatedClusterResp.Validate if the designated constraints aren't met. type AddFederatedClusterRespValidationError struct { @@ -17195,70 +28296,173 @@ var _ interface { // Validate checks the field values on CreateCloudRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudRequest 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 +// CreateCloudRequestMultiError, or nil if none found. +func (m *CreateCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 20 { - return CreateCloudRequestValidationError{ + err := CreateCloudRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateCloudRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return CreateCloudRequestValidationError{ + err := CreateCloudRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetName()); l < 2 || l > 64 { - return CreateCloudRequestValidationError{ + err := CreateCloudRequestValidationError{ field: "Name", reason: "value length must be between 2 and 64 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Editable - for key, val := range m.GetOpsPlugins() { - _ = val - - // no validation rules for OpsPlugins[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CreateCloudRequestValidationError{ - field: fmt.Sprintf("OpsPlugins[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetOpsPlugins())) + i := 0 + for key := range m.GetOpsPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetOpsPlugins()[key] + _ = val + + // no validation rules for OpsPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraPlugins() { - _ = val + { + sorted_keys := make([]string, len(m.GetExtraPlugins())) + i := 0 + for key := range m.GetExtraPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraPlugins()[key] + _ = val + + // no validation rules for ExtraPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ExtraPlugins[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudCredential()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "CloudCredential", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return CreateCloudRequestValidationError{ - field: fmt.Sprintf("ExtraPlugins[%v]", key), + errors = append(errors, CreateCloudRequestValidationError{ + field: "CloudCredential", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "CloudCredential", @@ -17268,7 +28472,26 @@ func (m *CreateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetOsManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "OsManagement", @@ -17278,7 +28501,26 @@ func (m *CreateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "ClusterManagement", @@ -17288,7 +28530,26 @@ func (m *CreateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeGroupManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "NodeGroupManagement", @@ -17299,10 +28560,14 @@ func (m *CreateCloudRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateCloudRequestValidationError{ + err := CreateCloudRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for CloudProvider @@ -17315,7 +28580,26 @@ func (m *CreateCloudRequest) Validate() error { // no validation rules for Enable - if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "NetworkInfo", @@ -17325,7 +28609,26 @@ func (m *CreateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetConfInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudRequestValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateCloudRequestValidationError{ field: "ConfInfo", @@ -17337,9 +28640,30 @@ func (m *CreateCloudRequest) Validate() error { // no validation rules for PlatformInfo + if len(errors) > 0 { + return CreateCloudRequestMultiError(errors) + } + return nil } +// CreateCloudRequestMultiError is an error wrapping multiple validation errors +// returned by CreateCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type CreateCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudRequestMultiError) 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 CreateCloudRequestMultiError) AllErrors() []error { return m } + // CreateCloudRequestValidationError is the validation error returned by // CreateCloudRequest.Validate if the designated constraints aren't met. type CreateCloudRequestValidationError struct { @@ -17400,21 +28724,56 @@ var _CreateCloudRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on CreateCloudResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudResponse 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 +// CreateCloudResponseMultiError, or nil if none found. +func (m *CreateCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return CreateCloudResponseMultiError(errors) + } + return nil } +// CreateCloudResponseMultiError is an error wrapping multiple validation +// errors returned by CreateCloudResponse.ValidateAll() if the designated +// constraints aren't met. +type CreateCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudResponseMultiError) 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 CreateCloudResponseMultiError) AllErrors() []error { return m } + // CreateCloudResponseValidationError is the validation error returned by // CreateCloudResponse.Validate if the designated constraints aren't met. type CreateCloudResponseValidationError struct { @@ -17473,63 +28832,162 @@ var _ interface { // Validate checks the field values on UpdateCloudRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudRequest 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 +// UpdateCloudRequestMultiError, or nil if none found. +func (m *UpdateCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 1024 { - return UpdateCloudRequestValidationError{ + err := UpdateCloudRequestValidationError{ field: "CloudID", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetName()) > 1024 { - return UpdateCloudRequestValidationError{ + err := UpdateCloudRequestValidationError{ field: "Name", reason: "value length must be at most 1024 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Editable - for key, val := range m.GetOpsPlugins() { - _ = val - - // no validation rules for OpsPlugins[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UpdateCloudRequestValidationError{ - field: fmt.Sprintf("OpsPlugins[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetOpsPlugins())) + i := 0 + for key := range m.GetOpsPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetOpsPlugins()[key] + _ = val + + // no validation rules for OpsPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateCloudRequestValidationError{ + field: fmt.Sprintf("OpsPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } - for key, val := range m.GetExtraPlugins() { - _ = val + { + sorted_keys := make([]string, len(m.GetExtraPlugins())) + i := 0 + for key := range m.GetExtraPlugins() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetExtraPlugins()[key] + _ = val + + // no validation rules for ExtraPlugins[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateCloudRequestValidationError{ + field: fmt.Sprintf("ExtraPlugins[%v]", key), + reason: "embedded message failed validation", + cause: err, + } + } + } - // no validation rules for ExtraPlugins[key] + } + } - if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudCredential()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "CloudCredential", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: if err := v.Validate(); err != nil { - return UpdateCloudRequestValidationError{ - field: fmt.Sprintf("ExtraPlugins[%v]", key), + errors = append(errors, UpdateCloudRequestValidationError{ + field: "CloudCredential", reason: "embedded message failed validation", cause: err, - } + }) } } - - } - - if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetCloudCredential()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "CloudCredential", @@ -17539,7 +28997,26 @@ func (m *UpdateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetOsManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "OsManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetOsManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "OsManagement", @@ -17549,7 +29026,26 @@ func (m *UpdateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetClusterManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "ClusterManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetClusterManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "ClusterManagement", @@ -17559,7 +29055,26 @@ func (m *UpdateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeGroupManagement()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "NodeGroupManagement", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroupManagement()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "NodeGroupManagement", @@ -17570,10 +29085,14 @@ func (m *UpdateCloudRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return UpdateCloudRequestValidationError{ + err := UpdateCloudRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for CloudProvider @@ -17586,7 +29105,26 @@ func (m *UpdateCloudRequest) Validate() error { // no validation rules for Enable - if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNetworkInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "NetworkInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNetworkInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "NetworkInfo", @@ -17596,7 +29134,26 @@ func (m *UpdateCloudRequest) Validate() error { } } - if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetConfInfo()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudRequestValidationError{ + field: "ConfInfo", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConfInfo()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudRequestValidationError{ field: "ConfInfo", @@ -17608,9 +29165,30 @@ func (m *UpdateCloudRequest) Validate() error { // no validation rules for PlatformInfo + if len(errors) > 0 { + return UpdateCloudRequestMultiError(errors) + } + return nil } +// UpdateCloudRequestMultiError is an error wrapping multiple validation errors +// returned by UpdateCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type UpdateCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudRequestMultiError) 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 UpdateCloudRequestMultiError) AllErrors() []error { return m } + // UpdateCloudRequestValidationError is the validation error returned by // UpdateCloudRequest.Validate if the designated constraints aren't met. type UpdateCloudRequestValidationError struct { @@ -17669,19 +29247,52 @@ var _ interface { // Validate checks the field values on UpdateCloudResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudResponse 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 +// UpdateCloudResponseMultiError, or nil if none found. +func (m *UpdateCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateCloudResponseValidationError{ field: "Data", @@ -17691,9 +29302,30 @@ func (m *UpdateCloudResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateCloudResponseMultiError(errors) + } + return nil } +// UpdateCloudResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateCloudResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudResponseMultiError) 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 UpdateCloudResponseMultiError) AllErrors() []error { return m } + // UpdateCloudResponseValidationError is the validation error returned by // UpdateCloudResponse.Validate if the designated constraints aren't met. type UpdateCloudResponseValidationError struct { @@ -17752,31 +29384,74 @@ var _ interface { // Validate checks the field values on DeleteCloudRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudRequest 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 +// DeleteCloudRequestMultiError, or nil if none found. +func (m *DeleteCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 20 { - return DeleteCloudRequestValidationError{ + err := DeleteCloudRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteCloudRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return DeleteCloudRequestValidationError{ + err := DeleteCloudRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForce + if len(errors) > 0 { + return DeleteCloudRequestMultiError(errors) + } + return nil } +// DeleteCloudRequestMultiError is an error wrapping multiple validation errors +// returned by DeleteCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type DeleteCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudRequestMultiError) 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 DeleteCloudRequestMultiError) AllErrors() []error { return m } + // DeleteCloudRequestValidationError is the validation error returned by // DeleteCloudRequest.Validate if the designated constraints aren't met. type DeleteCloudRequestValidationError struct { @@ -17837,19 +29512,52 @@ var _DeleteCloudRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on DeleteCloudResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudResponse 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 +// DeleteCloudResponseMultiError, or nil if none found. +func (m *DeleteCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteCloudResponseValidationError{ field: "Data", @@ -17859,9 +29567,30 @@ func (m *DeleteCloudResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteCloudResponseMultiError(errors) + } + return nil } +// DeleteCloudResponseMultiError is an error wrapping multiple validation +// errors returned by DeleteCloudResponse.ValidateAll() if the designated +// constraints aren't met. +type DeleteCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudResponseMultiError) 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 DeleteCloudResponseMultiError) AllErrors() []error { return m } + // DeleteCloudResponseValidationError is the validation error returned by // DeleteCloudResponse.Validate if the designated constraints aren't met. type DeleteCloudResponseValidationError struct { @@ -17919,30 +29648,73 @@ var _ interface { } = DeleteCloudResponseValidationError{} // Validate checks the field values on GetCloudRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *GetCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRequest 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 +// GetCloudRequestMultiError, or nil if none found. +func (m *GetCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetCloudID()); l < 2 || l > 20 { - return GetCloudRequestValidationError{ + err := GetCloudRequestValidationError{ field: "CloudID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_GetCloudRequest_CloudID_Pattern.MatchString(m.GetCloudID()) { - return GetCloudRequestValidationError{ + err := GetCloudRequestValidationError{ field: "CloudID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetCloudRequestMultiError(errors) } return nil } +// GetCloudRequestMultiError is an error wrapping multiple validation errors +// returned by GetCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type GetCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRequestMultiError) 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 GetCloudRequestMultiError) AllErrors() []error { return m } + // GetCloudRequestValidationError is the validation error returned by // GetCloudRequest.Validate if the designated constraints aren't met. type GetCloudRequestValidationError struct { @@ -18000,20 +29772,53 @@ var _ interface { var _GetCloudRequest_CloudID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on GetCloudResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *GetCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudResponse 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 +// GetCloudResponseMultiError, or nil if none found. +func (m *GetCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetCloudResponseValidationError{ field: "Data", @@ -18023,9 +29828,30 @@ func (m *GetCloudResponse) Validate() error { } } + if len(errors) > 0 { + return GetCloudResponseMultiError(errors) + } + return nil } +// GetCloudResponseMultiError is an error wrapping multiple validation errors +// returned by GetCloudResponse.ValidateAll() if the designated constraints +// aren't met. +type GetCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudResponseMultiError) 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 GetCloudResponseMultiError) AllErrors() []error { return m } + // GetCloudResponseValidationError is the validation error returned by // GetCloudResponse.Validate if the designated constraints aren't met. type GetCloudResponseValidationError struct { @@ -18081,18 +29907,36 @@ var _ interface { } = GetCloudResponseValidationError{} // Validate checks the field values on ListCloudRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *ListCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRequest 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 +// ListCloudRequestMultiError, or nil if none found. +func (m *ListCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) > 20 { - return ListCloudRequestValidationError{ + err := ListCloudRequestValidationError{ field: "CloudID", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Name @@ -18105,9 +29949,30 @@ func (m *ListCloudRequest) Validate() error { // no validation rules for CloudProvider + if len(errors) > 0 { + return ListCloudRequestMultiError(errors) + } + return nil } +// ListCloudRequestMultiError is an error wrapping multiple validation errors +// returned by ListCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type ListCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRequestMultiError) 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 ListCloudRequestMultiError) AllErrors() []error { return m } + // ListCloudRequestValidationError is the validation error returned by // ListCloudRequest.Validate if the designated constraints aren't met. type ListCloudRequestValidationError struct { @@ -18163,13 +30028,27 @@ var _ interface { } = ListCloudRequestValidationError{} // Validate checks the field values on ListCloudResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *ListCloudResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudResponse 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 +// ListCloudResponseMultiError, or nil if none found. +func (m *ListCloudResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -18179,7 +30058,26 @@ func (m *ListCloudResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -18191,9 +30089,30 @@ func (m *ListCloudResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudResponseMultiError(errors) + } + return nil } +// ListCloudResponseMultiError is an error wrapping multiple validation errors +// returned by ListCloudResponse.ValidateAll() if the designated constraints +// aren't met. +type ListCloudResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudResponseMultiError) 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 ListCloudResponseMultiError) AllErrors() []error { return m } + // ListCloudResponseValidationError is the validation error returned by // ListCloudResponse.Validate if the designated constraints aren't met. type ListCloudResponseValidationError struct { @@ -18252,64 +30171,125 @@ var _ interface { // Validate checks the field values on CreateNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeGroupRequest 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 +// CreateNodeGroupRequestMultiError, or nil if none found. +func (m *CreateNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetName()); l < 1 || l > 255 { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "Name", reason: "value length must be between 1 and 255 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateNodeGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetRegion()); l < 1 || l > 32 { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "Region", reason: "value length must be between 1 and 32 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateNodeGroupRequest_Region_Pattern.MatchString(m.GetRegion()) { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "Region", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for EnableAutoscale if m.GetAutoScaling() == nil { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "AutoScaling", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAutoScaling()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupRequestValidationError{ field: "AutoScaling", @@ -18320,13 +30300,36 @@ func (m *CreateNodeGroupRequest) Validate() error { } if m.GetLaunchTemplate() == nil { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "LaunchTemplate", reason: "value is required", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLaunchTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupRequestValidationError{ field: "LaunchTemplate", @@ -18343,17 +30346,40 @@ func (m *CreateNodeGroupRequest) Validate() error { // no validation rules for NodeOS if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateNodeGroupRequestValidationError{ + err := CreateNodeGroupRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider // no validation rules for ConsumerID - if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupRequestValidationError{ field: "NodeTemplate", @@ -18371,7 +30397,26 @@ func (m *CreateNodeGroupRequest) Validate() error { // no validation rules for CloudAreaName - if v, ok := interface{}(m.GetExtra()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExtra()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "Extra", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupRequestValidationError{ + field: "Extra", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExtra()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupRequestValidationError{ field: "Extra", @@ -18383,9 +30428,30 @@ func (m *CreateNodeGroupRequest) Validate() error { // no validation rules for OnlyCreateInfo + if len(errors) > 0 { + return CreateNodeGroupRequestMultiError(errors) + } + return nil } +// CreateNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by CreateNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type CreateNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeGroupRequestMultiError) 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 CreateNodeGroupRequestMultiError) AllErrors() []error { return m } + // CreateNodeGroupRequestValidationError is the validation error returned by // CreateNodeGroupRequest.Validate if the designated constraints aren't met. type CreateNodeGroupRequestValidationError struct { @@ -18447,22 +30513,57 @@ var _CreateNodeGroupRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z- var _CreateNodeGroupRequest_Region_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on GroupExtraInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *GroupExtraInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GroupExtraInfo 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 GroupExtraInfoMultiError, +// or nil if none found. +func (m *GroupExtraInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *GroupExtraInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Provider // no validation rules for PoolID // no validation rules for ScriptType + if len(errors) > 0 { + return GroupExtraInfoMultiError(errors) + } + return nil } +// GroupExtraInfoMultiError is an error wrapping multiple validation errors +// returned by GroupExtraInfo.ValidateAll() if the designated constraints +// aren't met. +type GroupExtraInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GroupExtraInfoMultiError) 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 GroupExtraInfoMultiError) AllErrors() []error { return m } + // GroupExtraInfoValidationError is the validation error returned by // GroupExtraInfo.Validate if the designated constraints aren't met. type GroupExtraInfoValidationError struct { @@ -18519,19 +30620,52 @@ var _ interface { // Validate checks the field values on CreateNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeGroupResponse 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 +// CreateNodeGroupResponseMultiError, or nil if none found. +func (m *CreateNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupResponseValidationError{ field: "Data", @@ -18541,7 +30675,26 @@ func (m *CreateNodeGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -18551,9 +30704,30 @@ func (m *CreateNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return CreateNodeGroupResponseMultiError(errors) + } + return nil } +// CreateNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by CreateNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type CreateNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeGroupResponseMultiError) 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 CreateNodeGroupResponseMultiError) AllErrors() []error { return m } + // CreateNodeGroupResponseValidationError is the validation error returned by // CreateNodeGroupResponse.Validate if the designated constraints aren't met. type CreateNodeGroupResponseValidationError struct { @@ -18612,13 +30786,46 @@ var _ interface { // Validate checks the field values on CreateNodeGroupResponseData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNodeGroupResponseData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNodeGroupResponseData 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 +// CreateNodeGroupResponseDataMultiError, or nil if none found. +func (m *CreateNodeGroupResponseData) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNodeGroupResponseData) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetNodeGroup()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupResponseDataValidationError{ + field: "NodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupResponseDataValidationError{ + field: "NodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupResponseDataValidationError{ field: "NodeGroup", @@ -18628,7 +30835,26 @@ func (m *CreateNodeGroupResponseData) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNodeGroupResponseDataValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNodeGroupResponseDataValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNodeGroupResponseDataValidationError{ field: "Task", @@ -18638,9 +30864,30 @@ func (m *CreateNodeGroupResponseData) Validate() error { } } + if len(errors) > 0 { + return CreateNodeGroupResponseDataMultiError(errors) + } + return nil } +// CreateNodeGroupResponseDataMultiError is an error wrapping multiple +// validation errors returned by CreateNodeGroupResponseData.ValidateAll() if +// the designated constraints aren't met. +type CreateNodeGroupResponseDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNodeGroupResponseDataMultiError) 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 CreateNodeGroupResponseDataMultiError) AllErrors() []error { return m } + // CreateNodeGroupResponseDataValidationError is the validation error returned // by CreateNodeGroupResponseData.Validate if the designated constraints // aren't met. @@ -18700,45 +30947,94 @@ var _ interface { // Validate checks the field values on UpdateNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeGroupRequest 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 +// UpdateNodeGroupRequestMultiError, or nil if none found. +func (m *UpdateNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetNodeGroupID()) > 20 { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateNodeGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Name // no validation rules for Region - if v, ok := interface{}(m.GetEnableAutoscale()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEnableAutoscale()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "EnableAutoscale", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "EnableAutoscale", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEnableAutoscale()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "EnableAutoscale", @@ -18748,7 +31044,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { } } - if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAutoScaling()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "AutoScaling", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAutoScaling()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "AutoScaling", @@ -18758,7 +31073,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { } } - if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLaunchTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "LaunchTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLaunchTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "LaunchTemplate", @@ -18768,7 +31102,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { } } - if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetNodeTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "NodeTemplate", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "NodeTemplate", @@ -18787,10 +31140,14 @@ func (m *UpdateNodeGroupRequest) Validate() error { // no validation rules for NodeOS if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return UpdateNodeGroupRequestValidationError{ + err := UpdateNodeGroupRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider @@ -18799,7 +31156,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { // no validation rules for Desc - if v, ok := interface{}(m.GetBkCloudID()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetBkCloudID()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "BkCloudID", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "BkCloudID", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetBkCloudID()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "BkCloudID", @@ -18809,7 +31185,26 @@ func (m *UpdateNodeGroupRequest) Validate() error { } } - if v, ok := interface{}(m.GetCloudAreaName()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudAreaName()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "CloudAreaName", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupRequestValidationError{ + field: "CloudAreaName", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCloudAreaName()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupRequestValidationError{ field: "CloudAreaName", @@ -18823,9 +31218,30 @@ func (m *UpdateNodeGroupRequest) Validate() error { // no validation rules for ExtraInfo + if len(errors) > 0 { + return UpdateNodeGroupRequestMultiError(errors) + } + return nil } +// UpdateNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeGroupRequestMultiError) 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 UpdateNodeGroupRequestMultiError) AllErrors() []error { return m } + // UpdateNodeGroupRequestValidationError is the validation error returned by // UpdateNodeGroupRequest.Validate if the designated constraints aren't met. type UpdateNodeGroupRequestValidationError struct { @@ -18886,19 +31302,52 @@ var _UpdateNodeGroupRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z- // Validate checks the field values on UpdateNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeGroupResponse 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 +// UpdateNodeGroupResponseMultiError, or nil if none found. +func (m *UpdateNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupResponseValidationError{ field: "Data", @@ -18908,7 +31357,26 @@ func (m *UpdateNodeGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -18918,9 +31386,30 @@ func (m *UpdateNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeGroupResponseMultiError(errors) + } + return nil } +// UpdateNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeGroupResponseMultiError) 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 UpdateNodeGroupResponseMultiError) AllErrors() []error { return m } + // UpdateNodeGroupResponseValidationError is the validation error returned by // UpdateNodeGroupResponse.Validate if the designated constraints aren't met. type UpdateNodeGroupResponseValidationError struct { @@ -18979,24 +31468,46 @@ var _ interface { // Validate checks the field values on DeleteNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeGroupRequest 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 +// DeleteNodeGroupRequestMultiError, or nil if none found. +func (m *DeleteNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return DeleteNodeGroupRequestValidationError{ + err := DeleteNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteNodeGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return DeleteNodeGroupRequestValidationError{ + err := DeleteNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForce @@ -19006,17 +31517,42 @@ func (m *DeleteNodeGroupRequest) Validate() error { // no validation rules for KeepNodesInstance if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 100 { - return DeleteNodeGroupRequestValidationError{ + err := DeleteNodeGroupRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyDeleteInfo + if len(errors) > 0 { + return DeleteNodeGroupRequestMultiError(errors) + } + return nil } +// DeleteNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by DeleteNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type DeleteNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeGroupRequestMultiError) 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 DeleteNodeGroupRequestMultiError) AllErrors() []error { return m } + // DeleteNodeGroupRequestValidationError is the validation error returned by // DeleteNodeGroupRequest.Validate if the designated constraints aren't met. type DeleteNodeGroupRequestValidationError struct { @@ -19077,19 +31613,52 @@ var _DeleteNodeGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a-zA- // Validate checks the field values on DeleteNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeGroupResponse 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 +// DeleteNodeGroupResponseMultiError, or nil if none found. +func (m *DeleteNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeGroupResponseValidationError{ field: "Data", @@ -19099,7 +31668,26 @@ func (m *DeleteNodeGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -19109,9 +31697,30 @@ func (m *DeleteNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteNodeGroupResponseMultiError(errors) + } + return nil } +// DeleteNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by DeleteNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type DeleteNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeGroupResponseMultiError) 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 DeleteNodeGroupResponseMultiError) AllErrors() []error { return m } + // DeleteNodeGroupResponseValidationError is the validation error returned by // DeleteNodeGroupResponse.Validate if the designated constraints aren't met. type DeleteNodeGroupResponseValidationError struct { @@ -19170,13 +31779,46 @@ var _ interface { // Validate checks the field values on DeleteNodeGroupResponseData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodeGroupResponseData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodeGroupResponseData 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 +// DeleteNodeGroupResponseDataMultiError, or nil if none found. +func (m *DeleteNodeGroupResponseData) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodeGroupResponseData) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetNodeGroup()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeGroupResponseDataValidationError{ + field: "NodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeGroupResponseDataValidationError{ + field: "NodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeGroupResponseDataValidationError{ field: "NodeGroup", @@ -19186,7 +31828,26 @@ func (m *DeleteNodeGroupResponseData) Validate() error { } } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodeGroupResponseDataValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodeGroupResponseDataValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodeGroupResponseDataValidationError{ field: "Task", @@ -19196,9 +31857,30 @@ func (m *DeleteNodeGroupResponseData) Validate() error { } } + if len(errors) > 0 { + return DeleteNodeGroupResponseDataMultiError(errors) + } + return nil } +// DeleteNodeGroupResponseDataMultiError is an error wrapping multiple +// validation errors returned by DeleteNodeGroupResponseData.ValidateAll() if +// the designated constraints aren't met. +type DeleteNodeGroupResponseDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodeGroupResponseDataMultiError) 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 DeleteNodeGroupResponseDataMultiError) AllErrors() []error { return m } + // DeleteNodeGroupResponseDataValidationError is the validation error returned // by DeleteNodeGroupResponseData.Validate if the designated constraints // aren't met. @@ -19258,29 +31940,72 @@ var _ interface { // Validate checks the field values on GetNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeGroupRequest 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 +// GetNodeGroupRequestMultiError, or nil if none found. +func (m *GetNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return GetNodeGroupRequestValidationError{ + err := GetNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_GetNodeGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return GetNodeGroupRequestValidationError{ + err := GetNodeGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetNodeGroupRequestMultiError(errors) } return nil } +// GetNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by GetNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type GetNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeGroupRequestMultiError) 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 GetNodeGroupRequestMultiError) AllErrors() []error { return m } + // GetNodeGroupRequestValidationError is the validation error returned by // GetNodeGroupRequest.Validate if the designated constraints aren't met. type GetNodeGroupRequestValidationError struct { @@ -19341,19 +32066,52 @@ var _GetNodeGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-] // Validate checks the field values on GetNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetNodeGroupResponse 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 +// GetNodeGroupResponseMultiError, or nil if none found. +func (m *GetNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeGroupResponseValidationError{ field: "Data", @@ -19363,7 +32121,26 @@ func (m *GetNodeGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -19373,9 +32150,30 @@ func (m *GetNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return GetNodeGroupResponseMultiError(errors) + } + return nil } +// GetNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by GetNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type GetNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetNodeGroupResponseMultiError) 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 GetNodeGroupResponseMultiError) AllErrors() []error { return m } + // GetNodeGroupResponseValidationError is the validation error returned by // GetNodeGroupResponse.Validate if the designated constraints aren't met. type GetNodeGroupResponseValidationError struct { @@ -19434,38 +32232,85 @@ var _ interface { // Validate checks the field values on ListClusterNodeGroupRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListClusterNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterNodeGroupRequest 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 +// ListClusterNodeGroupRequestMultiError, or nil if none found. +func (m *ListClusterNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return ListClusterNodeGroupRequestValidationError{ + err := ListClusterNodeGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return ListClusterNodeGroupRequestValidationError{ + err := ListClusterNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_ListClusterNodeGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return ListClusterNodeGroupRequestValidationError{ + err := ListClusterNodeGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for EnableFilter + if len(errors) > 0 { + return ListClusterNodeGroupRequestMultiError(errors) + } + return nil } +// ListClusterNodeGroupRequestMultiError is an error wrapping multiple +// validation errors returned by ListClusterNodeGroupRequest.ValidateAll() if +// the designated constraints aren't met. +type ListClusterNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterNodeGroupRequestMultiError) 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 ListClusterNodeGroupRequestMultiError) AllErrors() []error { return m } + // ListClusterNodeGroupRequestValidationError is the validation error returned // by ListClusterNodeGroupRequest.Validate if the designated constraints // aren't met. @@ -19527,12 +32372,26 @@ var _ListClusterNodeGroupRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a- // Validate checks the field values on ListClusterNodeGroupResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListClusterNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListClusterNodeGroupResponse 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 +// ListClusterNodeGroupResponseMultiError, or nil if none found. +func (m *ListClusterNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListClusterNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -19542,7 +32401,26 @@ func (m *ListClusterNodeGroupResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterNodeGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterNodeGroupResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListClusterNodeGroupResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -19554,7 +32432,26 @@ func (m *ListClusterNodeGroupResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListClusterNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListClusterNodeGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListClusterNodeGroupResponseValidationError{ field: "WebAnnotations", @@ -19564,9 +32461,30 @@ func (m *ListClusterNodeGroupResponse) Validate() error { } } + if len(errors) > 0 { + return ListClusterNodeGroupResponseMultiError(errors) + } + return nil } +// ListClusterNodeGroupResponseMultiError is an error wrapping multiple +// validation errors returned by ListClusterNodeGroupResponse.ValidateAll() if +// the designated constraints aren't met. +type ListClusterNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListClusterNodeGroupResponseMultiError) 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 ListClusterNodeGroupResponseMultiError) AllErrors() []error { return m } + // ListClusterNodeGroupResponseValidationError is the validation error returned // by ListClusterNodeGroupResponse.Validate if the designated constraints // aren't met. @@ -19626,12 +32544,26 @@ var _ interface { // Validate checks the field values on ListNodeGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodeGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodeGroupRequest 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 +// ListNodeGroupRequestMultiError, or nil if none found. +func (m *ListNodeGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodeGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for ClusterID @@ -19640,9 +32572,30 @@ func (m *ListNodeGroupRequest) Validate() error { // no validation rules for ProjectID + if len(errors) > 0 { + return ListNodeGroupRequestMultiError(errors) + } + return nil } +// ListNodeGroupRequestMultiError is an error wrapping multiple validation +// errors returned by ListNodeGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type ListNodeGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodeGroupRequestMultiError) 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 ListNodeGroupRequestMultiError) AllErrors() []error { return m } + // ListNodeGroupRequestValidationError is the validation error returned by // ListNodeGroupRequest.Validate if the designated constraints aren't met. type ListNodeGroupRequestValidationError struct { @@ -19701,12 +32654,26 @@ var _ interface { // Validate checks the field values on ListNodeGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodeGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodeGroupResponse 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 +// ListNodeGroupResponseMultiError, or nil if none found. +func (m *ListNodeGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodeGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -19716,7 +32683,26 @@ func (m *ListNodeGroupResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodeGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodeGroupResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListNodeGroupResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -19728,9 +32714,30 @@ func (m *ListNodeGroupResponse) Validate() error { } + if len(errors) > 0 { + return ListNodeGroupResponseMultiError(errors) + } + return nil } +// ListNodeGroupResponseMultiError is an error wrapping multiple validation +// errors returned by ListNodeGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type ListNodeGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodeGroupResponseMultiError) 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 ListNodeGroupResponseMultiError) AllErrors() []error { return m } + // ListNodeGroupResponseValidationError is the validation error returned by // ListNodeGroupResponse.Validate if the designated constraints aren't met. type ListNodeGroupResponseValidationError struct { @@ -19788,39 +32795,69 @@ var _ interface { } = ListNodeGroupResponseValidationError{} // Validate checks the field values on AddNodesRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *AddNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddNodesRequest 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 +// AddNodesRequestMultiError, or nil if none found. +func (m *AddNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *AddNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_AddNodesRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if len(m.GetNodes()) < 1 { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "Nodes", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } _AddNodesRequest_Nodes_Unique := make(map[string]struct{}, len(m.GetNodes())) @@ -19829,10 +32866,14 @@ func (m *AddNodesRequest) Validate() error { _, _ = idx, item if _, exists := _AddNodesRequest_Nodes_Unique[item]; exists { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), reason: "repeated value must contain unique items", } + if !all { + return err + } + errors = append(errors, err) } else { _AddNodesRequest_Nodes_Unique[item] = struct{}{} } @@ -19847,17 +32888,40 @@ func (m *AddNodesRequest) Validate() error { // no validation rules for OnlyCreateInfo if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return AddNodesRequestValidationError{ + err := AddNodesRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for NodeTemplateID // no validation rules for IsExternalNode - if v, ok := interface{}(m.GetLogin()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLogin()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddNodesRequestValidationError{ + field: "Login", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddNodesRequestValidationError{ + field: "Login", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLogin()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AddNodesRequestValidationError{ field: "Login", @@ -19867,9 +32931,30 @@ func (m *AddNodesRequest) Validate() error { } } + if len(errors) > 0 { + return AddNodesRequestMultiError(errors) + } + return nil } +// AddNodesRequestMultiError is an error wrapping multiple validation errors +// returned by AddNodesRequest.ValidateAll() if the designated constraints +// aren't met. +type AddNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddNodesRequestMultiError) 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 AddNodesRequestMultiError) AllErrors() []error { return m } + // AddNodesRequestValidationError is the validation error returned by // AddNodesRequest.Validate if the designated constraints aren't met. type AddNodesRequestValidationError struct { @@ -19927,20 +33012,53 @@ var _ interface { var _AddNodesRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on AddNodesResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *AddNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AddNodesResponse 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 +// AddNodesResponseMultiError, or nil if none found. +func (m *AddNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *AddNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AddNodesResponseValidationError{ field: "Data", @@ -19950,7 +33068,26 @@ func (m *AddNodesResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, AddNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, AddNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return AddNodesResponseValidationError{ field: "WebAnnotations", @@ -19960,9 +33097,30 @@ func (m *AddNodesResponse) Validate() error { } } + if len(errors) > 0 { + return AddNodesResponseMultiError(errors) + } + return nil } +// AddNodesResponseMultiError is an error wrapping multiple validation errors +// returned by AddNodesResponse.ValidateAll() if the designated constraints +// aren't met. +type AddNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AddNodesResponseMultiError) 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 AddNodesResponseMultiError) AllErrors() []error { return m } + // AddNodesResponseValidationError is the validation error returned by // AddNodesResponse.Validate if the designated constraints aren't met. type AddNodesResponseValidationError struct { @@ -20019,31 +33177,57 @@ var _ interface { // Validate checks the field values on BatchDeleteClusterNodesRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *BatchDeleteClusterNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BatchDeleteClusterNodesRequest 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 +// BatchDeleteClusterNodesRequestMultiError, or nil if none found. +func (m *BatchDeleteClusterNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *BatchDeleteClusterNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return BatchDeleteClusterNodesRequestValidationError{ + err := BatchDeleteClusterNodesRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return BatchDeleteClusterNodesRequestValidationError{ + err := BatchDeleteClusterNodesRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_BatchDeleteClusterNodesRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return BatchDeleteClusterNodesRequestValidationError{ + err := BatchDeleteClusterNodesRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for NodeIPs @@ -20051,17 +33235,42 @@ func (m *BatchDeleteClusterNodesRequest) Validate() error { // no validation rules for VirtualNodeIDs if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return BatchDeleteClusterNodesRequestValidationError{ + err := BatchDeleteClusterNodesRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DeleteMode + if len(errors) > 0 { + return BatchDeleteClusterNodesRequestMultiError(errors) + } + return nil } +// BatchDeleteClusterNodesRequestMultiError is an error wrapping multiple +// validation errors returned by BatchDeleteClusterNodesRequest.ValidateAll() +// if the designated constraints aren't met. +type BatchDeleteClusterNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BatchDeleteClusterNodesRequestMultiError) 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 BatchDeleteClusterNodesRequestMultiError) AllErrors() []error { return m } + // BatchDeleteClusterNodesRequestValidationError is the validation error // returned by BatchDeleteClusterNodesRequest.Validate if the designated // constraints aren't met. @@ -20123,12 +33332,26 @@ var _BatchDeleteClusterNodesRequest_ClusterID_Pattern = regexp.MustCompile("^[0- // Validate checks the field values on BatchDeleteClusterNodesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *BatchDeleteClusterNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BatchDeleteClusterNodesResponse 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 +// BatchDeleteClusterNodesResponseMultiError, or nil if none found. +func (m *BatchDeleteClusterNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *BatchDeleteClusterNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -20138,7 +33361,26 @@ func (m *BatchDeleteClusterNodesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, BatchDeleteClusterNodesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, BatchDeleteClusterNodesResponseValidationError{ + field: fmt.Sprintf("Data[%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 BatchDeleteClusterNodesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -20150,7 +33392,26 @@ func (m *BatchDeleteClusterNodesResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, BatchDeleteClusterNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, BatchDeleteClusterNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return BatchDeleteClusterNodesResponseValidationError{ field: "WebAnnotations", @@ -20160,9 +33421,30 @@ func (m *BatchDeleteClusterNodesResponse) Validate() error { } } + if len(errors) > 0 { + return BatchDeleteClusterNodesResponseMultiError(errors) + } + return nil } +// BatchDeleteClusterNodesResponseMultiError is an error wrapping multiple +// validation errors returned by BatchDeleteClusterNodesResponse.ValidateAll() +// if the designated constraints aren't met. +type BatchDeleteClusterNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BatchDeleteClusterNodesResponseMultiError) 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 BatchDeleteClusterNodesResponseMultiError) AllErrors() []error { return m } + // BatchDeleteClusterNodesResponseValidationError is the validation error // returned by BatchDeleteClusterNodesResponse.Validate if the designated // constraints aren't met. @@ -20221,13 +33503,27 @@ var _ interface { } = BatchDeleteClusterNodesResponseValidationError{} // Validate checks the field values on BatchNodesStatus with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *BatchNodesStatus) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BatchNodesStatus 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 +// BatchNodesStatusMultiError, or nil if none found. +func (m *BatchNodesStatus) ValidateAll() error { + return m.validate(true) +} + +func (m *BatchNodesStatus) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Success // no validation rules for Message @@ -20238,9 +33534,30 @@ func (m *BatchNodesStatus) Validate() error { // no validation rules for NodeGroupType + if len(errors) > 0 { + return BatchNodesStatusMultiError(errors) + } + return nil } +// BatchNodesStatusMultiError is an error wrapping multiple validation errors +// returned by BatchNodesStatus.ValidateAll() if the designated constraints +// aren't met. +type BatchNodesStatusMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BatchNodesStatusMultiError) 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 BatchNodesStatusMultiError) AllErrors() []error { return m } + // BatchNodesStatusValidationError is the validation error returned by // BatchNodesStatus.Validate if the designated constraints aren't met. type BatchNodesStatusValidationError struct { @@ -20297,38 +33614,68 @@ var _ interface { // Validate checks the field values on DeleteNodesRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodesRequest 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 +// DeleteNodesRequestMultiError, or nil if none found. +func (m *DeleteNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteNodesRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetNodes()) < 1 { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "Nodes", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DeleteMode @@ -20336,10 +33683,14 @@ func (m *DeleteNodesRequest) Validate() error { // no validation rules for IsForce if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return DeleteNodesRequestValidationError{ + err := DeleteNodesRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for OnlyDeleteInfo @@ -20350,9 +33701,30 @@ func (m *DeleteNodesRequest) Validate() error { // no validation rules for IsExternalNode + if len(errors) > 0 { + return DeleteNodesRequestMultiError(errors) + } + return nil } +// DeleteNodesRequestMultiError is an error wrapping multiple validation errors +// returned by DeleteNodesRequest.ValidateAll() if the designated constraints +// aren't met. +type DeleteNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodesRequestMultiError) 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 DeleteNodesRequestMultiError) AllErrors() []error { return m } + // DeleteNodesRequestValidationError is the validation error returned by // DeleteNodesRequest.Validate if the designated constraints aren't met. type DeleteNodesRequestValidationError struct { @@ -20413,19 +33785,52 @@ var _DeleteNodesRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$" // Validate checks the field values on DeleteNodesResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNodesResponse 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 +// DeleteNodesResponseMultiError, or nil if none found. +func (m *DeleteNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodesResponseValidationError{ field: "Data", @@ -20435,7 +33840,26 @@ func (m *DeleteNodesResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNodesResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNodesResponseValidationError{ field: "WebAnnotations", @@ -20445,9 +33869,30 @@ func (m *DeleteNodesResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteNodesResponseMultiError(errors) + } + return nil } +// DeleteNodesResponseMultiError is an error wrapping multiple validation +// errors returned by DeleteNodesResponse.ValidateAll() if the designated +// constraints aren't met. +type DeleteNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNodesResponseMultiError) 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 DeleteNodesResponseMultiError) AllErrors() []error { return m } + // DeleteNodesResponseValidationError is the validation error returned by // DeleteNodesResponse.Validate if the designated constraints aren't met. type DeleteNodesResponseValidationError struct { @@ -20506,38 +33951,68 @@ var _ interface { // Validate checks the field values on MoveNodesToGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *MoveNodesToGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MoveNodesToGroupRequest 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 +// MoveNodesToGroupRequestMultiError, or nil if none found. +func (m *MoveNodesToGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *MoveNodesToGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 5 || l > 100 { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_MoveNodesToGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := len(m.GetNodes()); l < 1 || l > 100 { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "Nodes", reason: "value must contain between 1 and 100 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } _MoveNodesToGroupRequest_Nodes_Unique := make(map[string]struct{}, len(m.GetNodes())) @@ -20546,10 +34021,14 @@ func (m *MoveNodesToGroupRequest) Validate() error { _, _ = idx, item if _, exists := _MoveNodesToGroupRequest_Nodes_Unique[item]; exists { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), reason: "repeated value must contain unique items", } + if !all { + return err + } + errors = append(errors, err) } else { _MoveNodesToGroupRequest_Nodes_Unique[item] = struct{}{} } @@ -20558,22 +34037,51 @@ func (m *MoveNodesToGroupRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_MoveNodesToGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return MoveNodesToGroupRequestValidationError{ + err := MoveNodesToGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return MoveNodesToGroupRequestMultiError(errors) } return nil } +// MoveNodesToGroupRequestMultiError is an error wrapping multiple validation +// errors returned by MoveNodesToGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type MoveNodesToGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MoveNodesToGroupRequestMultiError) 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 MoveNodesToGroupRequestMultiError) AllErrors() []error { return m } + // MoveNodesToGroupRequestValidationError is the validation error returned by // MoveNodesToGroupRequest.Validate if the designated constraints aren't met. type MoveNodesToGroupRequestValidationError struct { @@ -20636,19 +34144,52 @@ var _MoveNodesToGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a-zA // Validate checks the field values on MoveNodesToGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *MoveNodesToGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MoveNodesToGroupResponse 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 +// MoveNodesToGroupResponseMultiError, or nil if none found. +func (m *MoveNodesToGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *MoveNodesToGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MoveNodesToGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MoveNodesToGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return MoveNodesToGroupResponseValidationError{ field: "Data", @@ -20658,7 +34199,26 @@ func (m *MoveNodesToGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, MoveNodesToGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, MoveNodesToGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return MoveNodesToGroupResponseValidationError{ field: "WebAnnotations", @@ -20668,9 +34228,30 @@ func (m *MoveNodesToGroupResponse) Validate() error { } } + if len(errors) > 0 { + return MoveNodesToGroupResponseMultiError(errors) + } + return nil } +// MoveNodesToGroupResponseMultiError is an error wrapping multiple validation +// errors returned by MoveNodesToGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type MoveNodesToGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MoveNodesToGroupResponseMultiError) 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 MoveNodesToGroupResponseMultiError) AllErrors() []error { return m } + // MoveNodesToGroupResponseValidationError is the validation error returned by // MoveNodesToGroupResponse.Validate if the designated constraints aren't met. type MoveNodesToGroupResponseValidationError struct { @@ -20729,38 +34310,68 @@ var _ interface { // Validate checks the field values on RemoveNodesFromGroupRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RemoveNodesFromGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RemoveNodesFromGroupRequest 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 +// RemoveNodesFromGroupRequestMultiError, or nil if none found. +func (m *RemoveNodesFromGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *RemoveNodesFromGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 5 || l > 100 { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_RemoveNodesFromGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := len(m.GetNodes()); l < 1 || l > 100 { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "Nodes", reason: "value must contain between 1 and 100 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } _RemoveNodesFromGroupRequest_Nodes_Unique := make(map[string]struct{}, len(m.GetNodes())) @@ -20769,10 +34380,14 @@ func (m *RemoveNodesFromGroupRequest) Validate() error { _, _ = idx, item if _, exists := _RemoveNodesFromGroupRequest_Nodes_Unique[item]; exists { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), reason: "repeated value must contain unique items", } + if !all { + return err + } + errors = append(errors, err) } else { _RemoveNodesFromGroupRequest_Nodes_Unique[item] = struct{}{} } @@ -20781,22 +34396,51 @@ func (m *RemoveNodesFromGroupRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_RemoveNodesFromGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return RemoveNodesFromGroupRequestValidationError{ + err := RemoveNodesFromGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return RemoveNodesFromGroupRequestMultiError(errors) } return nil } +// RemoveNodesFromGroupRequestMultiError is an error wrapping multiple +// validation errors returned by RemoveNodesFromGroupRequest.ValidateAll() if +// the designated constraints aren't met. +type RemoveNodesFromGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RemoveNodesFromGroupRequestMultiError) 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 RemoveNodesFromGroupRequestMultiError) AllErrors() []error { return m } + // RemoveNodesFromGroupRequestValidationError is the validation error returned // by RemoveNodesFromGroupRequest.Validate if the designated constraints // aren't met. @@ -20860,19 +34504,52 @@ var _RemoveNodesFromGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9 // Validate checks the field values on RemoveNodesFromGroupResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *RemoveNodesFromGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RemoveNodesFromGroupResponse 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 +// RemoveNodesFromGroupResponseMultiError, or nil if none found. +func (m *RemoveNodesFromGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *RemoveNodesFromGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RemoveNodesFromGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RemoveNodesFromGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RemoveNodesFromGroupResponseValidationError{ field: "Data", @@ -20882,7 +34559,26 @@ func (m *RemoveNodesFromGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RemoveNodesFromGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RemoveNodesFromGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RemoveNodesFromGroupResponseValidationError{ field: "WebAnnotations", @@ -20892,9 +34588,30 @@ func (m *RemoveNodesFromGroupResponse) Validate() error { } } + if len(errors) > 0 { + return RemoveNodesFromGroupResponseMultiError(errors) + } + return nil } +// RemoveNodesFromGroupResponseMultiError is an error wrapping multiple +// validation errors returned by RemoveNodesFromGroupResponse.ValidateAll() if +// the designated constraints aren't met. +type RemoveNodesFromGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RemoveNodesFromGroupResponseMultiError) 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 RemoveNodesFromGroupResponseMultiError) AllErrors() []error { return m } + // RemoveNodesFromGroupResponseValidationError is the validation error returned // by RemoveNodesFromGroupResponse.Validate if the designated constraints // aren't met. @@ -20954,38 +34671,68 @@ var _ interface { // Validate checks the field values on CleanNodesInGroupRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanNodesInGroupRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanNodesInGroupRequest 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 +// CleanNodesInGroupRequestMultiError, or nil if none found. +func (m *CleanNodesInGroupRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanNodesInGroupRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 5 || l > 100 { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "ClusterID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := len(m.GetNodes()); l < 1 || l > 100 { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "Nodes", reason: "value must contain between 1 and 100 items, inclusive", } + if !all { + return err + } + errors = append(errors, err) } _CleanNodesInGroupRequest_Nodes_Unique := make(map[string]struct{}, len(m.GetNodes())) @@ -20994,10 +34741,14 @@ func (m *CleanNodesInGroupRequest) Validate() error { _, _ = idx, item if _, exists := _CleanNodesInGroupRequest_Nodes_Unique[item]; exists { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), reason: "repeated value must contain unique items", } + if !all { + return err + } + errors = append(errors, err) } else { _CleanNodesInGroupRequest_Nodes_Unique[item] = struct{}{} } @@ -21006,29 +34757,62 @@ func (m *CleanNodesInGroupRequest) Validate() error { } if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return CleanNodesInGroupRequestValidationError{ + err := CleanNodesInGroupRequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return CleanNodesInGroupRequestMultiError(errors) } return nil } +// CleanNodesInGroupRequestMultiError is an error wrapping multiple validation +// errors returned by CleanNodesInGroupRequest.ValidateAll() if the designated +// constraints aren't met. +type CleanNodesInGroupRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanNodesInGroupRequestMultiError) 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 CleanNodesInGroupRequestMultiError) AllErrors() []error { return m } + // CleanNodesInGroupRequestValidationError is the validation error returned by // CleanNodesInGroupRequest.Validate if the designated constraints aren't met. type CleanNodesInGroupRequestValidationError struct { @@ -21091,19 +34875,52 @@ var _CleanNodesInGroupRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a-z // Validate checks the field values on CleanNodesInGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanNodesInGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanNodesInGroupResponse 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 +// CleanNodesInGroupResponseMultiError, or nil if none found. +func (m *CleanNodesInGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanNodesInGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CleanNodesInGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CleanNodesInGroupResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CleanNodesInGroupResponseValidationError{ field: "Data", @@ -21113,7 +34930,26 @@ func (m *CleanNodesInGroupResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CleanNodesInGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CleanNodesInGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CleanNodesInGroupResponseValidationError{ field: "WebAnnotations", @@ -21123,9 +34959,30 @@ func (m *CleanNodesInGroupResponse) Validate() error { } } + if len(errors) > 0 { + return CleanNodesInGroupResponseMultiError(errors) + } + return nil } +// CleanNodesInGroupResponseMultiError is an error wrapping multiple validation +// errors returned by CleanNodesInGroupResponse.ValidateAll() if the +// designated constraints aren't met. +type CleanNodesInGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanNodesInGroupResponseMultiError) 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 CleanNodesInGroupResponseMultiError) AllErrors() []error { return m } + // CleanNodesInGroupResponseValidationError is the validation error returned by // CleanNodesInGroupResponse.Validate if the designated constraints aren't met. type CleanNodesInGroupResponseValidationError struct { @@ -21184,64 +35041,127 @@ var _ interface { // Validate checks the field values on CleanNodesInGroupV2Request with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanNodesInGroupV2Request) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanNodesInGroupV2Request 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 +// CleanNodesInGroupV2RequestMultiError, or nil if none found. +func (m *CleanNodesInGroupV2Request) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanNodesInGroupV2Request) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 5 || l > 100 { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "ClusterID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupV2Request_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetNodes()) < 1 { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "Nodes", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CleanNodesInGroupV2Request_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetOperator()); l < 2 || l > 20 { - return CleanNodesInGroupV2RequestValidationError{ + err := CleanNodesInGroupV2RequestValidationError{ field: "Operator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return CleanNodesInGroupV2RequestMultiError(errors) } return nil } +// CleanNodesInGroupV2RequestMultiError is an error wrapping multiple +// validation errors returned by CleanNodesInGroupV2Request.ValidateAll() if +// the designated constraints aren't met. +type CleanNodesInGroupV2RequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanNodesInGroupV2RequestMultiError) 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 CleanNodesInGroupV2RequestMultiError) AllErrors() []error { return m } + // CleanNodesInGroupV2RequestValidationError is the validation error returned // by CleanNodesInGroupV2Request.Validate if the designated constraints aren't met. type CleanNodesInGroupV2RequestValidationError struct { @@ -21304,19 +35224,52 @@ var _CleanNodesInGroupV2Request_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a // Validate checks the field values on CleanNodesInGroupV2Response with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanNodesInGroupV2Response) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanNodesInGroupV2Response 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 +// CleanNodesInGroupV2ResponseMultiError, or nil if none found. +func (m *CleanNodesInGroupV2Response) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanNodesInGroupV2Response) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CleanNodesInGroupV2ResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CleanNodesInGroupV2ResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CleanNodesInGroupV2ResponseValidationError{ field: "Data", @@ -21326,7 +35279,26 @@ func (m *CleanNodesInGroupV2Response) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CleanNodesInGroupV2ResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CleanNodesInGroupV2ResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CleanNodesInGroupV2ResponseValidationError{ field: "WebAnnotations", @@ -21336,9 +35308,30 @@ func (m *CleanNodesInGroupV2Response) Validate() error { } } + if len(errors) > 0 { + return CleanNodesInGroupV2ResponseMultiError(errors) + } + return nil } +// CleanNodesInGroupV2ResponseMultiError is an error wrapping multiple +// validation errors returned by CleanNodesInGroupV2Response.ValidateAll() if +// the designated constraints aren't met. +type CleanNodesInGroupV2ResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanNodesInGroupV2ResponseMultiError) 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 CleanNodesInGroupV2ResponseMultiError) AllErrors() []error { return m } + // CleanNodesInGroupV2ResponseValidationError is the validation error returned // by CleanNodesInGroupV2Response.Validate if the designated constraints // aren't met. @@ -21398,31 +35391,74 @@ var _ interface { // Validate checks the field values on ListNodesInGroupV2Request with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInGroupV2Request) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInGroupV2Request 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 +// ListNodesInGroupV2RequestMultiError, or nil if none found. +func (m *ListNodesInGroupV2Request) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInGroupV2Request) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 2 || l > 20 { - return ListNodesInGroupV2RequestValidationError{ + err := ListNodesInGroupV2RequestValidationError{ field: "NodeGroupID", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_ListNodesInGroupV2Request_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return ListNodesInGroupV2RequestValidationError{ + err := ListNodesInGroupV2RequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Output + if len(errors) > 0 { + return ListNodesInGroupV2RequestMultiError(errors) + } + return nil } +// ListNodesInGroupV2RequestMultiError is an error wrapping multiple validation +// errors returned by ListNodesInGroupV2Request.ValidateAll() if the +// designated constraints aren't met. +type ListNodesInGroupV2RequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInGroupV2RequestMultiError) 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 ListNodesInGroupV2RequestMultiError) AllErrors() []error { return m } + // ListNodesInGroupV2RequestValidationError is the validation error returned by // ListNodesInGroupV2Request.Validate if the designated constraints aren't met. type ListNodesInGroupV2RequestValidationError struct { @@ -21483,12 +35519,26 @@ var _ListNodesInGroupV2Request_NodeGroupID_Pattern = regexp.MustCompile("^[0-9a- // Validate checks the field values on ListNodesInGroupV2Response with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInGroupV2Response) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInGroupV2Response 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 +// ListNodesInGroupV2ResponseMultiError, or nil if none found. +func (m *ListNodesInGroupV2Response) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInGroupV2Response) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -21498,7 +35548,26 @@ func (m *ListNodesInGroupV2Response) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInGroupV2ResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInGroupV2ResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListNodesInGroupV2ResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -21510,7 +35579,26 @@ func (m *ListNodesInGroupV2Response) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInGroupV2ResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInGroupV2ResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInGroupV2ResponseValidationError{ field: "WebAnnotations", @@ -21520,9 +35608,30 @@ func (m *ListNodesInGroupV2Response) Validate() error { } } + if len(errors) > 0 { + return ListNodesInGroupV2ResponseMultiError(errors) + } + return nil } +// ListNodesInGroupV2ResponseMultiError is an error wrapping multiple +// validation errors returned by ListNodesInGroupV2Response.ValidateAll() if +// the designated constraints aren't met. +type ListNodesInGroupV2ResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInGroupV2ResponseMultiError) 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 ListNodesInGroupV2ResponseMultiError) AllErrors() []error { return m } + // ListNodesInGroupV2ResponseValidationError is the validation error returned // by ListNodesInGroupV2Response.Validate if the designated constraints aren't met. type ListNodesInGroupV2ResponseValidationError struct { @@ -21580,13 +35689,27 @@ var _ interface { } = ListNodesInGroupV2ResponseValidationError{} // Validate checks the field values on NodeGroupNode with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *NodeGroupNode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeGroupNode 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 NodeGroupNodeMultiError, or +// nil if none found. +func (m *NodeGroupNode) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeGroupNode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeID // no validation rules for InnerIP @@ -21623,9 +35746,30 @@ func (m *NodeGroupNode) Validate() error { // no validation rules for NodeName + if len(errors) > 0 { + return NodeGroupNodeMultiError(errors) + } + return nil } +// NodeGroupNodeMultiError is an error wrapping multiple validation errors +// returned by NodeGroupNode.ValidateAll() if the designated constraints +// aren't met. +type NodeGroupNodeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeGroupNodeMultiError) 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 NodeGroupNodeMultiError) AllErrors() []error { return m } + // NodeGroupNodeValidationError is the validation error returned by // NodeGroupNode.Validate if the designated constraints aren't met. type NodeGroupNodeValidationError struct { @@ -21682,12 +35826,26 @@ var _ interface { // Validate checks the field values on ListNodesInGroupResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNodesInGroupResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNodesInGroupResponse 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 +// ListNodesInGroupResponseMultiError, or nil if none found. +func (m *ListNodesInGroupResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNodesInGroupResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -21697,7 +35855,26 @@ func (m *ListNodesInGroupResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInGroupResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInGroupResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListNodesInGroupResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -21709,7 +35886,26 @@ func (m *ListNodesInGroupResponse) Validate() error { } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNodesInGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNodesInGroupResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListNodesInGroupResponseValidationError{ field: "WebAnnotations", @@ -21719,9 +35915,30 @@ func (m *ListNodesInGroupResponse) Validate() error { } } + if len(errors) > 0 { + return ListNodesInGroupResponseMultiError(errors) + } + return nil } +// ListNodesInGroupResponseMultiError is an error wrapping multiple validation +// errors returned by ListNodesInGroupResponse.ValidateAll() if the designated +// constraints aren't met. +type ListNodesInGroupResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNodesInGroupResponseMultiError) 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 ListNodesInGroupResponseMultiError) AllErrors() []error { return m } + // ListNodesInGroupResponseValidationError is the validation error returned by // ListNodesInGroupResponse.Validate if the designated constraints aren't met. type ListNodesInGroupResponseValidationError struct { @@ -21780,50 +35997,105 @@ var _ interface { // Validate checks the field values on UpdateGroupMinMaxSizeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupMinMaxSizeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupMinMaxSizeRequest 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 +// UpdateGroupMinMaxSizeRequestMultiError, or nil if none found. +func (m *UpdateGroupMinMaxSizeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupMinMaxSizeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateGroupMinMaxSizeRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if m.GetMinSize() < 0 { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "MinSize", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetMaxSize() < 0 { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "MaxSize", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetOperator()); l < 1 || l > 100 { - return UpdateGroupMinMaxSizeRequestValidationError{ + err := UpdateGroupMinMaxSizeRequestValidationError{ field: "Operator", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateGroupMinMaxSizeRequestMultiError(errors) } return nil } +// UpdateGroupMinMaxSizeRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupMinMaxSizeRequest.ValidateAll() if +// the designated constraints aren't met. +type UpdateGroupMinMaxSizeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupMinMaxSizeRequestMultiError) 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 UpdateGroupMinMaxSizeRequestMultiError) AllErrors() []error { return m } + // UpdateGroupMinMaxSizeRequestValidationError is the validation error returned // by UpdateGroupMinMaxSizeRequest.Validate if the designated constraints // aren't met. @@ -21885,19 +36157,52 @@ var _UpdateGroupMinMaxSizeRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0- // Validate checks the field values on UpdateGroupMinMaxSizeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupMinMaxSizeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupMinMaxSizeResponse 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 +// UpdateGroupMinMaxSizeResponseMultiError, or nil if none found. +func (m *UpdateGroupMinMaxSizeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupMinMaxSizeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupMinMaxSizeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupMinMaxSizeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateGroupMinMaxSizeResponseValidationError{ field: "WebAnnotations", @@ -21907,9 +36212,30 @@ func (m *UpdateGroupMinMaxSizeResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateGroupMinMaxSizeResponseMultiError(errors) + } + return nil } +// UpdateGroupMinMaxSizeResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupMinMaxSizeResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupMinMaxSizeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupMinMaxSizeResponseMultiError) 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 UpdateGroupMinMaxSizeResponseMultiError) AllErrors() []error { return m } + // UpdateGroupMinMaxSizeResponseValidationError is the validation error // returned by UpdateGroupMinMaxSizeResponse.Validate if the designated // constraints aren't met. @@ -21969,30 +36295,71 @@ var _ interface { // Validate checks the field values on UpdateGroupAsTimeRangeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupAsTimeRangeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupAsTimeRangeRequest 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 +// UpdateGroupAsTimeRangeRequestMultiError, or nil if none found. +func (m *UpdateGroupAsTimeRangeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupAsTimeRangeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return UpdateGroupAsTimeRangeRequestValidationError{ + err := UpdateGroupAsTimeRangeRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateGroupAsTimeRangeRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return UpdateGroupAsTimeRangeRequestValidationError{ + err := UpdateGroupAsTimeRangeRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetTimeRanges() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupAsTimeRangeRequestValidationError{ + field: fmt.Sprintf("TimeRanges[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupAsTimeRangeRequestValidationError{ + field: fmt.Sprintf("TimeRanges[%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 UpdateGroupAsTimeRangeRequestValidationError{ field: fmt.Sprintf("TimeRanges[%v]", idx), @@ -22006,9 +36373,30 @@ func (m *UpdateGroupAsTimeRangeRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return UpdateGroupAsTimeRangeRequestMultiError(errors) + } + return nil } +// UpdateGroupAsTimeRangeRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupAsTimeRangeRequest.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupAsTimeRangeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupAsTimeRangeRequestMultiError) 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 UpdateGroupAsTimeRangeRequestMultiError) AllErrors() []error { return m } + // UpdateGroupAsTimeRangeRequestValidationError is the validation error // returned by UpdateGroupAsTimeRangeRequest.Validate if the designated // constraints aren't met. @@ -22070,19 +36458,52 @@ var _UpdateGroupAsTimeRangeRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0 // Validate checks the field values on UpdateGroupAsTimeRangeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupAsTimeRangeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupAsTimeRangeResponse 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 +// UpdateGroupAsTimeRangeResponseMultiError, or nil if none found. +func (m *UpdateGroupAsTimeRangeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupAsTimeRangeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupAsTimeRangeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupAsTimeRangeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateGroupAsTimeRangeResponseValidationError{ field: "WebAnnotations", @@ -22092,9 +36513,30 @@ func (m *UpdateGroupAsTimeRangeResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateGroupAsTimeRangeResponseMultiError(errors) + } + return nil } +// UpdateGroupAsTimeRangeResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupAsTimeRangeResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupAsTimeRangeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupAsTimeRangeResponseMultiError) 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 UpdateGroupAsTimeRangeResponseMultiError) AllErrors() []error { return m } + // UpdateGroupAsTimeRangeResponseValidationError is the validation error // returned by UpdateGroupAsTimeRangeResponse.Validate if the designated // constraints aren't met. @@ -22154,29 +36596,74 @@ var _ interface { // Validate checks the field values on TransNodeGroupToNodeTemplateRequest with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *TransNodeGroupToNodeTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TransNodeGroupToNodeTemplateRequest +// 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 +// TransNodeGroupToNodeTemplateRequestMultiError, or nil if none found. +func (m *TransNodeGroupToNodeTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *TransNodeGroupToNodeTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 1 || l > 100 { - return TransNodeGroupToNodeTemplateRequestValidationError{ + err := TransNodeGroupToNodeTemplateRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_TransNodeGroupToNodeTemplateRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return TransNodeGroupToNodeTemplateRequestValidationError{ + err := TransNodeGroupToNodeTemplateRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return TransNodeGroupToNodeTemplateRequestMultiError(errors) } return nil } +// TransNodeGroupToNodeTemplateRequestMultiError is an error wrapping multiple +// validation errors returned by +// TransNodeGroupToNodeTemplateRequest.ValidateAll() if the designated +// constraints aren't met. +type TransNodeGroupToNodeTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TransNodeGroupToNodeTemplateRequestMultiError) 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 TransNodeGroupToNodeTemplateRequestMultiError) AllErrors() []error { return m } + // TransNodeGroupToNodeTemplateRequestValidationError is the validation error // returned by TransNodeGroupToNodeTemplateRequest.Validate if the designated // constraints aren't met. @@ -22238,19 +36725,53 @@ var _TransNodeGroupToNodeTemplateRequest_NodeGroupID_Pattern = regexp.MustCompil // Validate checks the field values on TransNodeGroupToNodeTemplateResponse // with the rules defined in the proto definition for this message. If any -// rules are violated, an error is returned. +// rules are violated, the first error encountered is returned, or nil if +// there are no violations. func (m *TransNodeGroupToNodeTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TransNodeGroupToNodeTemplateResponse +// 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 +// TransNodeGroupToNodeTemplateResponseMultiError, or nil if none found. +func (m *TransNodeGroupToNodeTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *TransNodeGroupToNodeTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetTemplate()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTemplate()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TransNodeGroupToNodeTemplateResponseValidationError{ + field: "Template", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TransNodeGroupToNodeTemplateResponseValidationError{ + field: "Template", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTemplate()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return TransNodeGroupToNodeTemplateResponseValidationError{ field: "Template", @@ -22260,9 +36781,31 @@ func (m *TransNodeGroupToNodeTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return TransNodeGroupToNodeTemplateResponseMultiError(errors) + } + return nil } +// TransNodeGroupToNodeTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by +// TransNodeGroupToNodeTemplateResponse.ValidateAll() if the designated +// constraints aren't met. +type TransNodeGroupToNodeTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TransNodeGroupToNodeTemplateResponseMultiError) 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 TransNodeGroupToNodeTemplateResponseMultiError) AllErrors() []error { return m } + // TransNodeGroupToNodeTemplateResponseValidationError is the validation error // returned by TransNodeGroupToNodeTemplateResponse.Validate if the designated // constraints aren't met. @@ -22322,38 +36865,85 @@ var _ interface { // Validate checks the field values on UpdateGroupDesiredSizeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupDesiredSizeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupDesiredSizeRequest 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 +// UpdateGroupDesiredSizeRequestMultiError, or nil if none found. +func (m *UpdateGroupDesiredSizeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupDesiredSizeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return UpdateGroupDesiredSizeRequestValidationError{ + err := UpdateGroupDesiredSizeRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateGroupDesiredSizeRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return UpdateGroupDesiredSizeRequestValidationError{ + err := UpdateGroupDesiredSizeRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DesiredSize if utf8.RuneCountInString(m.GetOperator()) > 100 { - return UpdateGroupDesiredSizeRequestValidationError{ + err := UpdateGroupDesiredSizeRequestValidationError{ field: "Operator", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateGroupDesiredSizeRequestMultiError(errors) } return nil } +// UpdateGroupDesiredSizeRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupDesiredSizeRequest.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupDesiredSizeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupDesiredSizeRequestMultiError) 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 UpdateGroupDesiredSizeRequestMultiError) AllErrors() []error { return m } + // UpdateGroupDesiredSizeRequestValidationError is the validation error // returned by UpdateGroupDesiredSizeRequest.Validate if the designated // constraints aren't met. @@ -22415,19 +37005,52 @@ var _UpdateGroupDesiredSizeRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0 // Validate checks the field values on UpdateGroupDesiredSizeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupDesiredSizeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupDesiredSizeResponse 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 +// UpdateGroupDesiredSizeResponseMultiError, or nil if none found. +func (m *UpdateGroupDesiredSizeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupDesiredSizeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupDesiredSizeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupDesiredSizeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateGroupDesiredSizeResponseValidationError{ field: "WebAnnotations", @@ -22437,9 +37060,30 @@ func (m *UpdateGroupDesiredSizeResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateGroupDesiredSizeResponseMultiError(errors) + } + return nil } +// UpdateGroupDesiredSizeResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupDesiredSizeResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupDesiredSizeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupDesiredSizeResponseMultiError) 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 UpdateGroupDesiredSizeResponseMultiError) AllErrors() []error { return m } + // UpdateGroupDesiredSizeResponseValidationError is the validation error // returned by UpdateGroupDesiredSizeResponse.Validate if the designated // constraints aren't met. @@ -22499,40 +37143,87 @@ var _ interface { // Validate checks the field values on UpdateGroupDesiredNodeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupDesiredNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupDesiredNodeRequest 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 +// UpdateGroupDesiredNodeRequestMultiError, or nil if none found. +func (m *UpdateGroupDesiredNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupDesiredNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return UpdateGroupDesiredNodeRequestValidationError{ + err := UpdateGroupDesiredNodeRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateGroupDesiredNodeRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return UpdateGroupDesiredNodeRequestValidationError{ + err := UpdateGroupDesiredNodeRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for DesiredNode if utf8.RuneCountInString(m.GetOperator()) > 100 { - return UpdateGroupDesiredNodeRequestValidationError{ + err := UpdateGroupDesiredNodeRequestValidationError{ field: "Operator", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Manual + if len(errors) > 0 { + return UpdateGroupDesiredNodeRequestMultiError(errors) + } + return nil } +// UpdateGroupDesiredNodeRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupDesiredNodeRequest.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupDesiredNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupDesiredNodeRequestMultiError) 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 UpdateGroupDesiredNodeRequestMultiError) AllErrors() []error { return m } + // UpdateGroupDesiredNodeRequestValidationError is the validation error // returned by UpdateGroupDesiredNodeRequest.Validate if the designated // constraints aren't met. @@ -22594,19 +37285,52 @@ var _UpdateGroupDesiredNodeRequest_NodeGroupID_Pattern = regexp.MustCompile("^[0 // Validate checks the field values on UpdateGroupDesiredNodeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateGroupDesiredNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateGroupDesiredNodeResponse 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 +// UpdateGroupDesiredNodeResponseMultiError, or nil if none found. +func (m *UpdateGroupDesiredNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateGroupDesiredNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupDesiredNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupDesiredNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateGroupDesiredNodeResponseValidationError{ field: "Data", @@ -22616,7 +37340,26 @@ func (m *UpdateGroupDesiredNodeResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateGroupDesiredNodeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateGroupDesiredNodeResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateGroupDesiredNodeResponseValidationError{ field: "WebAnnotations", @@ -22626,9 +37369,30 @@ func (m *UpdateGroupDesiredNodeResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateGroupDesiredNodeResponseMultiError(errors) + } + return nil } +// UpdateGroupDesiredNodeResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateGroupDesiredNodeResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateGroupDesiredNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateGroupDesiredNodeResponseMultiError) 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 UpdateGroupDesiredNodeResponseMultiError) AllErrors() []error { return m } + // UpdateGroupDesiredNodeResponseValidationError is the validation error // returned by UpdateGroupDesiredNodeResponse.Validate if the designated // constraints aren't met. @@ -22688,29 +37452,72 @@ var _ interface { // Validate checks the field values on EnableNodeGroupAutoScaleRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *EnableNodeGroupAutoScaleRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on EnableNodeGroupAutoScaleRequest 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 +// EnableNodeGroupAutoScaleRequestMultiError, or nil if none found. +func (m *EnableNodeGroupAutoScaleRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *EnableNodeGroupAutoScaleRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return EnableNodeGroupAutoScaleRequestValidationError{ + err := EnableNodeGroupAutoScaleRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_EnableNodeGroupAutoScaleRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return EnableNodeGroupAutoScaleRequestValidationError{ + err := EnableNodeGroupAutoScaleRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return EnableNodeGroupAutoScaleRequestMultiError(errors) } return nil } +// EnableNodeGroupAutoScaleRequestMultiError is an error wrapping multiple +// validation errors returned by EnableNodeGroupAutoScaleRequest.ValidateAll() +// if the designated constraints aren't met. +type EnableNodeGroupAutoScaleRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m EnableNodeGroupAutoScaleRequestMultiError) 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 EnableNodeGroupAutoScaleRequestMultiError) AllErrors() []error { return m } + // EnableNodeGroupAutoScaleRequestValidationError is the validation error // returned by EnableNodeGroupAutoScaleRequest.Validate if the designated // constraints aren't met. @@ -22772,19 +37579,53 @@ var _EnableNodeGroupAutoScaleRequest_NodeGroupID_Pattern = regexp.MustCompile("^ // Validate checks the field values on EnableNodeGroupAutoScaleResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *EnableNodeGroupAutoScaleResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on EnableNodeGroupAutoScaleResponse 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 +// EnableNodeGroupAutoScaleResponseMultiError, or nil if none found. +func (m *EnableNodeGroupAutoScaleResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *EnableNodeGroupAutoScaleResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, EnableNodeGroupAutoScaleResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, EnableNodeGroupAutoScaleResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return EnableNodeGroupAutoScaleResponseValidationError{ field: "WebAnnotations", @@ -22794,9 +37635,31 @@ func (m *EnableNodeGroupAutoScaleResponse) Validate() error { } } + if len(errors) > 0 { + return EnableNodeGroupAutoScaleResponseMultiError(errors) + } + return nil } +// EnableNodeGroupAutoScaleResponseMultiError is an error wrapping multiple +// validation errors returned by +// EnableNodeGroupAutoScaleResponse.ValidateAll() if the designated +// constraints aren't met. +type EnableNodeGroupAutoScaleResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m EnableNodeGroupAutoScaleResponseMultiError) 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 EnableNodeGroupAutoScaleResponseMultiError) AllErrors() []error { return m } + // EnableNodeGroupAutoScaleResponseValidationError is the validation error // returned by EnableNodeGroupAutoScaleResponse.Validate if the designated // constraints aren't met. @@ -22856,29 +37719,74 @@ var _ interface { // Validate checks the field values on DisableNodeGroupAutoScaleRequest with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *DisableNodeGroupAutoScaleRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DisableNodeGroupAutoScaleRequest 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 +// DisableNodeGroupAutoScaleRequestMultiError, or nil if none found. +func (m *DisableNodeGroupAutoScaleRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DisableNodeGroupAutoScaleRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetNodeGroupID()); l < 5 || l > 100 { - return DisableNodeGroupAutoScaleRequestValidationError{ + err := DisableNodeGroupAutoScaleRequestValidationError{ field: "NodeGroupID", reason: "value length must be between 5 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DisableNodeGroupAutoScaleRequest_NodeGroupID_Pattern.MatchString(m.GetNodeGroupID()) { - return DisableNodeGroupAutoScaleRequestValidationError{ + err := DisableNodeGroupAutoScaleRequestValidationError{ field: "NodeGroupID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return DisableNodeGroupAutoScaleRequestMultiError(errors) } return nil } +// DisableNodeGroupAutoScaleRequestMultiError is an error wrapping multiple +// validation errors returned by +// DisableNodeGroupAutoScaleRequest.ValidateAll() if the designated +// constraints aren't met. +type DisableNodeGroupAutoScaleRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DisableNodeGroupAutoScaleRequestMultiError) 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 DisableNodeGroupAutoScaleRequestMultiError) AllErrors() []error { return m } + // DisableNodeGroupAutoScaleRequestValidationError is the validation error // returned by DisableNodeGroupAutoScaleRequest.Validate if the designated // constraints aren't met. @@ -22940,19 +37848,53 @@ var _DisableNodeGroupAutoScaleRequest_NodeGroupID_Pattern = regexp.MustCompile(" // Validate checks the field values on DisableNodeGroupAutoScaleResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *DisableNodeGroupAutoScaleResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DisableNodeGroupAutoScaleResponse +// 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 +// DisableNodeGroupAutoScaleResponseMultiError, or nil if none found. +func (m *DisableNodeGroupAutoScaleResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DisableNodeGroupAutoScaleResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DisableNodeGroupAutoScaleResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DisableNodeGroupAutoScaleResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DisableNodeGroupAutoScaleResponseValidationError{ field: "WebAnnotations", @@ -22962,9 +37904,31 @@ func (m *DisableNodeGroupAutoScaleResponse) Validate() error { } } + if len(errors) > 0 { + return DisableNodeGroupAutoScaleResponseMultiError(errors) + } + return nil } +// DisableNodeGroupAutoScaleResponseMultiError is an error wrapping multiple +// validation errors returned by +// DisableNodeGroupAutoScaleResponse.ValidateAll() if the designated +// constraints aren't met. +type DisableNodeGroupAutoScaleResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DisableNodeGroupAutoScaleResponseMultiError) 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 DisableNodeGroupAutoScaleResponseMultiError) AllErrors() []error { return m } + // DisableNodeGroupAutoScaleResponseValidationError is the validation error // returned by DisableNodeGroupAutoScaleResponse.Validate if the designated // constraints aren't met. @@ -23023,20 +37987,38 @@ var _ interface { } = DisableNodeGroupAutoScaleResponseValidationError{} // Validate checks the field values on CreateTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *CreateTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateTaskRequest 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 +// CreateTaskRequestMultiError, or nil if none found. +func (m *CreateTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TaskType if _, ok := _CreateTaskRequest_Status_InLookup[m.GetStatus()]; !ok { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "Status", reason: "value must be in list [INITIALIZING RUNNING SUCCESS FAILED TIMEOUT]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Message @@ -23050,83 +38032,165 @@ func (m *CreateTaskRequest) Validate() error { // no validation rules for CurrentStep if len(m.GetStepSequence()) < 1 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "StepSequence", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } if l := len(m.GetSteps()); l < 1 || l > 20 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "Steps", reason: "value must contain between 1 and 20 pairs, inclusive", } - } - - for key, val := range m.GetSteps() { - _ = val - - // no validation rules for Steps[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return CreateTaskRequestValidationError{ - field: fmt.Sprintf("Steps[%v]", key), - reason: "embedded message failed validation", - cause: err, + if !all { + return err + } + errors = append(errors, err) + } + + { + sorted_keys := make([]string, len(m.GetSteps())) + i := 0 + for key := range m.GetSteps() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetSteps()[key] + _ = val + + // no validation rules for Steps[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return CreateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateTaskRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetProjectID()); l < 2 || l > 32 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ProjectID", reason: "value length must be between 2 and 32 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateTaskRequest_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateTaskRequestValidationError{ + err := CreateTaskRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for LastUpdate + if len(errors) > 0 { + return CreateTaskRequestMultiError(errors) + } + return nil } +// CreateTaskRequestMultiError is an error wrapping multiple validation errors +// returned by CreateTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type CreateTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateTaskRequestMultiError) 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 CreateTaskRequestMultiError) AllErrors() []error { return m } + // CreateTaskRequestValidationError is the validation error returned by // CreateTaskRequest.Validate if the designated constraints aren't met. type CreateTaskRequestValidationError struct { @@ -23197,19 +38261,52 @@ var _CreateTaskRequest_ProjectID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on CreateTaskResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateTaskResponse 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 +// CreateTaskResponseMultiError, or nil if none found. +func (m *CreateTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateTaskResponseValidationError{ field: "Data", @@ -23219,9 +38316,30 @@ func (m *CreateTaskResponse) Validate() error { } } + if len(errors) > 0 { + return CreateTaskResponseMultiError(errors) + } + return nil } +// CreateTaskResponseMultiError is an error wrapping multiple validation errors +// returned by CreateTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type CreateTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateTaskResponseMultiError) 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 CreateTaskResponseMultiError) AllErrors() []error { return m } + // CreateTaskResponseValidationError is the validation error returned by // CreateTaskResponse.Validate if the designated constraints aren't met. type CreateTaskResponseValidationError struct { @@ -23279,37 +38397,84 @@ var _ interface { } = CreateTaskResponseValidationError{} // Validate checks the field values on RetryTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *RetryTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RetryTaskRequest 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 +// RetryTaskRequestMultiError, or nil if none found. +func (m *RetryTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *RetryTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 1024 { - return RetryTaskRequestValidationError{ + err := RetryTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_RetryTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return RetryTaskRequestValidationError{ + err := RetryTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return RetryTaskRequestValidationError{ + err := RetryTaskRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return RetryTaskRequestMultiError(errors) } return nil } +// RetryTaskRequestMultiError is an error wrapping multiple validation errors +// returned by RetryTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type RetryTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RetryTaskRequestMultiError) 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 RetryTaskRequestMultiError) AllErrors() []error { return m } + // RetryTaskRequestValidationError is the validation error returned by // RetryTaskRequest.Validate if the designated constraints aren't met. type RetryTaskRequestValidationError struct { @@ -23367,20 +38532,53 @@ var _ interface { var _RetryTaskRequest_TaskID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on RetryTaskResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *RetryTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RetryTaskResponse 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 +// RetryTaskResponseMultiError, or nil if none found. +func (m *RetryTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *RetryTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, RetryTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, RetryTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return RetryTaskResponseValidationError{ field: "Data", @@ -23390,9 +38588,30 @@ func (m *RetryTaskResponse) Validate() error { } } + if len(errors) > 0 { + return RetryTaskResponseMultiError(errors) + } + return nil } +// RetryTaskResponseMultiError is an error wrapping multiple validation errors +// returned by RetryTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type RetryTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RetryTaskResponseMultiError) 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 RetryTaskResponseMultiError) AllErrors() []error { return m } + // RetryTaskResponseValidationError is the validation error returned by // RetryTaskResponse.Validate if the designated constraints aren't met. type RetryTaskResponseValidationError struct { @@ -23450,37 +38669,84 @@ var _ interface { } = RetryTaskResponseValidationError{} // Validate checks the field values on SkipTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *SkipTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SkipTaskRequest 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 +// SkipTaskRequestMultiError, or nil if none found. +func (m *SkipTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *SkipTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 1024 { - return SkipTaskRequestValidationError{ + err := SkipTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_SkipTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return SkipTaskRequestValidationError{ + err := SkipTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 1024 { - return SkipTaskRequestValidationError{ + err := SkipTaskRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 1024 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return SkipTaskRequestMultiError(errors) } return nil } +// SkipTaskRequestMultiError is an error wrapping multiple validation errors +// returned by SkipTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type SkipTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SkipTaskRequestMultiError) 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 SkipTaskRequestMultiError) AllErrors() []error { return m } + // SkipTaskRequestValidationError is the validation error returned by // SkipTaskRequest.Validate if the designated constraints aren't met. type SkipTaskRequestValidationError struct { @@ -23538,20 +38804,53 @@ var _ interface { var _SkipTaskRequest_TaskID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on SkipTaskResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *SkipTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SkipTaskResponse 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 +// SkipTaskResponseMultiError, or nil if none found. +func (m *SkipTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *SkipTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SkipTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SkipTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SkipTaskResponseValidationError{ field: "Data", @@ -23561,9 +38860,30 @@ func (m *SkipTaskResponse) Validate() error { } } + if len(errors) > 0 { + return SkipTaskResponseMultiError(errors) + } + return nil } +// SkipTaskResponseMultiError is an error wrapping multiple validation errors +// returned by SkipTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type SkipTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SkipTaskResponseMultiError) 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 SkipTaskResponseMultiError) AllErrors() []error { return m } + // SkipTaskResponseValidationError is the validation error returned by // SkipTaskResponse.Validate if the designated constraints aren't met. type SkipTaskResponseValidationError struct { @@ -23619,32 +38939,58 @@ var _ interface { } = SkipTaskResponseValidationError{} // Validate checks the field values on UpdateTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *UpdateTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateTaskRequest 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 +// UpdateTaskRequestMultiError, or nil if none found. +func (m *UpdateTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 36 { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 36 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_UpdateTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _UpdateTaskRequest_Status_InLookup[m.GetStatus()]; !ok { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "Status", reason: "value must be in list [INITIALIZING RUNNING SUCCESS FAILURE TIMEOUT]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Message @@ -23656,39 +39002,97 @@ func (m *UpdateTaskRequest) Validate() error { // no validation rules for CurrentStep if l := len(m.GetSteps()); l < 1 || l > 20 { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "Steps", reason: "value must contain between 1 and 20 pairs, inclusive", } - } - - for key, val := range m.GetSteps() { - _ = val - - // no validation rules for Steps[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return UpdateTaskRequestValidationError{ - field: fmt.Sprintf("Steps[%v]", key), - reason: "embedded message failed validation", - cause: err, + if !all { + return err + } + errors = append(errors, err) + } + + { + sorted_keys := make([]string, len(m.GetSteps())) + i := 0 + for key := range m.GetSteps() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetSteps()[key] + _ = val + + // no validation rules for Steps[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return UpdateTaskRequestValidationError{ + field: fmt.Sprintf("Steps[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } - } + } } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return UpdateTaskRequestValidationError{ + err := UpdateTaskRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateTaskRequestMultiError(errors) } return nil } +// UpdateTaskRequestMultiError is an error wrapping multiple validation errors +// returned by UpdateTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type UpdateTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateTaskRequestMultiError) 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 UpdateTaskRequestMultiError) AllErrors() []error { return m } + // UpdateTaskRequestValidationError is the validation error returned by // UpdateTaskRequest.Validate if the designated constraints aren't met. type UpdateTaskRequestValidationError struct { @@ -23757,19 +39161,52 @@ var _UpdateTaskRequest_Status_InLookup = map[string]struct{}{ // Validate checks the field values on UpdateTaskResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateTaskResponse 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 +// UpdateTaskResponseMultiError, or nil if none found. +func (m *UpdateTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateTaskResponseValidationError{ field: "Data", @@ -23779,9 +39216,30 @@ func (m *UpdateTaskResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateTaskResponseMultiError(errors) + } + return nil } +// UpdateTaskResponseMultiError is an error wrapping multiple validation errors +// returned by UpdateTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type UpdateTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateTaskResponseMultiError) 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 UpdateTaskResponseMultiError) AllErrors() []error { return m } + // UpdateTaskResponseValidationError is the validation error returned by // UpdateTaskResponse.Validate if the designated constraints aren't met. type UpdateTaskResponseValidationError struct { @@ -23839,32 +39297,75 @@ var _ interface { } = UpdateTaskResponseValidationError{} // Validate checks the field values on DeleteTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *DeleteTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteTaskRequest 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 +// DeleteTaskRequestMultiError, or nil if none found. +func (m *DeleteTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 36 { - return DeleteTaskRequestValidationError{ + err := DeleteTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 36 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return DeleteTaskRequestValidationError{ + err := DeleteTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForce + if len(errors) > 0 { + return DeleteTaskRequestMultiError(errors) + } + return nil } +// DeleteTaskRequestMultiError is an error wrapping multiple validation errors +// returned by DeleteTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type DeleteTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteTaskRequestMultiError) 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 DeleteTaskRequestMultiError) AllErrors() []error { return m } + // DeleteTaskRequestValidationError is the validation error returned by // DeleteTaskRequest.Validate if the designated constraints aren't met. type DeleteTaskRequestValidationError struct { @@ -23925,19 +39426,52 @@ var _DeleteTaskRequest_TaskID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on DeleteTaskResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteTaskResponse 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 +// DeleteTaskResponseMultiError, or nil if none found. +func (m *DeleteTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteTaskResponseValidationError{ field: "Data", @@ -23947,9 +39481,30 @@ func (m *DeleteTaskResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteTaskResponseMultiError(errors) + } + return nil } +// DeleteTaskResponseMultiError is an error wrapping multiple validation errors +// returned by DeleteTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type DeleteTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteTaskResponseMultiError) 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 DeleteTaskResponseMultiError) AllErrors() []error { return m } + // DeleteTaskResponseValidationError is the validation error returned by // DeleteTaskResponse.Validate if the designated constraints aren't met. type DeleteTaskResponseValidationError struct { @@ -24007,30 +39562,73 @@ var _ interface { } = DeleteTaskResponseValidationError{} // Validate checks the field values on GetTaskRequest with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *GetTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTaskRequest 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 GetTaskRequestMultiError, +// or nil if none found. +func (m *GetTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetTaskID()); l < 2 || l > 36 { - return GetTaskRequestValidationError{ + err := GetTaskRequestValidationError{ field: "TaskID", reason: "value length must be between 2 and 36 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_GetTaskRequest_TaskID_Pattern.MatchString(m.GetTaskID()) { - return GetTaskRequestValidationError{ + err := GetTaskRequestValidationError{ field: "TaskID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetTaskRequestMultiError(errors) } return nil } +// GetTaskRequestMultiError is an error wrapping multiple validation errors +// returned by GetTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type GetTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTaskRequestMultiError) 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 GetTaskRequestMultiError) AllErrors() []error { return m } + // GetTaskRequestValidationError is the validation error returned by // GetTaskRequest.Validate if the designated constraints aren't met. type GetTaskRequestValidationError struct { @@ -24088,20 +39686,53 @@ var _ interface { var _GetTaskRequest_TaskID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-]+$") // Validate checks the field values on GetTaskResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *GetTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTaskResponse 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 +// GetTaskResponseMultiError, or nil if none found. +func (m *GetTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTaskResponseValidationError{ field: "Data", @@ -24111,9 +39742,30 @@ func (m *GetTaskResponse) Validate() error { } } + if len(errors) > 0 { + return GetTaskResponseMultiError(errors) + } + return nil } +// GetTaskResponseMultiError is an error wrapping multiple validation errors +// returned by GetTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type GetTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTaskResponseMultiError) 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 GetTaskResponseMultiError) AllErrors() []error { return m } + // GetTaskResponseValidationError is the validation error returned by // GetTaskResponse.Validate if the designated constraints aren't met. type GetTaskResponseValidationError struct { @@ -24169,39 +39821,69 @@ var _ interface { } = GetTaskResponseValidationError{} // Validate checks the field values on ListTaskRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *ListTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListTaskRequest 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 +// ListTaskRequestMultiError, or nil if none found. +func (m *ListTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return ListTaskRequestValidationError{ + err := ListTaskRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 32 { - return ListTaskRequestValidationError{ + err := ListTaskRequestValidationError{ field: "ProjectID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetCreator()) > 20 { - return ListTaskRequestValidationError{ + err := ListTaskRequestValidationError{ field: "Creator", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetUpdater()) > 20 { - return ListTaskRequestValidationError{ + err := ListTaskRequestValidationError{ field: "Updater", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for TaskType @@ -24212,9 +39894,30 @@ func (m *ListTaskRequest) Validate() error { // no validation rules for NodeGroupID + if len(errors) > 0 { + return ListTaskRequestMultiError(errors) + } + return nil } +// ListTaskRequestMultiError is an error wrapping multiple validation errors +// returned by ListTaskRequest.ValidateAll() if the designated constraints +// aren't met. +type ListTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListTaskRequestMultiError) 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 ListTaskRequestMultiError) AllErrors() []error { return m } + // ListTaskRequestValidationError is the validation error returned by // ListTaskRequest.Validate if the designated constraints aren't met. type ListTaskRequestValidationError struct { @@ -24270,13 +39973,27 @@ var _ interface { } = ListTaskRequestValidationError{} // Validate checks the field values on ListTaskResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *ListTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListTaskResponse 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 +// ListTaskResponseMultiError, or nil if none found. +func (m *ListTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -24286,7 +40003,26 @@ func (m *ListTaskResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListTaskResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListTaskResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListTaskResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -24298,7 +40034,26 @@ func (m *ListTaskResponse) Validate() error { } - if v, ok := interface{}(m.GetLatestTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetLatestTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListTaskResponseValidationError{ + field: "LatestTask", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListTaskResponseValidationError{ + field: "LatestTask", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLatestTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListTaskResponseValidationError{ field: "LatestTask", @@ -24308,9 +40063,30 @@ func (m *ListTaskResponse) Validate() error { } } + if len(errors) > 0 { + return ListTaskResponseMultiError(errors) + } + return nil } +// ListTaskResponseMultiError is an error wrapping multiple validation errors +// returned by ListTaskResponse.ValidateAll() if the designated constraints +// aren't met. +type ListTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListTaskResponseMultiError) 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 ListTaskResponseMultiError) AllErrors() []error { return m } + // ListTaskResponseValidationError is the validation error returned by // ListTaskResponse.Validate if the designated constraints aren't met. type ListTaskResponseValidationError struct { @@ -24367,12 +40143,26 @@ var _ interface { // Validate checks the field values on CreateAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateAutoScalingOptionRequest 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 +// CreateAutoScalingOptionRequestMultiError, or nil if none found. +func (m *CreateAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsScaleDownEnable // no validation rules for Expander @@ -24400,31 +40190,47 @@ func (m *CreateAutoScalingOptionRequest) Validate() error { // no validation rules for UnregisteredNodeRemovalTime if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return CreateAutoScalingOptionRequestValidationError{ + err := CreateAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return CreateAutoScalingOptionRequestValidationError{ + err := CreateAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateAutoScalingOptionRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return CreateAutoScalingOptionRequestValidationError{ + err := CreateAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetCreator()); l < 2 || l > 20 { - return CreateAutoScalingOptionRequestValidationError{ + err := CreateAutoScalingOptionRequestValidationError{ field: "Creator", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider @@ -24439,7 +40245,26 @@ func (m *CreateAutoScalingOptionRequest) Validate() error { // no validation rules for MaxNodeProvisionTime - if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleUpFromZero()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateAutoScalingOptionRequestValidationError{ field: "ScaleUpFromZero", @@ -24453,7 +40278,26 @@ func (m *CreateAutoScalingOptionRequest) Validate() error { // no validation rules for ScaleDownDelayAfterDelete - if v, ok := interface{}(m.GetScaleDownDelayAfterFailure()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleDownDelayAfterFailure()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateAutoScalingOptionRequestValidationError{ + field: "ScaleDownDelayAfterFailure", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateAutoScalingOptionRequestValidationError{ + field: "ScaleDownDelayAfterFailure", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleDownDelayAfterFailure()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterFailure", @@ -24469,9 +40313,30 @@ func (m *CreateAutoScalingOptionRequest) Validate() error { // no validation rules for BufferResourceMemRatio + if len(errors) > 0 { + return CreateAutoScalingOptionRequestMultiError(errors) + } + return nil } +// CreateAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by CreateAutoScalingOptionRequest.ValidateAll() +// if the designated constraints aren't met. +type CreateAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateAutoScalingOptionRequestMultiError) 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 CreateAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // CreateAutoScalingOptionRequestValidationError is the validation error // returned by CreateAutoScalingOptionRequest.Validate if the designated // constraints aren't met. @@ -24533,19 +40398,52 @@ var _CreateAutoScalingOptionRequest_ClusterID_Pattern = regexp.MustCompile("^[0- // Validate checks the field values on CreateAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateAutoScalingOptionResponse 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 +// CreateAutoScalingOptionResponseMultiError, or nil if none found. +func (m *CreateAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateAutoScalingOptionResponseValidationError{ field: "Data", @@ -24555,9 +40453,30 @@ func (m *CreateAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return CreateAutoScalingOptionResponseMultiError(errors) + } + return nil } +// CreateAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by CreateAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type CreateAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateAutoScalingOptionResponseMultiError) 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 CreateAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // CreateAutoScalingOptionResponseValidationError is the validation error // returned by CreateAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -24617,50 +40536,103 @@ var _ interface { // Validate checks the field values on UpdateAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAutoScalingOptionRequest 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 +// UpdateAutoScalingOptionRequestMultiError, or nil if none found. +func (m *UpdateAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsScaleDownEnable if _, ok := _UpdateAutoScalingOptionRequest_Expander_InLookup[m.GetExpander()]; !ok { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "Expander", reason: "value must be in list [random least-waste most-pods priority]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxEmptyBulkDelete(); val < 1 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "MaxEmptyBulkDelete", reason: "value must be inside range [1, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownDelay(); val < 60 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelay", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUnneededTime(); val < 60 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownUnneededTime", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUtilizationThreahold(); val < 0 || val > 80 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownUtilizationThreahold", reason: "value must be inside range [0, 80]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetSkipNodesWithLocalStorage()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSkipNodesWithLocalStorage()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "SkipNodesWithLocalStorage", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "SkipNodesWithLocalStorage", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSkipNodesWithLocalStorage()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "SkipNodesWithLocalStorage", @@ -24670,7 +40642,26 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } } - if v, ok := interface{}(m.GetSkipNodesWithSystemPods()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSkipNodesWithSystemPods()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "SkipNodesWithSystemPods", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "SkipNodesWithSystemPods", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSkipNodesWithSystemPods()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "SkipNodesWithSystemPods", @@ -24680,7 +40671,26 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } } - if v, ok := interface{}(m.GetIgnoreDaemonSetsUtilization()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetIgnoreDaemonSetsUtilization()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "IgnoreDaemonSetsUtilization", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "IgnoreDaemonSetsUtilization", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetIgnoreDaemonSetsUtilization()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "IgnoreDaemonSetsUtilization", @@ -24691,47 +40701,71 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } if val := m.GetOkTotalUnreadyCount(); val < 0 || val > 320000 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "OkTotalUnreadyCount", reason: "value must be inside range [0, 320000]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxTotalUnreadyPercentage(); val < 0 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "MaxTotalUnreadyPercentage", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUnreadyTime(); val < 1200 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownUnreadyTime", reason: "value must be inside range [1200, 86400]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for UnregisteredNodeRemovalTime if utf8.RuneCountInString(m.GetProjectID()) > 32 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ProjectID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider @@ -24741,36 +40775,71 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { if wrapper := m.GetBufferResourceRatio(); wrapper != nil { if val := wrapper.GetValue(); val < 0 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "BufferResourceRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } } if val := m.GetMaxGracefulTerminationSec(); val < 60 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "MaxGracefulTerminationSec", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScanInterval(); val < 5 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScanInterval", reason: "value must be inside range [5, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxNodeProvisionTime(); val < 900 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "MaxNodeProvisionTime", reason: "value must be inside range [900, 86400]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleUpFromZero()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "ScaleUpFromZero", @@ -24781,45 +40850,84 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } if val := m.GetScaleDownDelayAfterAdd(); val < 1200 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterAdd", reason: "value must be inside range [1200, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownDelayAfterDelete(); val < 0 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterDelete", reason: "value must be inside range [0, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if wrapper := m.GetScaleDownDelayAfterFailure(); wrapper != nil { if val := wrapper.GetValue(); val < 60 || val > 86400 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterFailure", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } } if val := m.GetBufferResourceCpuRatio(); val < 0 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "BufferResourceCpuRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetBufferResourceMemRatio(); val < 0 || val > 100 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "BufferResourceMemRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetModule()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "Module", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetModule()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "Module", @@ -24829,7 +40937,26 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { } } - if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebhook()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "Webhook", @@ -24841,7 +40968,26 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { // no validation rules for OnlyUpdateInfo - if v, ok := interface{}(m.GetExpendablePodsPriorityCutoff()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExpendablePodsPriorityCutoff()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "ExpendablePodsPriorityCutoff", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionRequestValidationError{ + field: "ExpendablePodsPriorityCutoff", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExpendablePodsPriorityCutoff()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionRequestValidationError{ field: "ExpendablePodsPriorityCutoff", @@ -24854,17 +41000,42 @@ func (m *UpdateAutoScalingOptionRequest) Validate() error { if wrapper := m.GetNewPodScaleUpDelay(); wrapper != nil { if wrapper.GetValue() < 0 { - return UpdateAutoScalingOptionRequestValidationError{ + err := UpdateAutoScalingOptionRequestValidationError{ field: "NewPodScaleUpDelay", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } } + if len(errors) > 0 { + return UpdateAutoScalingOptionRequestMultiError(errors) + } + return nil } +// UpdateAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateAutoScalingOptionRequest.ValidateAll() +// if the designated constraints aren't met. +type UpdateAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAutoScalingOptionRequestMultiError) 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 UpdateAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // UpdateAutoScalingOptionRequestValidationError is the validation error // returned by UpdateAutoScalingOptionRequest.Validate if the designated // constraints aren't met. @@ -24931,19 +41102,52 @@ var _UpdateAutoScalingOptionRequest_Expander_InLookup = map[string]struct{}{ // Validate checks the field values on UpdateAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAutoScalingOptionResponse 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 +// UpdateAutoScalingOptionResponseMultiError, or nil if none found. +func (m *UpdateAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionResponseValidationError{ field: "Data", @@ -24953,7 +41157,26 @@ func (m *UpdateAutoScalingOptionResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingOptionResponseValidationError{ field: "WebAnnotations", @@ -24963,9 +41186,30 @@ func (m *UpdateAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateAutoScalingOptionResponseMultiError(errors) + } + return nil } +// UpdateAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAutoScalingOptionResponseMultiError) 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 UpdateAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // UpdateAutoScalingOptionResponseValidationError is the validation error // returned by UpdateAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -25025,24 +41269,65 @@ var _ interface { // Validate checks the field values on UpdateAsOptionDeviceProviderRequest with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *UpdateAsOptionDeviceProviderRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAsOptionDeviceProviderRequest +// 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 +// UpdateAsOptionDeviceProviderRequestMultiError, or nil if none found. +func (m *UpdateAsOptionDeviceProviderRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAsOptionDeviceProviderRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return UpdateAsOptionDeviceProviderRequestValidationError{ + err := UpdateAsOptionDeviceProviderRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider + if len(errors) > 0 { + return UpdateAsOptionDeviceProviderRequestMultiError(errors) + } + return nil } +// UpdateAsOptionDeviceProviderRequestMultiError is an error wrapping multiple +// validation errors returned by +// UpdateAsOptionDeviceProviderRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateAsOptionDeviceProviderRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAsOptionDeviceProviderRequestMultiError) 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 UpdateAsOptionDeviceProviderRequestMultiError) AllErrors() []error { return m } + // UpdateAsOptionDeviceProviderRequestValidationError is the validation error // returned by UpdateAsOptionDeviceProviderRequest.Validate if the designated // constraints aren't met. @@ -25102,21 +41387,58 @@ var _ interface { // Validate checks the field values on UpdateAsOptionDeviceProviderResponse // with the rules defined in the proto definition for this message. If any -// rules are violated, an error is returned. +// rules are violated, the first error encountered is returned, or nil if +// there are no violations. func (m *UpdateAsOptionDeviceProviderResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAsOptionDeviceProviderResponse +// 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 +// UpdateAsOptionDeviceProviderResponseMultiError, or nil if none found. +func (m *UpdateAsOptionDeviceProviderResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAsOptionDeviceProviderResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return UpdateAsOptionDeviceProviderResponseMultiError(errors) + } + return nil } +// UpdateAsOptionDeviceProviderResponseMultiError is an error wrapping multiple +// validation errors returned by +// UpdateAsOptionDeviceProviderResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateAsOptionDeviceProviderResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAsOptionDeviceProviderResponseMultiError) 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 UpdateAsOptionDeviceProviderResponseMultiError) AllErrors() []error { return m } + // UpdateAsOptionDeviceProviderResponseValidationError is the validation error // returned by UpdateAsOptionDeviceProviderResponse.Validate if the designated // constraints aren't met. @@ -25176,47 +41498,81 @@ var _ interface { // Validate checks the field values on SyncAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *SyncAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SyncAutoScalingOptionRequest 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 +// SyncAutoScalingOptionRequestMultiError, or nil if none found. +func (m *SyncAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *SyncAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for IsScaleDownEnable if _, ok := _SyncAutoScalingOptionRequest_Expander_InLookup[m.GetExpander()]; !ok { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "Expander", reason: "value must be in list [random least-waste most-pods priority]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxEmptyBulkDelete(); val < 1 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxEmptyBulkDelete", reason: "value must be inside range [1, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownDelay(); val < 60 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownDelay", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUnneededTime(); val < 60 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownUnneededTime", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUtilizationThreahold(); val < 0 || val > 80 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownUtilizationThreahold", reason: "value must be inside range [0, 80]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for SkipNodesWithLocalStorage @@ -25226,85 +41582,148 @@ func (m *SyncAutoScalingOptionRequest) Validate() error { // no validation rules for IgnoreDaemonSetsUtilization if val := m.GetOkTotalUnreadyCount(); val < 0 || val > 320000 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "OkTotalUnreadyCount", reason: "value must be inside range [0, 320000]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxTotalUnreadyPercentage(); val < 0 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxTotalUnreadyPercentage", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownUnreadyTime(); val < 1200 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownUnreadyTime", reason: "value must be inside range [1200, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ScaleDownGpuUtilizationThreshold if val := m.GetBufferResourceRatio(); val < 0 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "BufferResourceRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxGracefulTerminationSec(); val < 60 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxGracefulTerminationSec", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScanInterval(); val < 5 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScanInterval", reason: "value must be inside range [5, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxNodeProvisionTime(); val < 900 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxNodeProvisionTime", reason: "value must be inside range [900, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxNodeStartupTime(); val < 900 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxNodeStartupTime", reason: "value must be inside range [900, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetMaxNodeStartScheduleTime(); val < 900 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "MaxNodeStartScheduleTime", reason: "value must be inside range [900, 86400]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetScaleUpFromZero()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "ScaleUpFromZero", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetScaleUpFromZero()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionRequestValidationError{ field: "ScaleUpFromZero", @@ -25315,45 +41734,84 @@ func (m *SyncAutoScalingOptionRequest) Validate() error { } if val := m.GetScaleDownDelayAfterAdd(); val < 1200 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterAdd", reason: "value must be inside range [1200, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetScaleDownDelayAfterDelete(); val < 0 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterDelete", reason: "value must be inside range [0, 86400]", } + if !all { + return err + } + errors = append(errors, err) } if wrapper := m.GetScaleDownDelayAfterFailure(); wrapper != nil { if val := wrapper.GetValue(); val < 60 || val > 86400 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "ScaleDownDelayAfterFailure", reason: "value must be inside range [60, 86400]", } + if !all { + return err + } + errors = append(errors, err) } } if val := m.GetBufferResourceCpuRatio(); val < 0 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "BufferResourceCpuRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } if val := m.GetBufferResourceMemRatio(); val < 0 || val > 100 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "BufferResourceMemRatio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebhook()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "Webhook", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebhook()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionRequestValidationError{ field: "Webhook", @@ -25363,7 +41821,26 @@ func (m *SyncAutoScalingOptionRequest) Validate() error { } } - if v, ok := interface{}(m.GetExpendablePodsPriorityCutoff()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetExpendablePodsPriorityCutoff()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "ExpendablePodsPriorityCutoff", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionRequestValidationError{ + field: "ExpendablePodsPriorityCutoff", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetExpendablePodsPriorityCutoff()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionRequestValidationError{ field: "ExpendablePodsPriorityCutoff", @@ -25376,17 +41853,42 @@ func (m *SyncAutoScalingOptionRequest) Validate() error { if wrapper := m.GetNewPodScaleUpDelay(); wrapper != nil { if wrapper.GetValue() < 0 { - return SyncAutoScalingOptionRequestValidationError{ + err := SyncAutoScalingOptionRequestValidationError{ field: "NewPodScaleUpDelay", reason: "value must be greater than or equal to 0", } + if !all { + return err + } + errors = append(errors, err) } } + if len(errors) > 0 { + return SyncAutoScalingOptionRequestMultiError(errors) + } + return nil } +// SyncAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by SyncAutoScalingOptionRequest.ValidateAll() if +// the designated constraints aren't met. +type SyncAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SyncAutoScalingOptionRequestMultiError) 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 SyncAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // SyncAutoScalingOptionRequestValidationError is the validation error returned // by SyncAutoScalingOptionRequest.Validate if the designated constraints // aren't met. @@ -25453,19 +41955,52 @@ var _SyncAutoScalingOptionRequest_Expander_InLookup = map[string]struct{}{ // Validate checks the field values on SyncAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *SyncAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SyncAutoScalingOptionResponse 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 +// SyncAutoScalingOptionResponseMultiError, or nil if none found. +func (m *SyncAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *SyncAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionResponseValidationError{ field: "Data", @@ -25475,7 +42010,26 @@ func (m *SyncAutoScalingOptionResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SyncAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SyncAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SyncAutoScalingOptionResponseValidationError{ field: "WebAnnotations", @@ -25485,9 +42039,30 @@ func (m *SyncAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return SyncAutoScalingOptionResponseMultiError(errors) + } + return nil } +// SyncAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by SyncAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type SyncAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SyncAutoScalingOptionResponseMultiError) 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 SyncAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // SyncAutoScalingOptionResponseValidationError is the validation error // returned by SyncAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -25547,38 +42122,85 @@ var _ interface { // Validate checks the field values on DeleteAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteAutoScalingOptionRequest 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 +// DeleteAutoScalingOptionRequestMultiError, or nil if none found. +func (m *DeleteAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return DeleteAutoScalingOptionRequestValidationError{ + err := DeleteAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return DeleteAutoScalingOptionRequestValidationError{ + err := DeleteAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_DeleteAutoScalingOptionRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return DeleteAutoScalingOptionRequestValidationError{ + err := DeleteAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for IsForce + if len(errors) > 0 { + return DeleteAutoScalingOptionRequestMultiError(errors) + } + return nil } +// DeleteAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by DeleteAutoScalingOptionRequest.ValidateAll() +// if the designated constraints aren't met. +type DeleteAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteAutoScalingOptionRequestMultiError) 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 DeleteAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // DeleteAutoScalingOptionRequestValidationError is the validation error // returned by DeleteAutoScalingOptionRequest.Validate if the designated // constraints aren't met. @@ -25640,19 +42262,52 @@ var _DeleteAutoScalingOptionRequest_ClusterID_Pattern = regexp.MustCompile("^[0- // Validate checks the field values on DeleteAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteAutoScalingOptionResponse 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 +// DeleteAutoScalingOptionResponseMultiError, or nil if none found. +func (m *DeleteAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteAutoScalingOptionResponseValidationError{ field: "Data", @@ -25662,7 +42317,26 @@ func (m *DeleteAutoScalingOptionResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteAutoScalingOptionResponseValidationError{ field: "WebAnnotations", @@ -25672,9 +42346,30 @@ func (m *DeleteAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteAutoScalingOptionResponseMultiError(errors) + } + return nil } +// DeleteAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by DeleteAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type DeleteAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteAutoScalingOptionResponseMultiError) 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 DeleteAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // DeleteAutoScalingOptionResponseValidationError is the validation error // returned by DeleteAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -25734,38 +42429,85 @@ var _ interface { // Validate checks the field values on GetAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetAutoScalingOptionRequest 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 +// GetAutoScalingOptionRequestMultiError, or nil if none found. +func (m *GetAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 2 || l > 100 { - return GetAutoScalingOptionRequestValidationError{ + err := GetAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be between 2 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !strings.HasPrefix(m.GetClusterID(), "BCS-") { - return GetAutoScalingOptionRequestValidationError{ + err := GetAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not have prefix \"BCS-\"", } + if !all { + return err + } + errors = append(errors, err) } if !_GetAutoScalingOptionRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return GetAutoScalingOptionRequestValidationError{ + err := GetAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider + if len(errors) > 0 { + return GetAutoScalingOptionRequestMultiError(errors) + } + return nil } +// GetAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by GetAutoScalingOptionRequest.ValidateAll() if +// the designated constraints aren't met. +type GetAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetAutoScalingOptionRequestMultiError) 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 GetAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // GetAutoScalingOptionRequestValidationError is the validation error returned // by GetAutoScalingOptionRequest.Validate if the designated constraints // aren't met. @@ -25827,19 +42569,52 @@ var _GetAutoScalingOptionRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a- // Validate checks the field values on GetAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetAutoScalingOptionResponse 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 +// GetAutoScalingOptionResponseMultiError, or nil if none found. +func (m *GetAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetAutoScalingOptionResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetAutoScalingOptionResponseValidationError{ field: "Data", @@ -25849,7 +42624,26 @@ func (m *GetAutoScalingOptionResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetAutoScalingOptionResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetAutoScalingOptionResponseValidationError{ field: "WebAnnotations", @@ -25859,9 +42653,30 @@ func (m *GetAutoScalingOptionResponse) Validate() error { } } + if len(errors) > 0 { + return GetAutoScalingOptionResponseMultiError(errors) + } + return nil } +// GetAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by GetAutoScalingOptionResponse.ValidateAll() if +// the designated constraints aren't met. +type GetAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetAutoScalingOptionResponseMultiError) 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 GetAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // GetAutoScalingOptionResponseValidationError is the validation error returned // by GetAutoScalingOptionResponse.Validate if the designated constraints // aren't met. @@ -25921,43 +42736,94 @@ var _ interface { // Validate checks the field values on ListAutoScalingOptionRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListAutoScalingOptionRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListAutoScalingOptionRequest 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 +// ListAutoScalingOptionRequestMultiError, or nil if none found. +func (m *ListAutoScalingOptionRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListAutoScalingOptionRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return ListAutoScalingOptionRequestValidationError{ + err := ListAutoScalingOptionRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetProjectID()) > 32 { - return ListAutoScalingOptionRequestValidationError{ + err := ListAutoScalingOptionRequestValidationError{ field: "ProjectID", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetCreator()) > 20 { - return ListAutoScalingOptionRequestValidationError{ + err := ListAutoScalingOptionRequestValidationError{ field: "Creator", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetUpdater()) > 20 { - return ListAutoScalingOptionRequestValidationError{ + err := ListAutoScalingOptionRequestValidationError{ field: "Updater", reason: "value length must be at most 20 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListAutoScalingOptionRequestMultiError(errors) } return nil } +// ListAutoScalingOptionRequestMultiError is an error wrapping multiple +// validation errors returned by ListAutoScalingOptionRequest.ValidateAll() if +// the designated constraints aren't met. +type ListAutoScalingOptionRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListAutoScalingOptionRequestMultiError) 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 ListAutoScalingOptionRequestMultiError) AllErrors() []error { return m } + // ListAutoScalingOptionRequestValidationError is the validation error returned // by ListAutoScalingOptionRequest.Validate if the designated constraints // aren't met. @@ -26017,12 +42883,26 @@ var _ interface { // Validate checks the field values on ListAutoScalingOptionResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListAutoScalingOptionResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListAutoScalingOptionResponse 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 +// ListAutoScalingOptionResponseMultiError, or nil if none found. +func (m *ListAutoScalingOptionResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListAutoScalingOptionResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -26032,7 +42912,26 @@ func (m *ListAutoScalingOptionResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListAutoScalingOptionResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListAutoScalingOptionResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListAutoScalingOptionResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -26044,9 +42943,30 @@ func (m *ListAutoScalingOptionResponse) Validate() error { } + if len(errors) > 0 { + return ListAutoScalingOptionResponseMultiError(errors) + } + return nil } +// ListAutoScalingOptionResponseMultiError is an error wrapping multiple +// validation errors returned by ListAutoScalingOptionResponse.ValidateAll() +// if the designated constraints aren't met. +type ListAutoScalingOptionResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListAutoScalingOptionResponseMultiError) 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 ListAutoScalingOptionResponseMultiError) AllErrors() []error { return m } + // ListAutoScalingOptionResponseValidationError is the validation error // returned by ListAutoScalingOptionResponse.Validate if the designated // constraints aren't met. @@ -26106,33 +43026,76 @@ var _ interface { // Validate checks the field values on UpdateAutoScalingStatusRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateAutoScalingStatusRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAutoScalingStatusRequest 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 +// UpdateAutoScalingStatusRequestMultiError, or nil if none found. +func (m *UpdateAutoScalingStatusRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAutoScalingStatusRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Enable if utf8.RuneCountInString(m.GetClusterID()) > 100 { - return UpdateAutoScalingStatusRequestValidationError{ + err := UpdateAutoScalingStatusRequestValidationError{ field: "ClusterID", reason: "value length must be at most 100 runes", } + if !all { + return err + } + errors = append(errors, err) } if l := utf8.RuneCountInString(m.GetUpdater()); l < 2 || l > 20 { - return UpdateAutoScalingStatusRequestValidationError{ + err := UpdateAutoScalingStatusRequestValidationError{ field: "Updater", reason: "value length must be between 2 and 20 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Provider + if len(errors) > 0 { + return UpdateAutoScalingStatusRequestMultiError(errors) + } + return nil } +// UpdateAutoScalingStatusRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateAutoScalingStatusRequest.ValidateAll() +// if the designated constraints aren't met. +type UpdateAutoScalingStatusRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAutoScalingStatusRequestMultiError) 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 UpdateAutoScalingStatusRequestMultiError) AllErrors() []error { return m } + // UpdateAutoScalingStatusRequestValidationError is the validation error // returned by UpdateAutoScalingStatusRequest.Validate if the designated // constraints aren't met. @@ -26192,19 +43155,52 @@ var _ interface { // Validate checks the field values on UpdateAutoScalingStatusResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateAutoScalingStatusResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateAutoScalingStatusResponse 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 +// UpdateAutoScalingStatusResponseMultiError, or nil if none found. +func (m *UpdateAutoScalingStatusResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateAutoScalingStatusResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingStatusResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingStatusResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingStatusResponseValidationError{ field: "Data", @@ -26214,7 +43210,26 @@ func (m *UpdateAutoScalingStatusResponse) Validate() error { } } - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateAutoScalingStatusResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateAutoScalingStatusResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateAutoScalingStatusResponseValidationError{ field: "WebAnnotations", @@ -26224,9 +43239,30 @@ func (m *UpdateAutoScalingStatusResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateAutoScalingStatusResponseMultiError(errors) + } + return nil } +// UpdateAutoScalingStatusResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateAutoScalingStatusResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateAutoScalingStatusResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateAutoScalingStatusResponseMultiError) 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 UpdateAutoScalingStatusResponseMultiError) AllErrors() []error { return m } + // UpdateAutoScalingStatusResponseValidationError is the validation error // returned by UpdateAutoScalingStatusResponse.Validate if the designated // constraints aren't met. @@ -26285,13 +43321,27 @@ var _ interface { } = UpdateAutoScalingStatusResponseValidationError{} // Validate checks the field values on ServiceRoleInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *ServiceRoleInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ServiceRoleInfo 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 +// ServiceRoleInfoMultiError, or nil if none found. +func (m *ServiceRoleInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ServiceRoleInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for RoleName // no validation rules for RoleID @@ -26300,9 +43350,30 @@ func (m *ServiceRoleInfo) Validate() error { // no validation rules for Description + if len(errors) > 0 { + return ServiceRoleInfoMultiError(errors) + } + return nil } +// ServiceRoleInfoMultiError is an error wrapping multiple validation errors +// returned by ServiceRoleInfo.ValidateAll() if the designated constraints +// aren't met. +type ServiceRoleInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ServiceRoleInfoMultiError) 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 ServiceRoleInfoMultiError) AllErrors() []error { return m } + // ServiceRoleInfoValidationError is the validation error returned by // ServiceRoleInfo.Validate if the designated constraints aren't met. type ServiceRoleInfoValidationError struct { @@ -26359,31 +43430,74 @@ var _ interface { // Validate checks the field values on GetServiceRolesRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetServiceRolesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetServiceRolesRequest 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 +// GetServiceRolesRequestMultiError, or nil if none found. +func (m *GetServiceRolesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetServiceRolesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return GetServiceRolesRequestValidationError{ + err := GetServiceRolesRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID if _, ok := _GetServiceRolesRequest_RoleType_InLookup[m.GetRoleType()]; !ok { - return GetServiceRolesRequestValidationError{ + err := GetServiceRolesRequestValidationError{ field: "RoleType", reason: "value must be in list [cluster nodeGroup]", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetServiceRolesRequestMultiError(errors) } return nil } +// GetServiceRolesRequestMultiError is an error wrapping multiple validation +// errors returned by GetServiceRolesRequest.ValidateAll() if the designated +// constraints aren't met. +type GetServiceRolesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetServiceRolesRequestMultiError) 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 GetServiceRolesRequestMultiError) AllErrors() []error { return m } + // GetServiceRolesRequestValidationError is the validation error returned by // GetServiceRolesRequest.Validate if the designated constraints aren't met. type GetServiceRolesRequestValidationError struct { @@ -26447,12 +43561,26 @@ var _GetServiceRolesRequest_RoleType_InLookup = map[string]struct{}{ // Validate checks the field values on GetServiceRolesResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetServiceRolesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetServiceRolesResponse 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 +// GetServiceRolesResponseMultiError, or nil if none found. +func (m *GetServiceRolesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetServiceRolesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -26462,7 +43590,26 @@ func (m *GetServiceRolesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetServiceRolesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetServiceRolesResponseValidationError{ + field: fmt.Sprintf("Data[%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 GetServiceRolesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -26474,9 +43621,30 @@ func (m *GetServiceRolesResponse) Validate() error { } + if len(errors) > 0 { + return GetServiceRolesResponseMultiError(errors) + } + return nil } +// GetServiceRolesResponseMultiError is an error wrapping multiple validation +// errors returned by GetServiceRolesResponse.ValidateAll() if the designated +// constraints aren't met. +type GetServiceRolesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetServiceRolesResponseMultiError) 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 GetServiceRolesResponseMultiError) AllErrors() []error { return m } + // GetServiceRolesResponseValidationError is the validation error returned by // GetServiceRolesResponse.Validate if the designated constraints aren't met. type GetServiceRolesResponseValidationError struct { @@ -26534,22 +43702,57 @@ var _ interface { } = GetServiceRolesResponseValidationError{} // Validate checks the field values on ResourceGroupInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *ResourceGroupInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ResourceGroupInfo 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 +// ResourceGroupInfoMultiError, or nil if none found. +func (m *ResourceGroupInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ResourceGroupInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for Region // no validation rules for ProvisioningState + if len(errors) > 0 { + return ResourceGroupInfoMultiError(errors) + } + return nil } +// ResourceGroupInfoMultiError is an error wrapping multiple validation errors +// returned by ResourceGroupInfo.ValidateAll() if the designated constraints +// aren't met. +type ResourceGroupInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ResourceGroupInfoMultiError) 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 ResourceGroupInfoMultiError) AllErrors() []error { return m } + // ResourceGroupInfoValidationError is the validation error returned by // ResourceGroupInfo.Validate if the designated constraints aren't met. type ResourceGroupInfoValidationError struct { @@ -26608,24 +43811,63 @@ var _ interface { // Validate checks the field values on GetResourceGroupsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetResourceGroupsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetResourceGroupsRequest 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 +// GetResourceGroupsRequestMultiError, or nil if none found. +func (m *GetResourceGroupsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetResourceGroupsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return GetResourceGroupsRequestValidationError{ + err := GetResourceGroupsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID + if len(errors) > 0 { + return GetResourceGroupsRequestMultiError(errors) + } + return nil } +// GetResourceGroupsRequestMultiError is an error wrapping multiple validation +// errors returned by GetResourceGroupsRequest.ValidateAll() if the designated +// constraints aren't met. +type GetResourceGroupsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetResourceGroupsRequestMultiError) 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 GetResourceGroupsRequestMultiError) AllErrors() []error { return m } + // GetResourceGroupsRequestValidationError is the validation error returned by // GetResourceGroupsRequest.Validate if the designated constraints aren't met. type GetResourceGroupsRequestValidationError struct { @@ -26684,12 +43926,26 @@ var _ interface { // Validate checks the field values on GetResourceGroupsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetResourceGroupsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetResourceGroupsResponse 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 +// GetResourceGroupsResponseMultiError, or nil if none found. +func (m *GetResourceGroupsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetResourceGroupsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -26699,7 +43955,26 @@ func (m *GetResourceGroupsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetResourceGroupsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetResourceGroupsResponseValidationError{ + field: fmt.Sprintf("Data[%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 GetResourceGroupsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -26711,9 +43986,30 @@ func (m *GetResourceGroupsResponse) Validate() error { } + if len(errors) > 0 { + return GetResourceGroupsResponseMultiError(errors) + } + return nil } +// GetResourceGroupsResponseMultiError is an error wrapping multiple validation +// errors returned by GetResourceGroupsResponse.ValidateAll() if the +// designated constraints aren't met. +type GetResourceGroupsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetResourceGroupsResponseMultiError) 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 GetResourceGroupsResponseMultiError) AllErrors() []error { return m } + // GetResourceGroupsResponseValidationError is the validation error returned by // GetResourceGroupsResponse.Validate if the designated constraints aren't met. type GetResourceGroupsResponseValidationError struct { @@ -26771,21 +44067,56 @@ var _ interface { } = GetResourceGroupsResponseValidationError{} // Validate checks the field values on RegionInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *RegionInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RegionInfo 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 RegionInfoMultiError, or +// nil if none found. +func (m *RegionInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *RegionInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Region // no validation rules for RegionName // no validation rules for RegionState + if len(errors) > 0 { + return RegionInfoMultiError(errors) + } + return nil } +// RegionInfoMultiError is an error wrapping multiple validation errors +// returned by RegionInfo.ValidateAll() if the designated constraints aren't met. +type RegionInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RegionInfoMultiError) 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 RegionInfoMultiError) AllErrors() []error { return m } + // RegionInfoValidationError is the validation error returned by // RegionInfo.Validate if the designated constraints aren't met. type RegionInfoValidationError struct { @@ -26842,24 +44173,63 @@ var _ interface { // Validate checks the field values on GetCloudRegionsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudRegionsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRegionsRequest 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 +// GetCloudRegionsRequestMultiError, or nil if none found. +func (m *GetCloudRegionsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRegionsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return GetCloudRegionsRequestValidationError{ + err := GetCloudRegionsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID + if len(errors) > 0 { + return GetCloudRegionsRequestMultiError(errors) + } + return nil } +// GetCloudRegionsRequestMultiError is an error wrapping multiple validation +// errors returned by GetCloudRegionsRequest.ValidateAll() if the designated +// constraints aren't met. +type GetCloudRegionsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRegionsRequestMultiError) 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 GetCloudRegionsRequestMultiError) AllErrors() []error { return m } + // GetCloudRegionsRequestValidationError is the validation error returned by // GetCloudRegionsRequest.Validate if the designated constraints aren't met. type GetCloudRegionsRequestValidationError struct { @@ -26918,12 +44288,26 @@ var _ interface { // Validate checks the field values on GetCloudRegionsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudRegionsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRegionsResponse 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 +// GetCloudRegionsResponseMultiError, or nil if none found. +func (m *GetCloudRegionsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRegionsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -26933,7 +44317,26 @@ func (m *GetCloudRegionsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudRegionsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudRegionsResponseValidationError{ + field: fmt.Sprintf("Data[%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 GetCloudRegionsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -26945,9 +44348,30 @@ func (m *GetCloudRegionsResponse) Validate() error { } + if len(errors) > 0 { + return GetCloudRegionsResponseMultiError(errors) + } + return nil } +// GetCloudRegionsResponseMultiError is an error wrapping multiple validation +// errors returned by GetCloudRegionsResponse.ValidateAll() if the designated +// constraints aren't met. +type GetCloudRegionsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRegionsResponseMultiError) 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 GetCloudRegionsResponseMultiError) AllErrors() []error { return m } + // GetCloudRegionsResponseValidationError is the validation error returned by // GetCloudRegionsResponse.Validate if the designated constraints aren't met. type GetCloudRegionsResponseValidationError struct { @@ -27005,12 +44429,27 @@ var _ interface { } = GetCloudRegionsResponseValidationError{} // Validate checks the field values on ZoneInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *ZoneInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ZoneInfo 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 ZoneInfoMultiError, or nil +// if none found. +func (m *ZoneInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ZoneInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ZoneID // no validation rules for Zone @@ -27021,9 +44460,29 @@ func (m *ZoneInfo) Validate() error { // no validation rules for SubnetNum + if len(errors) > 0 { + return ZoneInfoMultiError(errors) + } + return nil } +// ZoneInfoMultiError is an error wrapping multiple validation errors returned +// by ZoneInfo.ValidateAll() if the designated constraints aren't met. +type ZoneInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ZoneInfoMultiError) 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 ZoneInfoMultiError) AllErrors() []error { return m } + // ZoneInfoValidationError is the validation error returned by // ZoneInfo.Validate if the designated constraints aren't met. type ZoneInfoValidationError struct { @@ -27079,13 +44538,27 @@ var _ interface { } = ZoneInfoValidationError{} // Validate checks the field values on CloudClusterInfo with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *CloudClusterInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudClusterInfo 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 +// CloudClusterInfoMultiError, or nil if none found. +func (m *CloudClusterInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudClusterInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID // no validation rules for ClusterName @@ -27104,9 +44577,30 @@ func (m *CloudClusterInfo) Validate() error { // no validation rules for ClusterLevel + if len(errors) > 0 { + return CloudClusterInfoMultiError(errors) + } + return nil } +// CloudClusterInfoMultiError is an error wrapping multiple validation errors +// returned by CloudClusterInfo.ValidateAll() if the designated constraints +// aren't met. +type CloudClusterInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudClusterInfoMultiError) 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 CloudClusterInfoMultiError) AllErrors() []error { return m } + // CloudClusterInfoValidationError is the validation error returned by // CloudClusterInfo.Validate if the designated constraints aren't met. type CloudClusterInfoValidationError struct { @@ -27163,38 +44657,85 @@ var _ interface { // Validate checks the field values on ListCloudRegionClusterRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRegionClusterRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRegionClusterRequest 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 +// ListCloudRegionClusterRequestMultiError, or nil if none found. +func (m *ListCloudRegionClusterRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRegionClusterRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudRegionClusterRequestValidationError{ + err := ListCloudRegionClusterRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) < 2 { - return ListCloudRegionClusterRequestValidationError{ + err := ListCloudRegionClusterRequestValidationError{ field: "Region", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetAccountID()) < 2 { - return ListCloudRegionClusterRequestValidationError{ + err := ListCloudRegionClusterRequestValidationError{ field: "AccountID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for ResourceGroupName + if len(errors) > 0 { + return ListCloudRegionClusterRequestMultiError(errors) + } + return nil } +// ListCloudRegionClusterRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudRegionClusterRequest.ValidateAll() +// if the designated constraints aren't met. +type ListCloudRegionClusterRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRegionClusterRequestMultiError) 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 ListCloudRegionClusterRequestMultiError) AllErrors() []error { return m } + // ListCloudRegionClusterRequestValidationError is the validation error // returned by ListCloudRegionClusterRequest.Validate if the designated // constraints aren't met. @@ -27254,12 +44795,26 @@ var _ interface { // Validate checks the field values on ListCloudRegionClusterResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRegionClusterResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRegionClusterResponse 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 +// ListCloudRegionClusterResponseMultiError, or nil if none found. +func (m *ListCloudRegionClusterResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRegionClusterResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -27269,7 +44824,26 @@ func (m *ListCloudRegionClusterResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudRegionClusterResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudRegionClusterResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudRegionClusterResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -27281,9 +44855,30 @@ func (m *ListCloudRegionClusterResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudRegionClusterResponseMultiError(errors) + } + return nil } +// ListCloudRegionClusterResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudRegionClusterResponse.ValidateAll() +// if the designated constraints aren't met. +type ListCloudRegionClusterResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRegionClusterResponseMultiError) 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 ListCloudRegionClusterResponseMultiError) AllErrors() []error { return m } + // ListCloudRegionClusterResponseValidationError is the validation error // returned by ListCloudRegionClusterResponse.Validate if the designated // constraints aren't met. @@ -27343,17 +44938,35 @@ var _ interface { // Validate checks the field values on GetCloudRegionZonesRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudRegionZonesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRegionZonesRequest 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 +// GetCloudRegionZonesRequestMultiError, or nil if none found. +func (m *GetCloudRegionZonesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRegionZonesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return GetCloudRegionZonesRequestValidationError{ + err := GetCloudRegionZonesRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -27364,9 +44977,30 @@ func (m *GetCloudRegionZonesRequest) Validate() error { // no validation rules for State + if len(errors) > 0 { + return GetCloudRegionZonesRequestMultiError(errors) + } + return nil } +// GetCloudRegionZonesRequestMultiError is an error wrapping multiple +// validation errors returned by GetCloudRegionZonesRequest.ValidateAll() if +// the designated constraints aren't met. +type GetCloudRegionZonesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRegionZonesRequestMultiError) 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 GetCloudRegionZonesRequestMultiError) AllErrors() []error { return m } + // GetCloudRegionZonesRequestValidationError is the validation error returned // by GetCloudRegionZonesRequest.Validate if the designated constraints aren't met. type GetCloudRegionZonesRequestValidationError struct { @@ -27425,12 +45059,26 @@ var _ interface { // Validate checks the field values on GetCloudRegionZonesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudRegionZonesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudRegionZonesResponse 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 +// GetCloudRegionZonesResponseMultiError, or nil if none found. +func (m *GetCloudRegionZonesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudRegionZonesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -27440,7 +45088,26 @@ func (m *GetCloudRegionZonesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudRegionZonesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudRegionZonesResponseValidationError{ + field: fmt.Sprintf("Data[%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 GetCloudRegionZonesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -27452,9 +45119,30 @@ func (m *GetCloudRegionZonesResponse) Validate() error { } + if len(errors) > 0 { + return GetCloudRegionZonesResponseMultiError(errors) + } + return nil } +// GetCloudRegionZonesResponseMultiError is an error wrapping multiple +// validation errors returned by GetCloudRegionZonesResponse.ValidateAll() if +// the designated constraints aren't met. +type GetCloudRegionZonesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudRegionZonesResponseMultiError) 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 GetCloudRegionZonesResponseMultiError) AllErrors() []error { return m } + // GetCloudRegionZonesResponseValidationError is the validation error returned // by GetCloudRegionZonesResponse.Validate if the designated constraints // aren't met. @@ -27513,13 +45201,27 @@ var _ interface { } = GetCloudRegionZonesResponseValidationError{} // Validate checks the field values on OperationLog with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *OperationLog) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OperationLog 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 OperationLogMultiError, or +// nil if none found. +func (m *OperationLog) ValidateAll() error { + return m.validate(true) +} + +func (m *OperationLog) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ResourceType // no validation rules for ResourceID @@ -27538,9 +45240,29 @@ func (m *OperationLog) Validate() error { // no validation rules for ResourceName + if len(errors) > 0 { + return OperationLogMultiError(errors) + } + return nil } +// OperationLogMultiError is an error wrapping multiple validation errors +// returned by OperationLog.ValidateAll() if the designated constraints aren't met. +type OperationLogMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OperationLogMultiError) 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 OperationLogMultiError) AllErrors() []error { return m } + // OperationLogValidationError is the validation error returned by // OperationLog.Validate if the designated constraints aren't met. type OperationLogValidationError struct { @@ -27596,13 +45318,27 @@ var _ interface { } = OperationLogValidationError{} // Validate checks the field values on TaskOperationLog with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *TaskOperationLog) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TaskOperationLog 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 +// TaskOperationLogMultiError, or nil if none found. +func (m *TaskOperationLog) ValidateAll() error { + return m.validate(true) +} + +func (m *TaskOperationLog) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ResourceType // no validation rules for ResourceID @@ -27625,9 +45361,30 @@ func (m *TaskOperationLog) Validate() error { // no validation rules for ResourceName + if len(errors) > 0 { + return TaskOperationLogMultiError(errors) + } + return nil } +// TaskOperationLogMultiError is an error wrapping multiple validation errors +// returned by TaskOperationLog.ValidateAll() if the designated constraints +// aren't met. +type TaskOperationLogMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaskOperationLogMultiError) 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 TaskOperationLogMultiError) AllErrors() []error { return m } + // TaskOperationLogValidationError is the validation error returned by // TaskOperationLog.Validate if the designated constraints aren't met. type TaskOperationLogValidationError struct { @@ -27683,13 +45440,27 @@ var _ interface { } = TaskOperationLogValidationError{} // Validate checks the field values on TaskStepLog with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *TaskStepLog) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TaskStepLog 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 TaskStepLogMultiError, or +// nil if none found. +func (m *TaskStepLog) ValidateAll() error { + return m.validate(true) +} + +func (m *TaskStepLog) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TaskID // no validation rules for StepName @@ -27700,9 +45471,29 @@ func (m *TaskStepLog) Validate() error { // no validation rules for CreateTime + if len(errors) > 0 { + return TaskStepLogMultiError(errors) + } + return nil } +// TaskStepLogMultiError is an error wrapping multiple validation errors +// returned by TaskStepLog.ValidateAll() if the designated constraints aren't met. +type TaskStepLogMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaskStepLogMultiError) 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 TaskStepLogMultiError) AllErrors() []error { return m } + // TaskStepLogValidationError is the validation error returned by // TaskStepLog.Validate if the designated constraints aren't met. type TaskStepLogValidationError struct { @@ -27759,17 +45550,35 @@ var _ interface { // Validate checks the field values on ListCloudInstanceTypeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudInstanceTypeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudInstanceTypeRequest 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 +// ListCloudInstanceTypeRequestMultiError, or nil if none found. +func (m *ListCloudInstanceTypeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudInstanceTypeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudInstanceTypeRequestValidationError{ + err := ListCloudInstanceTypeRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -27777,17 +45586,25 @@ func (m *ListCloudInstanceTypeRequest) Validate() error { // no validation rules for AccountID if utf8.RuneCountInString(m.GetZone()) > 32 { - return ListCloudInstanceTypeRequestValidationError{ + err := ListCloudInstanceTypeRequestValidationError{ field: "Zone", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetNodeFamily()) > 32 { - return ListCloudInstanceTypeRequestValidationError{ + err := ListCloudInstanceTypeRequestValidationError{ field: "NodeFamily", reason: "value length must be at most 32 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Cpu @@ -27799,15 +45616,40 @@ func (m *ListCloudInstanceTypeRequest) Validate() error { // no validation rules for Provider if _, ok := _ListCloudInstanceTypeRequest_ResourceType_InLookup[m.GetResourceType()]; !ok { - return ListCloudInstanceTypeRequestValidationError{ + err := ListCloudInstanceTypeRequestValidationError{ field: "ResourceType", reason: "value must be in list [ online offline]", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListCloudInstanceTypeRequestMultiError(errors) } return nil } +// ListCloudInstanceTypeRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudInstanceTypeRequest.ValidateAll() if +// the designated constraints aren't met. +type ListCloudInstanceTypeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudInstanceTypeRequestMultiError) 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 ListCloudInstanceTypeRequestMultiError) AllErrors() []error { return m } + // ListCloudInstanceTypeRequestValidationError is the validation error returned // by ListCloudInstanceTypeRequest.Validate if the designated constraints // aren't met. @@ -27873,12 +45715,26 @@ var _ListCloudInstanceTypeRequest_ResourceType_InLookup = map[string]struct{}{ // Validate checks the field values on ListCloudInstanceTypeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudInstanceTypeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudInstanceTypeResponse 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 +// ListCloudInstanceTypeResponseMultiError, or nil if none found. +func (m *ListCloudInstanceTypeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudInstanceTypeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -27888,7 +45744,26 @@ func (m *ListCloudInstanceTypeResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudInstanceTypeResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudInstanceTypeResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudInstanceTypeResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -27900,9 +45775,30 @@ func (m *ListCloudInstanceTypeResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudInstanceTypeResponseMultiError(errors) + } + return nil } +// ListCloudInstanceTypeResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudInstanceTypeResponse.ValidateAll() +// if the designated constraints aren't met. +type ListCloudInstanceTypeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudInstanceTypeResponseMultiError) 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 ListCloudInstanceTypeResponseMultiError) AllErrors() []error { return m } + // ListCloudInstanceTypeResponseValidationError is the validation error // returned by ListCloudInstanceTypeResponse.Validate if the designated // constraints aren't met. @@ -27961,13 +45857,27 @@ var _ interface { } = ListCloudInstanceTypeResponseValidationError{} // Validate checks the field values on InstanceType with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *InstanceType) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on InstanceType 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 InstanceTypeMultiError, or +// nil if none found. +func (m *InstanceType) ValidateAll() error { + return m.validate(true) +} + +func (m *InstanceType) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeType // no validation rules for TypeName @@ -27988,7 +45898,26 @@ func (m *InstanceType) Validate() error { // no validation rules for ResourcePoolID - if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetSystemDisk()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTypeValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTypeValidationError{ + field: "SystemDisk", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetSystemDisk()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return InstanceTypeValidationError{ field: "SystemDisk", @@ -28001,7 +45930,26 @@ func (m *InstanceType) Validate() error { for idx, item := range m.GetDataDisks() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, InstanceTypeValidationError{ + field: fmt.Sprintf("DataDisks[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, InstanceTypeValidationError{ + field: fmt.Sprintf("DataDisks[%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 InstanceTypeValidationError{ field: fmt.Sprintf("DataDisks[%v]", idx), @@ -28013,9 +45961,29 @@ func (m *InstanceType) Validate() error { } + if len(errors) > 0 { + return InstanceTypeMultiError(errors) + } + return nil } +// InstanceTypeMultiError is an error wrapping multiple validation errors +// returned by InstanceType.ValidateAll() if the designated constraints aren't met. +type InstanceTypeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m InstanceTypeMultiError) 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 InstanceTypeMultiError) AllErrors() []error { return m } + // InstanceTypeValidationError is the validation error returned by // InstanceType.Validate if the designated constraints aren't met. type InstanceTypeValidationError struct { @@ -28072,31 +46040,58 @@ var _ interface { // Validate checks the field values on GetMasterSuggestedMachinesRequest with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *GetMasterSuggestedMachinesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetMasterSuggestedMachinesRequest +// 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 +// GetMasterSuggestedMachinesRequestMultiError, or nil if none found. +func (m *GetMasterSuggestedMachinesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetMasterSuggestedMachinesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return GetMasterSuggestedMachinesRequestValidationError{ + err := GetMasterSuggestedMachinesRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) < 2 { - return GetMasterSuggestedMachinesRequestValidationError{ + err := GetMasterSuggestedMachinesRequestValidationError{ field: "Region", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _GetMasterSuggestedMachinesRequest_Level_InLookup[m.GetLevel()]; !ok { - return GetMasterSuggestedMachinesRequestValidationError{ + err := GetMasterSuggestedMachinesRequestValidationError{ field: "Level", reason: "value must be in list [L100 L500 L1000 L2000]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID @@ -28109,9 +46104,31 @@ func (m *GetMasterSuggestedMachinesRequest) Validate() error { // no validation rules for Zones + if len(errors) > 0 { + return GetMasterSuggestedMachinesRequestMultiError(errors) + } + return nil } +// GetMasterSuggestedMachinesRequestMultiError is an error wrapping multiple +// validation errors returned by +// GetMasterSuggestedMachinesRequest.ValidateAll() if the designated +// constraints aren't met. +type GetMasterSuggestedMachinesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetMasterSuggestedMachinesRequestMultiError) 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 GetMasterSuggestedMachinesRequestMultiError) AllErrors() []error { return m } + // GetMasterSuggestedMachinesRequestValidationError is the validation error // returned by GetMasterSuggestedMachinesRequest.Validate if the designated // constraints aren't met. @@ -28178,12 +46195,27 @@ var _GetMasterSuggestedMachinesRequest_Level_InLookup = map[string]struct{}{ // Validate checks the field values on GetMasterSuggestedMachinesResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *GetMasterSuggestedMachinesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetMasterSuggestedMachinesResponse +// 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 +// GetMasterSuggestedMachinesResponseMultiError, or nil if none found. +func (m *GetMasterSuggestedMachinesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetMasterSuggestedMachinesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -28193,7 +46225,26 @@ func (m *GetMasterSuggestedMachinesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetMasterSuggestedMachinesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetMasterSuggestedMachinesResponseValidationError{ + field: fmt.Sprintf("Data[%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 GetMasterSuggestedMachinesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -28205,9 +46256,31 @@ func (m *GetMasterSuggestedMachinesResponse) Validate() error { } + if len(errors) > 0 { + return GetMasterSuggestedMachinesResponseMultiError(errors) + } + return nil } +// GetMasterSuggestedMachinesResponseMultiError is an error wrapping multiple +// validation errors returned by +// GetMasterSuggestedMachinesResponse.ValidateAll() if the designated +// constraints aren't met. +type GetMasterSuggestedMachinesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetMasterSuggestedMachinesResponseMultiError) 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 GetMasterSuggestedMachinesResponseMultiError) AllErrors() []error { return m } + // GetMasterSuggestedMachinesResponseValidationError is the validation error // returned by GetMasterSuggestedMachinesResponse.Validate if the designated // constraints aren't met. @@ -28267,17 +46340,35 @@ var _ interface { // Validate checks the field values on ListCloudInstancesRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudInstancesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudInstancesRequest 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 +// ListCloudInstancesRequestMultiError, or nil if none found. +func (m *ListCloudInstancesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudInstancesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudInstancesRequestValidationError{ + err := ListCloudInstancesRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -28285,15 +46376,40 @@ func (m *ListCloudInstancesRequest) Validate() error { // no validation rules for AccountID if utf8.RuneCountInString(m.GetIpList()) < 1 { - return ListCloudInstancesRequestValidationError{ + err := ListCloudInstancesRequestValidationError{ field: "IpList", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListCloudInstancesRequestMultiError(errors) } return nil } +// ListCloudInstancesRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudInstancesRequest.ValidateAll() if the +// designated constraints aren't met. +type ListCloudInstancesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudInstancesRequestMultiError) 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 ListCloudInstancesRequestMultiError) AllErrors() []error { return m } + // ListCloudInstancesRequestValidationError is the validation error returned by // ListCloudInstancesRequest.Validate if the designated constraints aren't met. type ListCloudInstancesRequestValidationError struct { @@ -28352,12 +46468,26 @@ var _ interface { // Validate checks the field values on ListCloudInstancesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudInstancesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudInstancesResponse 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 +// ListCloudInstancesResponseMultiError, or nil if none found. +func (m *ListCloudInstancesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudInstancesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -28367,7 +46497,26 @@ func (m *ListCloudInstancesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudInstancesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudInstancesResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudInstancesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -28379,9 +46528,30 @@ func (m *ListCloudInstancesResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudInstancesResponseMultiError(errors) + } + return nil } +// ListCloudInstancesResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudInstancesResponse.ValidateAll() if +// the designated constraints aren't met. +type ListCloudInstancesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudInstancesResponseMultiError) 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 ListCloudInstancesResponseMultiError) AllErrors() []error { return m } + // ListCloudInstancesResponseValidationError is the validation error returned // by ListCloudInstancesResponse.Validate if the designated constraints aren't met. type ListCloudInstancesResponseValidationError struct { @@ -28439,12 +46609,27 @@ var _ interface { } = ListCloudInstancesResponseValidationError{} // Validate checks the field values on CloudNode with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *CloudNode) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudNode 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 CloudNodeMultiError, or nil +// if none found. +func (m *CloudNode) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudNode) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeID // no validation rules for InnerIP @@ -28471,9 +46656,29 @@ func (m *CloudNode) Validate() error { // no validation rules for CloudRegionNode + if len(errors) > 0 { + return CloudNodeMultiError(errors) + } + return nil } +// CloudNodeMultiError is an error wrapping multiple validation errors returned +// by CloudNode.ValidateAll() if the designated constraints aren't met. +type CloudNodeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudNodeMultiError) 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 CloudNodeMultiError) AllErrors() []error { return m } + // CloudNodeValidationError is the validation error returned by // CloudNode.Validate if the designated constraints aren't met. type CloudNodeValidationError struct { @@ -28530,26 +46735,65 @@ var _ interface { // Validate checks the field values on GetCloudAccountTypeRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudAccountTypeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudAccountTypeRequest 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 +// GetCloudAccountTypeRequestMultiError, or nil if none found. +func (m *GetCloudAccountTypeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudAccountTypeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return GetCloudAccountTypeRequestValidationError{ + err := GetCloudAccountTypeRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region // no validation rules for AccountID + if len(errors) > 0 { + return GetCloudAccountTypeRequestMultiError(errors) + } + return nil } +// GetCloudAccountTypeRequestMultiError is an error wrapping multiple +// validation errors returned by GetCloudAccountTypeRequest.ValidateAll() if +// the designated constraints aren't met. +type GetCloudAccountTypeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudAccountTypeRequestMultiError) 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 GetCloudAccountTypeRequestMultiError) AllErrors() []error { return m } + // GetCloudAccountTypeRequestValidationError is the validation error returned // by GetCloudAccountTypeRequest.Validate if the designated constraints aren't met. type GetCloudAccountTypeRequestValidationError struct { @@ -28608,19 +46852,52 @@ var _ interface { // Validate checks the field values on GetCloudAccountTypeResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetCloudAccountTypeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudAccountTypeResponse 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 +// GetCloudAccountTypeResponseMultiError, or nil if none found. +func (m *GetCloudAccountTypeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudAccountTypeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudAccountTypeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudAccountTypeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetCloudAccountTypeResponseValidationError{ field: "Data", @@ -28630,9 +46907,30 @@ func (m *GetCloudAccountTypeResponse) Validate() error { } } + if len(errors) > 0 { + return GetCloudAccountTypeResponseMultiError(errors) + } + return nil } +// GetCloudAccountTypeResponseMultiError is an error wrapping multiple +// validation errors returned by GetCloudAccountTypeResponse.ValidateAll() if +// the designated constraints aren't met. +type GetCloudAccountTypeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudAccountTypeResponseMultiError) 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 GetCloudAccountTypeResponseMultiError) AllErrors() []error { return m } + // GetCloudAccountTypeResponseValidationError is the validation error returned // by GetCloudAccountTypeResponse.Validate if the designated constraints // aren't met. @@ -28691,18 +46989,53 @@ var _ interface { } = GetCloudAccountTypeResponseValidationError{} // Validate checks the field values on CloudAccountType with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *CloudAccountType) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudAccountType 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 +// CloudAccountTypeMultiError, or nil if none found. +func (m *CloudAccountType) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudAccountType) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Type + if len(errors) > 0 { + return CloudAccountTypeMultiError(errors) + } + return nil } +// CloudAccountTypeMultiError is an error wrapping multiple validation errors +// returned by CloudAccountType.ValidateAll() if the designated constraints +// aren't met. +type CloudAccountTypeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudAccountTypeMultiError) 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 CloudAccountTypeMultiError) AllErrors() []error { return m } + // CloudAccountTypeValidationError is the validation error returned by // CloudAccountType.Validate if the designated constraints aren't met. type CloudAccountTypeValidationError struct { @@ -28759,31 +47092,76 @@ var _ interface { // Validate checks the field values on GetCloudBandwidthPackagesRequest with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *GetCloudBandwidthPackagesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudBandwidthPackagesRequest 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 +// GetCloudBandwidthPackagesRequestMultiError, or nil if none found. +func (m *GetCloudBandwidthPackagesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudBandwidthPackagesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 1 { - return GetCloudBandwidthPackagesRequestValidationError{ + err := GetCloudBandwidthPackagesRequestValidationError{ field: "CloudID", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetRegion()) < 1 { - return GetCloudBandwidthPackagesRequestValidationError{ + err := GetCloudBandwidthPackagesRequestValidationError{ field: "Region", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID + if len(errors) > 0 { + return GetCloudBandwidthPackagesRequestMultiError(errors) + } + return nil } +// GetCloudBandwidthPackagesRequestMultiError is an error wrapping multiple +// validation errors returned by +// GetCloudBandwidthPackagesRequest.ValidateAll() if the designated +// constraints aren't met. +type GetCloudBandwidthPackagesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudBandwidthPackagesRequestMultiError) 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 GetCloudBandwidthPackagesRequestMultiError) AllErrors() []error { return m } + // GetCloudBandwidthPackagesRequestValidationError is the validation error // returned by GetCloudBandwidthPackagesRequest.Validate if the designated // constraints aren't met. @@ -28843,12 +47221,27 @@ var _ interface { // Validate checks the field values on GetCloudBandwidthPackagesResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *GetCloudBandwidthPackagesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetCloudBandwidthPackagesResponse +// 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 +// GetCloudBandwidthPackagesResponseMultiError, or nil if none found. +func (m *GetCloudBandwidthPackagesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetCloudBandwidthPackagesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -28858,7 +47251,26 @@ func (m *GetCloudBandwidthPackagesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetCloudBandwidthPackagesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetCloudBandwidthPackagesResponseValidationError{ + field: fmt.Sprintf("Data[%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 GetCloudBandwidthPackagesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -28870,9 +47282,31 @@ func (m *GetCloudBandwidthPackagesResponse) Validate() error { } + if len(errors) > 0 { + return GetCloudBandwidthPackagesResponseMultiError(errors) + } + return nil } +// GetCloudBandwidthPackagesResponseMultiError is an error wrapping multiple +// validation errors returned by +// GetCloudBandwidthPackagesResponse.ValidateAll() if the designated +// constraints aren't met. +type GetCloudBandwidthPackagesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetCloudBandwidthPackagesResponseMultiError) 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 GetCloudBandwidthPackagesResponseMultiError) AllErrors() []error { return m } + // GetCloudBandwidthPackagesResponseValidationError is the validation error // returned by GetCloudBandwidthPackagesResponse.Validate if the designated // constraints aren't met. @@ -28932,12 +47366,26 @@ var _ interface { // Validate checks the field values on BandwidthPackageInfo with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *BandwidthPackageInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BandwidthPackageInfo 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 +// BandwidthPackageInfoMultiError, or nil if none found. +func (m *BandwidthPackageInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *BandwidthPackageInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Id // no validation rules for Name @@ -28948,9 +47396,30 @@ func (m *BandwidthPackageInfo) Validate() error { // no validation rules for Bandwidth + if len(errors) > 0 { + return BandwidthPackageInfoMultiError(errors) + } + return nil } +// BandwidthPackageInfoMultiError is an error wrapping multiple validation +// errors returned by BandwidthPackageInfo.ValidateAll() if the designated +// constraints aren't met. +type BandwidthPackageInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BandwidthPackageInfoMultiError) 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 BandwidthPackageInfoMultiError) AllErrors() []error { return m } + // BandwidthPackageInfoValidationError is the validation error returned by // BandwidthPackageInfo.Validate if the designated constraints aren't met. type BandwidthPackageInfoValidationError struct { @@ -29009,17 +47478,35 @@ var _ interface { // Validate checks the field values on ListCloudOsImageRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudOsImageRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudOsImageRequest 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 +// ListCloudOsImageRequestMultiError, or nil if none found. +func (m *ListCloudOsImageRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudOsImageRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudOsImageRequestValidationError{ + err := ListCloudOsImageRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -29030,9 +47517,30 @@ func (m *ListCloudOsImageRequest) Validate() error { // no validation rules for ProjectID + if len(errors) > 0 { + return ListCloudOsImageRequestMultiError(errors) + } + return nil } +// ListCloudOsImageRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudOsImageRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudOsImageRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudOsImageRequestMultiError) 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 ListCloudOsImageRequestMultiError) AllErrors() []error { return m } + // ListCloudOsImageRequestValidationError is the validation error returned by // ListCloudOsImageRequest.Validate if the designated constraints aren't met. type ListCloudOsImageRequestValidationError struct { @@ -29091,12 +47599,26 @@ var _ interface { // Validate checks the field values on ListCloudOsImageResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudOsImageResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudOsImageResponse 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 +// ListCloudOsImageResponseMultiError, or nil if none found. +func (m *ListCloudOsImageResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudOsImageResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -29106,7 +47628,26 @@ func (m *ListCloudOsImageResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudOsImageResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudOsImageResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudOsImageResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -29118,9 +47659,30 @@ func (m *ListCloudOsImageResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudOsImageResponseMultiError(errors) + } + return nil } +// ListCloudOsImageResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudOsImageResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudOsImageResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudOsImageResponseMultiError) 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 ListCloudOsImageResponseMultiError) AllErrors() []error { return m } + // ListCloudOsImageResponseValidationError is the validation error returned by // ListCloudOsImageResponse.Validate if the designated constraints aren't met. type ListCloudOsImageResponseValidationError struct { @@ -29178,12 +47740,26 @@ var _ interface { } = ListCloudOsImageResponseValidationError{} // Validate checks the field values on OsImage with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *OsImage) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OsImage 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 OsImageMultiError, or nil if none found. +func (m *OsImage) ValidateAll() error { + return m.validate(true) +} + +func (m *OsImage) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ImageID // no validation rules for Alias @@ -29203,7 +47779,26 @@ func (m *OsImage) Validate() error { for idx, item := range m.GetClusters() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, OsImageValidationError{ + field: fmt.Sprintf("Clusters[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, OsImageValidationError{ + field: fmt.Sprintf("Clusters[%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 OsImageValidationError{ field: fmt.Sprintf("Clusters[%v]", idx), @@ -29215,9 +47810,29 @@ func (m *OsImage) Validate() error { } + if len(errors) > 0 { + return OsImageMultiError(errors) + } + return nil } +// OsImageMultiError is an error wrapping multiple validation errors returned +// by OsImage.ValidateAll() if the designated constraints aren't met. +type OsImageMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OsImageMultiError) 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 OsImageMultiError) AllErrors() []error { return m } + // OsImageValidationError is the validation error returned by OsImage.Validate // if the designated constraints aren't met. type OsImageValidationError struct { @@ -29273,20 +47888,54 @@ var _ interface { } = OsImageValidationError{} // Validate checks the field values on ClusterInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *ClusterInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ClusterInfo 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 ClusterInfoMultiError, or +// nil if none found. +func (m *ClusterInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ClusterInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterName // no validation rules for ClusterID + if len(errors) > 0 { + return ClusterInfoMultiError(errors) + } + return nil } +// ClusterInfoMultiError is an error wrapping multiple validation errors +// returned by ClusterInfo.ValidateAll() if the designated constraints aren't met. +type ClusterInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ClusterInfoMultiError) 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 ClusterInfoMultiError) AllErrors() []error { return m } + // ClusterInfoValidationError is the validation error returned by // ClusterInfo.Validate if the designated constraints aren't met. type ClusterInfoValidationError struct { @@ -29343,24 +47992,63 @@ var _ interface { // Validate checks the field values on ListCloudRuntimeInfoRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRuntimeInfoRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRuntimeInfoRequest 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 +// ListCloudRuntimeInfoRequestMultiError, or nil if none found. +func (m *ListCloudRuntimeInfoRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRuntimeInfoRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudRuntimeInfoRequestValidationError{ + err := ListCloudRuntimeInfoRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListCloudRuntimeInfoRequestMultiError(errors) } return nil } +// ListCloudRuntimeInfoRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudRuntimeInfoRequest.ValidateAll() if +// the designated constraints aren't met. +type ListCloudRuntimeInfoRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRuntimeInfoRequestMultiError) 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 ListCloudRuntimeInfoRequestMultiError) AllErrors() []error { return m } + // ListCloudRuntimeInfoRequestValidationError is the validation error returned // by ListCloudRuntimeInfoRequest.Validate if the designated constraints // aren't met. @@ -29420,38 +48108,102 @@ var _ interface { // Validate checks the field values on ListCloudRuntimeInfoResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudRuntimeInfoResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudRuntimeInfoResponse 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 +// ListCloudRuntimeInfoResponseMultiError, or nil if none found. +func (m *ListCloudRuntimeInfoResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudRuntimeInfoResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - for key, val := range m.GetData() { - _ = val - - // no validation rules for Data[key] - - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return ListCloudRuntimeInfoResponseValidationError{ - field: fmt.Sprintf("Data[%v]", key), - reason: "embedded message failed validation", - cause: err, + { + sorted_keys := make([]string, len(m.GetData())) + i := 0 + for key := range m.GetData() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetData()[key] + _ = val + + // no validation rules for Data[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudRuntimeInfoResponseValidationError{ + field: fmt.Sprintf("Data[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudRuntimeInfoResponseValidationError{ + field: fmt.Sprintf("Data[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListCloudRuntimeInfoResponseValidationError{ + field: fmt.Sprintf("Data[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } + } + } + if len(errors) > 0 { + return ListCloudRuntimeInfoResponseMultiError(errors) } return nil } +// ListCloudRuntimeInfoResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudRuntimeInfoResponse.ValidateAll() if +// the designated constraints aren't met. +type ListCloudRuntimeInfoResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudRuntimeInfoResponseMultiError) 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 ListCloudRuntimeInfoResponseMultiError) AllErrors() []error { return m } + // ListCloudRuntimeInfoResponseValidationError is the validation error returned // by ListCloudRuntimeInfoResponse.Validate if the designated constraints // aren't met. @@ -29510,16 +48262,51 @@ var _ interface { } = ListCloudRuntimeInfoResponseValidationError{} // Validate checks the field values on RunTimeVersion with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *RunTimeVersion) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on RunTimeVersion 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 RunTimeVersionMultiError, +// or nil if none found. +func (m *RunTimeVersion) ValidateAll() error { + return m.validate(true) +} + +func (m *RunTimeVersion) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return RunTimeVersionMultiError(errors) + } + return nil } +// RunTimeVersionMultiError is an error wrapping multiple validation errors +// returned by RunTimeVersion.ValidateAll() if the designated constraints +// aren't met. +type RunTimeVersionMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m RunTimeVersionMultiError) 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 RunTimeVersionMultiError) AllErrors() []error { return m } + // RunTimeVersionValidationError is the validation error returned by // RunTimeVersion.Validate if the designated constraints aren't met. type RunTimeVersionValidationError struct { @@ -29576,26 +48363,65 @@ var _ interface { // Validate checks the field values on ListCloudProjectsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudProjectsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudProjectsRequest 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 +// ListCloudProjectsRequestMultiError, or nil if none found. +func (m *ListCloudProjectsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudProjectsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudProjectsRequestValidationError{ + err := ListCloudProjectsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region // no validation rules for AccountID + if len(errors) > 0 { + return ListCloudProjectsRequestMultiError(errors) + } + return nil } +// ListCloudProjectsRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudProjectsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudProjectsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudProjectsRequestMultiError) 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 ListCloudProjectsRequestMultiError) AllErrors() []error { return m } + // ListCloudProjectsRequestValidationError is the validation error returned by // ListCloudProjectsRequest.Validate if the designated constraints aren't met. type ListCloudProjectsRequestValidationError struct { @@ -29654,12 +48480,26 @@ var _ interface { // Validate checks the field values on ListCloudProjectsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudProjectsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudProjectsResponse 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 +// ListCloudProjectsResponseMultiError, or nil if none found. +func (m *ListCloudProjectsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudProjectsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -29669,7 +48509,26 @@ func (m *ListCloudProjectsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudProjectsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudProjectsResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudProjectsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -29681,9 +48540,30 @@ func (m *ListCloudProjectsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudProjectsResponseMultiError(errors) + } + return nil } +// ListCloudProjectsResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudProjectsResponse.ValidateAll() if the +// designated constraints aren't met. +type ListCloudProjectsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudProjectsResponseMultiError) 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 ListCloudProjectsResponseMultiError) AllErrors() []error { return m } + // ListCloudProjectsResponseValidationError is the validation error returned by // ListCloudProjectsResponse.Validate if the designated constraints aren't met. type ListCloudProjectsResponseValidationError struct { @@ -29741,20 +48621,54 @@ var _ interface { } = ListCloudProjectsResponseValidationError{} // Validate checks the field values on CloudProject with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *CloudProject) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudProject 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 CloudProjectMultiError, or +// nil if none found. +func (m *CloudProject) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudProject) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for ProjectName + if len(errors) > 0 { + return CloudProjectMultiError(errors) + } + return nil } +// CloudProjectMultiError is an error wrapping multiple validation errors +// returned by CloudProject.ValidateAll() if the designated constraints aren't met. +type CloudProjectMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudProjectMultiError) 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 CloudProjectMultiError) AllErrors() []error { return m } + // CloudProjectValidationError is the validation error returned by // CloudProject.Validate if the designated constraints aren't met. type CloudProjectValidationError struct { @@ -29811,17 +48725,35 @@ var _ interface { // Validate checks the field values on ListCloudVpcsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudVpcsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudVpcsRequest 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 +// ListCloudVpcsRequestMultiError, or nil if none found. +func (m *ListCloudVpcsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudVpcsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudVpcsRequestValidationError{ + err := ListCloudVpcsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -29832,9 +48764,30 @@ func (m *ListCloudVpcsRequest) Validate() error { // no validation rules for ResourceGroupName + if len(errors) > 0 { + return ListCloudVpcsRequestMultiError(errors) + } + return nil } +// ListCloudVpcsRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudVpcsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudVpcsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudVpcsRequestMultiError) 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 ListCloudVpcsRequestMultiError) AllErrors() []error { return m } + // ListCloudVpcsRequestValidationError is the validation error returned by // ListCloudVpcsRequest.Validate if the designated constraints aren't met. type ListCloudVpcsRequestValidationError struct { @@ -29893,12 +48846,26 @@ var _ interface { // Validate checks the field values on ListCloudVpcsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudVpcsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudVpcsResponse 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 +// ListCloudVpcsResponseMultiError, or nil if none found. +func (m *ListCloudVpcsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudVpcsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -29908,7 +48875,26 @@ func (m *ListCloudVpcsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudVpcsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudVpcsResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudVpcsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -29920,9 +48906,30 @@ func (m *ListCloudVpcsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudVpcsResponseMultiError(errors) + } + return nil } +// ListCloudVpcsResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudVpcsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudVpcsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudVpcsResponseMultiError) 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 ListCloudVpcsResponseMultiError) AllErrors() []error { return m } + // ListCloudVpcsResponseValidationError is the validation error returned by // ListCloudVpcsResponse.Validate if the designated constraints aren't met. type ListCloudVpcsResponseValidationError struct { @@ -29980,12 +48987,27 @@ var _ interface { } = ListCloudVpcsResponseValidationError{} // Validate checks the field values on CloudVpc with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *CloudVpc) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudVpc 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 CloudVpcMultiError, or nil +// if none found. +func (m *CloudVpc) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudVpc) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for VpcId @@ -29997,7 +49019,26 @@ func (m *CloudVpc) Validate() error { for idx, item := range m.GetCidrs() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudVpcValidationError{ + field: fmt.Sprintf("Cidrs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudVpcValidationError{ + field: fmt.Sprintf("Cidrs[%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 CloudVpcValidationError{ field: fmt.Sprintf("Cidrs[%v]", idx), @@ -30011,9 +49052,29 @@ func (m *CloudVpc) Validate() error { // no validation rules for AllocateIpNum + if len(errors) > 0 { + return CloudVpcMultiError(errors) + } + return nil } +// CloudVpcMultiError is an error wrapping multiple validation errors returned +// by CloudVpc.ValidateAll() if the designated constraints aren't met. +type CloudVpcMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudVpcMultiError) 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 CloudVpcMultiError) AllErrors() []error { return m } + // CloudVpcValidationError is the validation error returned by // CloudVpc.Validate if the designated constraints aren't met. type CloudVpcValidationError struct { @@ -30069,20 +49130,55 @@ var _ interface { } = CloudVpcValidationError{} // Validate checks the field values on AssistantCidr with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *AssistantCidr) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on AssistantCidr 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 AssistantCidrMultiError, or +// nil if none found. +func (m *AssistantCidr) ValidateAll() error { + return m.validate(true) +} + +func (m *AssistantCidr) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Cidr // no validation rules for CidrType + if len(errors) > 0 { + return AssistantCidrMultiError(errors) + } + return nil } +// AssistantCidrMultiError is an error wrapping multiple validation errors +// returned by AssistantCidr.ValidateAll() if the designated constraints +// aren't met. +type AssistantCidrMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m AssistantCidrMultiError) 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 AssistantCidrMultiError) AllErrors() []error { return m } + // AssistantCidrValidationError is the validation error returned by // AssistantCidr.Validate if the designated constraints aren't met. type AssistantCidrValidationError struct { @@ -30139,17 +49235,35 @@ var _ interface { // Validate checks the field values on ListCloudSubnetsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudSubnetsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudSubnetsRequest 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 +// ListCloudSubnetsRequestMultiError, or nil if none found. +func (m *ListCloudSubnetsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudSubnetsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudSubnetsRequestValidationError{ + err := ListCloudSubnetsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -30168,9 +49282,30 @@ func (m *ListCloudSubnetsRequest) Validate() error { // no validation rules for Name + if len(errors) > 0 { + return ListCloudSubnetsRequestMultiError(errors) + } + return nil } +// ListCloudSubnetsRequestMultiError is an error wrapping multiple validation +// errors returned by ListCloudSubnetsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCloudSubnetsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudSubnetsRequestMultiError) 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 ListCloudSubnetsRequestMultiError) AllErrors() []error { return m } + // ListCloudSubnetsRequestValidationError is the validation error returned by // ListCloudSubnetsRequest.Validate if the designated constraints aren't met. type ListCloudSubnetsRequestValidationError struct { @@ -30229,12 +49364,26 @@ var _ interface { // Validate checks the field values on ListCloudSubnetsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudSubnetsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudSubnetsResponse 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 +// ListCloudSubnetsResponseMultiError, or nil if none found. +func (m *ListCloudSubnetsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudSubnetsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -30244,7 +49393,26 @@ func (m *ListCloudSubnetsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudSubnetsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudSubnetsResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudSubnetsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -30256,9 +49424,30 @@ func (m *ListCloudSubnetsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudSubnetsResponseMultiError(errors) + } + return nil } +// ListCloudSubnetsResponseMultiError is an error wrapping multiple validation +// errors returned by ListCloudSubnetsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListCloudSubnetsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudSubnetsResponseMultiError) 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 ListCloudSubnetsResponseMultiError) AllErrors() []error { return m } + // ListCloudSubnetsResponseValidationError is the validation error returned by // ListCloudSubnetsResponse.Validate if the designated constraints aren't met. type ListCloudSubnetsResponseValidationError struct { @@ -30316,12 +49505,26 @@ var _ interface { } = ListCloudSubnetsResponseValidationError{} // Validate checks the field values on Subnet with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *Subnet) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Subnet 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 SubnetMultiError, or nil if none found. +func (m *Subnet) ValidateAll() error { + return m.validate(true) +} + +func (m *Subnet) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for VpcID // no validation rules for SubnetID @@ -30338,7 +49541,26 @@ func (m *Subnet) Validate() error { // no validation rules for ZoneName - if v, ok := interface{}(m.GetCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SubnetValidationError{ + field: "Cluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SubnetValidationError{ + field: "Cluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SubnetValidationError{ field: "Cluster", @@ -30348,9 +49570,31 @@ func (m *Subnet) Validate() error { } } + // no validation rules for HwNeutronSubnetID + + if len(errors) > 0 { + return SubnetMultiError(errors) + } + return nil } +// SubnetMultiError is an error wrapping multiple validation errors returned by +// Subnet.ValidateAll() if the designated constraints aren't met. +type SubnetMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SubnetMultiError) 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 SubnetMultiError) AllErrors() []error { return m } + // SubnetValidationError is the validation error returned by Subnet.Validate if // the designated constraints aren't met. type SubnetValidationError struct { @@ -30407,17 +49651,35 @@ var _ interface { // Validate checks the field values on CheckCidrConflictFromVpcRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CheckCidrConflictFromVpcRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CheckCidrConflictFromVpcRequest 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 +// CheckCidrConflictFromVpcRequestMultiError, or nil if none found. +func (m *CheckCidrConflictFromVpcRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CheckCidrConflictFromVpcRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return CheckCidrConflictFromVpcRequestValidationError{ + err := CheckCidrConflictFromVpcRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for VpcId @@ -30425,17 +49687,42 @@ func (m *CheckCidrConflictFromVpcRequest) Validate() error { // no validation rules for Cidr if utf8.RuneCountInString(m.GetRegion()) < 2 { - return CheckCidrConflictFromVpcRequestValidationError{ + err := CheckCidrConflictFromVpcRequestValidationError{ field: "Region", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for AccountID + if len(errors) > 0 { + return CheckCidrConflictFromVpcRequestMultiError(errors) + } + return nil } +// CheckCidrConflictFromVpcRequestMultiError is an error wrapping multiple +// validation errors returned by CheckCidrConflictFromVpcRequest.ValidateAll() +// if the designated constraints aren't met. +type CheckCidrConflictFromVpcRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CheckCidrConflictFromVpcRequestMultiError) 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 CheckCidrConflictFromVpcRequestMultiError) AllErrors() []error { return m } + // CheckCidrConflictFromVpcRequestValidationError is the validation error // returned by CheckCidrConflictFromVpcRequest.Validate if the designated // constraints aren't met. @@ -30495,19 +49782,53 @@ var _ interface { // Validate checks the field values on CheckCidrConflictFromVpcResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *CheckCidrConflictFromVpcResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CheckCidrConflictFromVpcResponse 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 +// CheckCidrConflictFromVpcResponseMultiError, or nil if none found. +func (m *CheckCidrConflictFromVpcResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CheckCidrConflictFromVpcResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CheckCidrConflictFromVpcResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CheckCidrConflictFromVpcResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CheckCidrConflictFromVpcResponseValidationError{ field: "Data", @@ -30517,9 +49838,31 @@ func (m *CheckCidrConflictFromVpcResponse) Validate() error { } } + if len(errors) > 0 { + return CheckCidrConflictFromVpcResponseMultiError(errors) + } + return nil } +// CheckCidrConflictFromVpcResponseMultiError is an error wrapping multiple +// validation errors returned by +// CheckCidrConflictFromVpcResponse.ValidateAll() if the designated +// constraints aren't met. +type CheckCidrConflictFromVpcResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CheckCidrConflictFromVpcResponseMultiError) 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 CheckCidrConflictFromVpcResponseMultiError) AllErrors() []error { return m } + // CheckCidrConflictFromVpcResponseValidationError is the validation error // returned by CheckCidrConflictFromVpcResponse.Validate if the designated // constraints aren't met. @@ -30578,16 +49921,50 @@ var _ interface { } = CheckCidrConflictFromVpcResponseValidationError{} // Validate checks the field values on ConflictInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *ConflictInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ConflictInfo 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 ConflictInfoMultiError, or +// nil if none found. +func (m *ConflictInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ConflictInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return ConflictInfoMultiError(errors) + } + return nil } +// ConflictInfoMultiError is an error wrapping multiple validation errors +// returned by ConflictInfo.ValidateAll() if the designated constraints aren't met. +type ConflictInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ConflictInfoMultiError) 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 ConflictInfoMultiError) AllErrors() []error { return m } + // ConflictInfoValidationError is the validation error returned by // ConflictInfo.Validate if the designated constraints aren't met. type ConflictInfoValidationError struct { @@ -30644,17 +50021,35 @@ var _ interface { // Validate checks the field values on ListCloudSecurityGroupsRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudSecurityGroupsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudSecurityGroupsRequest 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 +// ListCloudSecurityGroupsRequestMultiError, or nil if none found. +func (m *ListCloudSecurityGroupsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudSecurityGroupsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListCloudSecurityGroupsRequestValidationError{ + err := ListCloudSecurityGroupsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -30663,9 +50058,30 @@ func (m *ListCloudSecurityGroupsRequest) Validate() error { // no validation rules for ResourceGroupName + if len(errors) > 0 { + return ListCloudSecurityGroupsRequestMultiError(errors) + } + return nil } +// ListCloudSecurityGroupsRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudSecurityGroupsRequest.ValidateAll() +// if the designated constraints aren't met. +type ListCloudSecurityGroupsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudSecurityGroupsRequestMultiError) 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 ListCloudSecurityGroupsRequestMultiError) AllErrors() []error { return m } + // ListCloudSecurityGroupsRequestValidationError is the validation error // returned by ListCloudSecurityGroupsRequest.Validate if the designated // constraints aren't met. @@ -30725,12 +50141,26 @@ var _ interface { // Validate checks the field values on ListCloudSecurityGroupsResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudSecurityGroupsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudSecurityGroupsResponse 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 +// ListCloudSecurityGroupsResponseMultiError, or nil if none found. +func (m *ListCloudSecurityGroupsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudSecurityGroupsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -30740,7 +50170,26 @@ func (m *ListCloudSecurityGroupsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudSecurityGroupsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudSecurityGroupsResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudSecurityGroupsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -30752,9 +50201,30 @@ func (m *ListCloudSecurityGroupsResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudSecurityGroupsResponseMultiError(errors) + } + return nil } +// ListCloudSecurityGroupsResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudSecurityGroupsResponse.ValidateAll() +// if the designated constraints aren't met. +type ListCloudSecurityGroupsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudSecurityGroupsResponseMultiError) 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 ListCloudSecurityGroupsResponseMultiError) AllErrors() []error { return m } + // ListCloudSecurityGroupsResponseValidationError is the validation error // returned by ListCloudSecurityGroupsResponse.Validate if the designated // constraints aren't met. @@ -30814,17 +50284,35 @@ var _ interface { // Validate checks the field values on ListKeyPairsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListKeyPairsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListKeyPairsRequest 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 +// ListKeyPairsRequestMultiError, or nil if none found. +func (m *ListKeyPairsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListKeyPairsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetCloudID()) < 2 { - return ListKeyPairsRequestValidationError{ + err := ListKeyPairsRequestValidationError{ field: "CloudID", reason: "value length must be at least 2 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Region @@ -30833,9 +50321,30 @@ func (m *ListKeyPairsRequest) Validate() error { // no validation rules for ResourceGroupName + if len(errors) > 0 { + return ListKeyPairsRequestMultiError(errors) + } + return nil } +// ListKeyPairsRequestMultiError is an error wrapping multiple validation +// errors returned by ListKeyPairsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListKeyPairsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListKeyPairsRequestMultiError) 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 ListKeyPairsRequestMultiError) AllErrors() []error { return m } + // ListKeyPairsRequestValidationError is the validation error returned by // ListKeyPairsRequest.Validate if the designated constraints aren't met. type ListKeyPairsRequestValidationError struct { @@ -30894,12 +50403,26 @@ var _ interface { // Validate checks the field values on ListKeyPairsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListKeyPairsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListKeyPairsResponse 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 +// ListKeyPairsResponseMultiError, or nil if none found. +func (m *ListKeyPairsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListKeyPairsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -30909,7 +50432,26 @@ func (m *ListKeyPairsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListKeyPairsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListKeyPairsResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListKeyPairsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -30921,9 +50463,30 @@ func (m *ListKeyPairsResponse) Validate() error { } + if len(errors) > 0 { + return ListKeyPairsResponseMultiError(errors) + } + return nil } +// ListKeyPairsResponseMultiError is an error wrapping multiple validation +// errors returned by ListKeyPairsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListKeyPairsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListKeyPairsResponseMultiError) 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 ListKeyPairsResponseMultiError) AllErrors() []error { return m } + // ListKeyPairsResponseValidationError is the validation error returned by // ListKeyPairsResponse.Validate if the designated constraints aren't met. type ListKeyPairsResponseValidationError struct { @@ -30981,21 +50544,55 @@ var _ interface { } = ListKeyPairsResponseValidationError{} // Validate checks the field values on KeyPair with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *KeyPair) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on KeyPair 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 KeyPairMultiError, or nil if none found. +func (m *KeyPair) ValidateAll() error { + return m.validate(true) +} + +func (m *KeyPair) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for KeyID // no validation rules for KeyName // no validation rules for Description + if len(errors) > 0 { + return KeyPairMultiError(errors) + } + return nil } +// KeyPairMultiError is an error wrapping multiple validation errors returned +// by KeyPair.ValidateAll() if the designated constraints aren't met. +type KeyPairMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m KeyPairMultiError) 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 KeyPairMultiError) AllErrors() []error { return m } + // KeyPairValidationError is the validation error returned by KeyPair.Validate // if the designated constraints aren't met. type KeyPairValidationError struct { @@ -31052,12 +50649,26 @@ var _ interface { // Validate checks the field values on ListOperationLogsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListOperationLogsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListOperationLogsRequest 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 +// ListOperationLogsRequestMultiError, or nil if none found. +func (m *ListOperationLogsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListOperationLogsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ResourceType // no validation rules for ResourceID @@ -31067,17 +50678,25 @@ func (m *ListOperationLogsRequest) Validate() error { // no validation rules for EndTime if m.GetLimit() <= 0 { - return ListOperationLogsRequestValidationError{ + err := ListOperationLogsRequestValidationError{ field: "Limit", reason: "value must be greater than 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetPage() <= 0 { - return ListOperationLogsRequestValidationError{ + err := ListOperationLogsRequestValidationError{ field: "Page", reason: "value must be greater than 0", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Simple @@ -31102,9 +50721,30 @@ func (m *ListOperationLogsRequest) Validate() error { // no validation rules for ResourceName + if len(errors) > 0 { + return ListOperationLogsRequestMultiError(errors) + } + return nil } +// ListOperationLogsRequestMultiError is an error wrapping multiple validation +// errors returned by ListOperationLogsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListOperationLogsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListOperationLogsRequestMultiError) 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 ListOperationLogsRequestMultiError) AllErrors() []error { return m } + // ListOperationLogsRequestValidationError is the validation error returned by // ListOperationLogsRequest.Validate if the designated constraints aren't met. type ListOperationLogsRequestValidationError struct { @@ -31163,33 +50803,76 @@ var _ interface { // Validate checks the field values on ListTaskStepLogsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListTaskStepLogsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListTaskStepLogsRequest 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 +// ListTaskStepLogsRequestMultiError, or nil if none found. +func (m *ListTaskStepLogsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListTaskStepLogsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TaskID // no validation rules for StepName if m.GetPage() <= 0 { - return ListTaskStepLogsRequestValidationError{ + err := ListTaskStepLogsRequestValidationError{ field: "Page", reason: "value must be greater than 0", } + if !all { + return err + } + errors = append(errors, err) } if m.GetLimit() <= 0 { - return ListTaskStepLogsRequestValidationError{ + err := ListTaskStepLogsRequestValidationError{ field: "Limit", reason: "value must be greater than 0", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return ListTaskStepLogsRequestMultiError(errors) } return nil } +// ListTaskStepLogsRequestMultiError is an error wrapping multiple validation +// errors returned by ListTaskStepLogsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListTaskStepLogsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListTaskStepLogsRequestMultiError) 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 ListTaskStepLogsRequestMultiError) AllErrors() []error { return m } + // ListTaskStepLogsRequestValidationError is the validation error returned by // ListTaskStepLogsRequest.Validate if the designated constraints aren't met. type ListTaskStepLogsRequestValidationError struct { @@ -31248,19 +50931,52 @@ var _ interface { // Validate checks the field values on ListOperationLogsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListOperationLogsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListOperationLogsResponse 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 +// ListOperationLogsResponseMultiError, or nil if none found. +func (m *ListOperationLogsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListOperationLogsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListOperationLogsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListOperationLogsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListOperationLogsResponseValidationError{ field: "Data", @@ -31270,9 +50986,30 @@ func (m *ListOperationLogsResponse) Validate() error { } } + if len(errors) > 0 { + return ListOperationLogsResponseMultiError(errors) + } + return nil } +// ListOperationLogsResponseMultiError is an error wrapping multiple validation +// errors returned by ListOperationLogsResponse.ValidateAll() if the +// designated constraints aren't met. +type ListOperationLogsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListOperationLogsResponseMultiError) 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 ListOperationLogsResponseMultiError) AllErrors() []error { return m } + // ListOperationLogsResponseValidationError is the validation error returned by // ListOperationLogsResponse.Validate if the designated constraints aren't met. type ListOperationLogsResponseValidationError struct { @@ -31331,17 +51068,52 @@ var _ interface { // Validate checks the field values on ListTaskRecordsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListTaskRecordsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListTaskRecordsRequest 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 +// ListTaskRecordsRequestMultiError, or nil if none found. +func (m *ListTaskRecordsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListTaskRecordsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TaskID + if len(errors) > 0 { + return ListTaskRecordsRequestMultiError(errors) + } + return nil } +// ListTaskRecordsRequestMultiError is an error wrapping multiple validation +// errors returned by ListTaskRecordsRequest.ValidateAll() if the designated +// constraints aren't met. +type ListTaskRecordsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListTaskRecordsRequestMultiError) 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 ListTaskRecordsRequestMultiError) AllErrors() []error { return m } + // ListTaskRecordsRequestValidationError is the validation error returned by // ListTaskRecordsRequest.Validate if the designated constraints aren't met. type ListTaskRecordsRequestValidationError struct { @@ -31400,19 +51172,52 @@ var _ interface { // Validate checks the field values on ListTaskRecordsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListTaskRecordsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListTaskRecordsResponse 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 +// ListTaskRecordsResponseMultiError, or nil if none found. +func (m *ListTaskRecordsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListTaskRecordsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListTaskRecordsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListTaskRecordsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListTaskRecordsResponseValidationError{ field: "Data", @@ -31422,9 +51227,30 @@ func (m *ListTaskRecordsResponse) Validate() error { } } + if len(errors) > 0 { + return ListTaskRecordsResponseMultiError(errors) + } + return nil } +// ListTaskRecordsResponseMultiError is an error wrapping multiple validation +// errors returned by ListTaskRecordsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListTaskRecordsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListTaskRecordsResponseMultiError) 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 ListTaskRecordsResponseMultiError) AllErrors() []error { return m } + // ListTaskRecordsResponseValidationError is the validation error returned by // ListTaskRecordsResponse.Validate if the designated constraints aren't met. type ListTaskRecordsResponseValidationError struct { @@ -31483,18 +51309,51 @@ var _ interface { // Validate checks the field values on TaskRecordsResponseData with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *TaskRecordsResponseData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TaskRecordsResponseData 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 +// TaskRecordsResponseDataMultiError, or nil if none found. +func (m *TaskRecordsResponseData) ValidateAll() error { + return m.validate(true) +} + +func (m *TaskRecordsResponseData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Status for idx, item := range m.GetStep() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TaskRecordsResponseDataValidationError{ + field: fmt.Sprintf("Step[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TaskRecordsResponseDataValidationError{ + field: fmt.Sprintf("Step[%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 TaskRecordsResponseDataValidationError{ field: fmt.Sprintf("Step[%v]", idx), @@ -31506,9 +51365,30 @@ func (m *TaskRecordsResponseData) Validate() error { } + if len(errors) > 0 { + return TaskRecordsResponseDataMultiError(errors) + } + return nil } +// TaskRecordsResponseDataMultiError is an error wrapping multiple validation +// errors returned by TaskRecordsResponseData.ValidateAll() if the designated +// constraints aren't met. +type TaskRecordsResponseDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaskRecordsResponseDataMultiError) 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 TaskRecordsResponseDataMultiError) AllErrors() []error { return m } + // TaskRecordsResponseDataValidationError is the validation error returned by // TaskRecordsResponseData.Validate if the designated constraints aren't met. type TaskRecordsResponseDataValidationError struct { @@ -31566,13 +51446,27 @@ var _ interface { } = TaskRecordsResponseDataValidationError{} // Validate checks the field values on TaskRecordStep with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *TaskRecordStep) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TaskRecordStep 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 TaskRecordStepMultiError, +// or nil if none found. +func (m *TaskRecordStep) ValidateAll() error { + return m.validate(true) +} + +func (m *TaskRecordStep) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for Status @@ -31584,7 +51478,26 @@ func (m *TaskRecordStep) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TaskRecordStepValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TaskRecordStepValidationError{ + field: fmt.Sprintf("Data[%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 TaskRecordStepValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -31596,9 +51509,30 @@ func (m *TaskRecordStep) Validate() error { } + if len(errors) > 0 { + return TaskRecordStepMultiError(errors) + } + return nil } +// TaskRecordStepMultiError is an error wrapping multiple validation errors +// returned by TaskRecordStep.ValidateAll() if the designated constraints +// aren't met. +type TaskRecordStepMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaskRecordStepMultiError) 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 TaskRecordStepMultiError) AllErrors() []error { return m } + // TaskRecordStepValidationError is the validation error returned by // TaskRecordStep.Validate if the designated constraints aren't met. type TaskRecordStepValidationError struct { @@ -31655,21 +51589,56 @@ var _ interface { // Validate checks the field values on TaskRecordStepData with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *TaskRecordStepData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TaskRecordStepData 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 +// TaskRecordStepDataMultiError, or nil if none found. +func (m *TaskRecordStepData) ValidateAll() error { + return m.validate(true) +} + +func (m *TaskRecordStepData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Log // no validation rules for Timestamp // no validation rules for Level + if len(errors) > 0 { + return TaskRecordStepDataMultiError(errors) + } + return nil } +// TaskRecordStepDataMultiError is an error wrapping multiple validation errors +// returned by TaskRecordStepData.ValidateAll() if the designated constraints +// aren't met. +type TaskRecordStepDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaskRecordStepDataMultiError) 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 TaskRecordStepDataMultiError) AllErrors() []error { return m } + // TaskRecordStepDataValidationError is the validation error returned by // TaskRecordStepData.Validate if the designated constraints aren't met. type TaskRecordStepDataValidationError struct { @@ -31728,18 +51697,51 @@ var _ interface { // Validate checks the field values on ListOperationLogsResponseData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListOperationLogsResponseData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListOperationLogsResponseData 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 +// ListOperationLogsResponseDataMultiError, or nil if none found. +func (m *ListOperationLogsResponseData) ValidateAll() error { + return m.validate(true) +} + +func (m *ListOperationLogsResponseData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Count for idx, item := range m.GetResults() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListOperationLogsResponseDataValidationError{ + field: fmt.Sprintf("Results[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListOperationLogsResponseDataValidationError{ + field: fmt.Sprintf("Results[%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 ListOperationLogsResponseDataValidationError{ field: fmt.Sprintf("Results[%v]", idx), @@ -31751,9 +51753,30 @@ func (m *ListOperationLogsResponseData) Validate() error { } + if len(errors) > 0 { + return ListOperationLogsResponseDataMultiError(errors) + } + return nil } +// ListOperationLogsResponseDataMultiError is an error wrapping multiple +// validation errors returned by ListOperationLogsResponseData.ValidateAll() +// if the designated constraints aren't met. +type ListOperationLogsResponseDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListOperationLogsResponseDataMultiError) 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 ListOperationLogsResponseDataMultiError) AllErrors() []error { return m } + // ListOperationLogsResponseDataValidationError is the validation error // returned by ListOperationLogsResponseData.Validate if the designated // constraints aren't met. @@ -31813,12 +51836,26 @@ var _ interface { // Validate checks the field values on OperationLogDetail with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *OperationLogDetail) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on OperationLogDetail 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 +// OperationLogDetailMultiError, or nil if none found. +func (m *OperationLogDetail) ValidateAll() error { + return m.validate(true) +} + +func (m *OperationLogDetail) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ResourceType // no validation rules for ResourceID @@ -31831,7 +51868,26 @@ func (m *OperationLogDetail) Validate() error { // no validation rules for CreateTime - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, OperationLogDetailValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, OperationLogDetailValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return OperationLogDetailValidationError{ field: "Task", @@ -31847,9 +51903,30 @@ func (m *OperationLogDetail) Validate() error { // no validation rules for ResourceName + if len(errors) > 0 { + return OperationLogDetailMultiError(errors) + } + return nil } +// OperationLogDetailMultiError is an error wrapping multiple validation errors +// returned by OperationLogDetail.ValidateAll() if the designated constraints +// aren't met. +type OperationLogDetailMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m OperationLogDetailMultiError) 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 OperationLogDetailMultiError) AllErrors() []error { return m } + // OperationLogDetailValidationError is the validation error returned by // OperationLogDetail.Validate if the designated constraints aren't met. type OperationLogDetailValidationError struct { @@ -31908,19 +51985,52 @@ var _ interface { // Validate checks the field values on ListTaskStepLogsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListTaskStepLogsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListTaskStepLogsResponse 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 +// ListTaskStepLogsResponseMultiError, or nil if none found. +func (m *ListTaskStepLogsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListTaskStepLogsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListTaskStepLogsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListTaskStepLogsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListTaskStepLogsResponseValidationError{ field: "Data", @@ -31930,9 +52040,30 @@ func (m *ListTaskStepLogsResponse) Validate() error { } } + if len(errors) > 0 { + return ListTaskStepLogsResponseMultiError(errors) + } + return nil } +// ListTaskStepLogsResponseMultiError is an error wrapping multiple validation +// errors returned by ListTaskStepLogsResponse.ValidateAll() if the designated +// constraints aren't met. +type ListTaskStepLogsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListTaskStepLogsResponseMultiError) 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 ListTaskStepLogsResponseMultiError) AllErrors() []error { return m } + // ListTaskStepLogsResponseValidationError is the validation error returned by // ListTaskStepLogsResponse.Validate if the designated constraints aren't met. type ListTaskStepLogsResponseValidationError struct { @@ -31991,18 +52122,51 @@ var _ interface { // Validate checks the field values on ListTaskStepLogsResponseData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListTaskStepLogsResponseData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListTaskStepLogsResponseData 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 +// ListTaskStepLogsResponseDataMultiError, or nil if none found. +func (m *ListTaskStepLogsResponseData) ValidateAll() error { + return m.validate(true) +} + +func (m *ListTaskStepLogsResponseData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Count for idx, item := range m.GetResults() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListTaskStepLogsResponseDataValidationError{ + field: fmt.Sprintf("Results[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListTaskStepLogsResponseDataValidationError{ + field: fmt.Sprintf("Results[%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 ListTaskStepLogsResponseDataValidationError{ field: fmt.Sprintf("Results[%v]", idx), @@ -32014,9 +52178,30 @@ func (m *ListTaskStepLogsResponseData) Validate() error { } + if len(errors) > 0 { + return ListTaskStepLogsResponseDataMultiError(errors) + } + return nil } +// ListTaskStepLogsResponseDataMultiError is an error wrapping multiple +// validation errors returned by ListTaskStepLogsResponseData.ValidateAll() if +// the designated constraints aren't met. +type ListTaskStepLogsResponseDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListTaskStepLogsResponseDataMultiError) 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 ListTaskStepLogsResponseDataMultiError) AllErrors() []error { return m } + // ListTaskStepLogsResponseDataValidationError is the validation error returned // by ListTaskStepLogsResponseData.Validate if the designated constraints // aren't met. @@ -32075,13 +52260,27 @@ var _ interface { } = ListTaskStepLogsResponseDataValidationError{} // Validate checks the field values on TaskStepLogDetail with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *TaskStepLogDetail) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TaskStepLogDetail 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 +// TaskStepLogDetailMultiError, or nil if none found. +func (m *TaskStepLogDetail) ValidateAll() error { + return m.validate(true) +} + +func (m *TaskStepLogDetail) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TaskID // no validation rules for StepName @@ -32092,9 +52291,30 @@ func (m *TaskStepLogDetail) Validate() error { // no validation rules for CreateTime + if len(errors) > 0 { + return TaskStepLogDetailMultiError(errors) + } + return nil } +// TaskStepLogDetailMultiError is an error wrapping multiple validation errors +// returned by TaskStepLogDetail.ValidateAll() if the designated constraints +// aren't met. +type TaskStepLogDetailMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TaskStepLogDetailMultiError) 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 TaskStepLogDetailMultiError) AllErrors() []error { return m } + // TaskStepLogDetailValidationError is the validation error returned by // TaskStepLogDetail.Validate if the designated constraints aren't met. type TaskStepLogDetailValidationError struct { @@ -32153,26 +52373,65 @@ var _ interface { // Validate checks the field values on CleanDbHistoryDataRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanDbHistoryDataRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanDbHistoryDataRequest 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 +// CleanDbHistoryDataRequestMultiError, or nil if none found. +func (m *CleanDbHistoryDataRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanDbHistoryDataRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if _, ok := _CleanDbHistoryDataRequest_DataType_InLookup[m.GetDataType()]; !ok { - return CleanDbHistoryDataRequestValidationError{ + err := CleanDbHistoryDataRequestValidationError{ field: "DataType", reason: "value must be in list [task operationlog]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for StartTime // no validation rules for EndTime + if len(errors) > 0 { + return CleanDbHistoryDataRequestMultiError(errors) + } + return nil } +// CleanDbHistoryDataRequestMultiError is an error wrapping multiple validation +// errors returned by CleanDbHistoryDataRequest.ValidateAll() if the +// designated constraints aren't met. +type CleanDbHistoryDataRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanDbHistoryDataRequestMultiError) 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 CleanDbHistoryDataRequestMultiError) AllErrors() []error { return m } + // CleanDbHistoryDataRequestValidationError is the validation error returned by // CleanDbHistoryDataRequest.Validate if the designated constraints aren't met. type CleanDbHistoryDataRequestValidationError struct { @@ -32236,21 +52495,56 @@ var _CleanDbHistoryDataRequest_DataType_InLookup = map[string]struct{}{ // Validate checks the field values on CleanDbHistoryDataResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CleanDbHistoryDataResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CleanDbHistoryDataResponse 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 +// CleanDbHistoryDataResponseMultiError, or nil if none found. +func (m *CleanDbHistoryDataResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CleanDbHistoryDataResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result + if len(errors) > 0 { + return CleanDbHistoryDataResponseMultiError(errors) + } + return nil } +// CleanDbHistoryDataResponseMultiError is an error wrapping multiple +// validation errors returned by CleanDbHistoryDataResponse.ValidateAll() if +// the designated constraints aren't met. +type CleanDbHistoryDataResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CleanDbHistoryDataResponseMultiError) 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 CleanDbHistoryDataResponseMultiError) AllErrors() []error { return m } + // CleanDbHistoryDataResponseValidationError is the validation error returned // by CleanDbHistoryDataResponse.Validate if the designated constraints aren't met. type CleanDbHistoryDataResponseValidationError struct { @@ -32308,22 +52602,57 @@ var _ interface { } = CleanDbHistoryDataResponseValidationError{} // Validate checks the field values on SecurityGroup with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *SecurityGroup) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on SecurityGroup 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 SecurityGroupMultiError, or +// nil if none found. +func (m *SecurityGroup) ValidateAll() error { + return m.validate(true) +} + +func (m *SecurityGroup) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for SecurityGroupID // no validation rules for SecurityGroupName // no validation rules for Description + if len(errors) > 0 { + return SecurityGroupMultiError(errors) + } + return nil } +// SecurityGroupMultiError is an error wrapping multiple validation errors +// returned by SecurityGroup.ValidateAll() if the designated constraints +// aren't met. +type SecurityGroupMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m SecurityGroupMultiError) 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 SecurityGroupMultiError) AllErrors() []error { return m } + // SecurityGroupValidationError is the validation error returned by // SecurityGroup.Validate if the designated constraints aren't met. type SecurityGroupValidationError struct { @@ -32380,16 +52709,49 @@ var _ interface { // Validate checks the field values on NodeOperationStatus with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *NodeOperationStatus) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeOperationStatus 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 +// NodeOperationStatusMultiError, or nil if none found. +func (m *NodeOperationStatus) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeOperationStatus) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetFail() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeOperationStatusValidationError{ + field: fmt.Sprintf("Fail[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeOperationStatusValidationError{ + field: fmt.Sprintf("Fail[%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 NodeOperationStatusValidationError{ field: fmt.Sprintf("Fail[%v]", idx), @@ -32404,7 +52766,26 @@ func (m *NodeOperationStatus) Validate() error { for idx, item := range m.GetSuccess() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeOperationStatusValidationError{ + field: fmt.Sprintf("Success[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeOperationStatusValidationError{ + field: fmt.Sprintf("Success[%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 NodeOperationStatusValidationError{ field: fmt.Sprintf("Success[%v]", idx), @@ -32416,9 +52797,30 @@ func (m *NodeOperationStatus) Validate() error { } + if len(errors) > 0 { + return NodeOperationStatusMultiError(errors) + } + return nil } +// NodeOperationStatusMultiError is an error wrapping multiple validation +// errors returned by NodeOperationStatus.ValidateAll() if the designated +// constraints aren't met. +type NodeOperationStatusMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeOperationStatusMultiError) 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 NodeOperationStatusMultiError) AllErrors() []error { return m } + // NodeOperationStatusValidationError is the validation error returned by // NodeOperationStatus.Validate if the designated constraints aren't met. type NodeOperationStatusValidationError struct { @@ -32477,19 +52879,54 @@ var _ interface { // Validate checks the field values on NodeOperationStatusInfo with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *NodeOperationStatusInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeOperationStatusInfo 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 +// NodeOperationStatusInfoMultiError, or nil if none found. +func (m *NodeOperationStatusInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeOperationStatusInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeName // no validation rules for Message + if len(errors) > 0 { + return NodeOperationStatusInfoMultiError(errors) + } + return nil } +// NodeOperationStatusInfoMultiError is an error wrapping multiple validation +// errors returned by NodeOperationStatusInfo.ValidateAll() if the designated +// constraints aren't met. +type NodeOperationStatusInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeOperationStatusInfoMultiError) 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 NodeOperationStatusInfoMultiError) AllErrors() []error { return m } + // NodeOperationStatusInfoValidationError is the validation error returned by // NodeOperationStatusInfo.Validate if the designated constraints aren't met. type NodeOperationStatusInfoValidationError struct { @@ -32547,18 +52984,36 @@ var _ interface { } = NodeOperationStatusInfoValidationError{} // Validate checks the field values on DrainNodeRequest with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *DrainNodeRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DrainNodeRequest 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 +// DrainNodeRequestMultiError, or nil if none found. +func (m *DrainNodeRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DrainNodeRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetClusterID()) < 1 { - return DrainNodeRequestValidationError{ + err := DrainNodeRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Force @@ -32581,9 +53036,30 @@ func (m *DrainNodeRequest) Validate() error { // no validation rules for DryRun + if len(errors) > 0 { + return DrainNodeRequestMultiError(errors) + } + return nil } +// DrainNodeRequestMultiError is an error wrapping multiple validation errors +// returned by DrainNodeRequest.ValidateAll() if the designated constraints +// aren't met. +type DrainNodeRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DrainNodeRequestMultiError) 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 DrainNodeRequestMultiError) AllErrors() []error { return m } + // DrainNodeRequestValidationError is the validation error returned by // DrainNodeRequest.Validate if the designated constraints aren't met. type DrainNodeRequestValidationError struct { @@ -32639,20 +53115,53 @@ var _ interface { } = DrainNodeRequestValidationError{} // Validate checks the field values on DrainNodeResponse with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *DrainNodeResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DrainNodeResponse 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 +// DrainNodeResponseMultiError, or nil if none found. +func (m *DrainNodeResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DrainNodeResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DrainNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DrainNodeResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DrainNodeResponseValidationError{ field: "Data", @@ -32662,9 +53171,30 @@ func (m *DrainNodeResponse) Validate() error { } } + if len(errors) > 0 { + return DrainNodeResponseMultiError(errors) + } + return nil } +// DrainNodeResponseMultiError is an error wrapping multiple validation errors +// returned by DrainNodeResponse.ValidateAll() if the designated constraints +// aren't met. +type DrainNodeResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DrainNodeResponseMultiError) 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 DrainNodeResponseMultiError) AllErrors() []error { return m } + // DrainNodeResponseValidationError is the validation error returned by // DrainNodeResponse.Validate if the designated constraints aren't met. type DrainNodeResponseValidationError struct { @@ -32722,25 +53252,64 @@ var _ interface { } = DrainNodeResponseValidationError{} // Validate checks the field values on NodeAnnotation with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *NodeAnnotation) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeAnnotation 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 NodeAnnotationMultiError, +// or nil if none found. +func (m *NodeAnnotation) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeAnnotation) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetNodeName()) < 1 { - return NodeAnnotationValidationError{ + err := NodeAnnotationValidationError{ field: "NodeName", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Annotations + if len(errors) > 0 { + return NodeAnnotationMultiError(errors) + } + return nil } +// NodeAnnotationMultiError is an error wrapping multiple validation errors +// returned by NodeAnnotation.ValidateAll() if the designated constraints +// aren't met. +type NodeAnnotationMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeAnnotationMultiError) 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 NodeAnnotationMultiError) AllErrors() []error { return m } + // NodeAnnotationValidationError is the validation error returned by // NodeAnnotation.Validate if the designated constraints aren't met. type NodeAnnotationValidationError struct { @@ -32797,23 +53366,60 @@ var _ interface { // Validate checks the field values on UpdateNodeAnnotationsRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeAnnotationsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeAnnotationsRequest 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 +// UpdateNodeAnnotationsRequestMultiError, or nil if none found. +func (m *UpdateNodeAnnotationsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeAnnotationsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetClusterID()) < 1 { - return UpdateNodeAnnotationsRequestValidationError{ + err := UpdateNodeAnnotationsRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetNodes() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeAnnotationsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeAnnotationsRequestValidationError{ + field: fmt.Sprintf("Nodes[%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 UpdateNodeAnnotationsRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), @@ -32825,9 +53431,30 @@ func (m *UpdateNodeAnnotationsRequest) Validate() error { } + if len(errors) > 0 { + return UpdateNodeAnnotationsRequestMultiError(errors) + } + return nil } +// UpdateNodeAnnotationsRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateNodeAnnotationsRequest.ValidateAll() if +// the designated constraints aren't met. +type UpdateNodeAnnotationsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeAnnotationsRequestMultiError) 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 UpdateNodeAnnotationsRequestMultiError) AllErrors() []error { return m } + // UpdateNodeAnnotationsRequestValidationError is the validation error returned // by UpdateNodeAnnotationsRequest.Validate if the designated constraints // aren't met. @@ -32887,19 +53514,52 @@ var _ interface { // Validate checks the field values on UpdateNodeAnnotationsResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeAnnotationsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeAnnotationsResponse 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 +// UpdateNodeAnnotationsResponseMultiError, or nil if none found. +func (m *UpdateNodeAnnotationsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeAnnotationsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeAnnotationsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeAnnotationsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeAnnotationsResponseValidationError{ field: "Data", @@ -32909,9 +53569,30 @@ func (m *UpdateNodeAnnotationsResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeAnnotationsResponseMultiError(errors) + } + return nil } +// UpdateNodeAnnotationsResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateNodeAnnotationsResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateNodeAnnotationsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeAnnotationsResponseMultiError) 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 UpdateNodeAnnotationsResponseMultiError) AllErrors() []error { return m } + // UpdateNodeAnnotationsResponseValidationError is the validation error // returned by UpdateNodeAnnotationsResponse.Validate if the designated // constraints aren't met. @@ -32970,24 +53651,63 @@ var _ interface { } = UpdateNodeAnnotationsResponseValidationError{} // Validate checks the field values on NodeLabel with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *NodeLabel) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeLabel 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 NodeLabelMultiError, or nil +// if none found. +func (m *NodeLabel) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeLabel) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetNodeName()) < 1 { - return NodeLabelValidationError{ + err := NodeLabelValidationError{ field: "NodeName", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Labels + if len(errors) > 0 { + return NodeLabelMultiError(errors) + } + return nil } +// NodeLabelMultiError is an error wrapping multiple validation errors returned +// by NodeLabel.ValidateAll() if the designated constraints aren't met. +type NodeLabelMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeLabelMultiError) 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 NodeLabelMultiError) AllErrors() []error { return m } + // NodeLabelValidationError is the validation error returned by // NodeLabel.Validate if the designated constraints aren't met. type NodeLabelValidationError struct { @@ -33044,16 +53764,49 @@ var _ interface { // Validate checks the field values on UpdateNodeLabelsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeLabelsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeLabelsRequest 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 +// UpdateNodeLabelsRequestMultiError, or nil if none found. +func (m *UpdateNodeLabelsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeLabelsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetNodes() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeLabelsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeLabelsRequestValidationError{ + field: fmt.Sprintf("Nodes[%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 UpdateNodeLabelsRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), @@ -33066,15 +53819,40 @@ func (m *UpdateNodeLabelsRequest) Validate() error { } if len(m.GetClusterID()) < 1 { - return UpdateNodeLabelsRequestValidationError{ + err := UpdateNodeLabelsRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateNodeLabelsRequestMultiError(errors) } return nil } +// UpdateNodeLabelsRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeLabelsRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeLabelsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeLabelsRequestMultiError) 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 UpdateNodeLabelsRequestMultiError) AllErrors() []error { return m } + // UpdateNodeLabelsRequestValidationError is the validation error returned by // UpdateNodeLabelsRequest.Validate if the designated constraints aren't met. type UpdateNodeLabelsRequestValidationError struct { @@ -33133,19 +53911,52 @@ var _ interface { // Validate checks the field values on UpdateNodeLabelsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeLabelsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeLabelsResponse 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 +// UpdateNodeLabelsResponseMultiError, or nil if none found. +func (m *UpdateNodeLabelsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeLabelsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeLabelsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeLabelsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeLabelsResponseValidationError{ field: "Data", @@ -33155,9 +53966,30 @@ func (m *UpdateNodeLabelsResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeLabelsResponseMultiError(errors) + } + return nil } +// UpdateNodeLabelsResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeLabelsResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeLabelsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeLabelsResponseMultiError) 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 UpdateNodeLabelsResponseMultiError) AllErrors() []error { return m } + // UpdateNodeLabelsResponseValidationError is the validation error returned by // UpdateNodeLabelsResponse.Validate if the designated constraints aren't met. type UpdateNodeLabelsResponseValidationError struct { @@ -33215,23 +54047,61 @@ var _ interface { } = UpdateNodeLabelsResponseValidationError{} // Validate checks the field values on NodeTaint with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *NodeTaint) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeTaint 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 NodeTaintMultiError, or nil +// if none found. +func (m *NodeTaint) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeTaint) validate(all bool) error { if m == nil { return nil } + var errors []error + if len(m.GetNodeName()) < 1 { - return NodeTaintValidationError{ + err := NodeTaintValidationError{ field: "NodeName", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetTaints() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NodeTaintValidationError{ + field: fmt.Sprintf("Taints[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NodeTaintValidationError{ + field: fmt.Sprintf("Taints[%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 NodeTaintValidationError{ field: fmt.Sprintf("Taints[%v]", idx), @@ -33243,9 +54113,29 @@ func (m *NodeTaint) Validate() error { } + if len(errors) > 0 { + return NodeTaintMultiError(errors) + } + return nil } +// NodeTaintMultiError is an error wrapping multiple validation errors returned +// by NodeTaint.ValidateAll() if the designated constraints aren't met. +type NodeTaintMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeTaintMultiError) 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 NodeTaintMultiError) AllErrors() []error { return m } + // NodeTaintValidationError is the validation error returned by // NodeTaint.Validate if the designated constraints aren't met. type NodeTaintValidationError struct { @@ -33302,16 +54192,49 @@ var _ interface { // Validate checks the field values on UpdateNodeTaintsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeTaintsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeTaintsRequest 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 +// UpdateNodeTaintsRequestMultiError, or nil if none found. +func (m *UpdateNodeTaintsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeTaintsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + for idx, item := range m.GetNodes() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTaintsRequestValidationError{ + field: fmt.Sprintf("Nodes[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTaintsRequestValidationError{ + field: fmt.Sprintf("Nodes[%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 UpdateNodeTaintsRequestValidationError{ field: fmt.Sprintf("Nodes[%v]", idx), @@ -33324,15 +54247,40 @@ func (m *UpdateNodeTaintsRequest) Validate() error { } if len(m.GetClusterID()) < 1 { - return UpdateNodeTaintsRequestValidationError{ + err := UpdateNodeTaintsRequestValidationError{ field: "ClusterID", reason: "value length must be at least 1 bytes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return UpdateNodeTaintsRequestMultiError(errors) } return nil } +// UpdateNodeTaintsRequestMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeTaintsRequest.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeTaintsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeTaintsRequestMultiError) 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 UpdateNodeTaintsRequestMultiError) AllErrors() []error { return m } + // UpdateNodeTaintsRequestValidationError is the validation error returned by // UpdateNodeTaintsRequest.Validate if the designated constraints aren't met. type UpdateNodeTaintsRequestValidationError struct { @@ -33391,19 +54339,52 @@ var _ interface { // Validate checks the field values on UpdateNodeTaintsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateNodeTaintsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateNodeTaintsResponse 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 +// UpdateNodeTaintsResponseMultiError, or nil if none found. +func (m *UpdateNodeTaintsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateNodeTaintsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateNodeTaintsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateNodeTaintsResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return UpdateNodeTaintsResponseValidationError{ field: "Data", @@ -33413,9 +54394,30 @@ func (m *UpdateNodeTaintsResponse) Validate() error { } } + if len(errors) > 0 { + return UpdateNodeTaintsResponseMultiError(errors) + } + return nil } +// UpdateNodeTaintsResponseMultiError is an error wrapping multiple validation +// errors returned by UpdateNodeTaintsResponse.ValidateAll() if the designated +// constraints aren't met. +type UpdateNodeTaintsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateNodeTaintsResponseMultiError) 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 UpdateNodeTaintsResponseMultiError) AllErrors() []error { return m } + // UpdateNodeTaintsResponseValidationError is the validation error returned by // UpdateNodeTaintsResponse.Validate if the designated constraints aren't met. type UpdateNodeTaintsResponseValidationError struct { @@ -33473,16 +54475,51 @@ var _ interface { } = UpdateNodeTaintsResponseValidationError{} // Validate checks the field values on HealthRequest with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *HealthRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HealthRequest 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 HealthRequestMultiError, or +// nil if none found. +func (m *HealthRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *HealthRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return HealthRequestMultiError(errors) + } + return nil } +// HealthRequestMultiError is an error wrapping multiple validation errors +// returned by HealthRequest.ValidateAll() if the designated constraints +// aren't met. +type HealthRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HealthRequestMultiError) 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 HealthRequestMultiError) AllErrors() []error { return m } + // HealthRequestValidationError is the validation error returned by // HealthRequest.Validate if the designated constraints aren't met. type HealthRequestValidationError struct { @@ -33538,22 +54575,57 @@ var _ interface { } = HealthRequestValidationError{} // Validate checks the field values on HealthResponse with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *HealthResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HealthResponse 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 HealthResponseMultiError, +// or nil if none found. +func (m *HealthResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *HealthResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Available + if len(errors) > 0 { + return HealthResponseMultiError(errors) + } + return nil } +// HealthResponseMultiError is an error wrapping multiple validation errors +// returned by HealthResponse.ValidateAll() if the designated constraints +// aren't met. +type HealthResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HealthResponseMultiError) 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 HealthResponseMultiError) AllErrors() []error { return m } + // HealthResponseValidationError is the validation error returned by // HealthResponse.Validate if the designated constraints aren't met. type HealthResponseValidationError struct { @@ -33610,17 +54682,52 @@ var _ interface { // Validate checks the field values on ListResourceSchemaRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListResourceSchemaRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListResourceSchemaRequest 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 +// ListResourceSchemaRequestMultiError, or nil if none found. +func (m *ListResourceSchemaRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListResourceSchemaRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID + if len(errors) > 0 { + return ListResourceSchemaRequestMultiError(errors) + } + return nil } +// ListResourceSchemaRequestMultiError is an error wrapping multiple validation +// errors returned by ListResourceSchemaRequest.ValidateAll() if the +// designated constraints aren't met. +type ListResourceSchemaRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListResourceSchemaRequestMultiError) 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 ListResourceSchemaRequestMultiError) AllErrors() []error { return m } + // ListResourceSchemaRequestValidationError is the validation error returned by // ListResourceSchemaRequest.Validate if the designated constraints aren't met. type ListResourceSchemaRequestValidationError struct { @@ -33679,19 +54786,54 @@ var _ interface { // Validate checks the field values on GetResourceSchemaRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetResourceSchemaRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetResourceSchemaRequest 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 +// GetResourceSchemaRequestMultiError, or nil if none found. +func (m *GetResourceSchemaRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetResourceSchemaRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Name + if len(errors) > 0 { + return GetResourceSchemaRequestMultiError(errors) + } + return nil } +// GetResourceSchemaRequestMultiError is an error wrapping multiple validation +// errors returned by GetResourceSchemaRequest.ValidateAll() if the designated +// constraints aren't met. +type GetResourceSchemaRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetResourceSchemaRequestMultiError) 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 GetResourceSchemaRequestMultiError) AllErrors() []error { return m } + // GetResourceSchemaRequestValidationError is the validation error returned by // GetResourceSchemaRequest.Validate if the designated constraints aren't met. type GetResourceSchemaRequestValidationError struct { @@ -33750,12 +54892,26 @@ var _ interface { // Validate checks the field values on QueryPermByActionIDReqData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *QueryPermByActionIDReqData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on QueryPermByActionIDReqData 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 +// QueryPermByActionIDReqDataMultiError, or nil if none found. +func (m *QueryPermByActionIDReqData) ValidateAll() error { + return m.validate(true) +} + +func (m *QueryPermByActionIDReqData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectId // no validation rules for ClusterId @@ -33767,15 +54923,40 @@ func (m *QueryPermByActionIDReqData) Validate() error { // no validation rules for AccountId if utf8.RuneCountInString(m.GetOperator()) < 1 { - return QueryPermByActionIDReqDataValidationError{ + err := QueryPermByActionIDReqDataValidationError{ field: "Operator", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return QueryPermByActionIDReqDataMultiError(errors) } return nil } +// QueryPermByActionIDReqDataMultiError is an error wrapping multiple +// validation errors returned by QueryPermByActionIDReqData.ValidateAll() if +// the designated constraints aren't met. +type QueryPermByActionIDReqDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m QueryPermByActionIDReqDataMultiError) 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 QueryPermByActionIDReqDataMultiError) AllErrors() []error { return m } + // QueryPermByActionIDReqDataValidationError is the validation error returned // by QueryPermByActionIDReqData.Validate if the designated constraints aren't met. type QueryPermByActionIDReqDataValidationError struct { @@ -33834,15 +55015,48 @@ var _ interface { // Validate checks the field values on QueryPermByActionIDRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *QueryPermByActionIDRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on QueryPermByActionIDRequest 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 +// QueryPermByActionIDRequestMultiError, or nil if none found. +func (m *QueryPermByActionIDRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *QueryPermByActionIDRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ActionID - if v, ok := interface{}(m.GetPermCtx()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetPermCtx()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, QueryPermByActionIDRequestValidationError{ + field: "PermCtx", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, QueryPermByActionIDRequestValidationError{ + field: "PermCtx", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetPermCtx()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return QueryPermByActionIDRequestValidationError{ field: "PermCtx", @@ -33852,9 +55066,30 @@ func (m *QueryPermByActionIDRequest) Validate() error { } } + if len(errors) > 0 { + return QueryPermByActionIDRequestMultiError(errors) + } + return nil } +// QueryPermByActionIDRequestMultiError is an error wrapping multiple +// validation errors returned by QueryPermByActionIDRequest.ValidateAll() if +// the designated constraints aren't met. +type QueryPermByActionIDRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m QueryPermByActionIDRequestMultiError) 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 QueryPermByActionIDRequestMultiError) AllErrors() []error { return m } + // QueryPermByActionIDRequestValidationError is the validation error returned // by QueryPermByActionIDRequest.Validate if the designated constraints aren't met. type QueryPermByActionIDRequestValidationError struct { @@ -33912,32 +55147,95 @@ var _ interface { } = QueryPermByActionIDRequestValidationError{} // Validate checks the field values on Perms with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *Perms) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Perms 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 PermsMultiError, or nil if none found. +func (m *Perms) ValidateAll() error { + return m.validate(true) +} + +func (m *Perms) validate(all bool) error { if m == nil { return nil } - for key, val := range m.GetPerms() { - _ = val + var errors []error - // no validation rules for Perms[key] + { + sorted_keys := make([]string, len(m.GetPerms())) + i := 0 + for key := range m.GetPerms() { + sorted_keys[i] = key + i++ + } + sort.Slice(sorted_keys, func(i, j int) bool { return sorted_keys[i] < sorted_keys[j] }) + for _, key := range sorted_keys { + val := m.GetPerms()[key] + _ = val - if v, ok := interface{}(val).(interface{ Validate() error }); ok { - if err := v.Validate(); err != nil { - return PermsValidationError{ - field: fmt.Sprintf("Perms[%v]", key), - reason: "embedded message failed validation", - cause: err, + // no validation rules for Perms[key] + + if all { + switch v := interface{}(val).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, PermsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, PermsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(val).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PermsValidationError{ + field: fmt.Sprintf("Perms[%v]", key), + reason: "embedded message failed validation", + cause: err, + } } } + } + } + if len(errors) > 0 { + return PermsMultiError(errors) } return nil } +// PermsMultiError is an error wrapping multiple validation errors returned by +// Perms.ValidateAll() if the designated constraints aren't met. +type PermsMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m PermsMultiError) 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 PermsMultiError) AllErrors() []error { return m } + // PermsValidationError is the validation error returned by Perms.Validate if // the designated constraints aren't met. type PermsValidationError struct { @@ -33994,15 +55292,48 @@ var _ interface { // Validate checks the field values on QueryPermByActionIDResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *QueryPermByActionIDResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on QueryPermByActionIDResponse 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 +// QueryPermByActionIDResponseMultiError, or nil if none found. +func (m *QueryPermByActionIDResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *QueryPermByActionIDResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, QueryPermByActionIDResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, QueryPermByActionIDResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return QueryPermByActionIDResponseValidationError{ field: "Data", @@ -34012,9 +55343,30 @@ func (m *QueryPermByActionIDResponse) Validate() error { } } + if len(errors) > 0 { + return QueryPermByActionIDResponseMultiError(errors) + } + return nil } +// QueryPermByActionIDResponseMultiError is an error wrapping multiple +// validation errors returned by QueryPermByActionIDResponse.ValidateAll() if +// the designated constraints aren't met. +type QueryPermByActionIDResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m QueryPermByActionIDResponseMultiError) 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 QueryPermByActionIDResponseMultiError) AllErrors() []error { return m } + // QueryPermByActionIDResponseValidationError is the validation error returned // by QueryPermByActionIDResponse.Validate if the designated constraints // aren't met. @@ -34073,19 +55425,53 @@ var _ interface { } = QueryPermByActionIDResponseValidationError{} // Validate checks the field values on CommonResp with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *CommonResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CommonResp 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 CommonRespMultiError, or +// nil if none found. +func (m *CommonResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CommonResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CommonRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CommonRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CommonRespValidationError{ field: "Data", @@ -34095,9 +55481,29 @@ func (m *CommonResp) Validate() error { } } + if len(errors) > 0 { + return CommonRespMultiError(errors) + } + return nil } +// CommonRespMultiError is an error wrapping multiple validation errors +// returned by CommonResp.ValidateAll() if the designated constraints aren't met. +type CommonRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CommonRespMultiError) 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 CommonRespMultiError) AllErrors() []error { return m } + // CommonRespValidationError is the validation error returned by // CommonResp.Validate if the designated constraints aren't met. type CommonRespValidationError struct { @@ -34153,20 +55559,53 @@ var _ interface { } = CommonRespValidationError{} // Validate checks the field values on CommonListResp with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *CommonListResp) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CommonListResp 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 CommonListRespMultiError, +// or nil if none found. +func (m *CommonListResp) ValidateAll() error { + return m.validate(true) +} + +func (m *CommonListResp) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CommonListRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CommonListRespValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CommonListRespValidationError{ field: "Data", @@ -34176,9 +55615,30 @@ func (m *CommonListResp) Validate() error { } } + if len(errors) > 0 { + return CommonListRespMultiError(errors) + } + return nil } +// CommonListRespMultiError is an error wrapping multiple validation errors +// returned by CommonListResp.ValidateAll() if the designated constraints +// aren't met. +type CommonListRespMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CommonListRespMultiError) 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 CommonListRespMultiError) AllErrors() []error { return m } + // CommonListRespValidationError is the validation error returned by // CommonListResp.Validate if the designated constraints aren't met. type CommonListRespValidationError struct { @@ -34235,15 +55695,50 @@ var _ interface { // Validate checks the field values on ListBKCloudRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListBKCloudRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListBKCloudRequest 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 +// ListBKCloudRequestMultiError, or nil if none found. +func (m *ListBKCloudRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListBKCloudRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + + if len(errors) > 0 { + return ListBKCloudRequestMultiError(errors) + } + return nil } +// ListBKCloudRequestMultiError is an error wrapping multiple validation errors +// returned by ListBKCloudRequest.ValidateAll() if the designated constraints +// aren't met. +type ListBKCloudRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListBKCloudRequestMultiError) 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 ListBKCloudRequestMultiError) AllErrors() []error { return m } + // ListBKCloudRequestValidationError is the validation error returned by // ListBKCloudRequest.Validate if the designated constraints aren't met. type ListBKCloudRequestValidationError struct { @@ -34302,29 +55797,70 @@ var _ interface { // Validate checks the field values on ListCCTopologyRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCCTopologyRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCCTopologyRequest 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 +// ListCCTopologyRequestMultiError, or nil if none found. +func (m *ListCCTopologyRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCCTopologyRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetClusterID()); l < 1 || l > 100 { - return ListCCTopologyRequestValidationError{ + err := ListCCTopologyRequestValidationError{ field: "ClusterID", reason: "value length must be between 1 and 100 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_ListCCTopologyRequest_ClusterID_Pattern.MatchString(m.GetClusterID()) { - return ListCCTopologyRequestValidationError{ + err := ListCCTopologyRequestValidationError{ field: "ClusterID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for BizID - if v, ok := interface{}(m.GetFilterInter()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetFilterInter()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCCTopologyRequestValidationError{ + field: "FilterInter", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCCTopologyRequestValidationError{ + field: "FilterInter", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetFilterInter()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ListCCTopologyRequestValidationError{ field: "FilterInter", @@ -34334,9 +55870,30 @@ func (m *ListCCTopologyRequest) Validate() error { } } + if len(errors) > 0 { + return ListCCTopologyRequestMultiError(errors) + } + return nil } +// ListCCTopologyRequestMultiError is an error wrapping multiple validation +// errors returned by ListCCTopologyRequest.ValidateAll() if the designated +// constraints aren't met. +type ListCCTopologyRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCCTopologyRequestMultiError) 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 ListCCTopologyRequestMultiError) AllErrors() []error { return m } + // ListCCTopologyRequestValidationError is the validation error returned by // ListCCTopologyRequest.Validate if the designated constraints aren't met. type ListCCTopologyRequestValidationError struct { @@ -34397,33 +55954,76 @@ var _ListCCTopologyRequest_ClusterID_Pattern = regexp.MustCompile("^[0-9a-zA-Z-] // Validate checks the field values on GetBkSopsTemplateListRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBkSopsTemplateListRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBkSopsTemplateListRequest 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 +// GetBkSopsTemplateListRequestMultiError, or nil if none found. +func (m *GetBkSopsTemplateListRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBkSopsTemplateListRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for BusinessID // no validation rules for Operator if _, ok := _GetBkSopsTemplateListRequest_TemplateSource_InLookup[m.GetTemplateSource()]; !ok { - return GetBkSopsTemplateListRequestValidationError{ + err := GetBkSopsTemplateListRequestValidationError{ field: "TemplateSource", reason: "value must be in list [business common ]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _GetBkSopsTemplateListRequest_Scope_InLookup[m.GetScope()]; !ok { - return GetBkSopsTemplateListRequestValidationError{ + err := GetBkSopsTemplateListRequestValidationError{ field: "Scope", reason: "value must be in list [cmdb_biz project ]", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetBkSopsTemplateListRequestMultiError(errors) } return nil } +// GetBkSopsTemplateListRequestMultiError is an error wrapping multiple +// validation errors returned by GetBkSopsTemplateListRequest.ValidateAll() if +// the designated constraints aren't met. +type GetBkSopsTemplateListRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBkSopsTemplateListRequestMultiError) 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 GetBkSopsTemplateListRequestMultiError) AllErrors() []error { return m } + // GetBkSopsTemplateListRequestValidationError is the validation error returned // by GetBkSopsTemplateListRequest.Validate if the designated constraints // aren't met. @@ -34495,12 +56095,26 @@ var _GetBkSopsTemplateListRequest_Scope_InLookup = map[string]struct{}{ // Validate checks the field values on GetBkSopsTemplateListResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBkSopsTemplateListResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBkSopsTemplateListResponse 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 +// GetBkSopsTemplateListResponseMultiError, or nil if none found. +func (m *GetBkSopsTemplateListResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBkSopsTemplateListResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -34508,7 +56122,26 @@ func (m *GetBkSopsTemplateListResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBkSopsTemplateListResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBkSopsTemplateListResponseValidationError{ + field: fmt.Sprintf("Data[%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 GetBkSopsTemplateListResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -34520,9 +56153,30 @@ func (m *GetBkSopsTemplateListResponse) Validate() error { } + if len(errors) > 0 { + return GetBkSopsTemplateListResponseMultiError(errors) + } + return nil } +// GetBkSopsTemplateListResponseMultiError is an error wrapping multiple +// validation errors returned by GetBkSopsTemplateListResponse.ValidateAll() +// if the designated constraints aren't met. +type GetBkSopsTemplateListResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBkSopsTemplateListResponseMultiError) 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 GetBkSopsTemplateListResponseMultiError) AllErrors() []error { return m } + // GetBkSopsTemplateListResponseValidationError is the validation error // returned by GetBkSopsTemplateListResponse.Validate if the designated // constraints aren't met. @@ -34581,13 +56235,27 @@ var _ interface { } = GetBkSopsTemplateListResponseValidationError{} // Validate checks the field values on TemplateInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *TemplateInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TemplateInfo 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 TemplateInfoMultiError, or +// nil if none found. +func (m *TemplateInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *TemplateInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TemplateName // no validation rules for TemplateID @@ -34602,9 +56270,29 @@ func (m *TemplateInfo) Validate() error { // no validation rules for ProjectID + if len(errors) > 0 { + return TemplateInfoMultiError(errors) + } + return nil } +// TemplateInfoMultiError is an error wrapping multiple validation errors +// returned by TemplateInfo.ValidateAll() if the designated constraints aren't met. +type TemplateInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TemplateInfoMultiError) 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 TemplateInfoMultiError) AllErrors() []error { return m } + // TemplateInfoValidationError is the validation error returned by // TemplateInfo.Validate if the designated constraints aren't met. type TemplateInfoValidationError struct { @@ -34661,12 +56349,26 @@ var _ interface { // Validate checks the field values on GetBkSopsTemplateInfoRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBkSopsTemplateInfoRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBkSopsTemplateInfoRequest 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 +// GetBkSopsTemplateInfoRequestMultiError, or nil if none found. +func (m *GetBkSopsTemplateInfoRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBkSopsTemplateInfoRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for BusinessID // no validation rules for TemplateID @@ -34674,22 +56376,51 @@ func (m *GetBkSopsTemplateInfoRequest) Validate() error { // no validation rules for Operator if _, ok := _GetBkSopsTemplateInfoRequest_TemplateSource_InLookup[m.GetTemplateSource()]; !ok { - return GetBkSopsTemplateInfoRequestValidationError{ + err := GetBkSopsTemplateInfoRequestValidationError{ field: "TemplateSource", reason: "value must be in list [business common ]", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _GetBkSopsTemplateInfoRequest_Scope_InLookup[m.GetScope()]; !ok { - return GetBkSopsTemplateInfoRequestValidationError{ + err := GetBkSopsTemplateInfoRequestValidationError{ field: "Scope", reason: "value must be in list [cmdb_biz project ]", } + if !all { + return err + } + errors = append(errors, err) + } + + if len(errors) > 0 { + return GetBkSopsTemplateInfoRequestMultiError(errors) } return nil } +// GetBkSopsTemplateInfoRequestMultiError is an error wrapping multiple +// validation errors returned by GetBkSopsTemplateInfoRequest.ValidateAll() if +// the designated constraints aren't met. +type GetBkSopsTemplateInfoRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBkSopsTemplateInfoRequestMultiError) 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 GetBkSopsTemplateInfoRequestMultiError) AllErrors() []error { return m } + // GetBkSopsTemplateInfoRequestValidationError is the validation error returned // by GetBkSopsTemplateInfoRequest.Validate if the designated constraints // aren't met. @@ -34761,17 +56492,50 @@ var _GetBkSopsTemplateInfoRequest_Scope_InLookup = map[string]struct{}{ // Validate checks the field values on GetBkSopsTemplateInfoResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBkSopsTemplateInfoResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBkSopsTemplateInfoResponse 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 +// GetBkSopsTemplateInfoResponseMultiError, or nil if none found. +func (m *GetBkSopsTemplateInfoResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBkSopsTemplateInfoResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBkSopsTemplateInfoResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBkSopsTemplateInfoResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetBkSopsTemplateInfoResponseValidationError{ field: "Data", @@ -34781,9 +56545,30 @@ func (m *GetBkSopsTemplateInfoResponse) Validate() error { } } + if len(errors) > 0 { + return GetBkSopsTemplateInfoResponseMultiError(errors) + } + return nil } +// GetBkSopsTemplateInfoResponseMultiError is an error wrapping multiple +// validation errors returned by GetBkSopsTemplateInfoResponse.ValidateAll() +// if the designated constraints aren't met. +type GetBkSopsTemplateInfoResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBkSopsTemplateInfoResponseMultiError) 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 GetBkSopsTemplateInfoResponseMultiError) AllErrors() []error { return m } + // GetBkSopsTemplateInfoResponseValidationError is the validation error // returned by GetBkSopsTemplateInfoResponse.Validate if the designated // constraints aren't met. @@ -34843,18 +56628,51 @@ var _ interface { // Validate checks the field values on TemplateDetailInfo with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *TemplateDetailInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TemplateDetailInfo 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 +// TemplateDetailInfoMultiError, or nil if none found. +func (m *TemplateDetailInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *TemplateDetailInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for TemplateUrl for idx, item := range m.GetValues() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, TemplateDetailInfoValidationError{ + field: fmt.Sprintf("Values[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, TemplateDetailInfoValidationError{ + field: fmt.Sprintf("Values[%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 TemplateDetailInfoValidationError{ field: fmt.Sprintf("Values[%v]", idx), @@ -34866,9 +56684,30 @@ func (m *TemplateDetailInfo) Validate() error { } + if len(errors) > 0 { + return TemplateDetailInfoMultiError(errors) + } + return nil } +// TemplateDetailInfoMultiError is an error wrapping multiple validation errors +// returned by TemplateDetailInfo.ValidateAll() if the designated constraints +// aren't met. +type TemplateDetailInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TemplateDetailInfoMultiError) 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 TemplateDetailInfoMultiError) AllErrors() []error { return m } + // TemplateDetailInfoValidationError is the validation error returned by // TemplateDetailInfo.Validate if the designated constraints aren't met. type TemplateDetailInfoValidationError struct { @@ -34926,13 +56765,27 @@ var _ interface { } = TemplateDetailInfoValidationError{} // Validate checks the field values on ConstantValue with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *ConstantValue) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ConstantValue 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 ConstantValueMultiError, or +// nil if none found. +func (m *ConstantValue) ValidateAll() error { + return m.validate(true) +} + +func (m *ConstantValue) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Key // no validation rules for Name @@ -34941,9 +56794,30 @@ func (m *ConstantValue) Validate() error { // no validation rules for Desc + if len(errors) > 0 { + return ConstantValueMultiError(errors) + } + return nil } +// ConstantValueMultiError is an error wrapping multiple validation errors +// returned by ConstantValue.ValidateAll() if the designated constraints +// aren't met. +type ConstantValueMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ConstantValueMultiError) 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 ConstantValueMultiError) AllErrors() []error { return m } + // ConstantValueValidationError is the validation error returned by // ConstantValue.Validate if the designated constraints aren't met. type ConstantValueValidationError struct { @@ -35000,19 +56874,54 @@ var _ interface { // Validate checks the field values on GetInnerTemplateValuesRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetInnerTemplateValuesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetInnerTemplateValuesRequest 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 +// GetInnerTemplateValuesRequestMultiError, or nil if none found. +func (m *GetInnerTemplateValuesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetInnerTemplateValuesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ClusterID // no validation rules for Operator + if len(errors) > 0 { + return GetInnerTemplateValuesRequestMultiError(errors) + } + return nil } +// GetInnerTemplateValuesRequestMultiError is an error wrapping multiple +// validation errors returned by GetInnerTemplateValuesRequest.ValidateAll() +// if the designated constraints aren't met. +type GetInnerTemplateValuesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetInnerTemplateValuesRequestMultiError) 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 GetInnerTemplateValuesRequestMultiError) AllErrors() []error { return m } + // GetInnerTemplateValuesRequestValidationError is the validation error // returned by GetInnerTemplateValuesRequest.Validate if the designated // constraints aren't met. @@ -35072,12 +56981,26 @@ var _ interface { // Validate checks the field values on GetInnerTemplateValuesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetInnerTemplateValuesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetInnerTemplateValuesResponse 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 +// GetInnerTemplateValuesResponseMultiError, or nil if none found. +func (m *GetInnerTemplateValuesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetInnerTemplateValuesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -35085,7 +57008,26 @@ func (m *GetInnerTemplateValuesResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetInnerTemplateValuesResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetInnerTemplateValuesResponseValidationError{ + field: fmt.Sprintf("Data[%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 GetInnerTemplateValuesResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -35097,9 +57039,30 @@ func (m *GetInnerTemplateValuesResponse) Validate() error { } + if len(errors) > 0 { + return GetInnerTemplateValuesResponseMultiError(errors) + } + return nil } +// GetInnerTemplateValuesResponseMultiError is an error wrapping multiple +// validation errors returned by GetInnerTemplateValuesResponse.ValidateAll() +// if the designated constraints aren't met. +type GetInnerTemplateValuesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetInnerTemplateValuesResponseMultiError) 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 GetInnerTemplateValuesResponseMultiError) AllErrors() []error { return m } + // GetInnerTemplateValuesResponseValidationError is the validation error // returned by GetInnerTemplateValuesResponse.Validate if the designated // constraints aren't met. @@ -35158,13 +57121,27 @@ var _ interface { } = GetInnerTemplateValuesResponseValidationError{} // Validate checks the field values on TemplateValue with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *TemplateValue) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on TemplateValue 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 TemplateValueMultiError, or +// nil if none found. +func (m *TemplateValue) ValidateAll() error { + return m.validate(true) +} + +func (m *TemplateValue) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Name // no validation rules for Desc @@ -35175,9 +57152,30 @@ func (m *TemplateValue) Validate() error { // no validation rules for Value + if len(errors) > 0 { + return TemplateValueMultiError(errors) + } + return nil } +// TemplateValueMultiError is an error wrapping multiple validation errors +// returned by TemplateValue.ValidateAll() if the designated constraints +// aren't met. +type TemplateValueMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m TemplateValueMultiError) 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 TemplateValueMultiError) AllErrors() []error { return m } + // TemplateValueValidationError is the validation error returned by // TemplateValue.Validate if the designated constraints aren't met. type TemplateValueValidationError struct { @@ -35234,45 +57232,96 @@ var _ interface { // Validate checks the field values on DebugBkSopsTaskRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DebugBkSopsTaskRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DebugBkSopsTaskRequest 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 +// DebugBkSopsTaskRequestMultiError, or nil if none found. +func (m *DebugBkSopsTaskRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DebugBkSopsTaskRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if utf8.RuneCountInString(m.GetBusinessID()) < 1 { - return DebugBkSopsTaskRequestValidationError{ + err := DebugBkSopsTaskRequestValidationError{ field: "BusinessID", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetTemplateID()) < 1 { - return DebugBkSopsTaskRequestValidationError{ + err := DebugBkSopsTaskRequestValidationError{ field: "TemplateID", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetOperator()) < 1 { - return DebugBkSopsTaskRequestValidationError{ + err := DebugBkSopsTaskRequestValidationError{ field: "Operator", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if _, ok := _DebugBkSopsTaskRequest_TemplateSource_InLookup[m.GetTemplateSource()]; !ok { - return DebugBkSopsTaskRequestValidationError{ + err := DebugBkSopsTaskRequestValidationError{ field: "TemplateSource", reason: "value must be in list [business common ]", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Constant + if len(errors) > 0 { + return DebugBkSopsTaskRequestMultiError(errors) + } + return nil } +// DebugBkSopsTaskRequestMultiError is an error wrapping multiple validation +// errors returned by DebugBkSopsTaskRequest.ValidateAll() if the designated +// constraints aren't met. +type DebugBkSopsTaskRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DebugBkSopsTaskRequestMultiError) 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 DebugBkSopsTaskRequestMultiError) AllErrors() []error { return m } + // DebugBkSopsTaskRequestValidationError is the validation error returned by // DebugBkSopsTaskRequest.Validate if the designated constraints aren't met. type DebugBkSopsTaskRequestValidationError struct { @@ -35337,17 +57386,50 @@ var _DebugBkSopsTaskRequest_TemplateSource_InLookup = map[string]struct{}{ // Validate checks the field values on DebugBkSopsTaskResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DebugBkSopsTaskResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DebugBkSopsTaskResponse 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 +// DebugBkSopsTaskResponseMultiError, or nil if none found. +func (m *DebugBkSopsTaskResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DebugBkSopsTaskResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DebugBkSopsTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DebugBkSopsTaskResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DebugBkSopsTaskResponseValidationError{ field: "Data", @@ -35357,9 +57439,30 @@ func (m *DebugBkSopsTaskResponse) Validate() error { } } + if len(errors) > 0 { + return DebugBkSopsTaskResponseMultiError(errors) + } + return nil } +// DebugBkSopsTaskResponseMultiError is an error wrapping multiple validation +// errors returned by DebugBkSopsTaskResponse.ValidateAll() if the designated +// constraints aren't met. +type DebugBkSopsTaskResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DebugBkSopsTaskResponseMultiError) 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 DebugBkSopsTaskResponseMultiError) AllErrors() []error { return m } + // DebugBkSopsTaskResponseValidationError is the validation error returned by // DebugBkSopsTaskResponse.Validate if the designated constraints aren't met. type DebugBkSopsTaskResponseValidationError struct { @@ -35418,13 +57521,46 @@ var _ interface { // Validate checks the field values on DebugBkSopsTaskInfo with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DebugBkSopsTaskInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DebugBkSopsTaskInfo 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 +// DebugBkSopsTaskInfoMultiError, or nil if none found. +func (m *DebugBkSopsTaskInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *DebugBkSopsTaskInfo) validate(all bool) error { if m == nil { return nil } - if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { + var errors []error + + if all { + switch v := interface{}(m.GetTask()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DebugBkSopsTaskInfoValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DebugBkSopsTaskInfoValidationError{ + field: "Task", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTask()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DebugBkSopsTaskInfoValidationError{ field: "Task", @@ -35434,9 +57570,30 @@ func (m *DebugBkSopsTaskInfo) Validate() error { } } + if len(errors) > 0 { + return DebugBkSopsTaskInfoMultiError(errors) + } + return nil } +// DebugBkSopsTaskInfoMultiError is an error wrapping multiple validation +// errors returned by DebugBkSopsTaskInfo.ValidateAll() if the designated +// constraints aren't met. +type DebugBkSopsTaskInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DebugBkSopsTaskInfoMultiError) 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 DebugBkSopsTaskInfoMultiError) AllErrors() []error { return m } + // DebugBkSopsTaskInfoValidationError is the validation error returned by // DebugBkSopsTaskInfo.Validate if the designated constraints aren't met. type DebugBkSopsTaskInfoValidationError struct { @@ -35494,13 +57651,27 @@ var _ interface { } = DebugBkSopsTaskInfoValidationError{} // Validate checks the field values on CloudModuleFlag with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *CloudModuleFlag) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CloudModuleFlag 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 +// CloudModuleFlagMultiError, or nil if none found. +func (m *CloudModuleFlag) ValidateAll() error { + return m.validate(true) +} + +func (m *CloudModuleFlag) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version @@ -35525,7 +57696,26 @@ func (m *CloudModuleFlag) Validate() error { // no validation rules for FlagType - if v, ok := interface{}(m.GetRegex()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRegex()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudModuleFlagValidationError{ + field: "Regex", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudModuleFlagValidationError{ + field: "Regex", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRegex()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudModuleFlagValidationError{ field: "Regex", @@ -35535,7 +57725,26 @@ func (m *CloudModuleFlag) Validate() error { } } - if v, ok := interface{}(m.GetRange()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRange()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CloudModuleFlagValidationError{ + field: "Range", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CloudModuleFlagValidationError{ + field: "Range", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRange()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CloudModuleFlagValidationError{ field: "Range", @@ -35547,9 +57756,30 @@ func (m *CloudModuleFlag) Validate() error { // no validation rules for NetworkType + if len(errors) > 0 { + return CloudModuleFlagMultiError(errors) + } + return nil } +// CloudModuleFlagMultiError is an error wrapping multiple validation errors +// returned by CloudModuleFlag.ValidateAll() if the designated constraints +// aren't met. +type CloudModuleFlagMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CloudModuleFlagMultiError) 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 CloudModuleFlagMultiError) AllErrors() []error { return m } + // CloudModuleFlagValidationError is the validation error returned by // CloudModuleFlag.Validate if the designated constraints aren't met. type CloudModuleFlagValidationError struct { @@ -35605,19 +57835,53 @@ var _ interface { } = CloudModuleFlagValidationError{} // Validate checks the field values on FlagInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *FlagInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on FlagInfo 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 FlagInfoMultiError, or nil +// if none found. +func (m *FlagInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *FlagInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for FlagName // no validation rules for FlagDesc // no validation rules for DefaultValue - if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEnable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return FlagInfoValidationError{ field: "Enable", @@ -35629,7 +57893,26 @@ func (m *FlagInfo) Validate() error { // no validation rules for FlagType - if v, ok := interface{}(m.GetRegex()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRegex()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Regex", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Regex", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRegex()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return FlagInfoValidationError{ field: "Regex", @@ -35639,7 +57922,26 @@ func (m *FlagInfo) Validate() error { } } - if v, ok := interface{}(m.GetRange()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetRange()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Range", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, FlagInfoValidationError{ + field: "Range", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetRange()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return FlagInfoValidationError{ field: "Range", @@ -35651,9 +57953,29 @@ func (m *FlagInfo) Validate() error { // no validation rules for NetworkType + if len(errors) > 0 { + return FlagInfoMultiError(errors) + } + return nil } +// FlagInfoMultiError is an error wrapping multiple validation errors returned +// by FlagInfo.ValidateAll() if the designated constraints aren't met. +type FlagInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m FlagInfoMultiError) 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 FlagInfoMultiError) AllErrors() []error { return m } + // FlagInfoValidationError is the validation error returned by // FlagInfo.Validate if the designated constraints aren't met. type FlagInfoValidationError struct { @@ -35709,19 +58031,54 @@ var _ interface { } = FlagInfoValidationError{} // Validate checks the field values on ValueRegex with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *ValueRegex) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ValueRegex 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 ValueRegexMultiError, or +// nil if none found. +func (m *ValueRegex) ValidateAll() error { + return m.validate(true) +} + +func (m *ValueRegex) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Validator // no validation rules for Message + if len(errors) > 0 { + return ValueRegexMultiError(errors) + } + return nil } +// ValueRegexMultiError is an error wrapping multiple validation errors +// returned by ValueRegex.ValidateAll() if the designated constraints aren't met. +type ValueRegexMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ValueRegexMultiError) 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 ValueRegexMultiError) AllErrors() []error { return m } + // ValueRegexValidationError is the validation error returned by // ValueRegex.Validate if the designated constraints aren't met. type ValueRegexValidationError struct { @@ -35777,20 +58134,54 @@ var _ interface { } = ValueRegexValidationError{} // Validate checks the field values on NumberRange with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *NumberRange) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NumberRange 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 NumberRangeMultiError, or +// nil if none found. +func (m *NumberRange) ValidateAll() error { + return m.validate(true) +} + +func (m *NumberRange) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Min // no validation rules for Max + if len(errors) > 0 { + return NumberRangeMultiError(errors) + } + return nil } +// NumberRangeMultiError is an error wrapping multiple validation errors +// returned by NumberRange.ValidateAll() if the designated constraints aren't met. +type NumberRangeMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NumberRangeMultiError) 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 NumberRangeMultiError) AllErrors() []error { return m } + // NumberRangeValidationError is the validation error returned by // NumberRange.Validate if the designated constraints aren't met. type NumberRangeValidationError struct { @@ -35847,34 +58238,75 @@ var _ interface { // Validate checks the field values on CreateCloudModuleFlagRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudModuleFlagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudModuleFlagRequest 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 +// CreateCloudModuleFlagRequestMultiError, or nil if none found. +func (m *CreateCloudModuleFlagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudModuleFlagRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version if utf8.RuneCountInString(m.GetModuleID()) < 1 { - return CreateCloudModuleFlagRequestValidationError{ + err := CreateCloudModuleFlagRequestValidationError{ field: "ModuleID", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } if len(m.GetFlagList()) < 1 { - return CreateCloudModuleFlagRequestValidationError{ + err := CreateCloudModuleFlagRequestValidationError{ field: "FlagList", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetFlagList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateCloudModuleFlagRequestValidationError{ + field: fmt.Sprintf("FlagList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateCloudModuleFlagRequestValidationError{ + field: fmt.Sprintf("FlagList[%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 CreateCloudModuleFlagRequestValidationError{ field: fmt.Sprintf("FlagList[%v]", idx), @@ -35888,9 +58320,30 @@ func (m *CreateCloudModuleFlagRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return CreateCloudModuleFlagRequestMultiError(errors) + } + return nil } +// CreateCloudModuleFlagRequestMultiError is an error wrapping multiple +// validation errors returned by CreateCloudModuleFlagRequest.ValidateAll() if +// the designated constraints aren't met. +type CreateCloudModuleFlagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudModuleFlagRequestMultiError) 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 CreateCloudModuleFlagRequestMultiError) AllErrors() []error { return m } + // CreateCloudModuleFlagRequestValidationError is the validation error returned // by CreateCloudModuleFlagRequest.Validate if the designated constraints // aren't met. @@ -35950,19 +58403,54 @@ var _ interface { // Validate checks the field values on CreateCloudModuleFlagResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateCloudModuleFlagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateCloudModuleFlagResponse 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 +// CreateCloudModuleFlagResponseMultiError, or nil if none found. +func (m *CreateCloudModuleFlagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateCloudModuleFlagResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message + if len(errors) > 0 { + return CreateCloudModuleFlagResponseMultiError(errors) + } + return nil } +// CreateCloudModuleFlagResponseMultiError is an error wrapping multiple +// validation errors returned by CreateCloudModuleFlagResponse.ValidateAll() +// if the designated constraints aren't met. +type CreateCloudModuleFlagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateCloudModuleFlagResponseMultiError) 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 CreateCloudModuleFlagResponseMultiError) AllErrors() []error { return m } + // CreateCloudModuleFlagResponseValidationError is the validation error // returned by CreateCloudModuleFlagResponse.Validate if the designated // constraints aren't met. @@ -36022,12 +58510,26 @@ var _ interface { // Validate checks the field values on UpdateCloudModuleFlagRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudModuleFlagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudModuleFlagRequest 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 +// UpdateCloudModuleFlagRequestMultiError, or nil if none found. +func (m *UpdateCloudModuleFlagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudModuleFlagRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version @@ -36035,16 +58537,39 @@ func (m *UpdateCloudModuleFlagRequest) Validate() error { // no validation rules for ModuleID if len(m.GetFlagList()) < 1 { - return UpdateCloudModuleFlagRequestValidationError{ + err := UpdateCloudModuleFlagRequestValidationError{ field: "FlagList", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetFlagList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, UpdateCloudModuleFlagRequestValidationError{ + field: fmt.Sprintf("FlagList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, UpdateCloudModuleFlagRequestValidationError{ + field: fmt.Sprintf("FlagList[%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 UpdateCloudModuleFlagRequestValidationError{ field: fmt.Sprintf("FlagList[%v]", idx), @@ -36058,9 +58583,30 @@ func (m *UpdateCloudModuleFlagRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return UpdateCloudModuleFlagRequestMultiError(errors) + } + return nil } +// UpdateCloudModuleFlagRequestMultiError is an error wrapping multiple +// validation errors returned by UpdateCloudModuleFlagRequest.ValidateAll() if +// the designated constraints aren't met. +type UpdateCloudModuleFlagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudModuleFlagRequestMultiError) 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 UpdateCloudModuleFlagRequestMultiError) AllErrors() []error { return m } + // UpdateCloudModuleFlagRequestValidationError is the validation error returned // by UpdateCloudModuleFlagRequest.Validate if the designated constraints // aren't met. @@ -36120,19 +58666,54 @@ var _ interface { // Validate checks the field values on UpdateCloudModuleFlagResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *UpdateCloudModuleFlagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on UpdateCloudModuleFlagResponse 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 +// UpdateCloudModuleFlagResponseMultiError, or nil if none found. +func (m *UpdateCloudModuleFlagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *UpdateCloudModuleFlagResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message + if len(errors) > 0 { + return UpdateCloudModuleFlagResponseMultiError(errors) + } + return nil } +// UpdateCloudModuleFlagResponseMultiError is an error wrapping multiple +// validation errors returned by UpdateCloudModuleFlagResponse.ValidateAll() +// if the designated constraints aren't met. +type UpdateCloudModuleFlagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m UpdateCloudModuleFlagResponseMultiError) 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 UpdateCloudModuleFlagResponseMultiError) AllErrors() []error { return m } + // UpdateCloudModuleFlagResponseValidationError is the validation error // returned by UpdateCloudModuleFlagResponse.Validate if the designated // constraints aren't met. @@ -36192,12 +58773,26 @@ var _ interface { // Validate checks the field values on DeleteCloudModuleFlagRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudModuleFlagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudModuleFlagRequest 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 +// DeleteCloudModuleFlagRequestMultiError, or nil if none found. +func (m *DeleteCloudModuleFlagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudModuleFlagRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version @@ -36206,9 +58801,30 @@ func (m *DeleteCloudModuleFlagRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return DeleteCloudModuleFlagRequestMultiError(errors) + } + return nil } +// DeleteCloudModuleFlagRequestMultiError is an error wrapping multiple +// validation errors returned by DeleteCloudModuleFlagRequest.ValidateAll() if +// the designated constraints aren't met. +type DeleteCloudModuleFlagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudModuleFlagRequestMultiError) 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 DeleteCloudModuleFlagRequestMultiError) AllErrors() []error { return m } + // DeleteCloudModuleFlagRequestValidationError is the validation error returned // by DeleteCloudModuleFlagRequest.Validate if the designated constraints // aren't met. @@ -36268,19 +58884,54 @@ var _ interface { // Validate checks the field values on DeleteCloudModuleFlagResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteCloudModuleFlagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteCloudModuleFlagResponse 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 +// DeleteCloudModuleFlagResponseMultiError, or nil if none found. +func (m *DeleteCloudModuleFlagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteCloudModuleFlagResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message + if len(errors) > 0 { + return DeleteCloudModuleFlagResponseMultiError(errors) + } + return nil } +// DeleteCloudModuleFlagResponseMultiError is an error wrapping multiple +// validation errors returned by DeleteCloudModuleFlagResponse.ValidateAll() +// if the designated constraints aren't met. +type DeleteCloudModuleFlagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteCloudModuleFlagResponseMultiError) 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 DeleteCloudModuleFlagResponseMultiError) AllErrors() []error { return m } + // DeleteCloudModuleFlagResponseValidationError is the validation error // returned by DeleteCloudModuleFlagResponse.Validate if the designated // constraints aren't met. @@ -36340,12 +58991,26 @@ var _ interface { // Validate checks the field values on ListCloudModuleFlagRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudModuleFlagRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudModuleFlagRequest 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 +// ListCloudModuleFlagRequestMultiError, or nil if none found. +func (m *ListCloudModuleFlagRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudModuleFlagRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for CloudID // no validation rules for Version @@ -36354,9 +59019,30 @@ func (m *ListCloudModuleFlagRequest) Validate() error { // no validation rules for Operator + if len(errors) > 0 { + return ListCloudModuleFlagRequestMultiError(errors) + } + return nil } +// ListCloudModuleFlagRequestMultiError is an error wrapping multiple +// validation errors returned by ListCloudModuleFlagRequest.ValidateAll() if +// the designated constraints aren't met. +type ListCloudModuleFlagRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudModuleFlagRequestMultiError) 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 ListCloudModuleFlagRequestMultiError) AllErrors() []error { return m } + // ListCloudModuleFlagRequestValidationError is the validation error returned // by ListCloudModuleFlagRequest.Validate if the designated constraints aren't met. type ListCloudModuleFlagRequestValidationError struct { @@ -36415,12 +59101,26 @@ var _ interface { // Validate checks the field values on ListCloudModuleFlagResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListCloudModuleFlagResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListCloudModuleFlagResponse 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 +// ListCloudModuleFlagResponseMultiError, or nil if none found. +func (m *ListCloudModuleFlagResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListCloudModuleFlagResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -36428,7 +59128,26 @@ func (m *ListCloudModuleFlagResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListCloudModuleFlagResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListCloudModuleFlagResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListCloudModuleFlagResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -36440,9 +59159,30 @@ func (m *ListCloudModuleFlagResponse) Validate() error { } + if len(errors) > 0 { + return ListCloudModuleFlagResponseMultiError(errors) + } + return nil } +// ListCloudModuleFlagResponseMultiError is an error wrapping multiple +// validation errors returned by ListCloudModuleFlagResponse.ValidateAll() if +// the designated constraints aren't met. +type ListCloudModuleFlagResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListCloudModuleFlagResponseMultiError) 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 ListCloudModuleFlagResponseMultiError) AllErrors() []error { return m } + // ListCloudModuleFlagResponseValidationError is the validation error returned // by ListCloudModuleFlagResponse.Validate if the designated constraints // aren't met. @@ -36502,21 +59242,56 @@ var _ interface { // Validate checks the field values on GetExternalNodeScriptRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetExternalNodeScriptRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetExternalNodeScriptRequest 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 +// GetExternalNodeScriptRequestMultiError, or nil if none found. +func (m *GetExternalNodeScriptRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetExternalNodeScriptRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NodeGroupID // no validation rules for Operator // no validation rules for Internal + if len(errors) > 0 { + return GetExternalNodeScriptRequestMultiError(errors) + } + return nil } +// GetExternalNodeScriptRequestMultiError is an error wrapping multiple +// validation errors returned by GetExternalNodeScriptRequest.ValidateAll() if +// the designated constraints aren't met. +type GetExternalNodeScriptRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetExternalNodeScriptRequestMultiError) 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 GetExternalNodeScriptRequestMultiError) AllErrors() []error { return m } + // GetExternalNodeScriptRequestValidationError is the validation error returned // by GetExternalNodeScriptRequest.Validate if the designated constraints // aren't met. @@ -36576,12 +59351,26 @@ var _ interface { // Validate checks the field values on GetExternalNodeScriptResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetExternalNodeScriptResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetExternalNodeScriptResponse 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 +// GetExternalNodeScriptResponseMultiError, or nil if none found. +func (m *GetExternalNodeScriptResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetExternalNodeScriptResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -36590,7 +59379,26 @@ func (m *GetExternalNodeScriptResponse) Validate() error { // no validation rules for Data - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetExternalNodeScriptResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetExternalNodeScriptResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetExternalNodeScriptResponseValidationError{ field: "WebAnnotations", @@ -36600,9 +59408,30 @@ func (m *GetExternalNodeScriptResponse) Validate() error { } } + if len(errors) > 0 { + return GetExternalNodeScriptResponseMultiError(errors) + } + return nil } +// GetExternalNodeScriptResponseMultiError is an error wrapping multiple +// validation errors returned by GetExternalNodeScriptResponse.ValidateAll() +// if the designated constraints aren't met. +type GetExternalNodeScriptResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetExternalNodeScriptResponseMultiError) 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 GetExternalNodeScriptResponseMultiError) AllErrors() []error { return m } + // GetExternalNodeScriptResponseValidationError is the validation error // returned by GetExternalNodeScriptResponse.Validate if the designated // constraints aren't met. @@ -36661,17 +59490,52 @@ var _ interface { } = GetExternalNodeScriptResponseValidationError{} // Validate checks the field values on MapStruct with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *MapStruct) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on MapStruct 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 MapStructMultiError, or nil +// if none found. +func (m *MapStruct) ValidateAll() error { + return m.validate(true) +} + +func (m *MapStruct) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Values + if len(errors) > 0 { + return MapStructMultiError(errors) + } + return nil } +// MapStructMultiError is an error wrapping multiple validation errors returned +// by MapStruct.ValidateAll() if the designated constraints aren't met. +type MapStructMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MapStructMultiError) 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 MapStructMultiError) AllErrors() []error { return m } + // MapStructValidationError is the validation error returned by // MapStruct.Validate if the designated constraints aren't met. type MapStructValidationError struct { @@ -36728,19 +59592,54 @@ var _ interface { // Validate checks the field values on GetBatchCustomSettingRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBatchCustomSettingRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBatchCustomSettingRequest 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 +// GetBatchCustomSettingRequestMultiError, or nil if none found. +func (m *GetBatchCustomSettingRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBatchCustomSettingRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId + if len(errors) > 0 { + return GetBatchCustomSettingRequestMultiError(errors) + } + return nil } +// GetBatchCustomSettingRequestMultiError is an error wrapping multiple +// validation errors returned by GetBatchCustomSettingRequest.ValidateAll() if +// the designated constraints aren't met. +type GetBatchCustomSettingRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBatchCustomSettingRequestMultiError) 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 GetBatchCustomSettingRequestMultiError) AllErrors() []error { return m } + // GetBatchCustomSettingRequestValidationError is the validation error returned // by GetBatchCustomSettingRequest.Validate if the designated constraints // aren't met. @@ -36800,12 +59699,26 @@ var _ interface { // Validate checks the field values on GetBatchCustomSettingResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBatchCustomSettingResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBatchCustomSettingResponse 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 +// GetBatchCustomSettingResponseMultiError, or nil if none found. +func (m *GetBatchCustomSettingResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBatchCustomSettingResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -36814,7 +59727,26 @@ func (m *GetBatchCustomSettingResponse) Validate() error { // no validation rules for RequestId - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBatchCustomSettingResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBatchCustomSettingResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetBatchCustomSettingResponseValidationError{ field: "Data", @@ -36824,9 +59756,30 @@ func (m *GetBatchCustomSettingResponse) Validate() error { } } + if len(errors) > 0 { + return GetBatchCustomSettingResponseMultiError(errors) + } + return nil } +// GetBatchCustomSettingResponseMultiError is an error wrapping multiple +// validation errors returned by GetBatchCustomSettingResponse.ValidateAll() +// if the designated constraints aren't met. +type GetBatchCustomSettingResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBatchCustomSettingResponseMultiError) 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 GetBatchCustomSettingResponseMultiError) AllErrors() []error { return m } + // GetBatchCustomSettingResponseValidationError is the validation error // returned by GetBatchCustomSettingResponse.Validate if the designated // constraints aren't met. @@ -36885,19 +59838,54 @@ var _ interface { } = GetBatchCustomSettingResponseValidationError{} // Validate checks the field values on ScopeInfo with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *ScopeInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ScopeInfo 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 ScopeInfoMultiError, or nil +// if none found. +func (m *ScopeInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *ScopeInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId + if len(errors) > 0 { + return ScopeInfoMultiError(errors) + } + return nil } +// ScopeInfoMultiError is an error wrapping multiple validation errors returned +// by ScopeInfo.ValidateAll() if the designated constraints aren't met. +type ScopeInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ScopeInfoMultiError) 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 ScopeInfoMultiError) AllErrors() []error { return m } + // ScopeInfoValidationError is the validation error returned by // ScopeInfo.Validate if the designated constraints aren't met. type ScopeInfoValidationError struct { @@ -36954,12 +59942,26 @@ var _ interface { // Validate checks the field values on GetBizTopologyHostRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBizTopologyHostRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBizTopologyHostRequest 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 +// GetBizTopologyHostRequestMultiError, or nil if none found. +func (m *GetBizTopologyHostRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBizTopologyHostRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId @@ -36969,7 +59971,26 @@ func (m *GetBizTopologyHostRequest) Validate() error { for idx, item := range m.GetScopeList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBizTopologyHostRequestValidationError{ + field: fmt.Sprintf("ScopeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBizTopologyHostRequestValidationError{ + field: fmt.Sprintf("ScopeList[%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 GetBizTopologyHostRequestValidationError{ field: fmt.Sprintf("ScopeList[%v]", idx), @@ -36981,9 +60002,30 @@ func (m *GetBizTopologyHostRequest) Validate() error { } + if len(errors) > 0 { + return GetBizTopologyHostRequestMultiError(errors) + } + return nil } +// GetBizTopologyHostRequestMultiError is an error wrapping multiple validation +// errors returned by GetBizTopologyHostRequest.ValidateAll() if the +// designated constraints aren't met. +type GetBizTopologyHostRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBizTopologyHostRequestMultiError) 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 GetBizTopologyHostRequestMultiError) AllErrors() []error { return m } + // GetBizTopologyHostRequestValidationError is the validation error returned by // GetBizTopologyHostRequest.Validate if the designated constraints aren't met. type GetBizTopologyHostRequestValidationError struct { @@ -37042,12 +60084,26 @@ var _ interface { // Validate checks the field values on GetBizTopologyHostResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetBizTopologyHostResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetBizTopologyHostResponse 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 +// GetBizTopologyHostResponseMultiError, or nil if none found. +func (m *GetBizTopologyHostResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetBizTopologyHostResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -37056,7 +60112,26 @@ func (m *GetBizTopologyHostResponse) Validate() error { // no validation rules for RequestId - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetBizTopologyHostResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetBizTopologyHostResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetBizTopologyHostResponseValidationError{ field: "Data", @@ -37066,9 +60141,30 @@ func (m *GetBizTopologyHostResponse) Validate() error { } } + if len(errors) > 0 { + return GetBizTopologyHostResponseMultiError(errors) + } + return nil } +// GetBizTopologyHostResponseMultiError is an error wrapping multiple +// validation errors returned by GetBizTopologyHostResponse.ValidateAll() if +// the designated constraints aren't met. +type GetBizTopologyHostResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetBizTopologyHostResponseMultiError) 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 GetBizTopologyHostResponseMultiError) AllErrors() []error { return m } + // GetBizTopologyHostResponseValidationError is the validation error returned // by GetBizTopologyHostResponse.Validate if the designated constraints aren't met. type GetBizTopologyHostResponseValidationError struct { @@ -37126,19 +60222,54 @@ var _ interface { } = GetBizTopologyHostResponseValidationError{} // Validate checks the field values on NodeData with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *NodeData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NodeData 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 NodeDataMultiError, or nil +// if none found. +func (m *NodeData) ValidateAll() error { + return m.validate(true) +} + +func (m *NodeData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ObjectId // no validation rules for InstanceId + if len(errors) > 0 { + return NodeDataMultiError(errors) + } + return nil } +// NodeDataMultiError is an error wrapping multiple validation errors returned +// by NodeData.ValidateAll() if the designated constraints aren't met. +type NodeDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NodeDataMultiError) 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 NodeDataMultiError) AllErrors() []error { return m } + // NodeDataValidationError is the validation error returned by // NodeData.Validate if the designated constraints aren't met. type NodeDataValidationError struct { @@ -37195,27 +60326,64 @@ var _ interface { // Validate checks the field values on GetTopologyNodesRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyNodesRequest 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 +// GetTopologyNodesRequestMultiError, or nil if none found. +func (m *GetTopologyNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId if len(m.GetNodeList()) < 1 { - return GetTopologyNodesRequestValidationError{ + err := GetTopologyNodesRequestValidationError{ field: "NodeList", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetNodeList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyNodesRequestValidationError{ + field: fmt.Sprintf("NodeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyNodesRequestValidationError{ + field: fmt.Sprintf("NodeList[%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 GetTopologyNodesRequestValidationError{ field: fmt.Sprintf("NodeList[%v]", idx), @@ -37229,7 +60397,26 @@ func (m *GetTopologyNodesRequest) Validate() error { // no validation rules for SearchContent - if v, ok := interface{}(m.GetAlive()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAlive()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyNodesRequestValidationError{ + field: "Alive", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyNodesRequestValidationError{ + field: "Alive", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAlive()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyNodesRequestValidationError{ field: "Alive", @@ -37243,9 +60430,30 @@ func (m *GetTopologyNodesRequest) Validate() error { // no validation rules for PageSize + if len(errors) > 0 { + return GetTopologyNodesRequestMultiError(errors) + } + return nil } +// GetTopologyNodesRequestMultiError is an error wrapping multiple validation +// errors returned by GetTopologyNodesRequest.ValidateAll() if the designated +// constraints aren't met. +type GetTopologyNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyNodesRequestMultiError) 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 GetTopologyNodesRequestMultiError) AllErrors() []error { return m } + // GetTopologyNodesRequestValidationError is the validation error returned by // GetTopologyNodesRequest.Validate if the designated constraints aren't met. type GetTopologyNodesRequestValidationError struct { @@ -37304,12 +60512,26 @@ var _ interface { // Validate checks the field values on GetTopologyNodesResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyNodesResponse 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 +// GetTopologyNodesResponseMultiError, or nil if none found. +func (m *GetTopologyNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -37318,7 +60540,26 @@ func (m *GetTopologyNodesResponse) Validate() error { // no validation rules for RequestId - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyNodesResponseValidationError{ field: "Data", @@ -37328,9 +60569,30 @@ func (m *GetTopologyNodesResponse) Validate() error { } } + if len(errors) > 0 { + return GetTopologyNodesResponseMultiError(errors) + } + return nil } +// GetTopologyNodesResponseMultiError is an error wrapping multiple validation +// errors returned by GetTopologyNodesResponse.ValidateAll() if the designated +// constraints aren't met. +type GetTopologyNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyNodesResponseMultiError) 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 GetTopologyNodesResponseMultiError) AllErrors() []error { return m } + // GetTopologyNodesResponseValidationError is the validation error returned by // GetTopologyNodesResponse.Validate if the designated constraints aren't met. type GetTopologyNodesResponseValidationError struct { @@ -37389,12 +60651,26 @@ var _ interface { // Validate checks the field values on GetTopologyNodesData with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyNodesData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyNodesData 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 +// GetTopologyNodesDataMultiError, or nil if none found. +func (m *GetTopologyNodesData) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyNodesData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Start // no validation rules for PageSize @@ -37404,7 +60680,26 @@ func (m *GetTopologyNodesData) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyNodesDataValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyNodesDataValidationError{ + field: fmt.Sprintf("Data[%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 GetTopologyNodesDataValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -37416,9 +60711,30 @@ func (m *GetTopologyNodesData) Validate() error { } + if len(errors) > 0 { + return GetTopologyNodesDataMultiError(errors) + } + return nil } +// GetTopologyNodesDataMultiError is an error wrapping multiple validation +// errors returned by GetTopologyNodesData.ValidateAll() if the designated +// constraints aren't met. +type GetTopologyNodesDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyNodesDataMultiError) 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 GetTopologyNodesDataMultiError) AllErrors() []error { return m } + // GetTopologyNodesDataValidationError is the validation error returned by // GetTopologyNodesData.Validate if the designated constraints aren't met. type GetTopologyNodesDataValidationError struct { @@ -37476,12 +60792,27 @@ var _ interface { } = GetTopologyNodesDataValidationError{} // Validate checks the field values on HostData with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *HostData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HostData 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 HostDataMultiError, or nil +// if none found. +func (m *HostData) ValidateAll() error { + return m.validate(true) +} + +func (m *HostData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for HostId // no validation rules for Ip @@ -37494,7 +60825,26 @@ func (m *HostData) Validate() error { // no validation rules for OsName - if v, ok := interface{}(m.GetCloudArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, HostDataValidationError{ + field: "CloudArea", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, HostDataValidationError{ + field: "CloudArea", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCloudArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return HostDataValidationError{ field: "CloudArea", @@ -37504,9 +60854,29 @@ func (m *HostData) Validate() error { } } + if len(errors) > 0 { + return HostDataMultiError(errors) + } + return nil } +// HostDataMultiError is an error wrapping multiple validation errors returned +// by HostData.ValidateAll() if the designated constraints aren't met. +type HostDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HostDataMultiError) 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 HostDataMultiError) AllErrors() []error { return m } + // HostDataValidationError is the validation error returned by // HostData.Validate if the designated constraints aren't met. type HostDataValidationError struct { @@ -37562,20 +60932,55 @@ var _ interface { } = HostDataValidationError{} // Validate checks the field values on HostCloudArea with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *HostCloudArea) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HostCloudArea 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 HostCloudAreaMultiError, or +// nil if none found. +func (m *HostCloudArea) ValidateAll() error { + return m.validate(true) +} + +func (m *HostCloudArea) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Id // no validation rules for Name + if len(errors) > 0 { + return HostCloudAreaMultiError(errors) + } + return nil } +// HostCloudAreaMultiError is an error wrapping multiple validation errors +// returned by HostCloudArea.ValidateAll() if the designated constraints +// aren't met. +type HostCloudAreaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HostCloudAreaMultiError) 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 HostCloudAreaMultiError) AllErrors() []error { return m } + // HostCloudAreaValidationError is the validation error returned by // HostCloudArea.Validate if the designated constraints aren't met. type HostCloudAreaValidationError struct { @@ -37632,27 +61037,64 @@ var _ interface { // Validate checks the field values on GetTopologyHostIdsNodesRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyHostIdsNodesRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyHostIdsNodesRequest 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 +// GetTopologyHostIdsNodesRequestMultiError, or nil if none found. +func (m *GetTopologyHostIdsNodesRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyHostIdsNodesRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId if len(m.GetNodeList()) < 1 { - return GetTopologyHostIdsNodesRequestValidationError{ + err := GetTopologyHostIdsNodesRequestValidationError{ field: "NodeList", reason: "value must contain at least 1 item(s)", } + if !all { + return err + } + errors = append(errors, err) } for idx, item := range m.GetNodeList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesRequestValidationError{ + field: fmt.Sprintf("NodeList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesRequestValidationError{ + field: fmt.Sprintf("NodeList[%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 GetTopologyHostIdsNodesRequestValidationError{ field: fmt.Sprintf("NodeList[%v]", idx), @@ -37666,7 +61108,26 @@ func (m *GetTopologyHostIdsNodesRequest) Validate() error { // no validation rules for SearchContent - if v, ok := interface{}(m.GetAlive()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAlive()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesRequestValidationError{ + field: "Alive", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesRequestValidationError{ + field: "Alive", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAlive()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyHostIdsNodesRequestValidationError{ field: "Alive", @@ -37680,9 +61141,30 @@ func (m *GetTopologyHostIdsNodesRequest) Validate() error { // no validation rules for PageSize + if len(errors) > 0 { + return GetTopologyHostIdsNodesRequestMultiError(errors) + } + return nil } +// GetTopologyHostIdsNodesRequestMultiError is an error wrapping multiple +// validation errors returned by GetTopologyHostIdsNodesRequest.ValidateAll() +// if the designated constraints aren't met. +type GetTopologyHostIdsNodesRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyHostIdsNodesRequestMultiError) 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 GetTopologyHostIdsNodesRequestMultiError) AllErrors() []error { return m } + // GetTopologyHostIdsNodesRequestValidationError is the validation error // returned by GetTopologyHostIdsNodesRequest.Validate if the designated // constraints aren't met. @@ -37742,12 +61224,26 @@ var _ interface { // Validate checks the field values on GetTopologyHostIdsNodesResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyHostIdsNodesResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyHostIdsNodesResponse 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 +// GetTopologyHostIdsNodesResponseMultiError, or nil if none found. +func (m *GetTopologyHostIdsNodesResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyHostIdsNodesResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -37756,7 +61252,26 @@ func (m *GetTopologyHostIdsNodesResponse) Validate() error { // no validation rules for RequestId - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetTopologyHostIdsNodesResponseValidationError{ field: "Data", @@ -37766,9 +61281,30 @@ func (m *GetTopologyHostIdsNodesResponse) Validate() error { } } + if len(errors) > 0 { + return GetTopologyHostIdsNodesResponseMultiError(errors) + } + return nil } +// GetTopologyHostIdsNodesResponseMultiError is an error wrapping multiple +// validation errors returned by GetTopologyHostIdsNodesResponse.ValidateAll() +// if the designated constraints aren't met. +type GetTopologyHostIdsNodesResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyHostIdsNodesResponseMultiError) 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 GetTopologyHostIdsNodesResponseMultiError) AllErrors() []error { return m } + // GetTopologyHostIdsNodesResponseValidationError is the validation error // returned by GetTopologyHostIdsNodesResponse.Validate if the designated // constraints aren't met. @@ -37828,12 +61364,26 @@ var _ interface { // Validate checks the field values on GetTopologyHostIdsNodesData with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetTopologyHostIdsNodesData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetTopologyHostIdsNodesData 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 +// GetTopologyHostIdsNodesDataMultiError, or nil if none found. +func (m *GetTopologyHostIdsNodesData) ValidateAll() error { + return m.validate(true) +} + +func (m *GetTopologyHostIdsNodesData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Start // no validation rules for PageSize @@ -37843,7 +61393,26 @@ func (m *GetTopologyHostIdsNodesData) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesDataValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetTopologyHostIdsNodesDataValidationError{ + field: fmt.Sprintf("Data[%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 GetTopologyHostIdsNodesDataValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -37855,9 +61424,30 @@ func (m *GetTopologyHostIdsNodesData) Validate() error { } + if len(errors) > 0 { + return GetTopologyHostIdsNodesDataMultiError(errors) + } + return nil } +// GetTopologyHostIdsNodesDataMultiError is an error wrapping multiple +// validation errors returned by GetTopologyHostIdsNodesData.ValidateAll() if +// the designated constraints aren't met. +type GetTopologyHostIdsNodesDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetTopologyHostIdsNodesDataMultiError) 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 GetTopologyHostIdsNodesDataMultiError) AllErrors() []error { return m } + // GetTopologyHostIdsNodesDataValidationError is the validation error returned // by GetTopologyHostIdsNodesData.Validate if the designated constraints // aren't met. @@ -37916,16 +61506,49 @@ var _ interface { } = GetTopologyHostIdsNodesDataValidationError{} // Validate checks the field values on HostIDsNodeData with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *HostIDsNodeData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HostIDsNodeData 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 +// HostIDsNodeDataMultiError, or nil if none found. +func (m *HostIDsNodeData) ValidateAll() error { + return m.validate(true) +} + +func (m *HostIDsNodeData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for HostId - if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetMeta()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, HostIDsNodeDataValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, HostIDsNodeDataValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return HostIDsNodeDataValidationError{ field: "Meta", @@ -37935,9 +61558,30 @@ func (m *HostIDsNodeData) Validate() error { } } + if len(errors) > 0 { + return HostIDsNodeDataMultiError(errors) + } + return nil } +// HostIDsNodeDataMultiError is an error wrapping multiple validation errors +// returned by HostIDsNodeData.ValidateAll() if the designated constraints +// aren't met. +type HostIDsNodeDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HostIDsNodeDataMultiError) 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 HostIDsNodeDataMultiError) AllErrors() []error { return m } + // HostIDsNodeDataValidationError is the validation error returned by // HostIDsNodeData.Validate if the designated constraints aren't met. type HostIDsNodeDataValidationError struct { @@ -37993,21 +61637,55 @@ var _ interface { } = HostIDsNodeDataValidationError{} // Validate checks the field values on Meta with the rules defined in the proto -// definition for this message. If any rules are violated, an error is returned. +// definition for this message. If any rules are violated, the first error +// encountered is returned, or nil if there are no violations. func (m *Meta) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on Meta 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 MetaMultiError, or nil if none found. +func (m *Meta) ValidateAll() error { + return m.validate(true) +} + +func (m *Meta) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId // no validation rules for BkBizId + if len(errors) > 0 { + return MetaMultiError(errors) + } + return nil } +// MetaMultiError is an error wrapping multiple validation errors returned by +// Meta.ValidateAll() if the designated constraints aren't met. +type MetaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m MetaMultiError) 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 MetaMultiError) AllErrors() []error { return m } + // MetaValidationError is the validation error returned by Meta.Validate if the // designated constraints aren't met. type MetaValidationError struct { @@ -38064,12 +61742,26 @@ var _ interface { // Validate checks the field values on GetHostsDetailsRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetHostsDetailsRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetHostsDetailsRequest 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 +// GetHostsDetailsRequestMultiError, or nil if none found. +func (m *GetHostsDetailsRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetHostsDetailsRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId @@ -38077,7 +61769,26 @@ func (m *GetHostsDetailsRequest) Validate() error { for idx, item := range m.GetHostList() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetHostsDetailsRequestValidationError{ + field: fmt.Sprintf("HostList[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetHostsDetailsRequestValidationError{ + field: fmt.Sprintf("HostList[%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 GetHostsDetailsRequestValidationError{ field: fmt.Sprintf("HostList[%v]", idx), @@ -38089,9 +61800,30 @@ func (m *GetHostsDetailsRequest) Validate() error { } + if len(errors) > 0 { + return GetHostsDetailsRequestMultiError(errors) + } + return nil } +// GetHostsDetailsRequestMultiError is an error wrapping multiple validation +// errors returned by GetHostsDetailsRequest.ValidateAll() if the designated +// constraints aren't met. +type GetHostsDetailsRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetHostsDetailsRequestMultiError) 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 GetHostsDetailsRequestMultiError) AllErrors() []error { return m } + // GetHostsDetailsRequestValidationError is the validation error returned by // GetHostsDetailsRequest.Validate if the designated constraints aren't met. type GetHostsDetailsRequestValidationError struct { @@ -38150,12 +61882,26 @@ var _ interface { // Validate checks the field values on GetHostsDetailsResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetHostsDetailsResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetHostsDetailsResponse 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 +// GetHostsDetailsResponseMultiError, or nil if none found. +func (m *GetHostsDetailsResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetHostsDetailsResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -38167,7 +61913,26 @@ func (m *GetHostsDetailsResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetHostsDetailsResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetHostsDetailsResponseValidationError{ + field: fmt.Sprintf("Data[%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 GetHostsDetailsResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -38179,9 +61944,30 @@ func (m *GetHostsDetailsResponse) Validate() error { } + if len(errors) > 0 { + return GetHostsDetailsResponseMultiError(errors) + } + return nil } +// GetHostsDetailsResponseMultiError is an error wrapping multiple validation +// errors returned by GetHostsDetailsResponse.ValidateAll() if the designated +// constraints aren't met. +type GetHostsDetailsResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetHostsDetailsResponseMultiError) 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 GetHostsDetailsResponseMultiError) AllErrors() []error { return m } + // GetHostsDetailsResponseValidationError is the validation error returned by // GetHostsDetailsResponse.Validate if the designated constraints aren't met. type GetHostsDetailsResponseValidationError struct { @@ -38239,13 +62025,27 @@ var _ interface { } = GetHostsDetailsResponseValidationError{} // Validate checks the field values on HostDataWithMeta with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. +// 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 *HostDataWithMeta) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on HostDataWithMeta 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 +// HostDataWithMetaMultiError, or nil if none found. +func (m *HostDataWithMeta) ValidateAll() error { + return m.validate(true) +} + +func (m *HostDataWithMeta) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for HostId // no validation rules for Ip @@ -38258,7 +62058,26 @@ func (m *HostDataWithMeta) Validate() error { // no validation rules for OsName - if v, ok := interface{}(m.GetCloudArea()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCloudArea()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, HostDataWithMetaValidationError{ + field: "CloudArea", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, HostDataWithMetaValidationError{ + field: "CloudArea", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCloudArea()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return HostDataWithMetaValidationError{ field: "CloudArea", @@ -38268,7 +62087,26 @@ func (m *HostDataWithMeta) Validate() error { } } - if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetMeta()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, HostDataWithMetaValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, HostDataWithMetaValidationError{ + field: "Meta", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetMeta()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return HostDataWithMetaValidationError{ field: "Meta", @@ -38278,9 +62116,30 @@ func (m *HostDataWithMeta) Validate() error { } } + if len(errors) > 0 { + return HostDataWithMetaMultiError(errors) + } + return nil } +// HostDataWithMetaMultiError is an error wrapping multiple validation errors +// returned by HostDataWithMeta.ValidateAll() if the designated constraints +// aren't met. +type HostDataWithMetaMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m HostDataWithMetaMultiError) 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 HostDataWithMetaMultiError) AllErrors() []error { return m } + // HostDataWithMetaValidationError is the validation error returned by // HostDataWithMeta.Validate if the designated constraints aren't met. type HostDataWithMetaValidationError struct { @@ -38337,19 +62196,54 @@ var _ interface { // Validate checks the field values on GetScopeHostCheckRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetScopeHostCheckRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetScopeHostCheckRequest 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 +// GetScopeHostCheckRequestMultiError, or nil if none found. +func (m *GetScopeHostCheckRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetScopeHostCheckRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ScopeType // no validation rules for ScopeId + if len(errors) > 0 { + return GetScopeHostCheckRequestMultiError(errors) + } + return nil } +// GetScopeHostCheckRequestMultiError is an error wrapping multiple validation +// errors returned by GetScopeHostCheckRequest.ValidateAll() if the designated +// constraints aren't met. +type GetScopeHostCheckRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetScopeHostCheckRequestMultiError) 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 GetScopeHostCheckRequestMultiError) AllErrors() []error { return m } + // GetScopeHostCheckRequestValidationError is the validation error returned by // GetScopeHostCheckRequest.Validate if the designated constraints aren't met. type GetScopeHostCheckRequestValidationError struct { @@ -38408,12 +62302,26 @@ var _ interface { // Validate checks the field values on GetScopeHostCheckResponse with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetScopeHostCheckResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetScopeHostCheckResponse 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 +// GetScopeHostCheckResponseMultiError, or nil if none found. +func (m *GetScopeHostCheckResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetScopeHostCheckResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Success @@ -38425,7 +62333,26 @@ func (m *GetScopeHostCheckResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetScopeHostCheckResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetScopeHostCheckResponseValidationError{ + field: fmt.Sprintf("Data[%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 GetScopeHostCheckResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -38437,9 +62364,30 @@ func (m *GetScopeHostCheckResponse) Validate() error { } + if len(errors) > 0 { + return GetScopeHostCheckResponseMultiError(errors) + } + return nil } +// GetScopeHostCheckResponseMultiError is an error wrapping multiple validation +// errors returned by GetScopeHostCheckResponse.ValidateAll() if the +// designated constraints aren't met. +type GetScopeHostCheckResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetScopeHostCheckResponseMultiError) 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 GetScopeHostCheckResponseMultiError) AllErrors() []error { return m } + // GetScopeHostCheckResponseValidationError is the validation error returned by // GetScopeHostCheckResponse.Validate if the designated constraints aren't met. type GetScopeHostCheckResponseValidationError struct { @@ -38497,22 +62445,56 @@ var _ interface { } = GetScopeHostCheckResponseValidationError{} // Validate checks the field values on NotifyConfig with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *NotifyConfig) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NotifyConfig 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 NotifyConfigMultiError, or +// nil if none found. +func (m *NotifyConfig) ValidateAll() error { + return m.validate(true) +} + +func (m *NotifyConfig) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Server // no validation rules for DataId // no validation rules for AccessToken + if len(errors) > 0 { + return NotifyConfigMultiError(errors) + } + return nil } +// NotifyConfigMultiError is an error wrapping multiple validation errors +// returned by NotifyConfig.ValidateAll() if the designated constraints aren't met. +type NotifyConfigMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NotifyConfigMultiError) 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 NotifyConfigMultiError) AllErrors() []error { return m } + // NotifyConfigValidationError is the validation error returned by // NotifyConfig.Validate if the designated constraints aren't met. type NotifyConfigValidationError struct { @@ -38568,21 +62550,56 @@ var _ interface { } = NotifyConfigValidationError{} // Validate checks the field values on NotifyData with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. +// 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 *NotifyData) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NotifyData 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 NotifyDataMultiError, or +// nil if none found. +func (m *NotifyData) ValidateAll() error { + return m.validate(true) +} + +func (m *NotifyData) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Enable // no validation rules for Title // no validation rules for Content + if len(errors) > 0 { + return NotifyDataMultiError(errors) + } + return nil } +// NotifyDataMultiError is an error wrapping multiple validation errors +// returned by NotifyData.ValidateAll() if the designated constraints aren't met. +type NotifyDataMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NotifyDataMultiError) 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 NotifyDataMultiError) AllErrors() []error { return m } + // NotifyDataValidationError is the validation error returned by // NotifyData.Validate if the designated constraints aren't met. type NotifyDataValidationError struct { @@ -38638,13 +62655,27 @@ var _ interface { } = NotifyDataValidationError{} // Validate checks the field values on NotifyTemplate with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *NotifyTemplate) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on NotifyTemplate 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 NotifyTemplateMultiError, +// or nil if none found. +func (m *NotifyTemplate) ValidateAll() error { + return m.validate(true) +} + +func (m *NotifyTemplate) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for NotifyTemplateID // no validation rules for Name @@ -38657,7 +62688,26 @@ func (m *NotifyTemplate) Validate() error { // no validation rules for Enable - if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetConfig()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NotifyTemplateValidationError{ field: "Config", @@ -38667,7 +62717,26 @@ func (m *NotifyTemplate) Validate() error { } } - if v, ok := interface{}(m.GetCreateCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCreateCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "CreateCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "CreateCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreateCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NotifyTemplateValidationError{ field: "CreateCluster", @@ -38677,7 +62746,26 @@ func (m *NotifyTemplate) Validate() error { } } - if v, ok := interface{}(m.GetDeleteCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "DeleteCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "DeleteCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NotifyTemplateValidationError{ field: "DeleteCluster", @@ -38687,7 +62775,26 @@ func (m *NotifyTemplate) Validate() error { } } - if v, ok := interface{}(m.GetCreateNodeGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCreateNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "CreateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "CreateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreateNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NotifyTemplateValidationError{ field: "CreateNodeGroup", @@ -38697,7 +62804,26 @@ func (m *NotifyTemplate) Validate() error { } } - if v, ok := interface{}(m.GetDeleteNodeGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "DeleteNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "DeleteNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NotifyTemplateValidationError{ field: "DeleteNodeGroup", @@ -38707,7 +62833,26 @@ func (m *NotifyTemplate) Validate() error { } } - if v, ok := interface{}(m.GetUpdateNodeGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetUpdateNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "UpdateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "UpdateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdateNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NotifyTemplateValidationError{ field: "UpdateNodeGroup", @@ -38717,7 +62862,26 @@ func (m *NotifyTemplate) Validate() error { } } - if v, ok := interface{}(m.GetGroupScaleOutNode()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetGroupScaleOutNode()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "GroupScaleOutNode", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "GroupScaleOutNode", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetGroupScaleOutNode()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NotifyTemplateValidationError{ field: "GroupScaleOutNode", @@ -38727,7 +62891,26 @@ func (m *NotifyTemplate) Validate() error { } } - if v, ok := interface{}(m.GetGroupScaleInNode()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetGroupScaleInNode()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "GroupScaleInNode", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, NotifyTemplateValidationError{ + field: "GroupScaleInNode", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetGroupScaleInNode()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return NotifyTemplateValidationError{ field: "GroupScaleInNode", @@ -38747,9 +62930,30 @@ func (m *NotifyTemplate) Validate() error { // no validation rules for UpdateTime + if len(errors) > 0 { + return NotifyTemplateMultiError(errors) + } + return nil } +// NotifyTemplateMultiError is an error wrapping multiple validation errors +// returned by NotifyTemplate.ValidateAll() if the designated constraints +// aren't met. +type NotifyTemplateMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m NotifyTemplateMultiError) 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 NotifyTemplateMultiError) AllErrors() []error { return m } + // NotifyTemplateValidationError is the validation error returned by // NotifyTemplate.Validate if the designated constraints aren't met. type NotifyTemplateValidationError struct { @@ -38806,43 +63010,92 @@ var _ interface { // Validate checks the field values on CreateNotifyTemplateRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNotifyTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNotifyTemplateRequest 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 +// CreateNotifyTemplateRequestMultiError, or nil if none found. +func (m *CreateNotifyTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNotifyTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + if l := utf8.RuneCountInString(m.GetProjectID()); l < 1 || l > 2048 { - return CreateNotifyTemplateRequestValidationError{ + err := CreateNotifyTemplateRequestValidationError{ field: "ProjectID", reason: "value length must be between 1 and 2048 runes, inclusive", } + if !all { + return err + } + errors = append(errors, err) } if !_CreateNotifyTemplateRequest_ProjectID_Pattern.MatchString(m.GetProjectID()) { - return CreateNotifyTemplateRequestValidationError{ + err := CreateNotifyTemplateRequestValidationError{ field: "ProjectID", reason: "value does not match regex pattern \"^[0-9a-zA-Z-]+$\"", } + if !all { + return err + } + errors = append(errors, err) } if utf8.RuneCountInString(m.GetName()) < 1 { - return CreateNotifyTemplateRequestValidationError{ + err := CreateNotifyTemplateRequestValidationError{ field: "Name", reason: "value length must be at least 1 runes", } + if !all { + return err + } + errors = append(errors, err) } // no validation rules for Desc if _, ok := _CreateNotifyTemplateRequest_NotifyType_InLookup[m.GetNotifyType()]; !ok { - return CreateNotifyTemplateRequestValidationError{ + err := CreateNotifyTemplateRequestValidationError{ field: "NotifyType", reason: "value must be in list [bk_monitor_event bk_monitor_metrics]", } + if !all { + return err + } + errors = append(errors, err) } - if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetEnable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "Enable", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetEnable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNotifyTemplateRequestValidationError{ field: "Enable", @@ -38852,7 +63105,26 @@ func (m *CreateNotifyTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetCreateCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCreateCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "CreateCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "CreateCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreateCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNotifyTemplateRequestValidationError{ field: "CreateCluster", @@ -38862,7 +63134,26 @@ func (m *CreateNotifyTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetDeleteCluster()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteCluster()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "DeleteCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "DeleteCluster", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteCluster()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNotifyTemplateRequestValidationError{ field: "DeleteCluster", @@ -38872,7 +63163,26 @@ func (m *CreateNotifyTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetCreateNodeGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetCreateNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "CreateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "CreateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetCreateNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNotifyTemplateRequestValidationError{ field: "CreateNodeGroup", @@ -38882,7 +63192,26 @@ func (m *CreateNotifyTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetDeleteNodeGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetDeleteNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "DeleteNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "DeleteNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDeleteNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNotifyTemplateRequestValidationError{ field: "DeleteNodeGroup", @@ -38892,7 +63221,26 @@ func (m *CreateNotifyTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetUpdateNodeGroup()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetUpdateNodeGroup()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "UpdateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "UpdateNodeGroup", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetUpdateNodeGroup()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNotifyTemplateRequestValidationError{ field: "UpdateNodeGroup", @@ -38902,7 +63250,26 @@ func (m *CreateNotifyTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetGroupScaleOutNode()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetGroupScaleOutNode()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "GroupScaleOutNode", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "GroupScaleOutNode", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetGroupScaleOutNode()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNotifyTemplateRequestValidationError{ field: "GroupScaleOutNode", @@ -38912,7 +63279,26 @@ func (m *CreateNotifyTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetGroupScaleInNode()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetGroupScaleInNode()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "GroupScaleInNode", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "GroupScaleInNode", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetGroupScaleInNode()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNotifyTemplateRequestValidationError{ field: "GroupScaleInNode", @@ -38922,7 +63308,26 @@ func (m *CreateNotifyTemplateRequest) Validate() error { } } - if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetConfig()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNotifyTemplateRequestValidationError{ + field: "Config", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetConfig()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNotifyTemplateRequestValidationError{ field: "Config", @@ -38936,9 +63341,30 @@ func (m *CreateNotifyTemplateRequest) Validate() error { // no validation rules for Creator + if len(errors) > 0 { + return CreateNotifyTemplateRequestMultiError(errors) + } + return nil } +// CreateNotifyTemplateRequestMultiError is an error wrapping multiple +// validation errors returned by CreateNotifyTemplateRequest.ValidateAll() if +// the designated constraints aren't met. +type CreateNotifyTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNotifyTemplateRequestMultiError) 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 CreateNotifyTemplateRequestMultiError) AllErrors() []error { return m } + // CreateNotifyTemplateRequestValidationError is the validation error returned // by CreateNotifyTemplateRequest.Validate if the designated constraints // aren't met. @@ -39005,19 +63431,52 @@ var _CreateNotifyTemplateRequest_NotifyType_InLookup = map[string]struct{}{ // Validate checks the field values on CreateNotifyTemplateResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *CreateNotifyTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on CreateNotifyTemplateResponse 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 +// CreateNotifyTemplateResponseMultiError, or nil if none found. +func (m *CreateNotifyTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *CreateNotifyTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, CreateNotifyTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, CreateNotifyTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return CreateNotifyTemplateResponseValidationError{ field: "WebAnnotations", @@ -39027,9 +63486,30 @@ func (m *CreateNotifyTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return CreateNotifyTemplateResponseMultiError(errors) + } + return nil } +// CreateNotifyTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by CreateNotifyTemplateResponse.ValidateAll() if +// the designated constraints aren't met. +type CreateNotifyTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m CreateNotifyTemplateResponseMultiError) 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 CreateNotifyTemplateResponseMultiError) AllErrors() []error { return m } + // CreateNotifyTemplateResponseValidationError is the validation error returned // by CreateNotifyTemplateResponse.Validate if the designated constraints // aren't met. @@ -39089,19 +63569,54 @@ var _ interface { // Validate checks the field values on DeleteNotifyTemplateRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNotifyTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNotifyTemplateRequest 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 +// DeleteNotifyTemplateRequestMultiError, or nil if none found. +func (m *DeleteNotifyTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNotifyTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NotifyTemplateID + if len(errors) > 0 { + return DeleteNotifyTemplateRequestMultiError(errors) + } + return nil } +// DeleteNotifyTemplateRequestMultiError is an error wrapping multiple +// validation errors returned by DeleteNotifyTemplateRequest.ValidateAll() if +// the designated constraints aren't met. +type DeleteNotifyTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNotifyTemplateRequestMultiError) 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 DeleteNotifyTemplateRequestMultiError) AllErrors() []error { return m } + // DeleteNotifyTemplateRequestValidationError is the validation error returned // by DeleteNotifyTemplateRequest.Validate if the designated constraints // aren't met. @@ -39161,19 +63676,52 @@ var _ interface { // Validate checks the field values on DeleteNotifyTemplateResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *DeleteNotifyTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DeleteNotifyTemplateResponse 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 +// DeleteNotifyTemplateResponseMultiError, or nil if none found. +func (m *DeleteNotifyTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *DeleteNotifyTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetWebAnnotations()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DeleteNotifyTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DeleteNotifyTemplateResponseValidationError{ + field: "WebAnnotations", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetWebAnnotations()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return DeleteNotifyTemplateResponseValidationError{ field: "WebAnnotations", @@ -39183,9 +63731,30 @@ func (m *DeleteNotifyTemplateResponse) Validate() error { } } + if len(errors) > 0 { + return DeleteNotifyTemplateResponseMultiError(errors) + } + return nil } +// DeleteNotifyTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by DeleteNotifyTemplateResponse.ValidateAll() if +// the designated constraints aren't met. +type DeleteNotifyTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DeleteNotifyTemplateResponseMultiError) 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 DeleteNotifyTemplateResponseMultiError) AllErrors() []error { return m } + // DeleteNotifyTemplateResponseValidationError is the validation error returned // by DeleteNotifyTemplateResponse.Validate if the designated constraints // aren't met. @@ -39245,19 +63814,54 @@ var _ interface { // Validate checks the field values on ListNotifyTemplateRequest with the rules // defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNotifyTemplateRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNotifyTemplateRequest 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 +// ListNotifyTemplateRequestMultiError, or nil if none found. +func (m *ListNotifyTemplateRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNotifyTemplateRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectID // no validation rules for NotifyTemplateID + if len(errors) > 0 { + return ListNotifyTemplateRequestMultiError(errors) + } + return nil } +// ListNotifyTemplateRequestMultiError is an error wrapping multiple validation +// errors returned by ListNotifyTemplateRequest.ValidateAll() if the +// designated constraints aren't met. +type ListNotifyTemplateRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNotifyTemplateRequestMultiError) 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 ListNotifyTemplateRequestMultiError) AllErrors() []error { return m } + // ListNotifyTemplateRequestValidationError is the validation error returned by // ListNotifyTemplateRequest.Validate if the designated constraints aren't met. type ListNotifyTemplateRequestValidationError struct { @@ -39316,12 +63920,26 @@ var _ interface { // Validate checks the field values on ListNotifyTemplateResponse with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *ListNotifyTemplateResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ListNotifyTemplateResponse 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 +// ListNotifyTemplateResponseMultiError, or nil if none found. +func (m *ListNotifyTemplateResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ListNotifyTemplateResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message @@ -39331,7 +63949,26 @@ func (m *ListNotifyTemplateResponse) Validate() error { for idx, item := range m.GetData() { _, _ = idx, item - if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListNotifyTemplateResponseValidationError{ + field: fmt.Sprintf("Data[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListNotifyTemplateResponseValidationError{ + field: fmt.Sprintf("Data[%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 ListNotifyTemplateResponseValidationError{ field: fmt.Sprintf("Data[%v]", idx), @@ -39343,9 +63980,30 @@ func (m *ListNotifyTemplateResponse) Validate() error { } + if len(errors) > 0 { + return ListNotifyTemplateResponseMultiError(errors) + } + return nil } +// ListNotifyTemplateResponseMultiError is an error wrapping multiple +// validation errors returned by ListNotifyTemplateResponse.ValidateAll() if +// the designated constraints aren't met. +type ListNotifyTemplateResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ListNotifyTemplateResponseMultiError) 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 ListNotifyTemplateResponseMultiError) AllErrors() []error { return m } + // ListNotifyTemplateResponseValidationError is the validation error returned // by ListNotifyTemplateResponse.Validate if the designated constraints aren't met. type ListNotifyTemplateResponseValidationError struct { @@ -39404,12 +64062,26 @@ var _ interface { // Validate checks the field values on GetProviderResourceUsageRequest with the // rules defined in the proto definition for this message. If any rules are -// violated, an error is returned. +// violated, the first error encountered is returned, or nil if there are no violations. func (m *GetProviderResourceUsageRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetProviderResourceUsageRequest 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 +// GetProviderResourceUsageRequestMultiError, or nil if none found. +func (m *GetProviderResourceUsageRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *GetProviderResourceUsageRequest) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProviderID // no validation rules for Region @@ -39419,15 +64091,38 @@ func (m *GetProviderResourceUsageRequest) Validate() error { if wrapper := m.GetRatio(); wrapper != nil { if val := wrapper.GetValue(); val < 0 || val > 100 { - return GetProviderResourceUsageRequestValidationError{ + err := GetProviderResourceUsageRequestValidationError{ field: "Ratio", reason: "value must be inside range [0, 100]", } + if !all { + return err + } + errors = append(errors, err) } } - if v, ok := interface{}(m.GetAvailable()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetAvailable()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetProviderResourceUsageRequestValidationError{ + field: "Available", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetProviderResourceUsageRequestValidationError{ + field: "Available", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetAvailable()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetProviderResourceUsageRequestValidationError{ field: "Available", @@ -39437,9 +64132,30 @@ func (m *GetProviderResourceUsageRequest) Validate() error { } } + if len(errors) > 0 { + return GetProviderResourceUsageRequestMultiError(errors) + } + return nil } +// GetProviderResourceUsageRequestMultiError is an error wrapping multiple +// validation errors returned by GetProviderResourceUsageRequest.ValidateAll() +// if the designated constraints aren't met. +type GetProviderResourceUsageRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetProviderResourceUsageRequestMultiError) 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 GetProviderResourceUsageRequestMultiError) AllErrors() []error { return m } + // GetProviderResourceUsageRequestValidationError is the validation error // returned by GetProviderResourceUsageRequest.Validate if the designated // constraints aren't met. @@ -39499,19 +64215,53 @@ var _ interface { // Validate checks the field values on GetProviderResourceUsageResponse with // the rules defined in the proto definition for this message. If any rules -// are violated, an error is returned. +// are violated, the first error encountered is returned, or nil if there are +// no violations. func (m *GetProviderResourceUsageResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on GetProviderResourceUsageResponse 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 +// GetProviderResourceUsageResponseMultiError, or nil if none found. +func (m *GetProviderResourceUsageResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *GetProviderResourceUsageResponse) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for Code // no validation rules for Message // no validation rules for Result - if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { + if all { + switch v := interface{}(m.GetData()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetProviderResourceUsageResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetProviderResourceUsageResponseValidationError{ + field: "Data", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetData()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetProviderResourceUsageResponseValidationError{ field: "Data", @@ -39521,9 +64271,31 @@ func (m *GetProviderResourceUsageResponse) Validate() error { } } + if len(errors) > 0 { + return GetProviderResourceUsageResponseMultiError(errors) + } + return nil } +// GetProviderResourceUsageResponseMultiError is an error wrapping multiple +// validation errors returned by +// GetProviderResourceUsageResponse.ValidateAll() if the designated +// constraints aren't met. +type GetProviderResourceUsageResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m GetProviderResourceUsageResponseMultiError) 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 GetProviderResourceUsageResponseMultiError) AllErrors() []error { return m } + // GetProviderResourceUsageResponseValidationError is the validation error // returned by GetProviderResourceUsageResponse.Validate if the designated // constraints aren't met. @@ -39582,13 +64354,27 @@ var _ interface { } = GetProviderResourceUsageResponseValidationError{} // Validate checks the field values on BusinessInfo with the rules defined in -// the proto definition for this message. If any rules are violated, an error -// is returned. +// 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 *BusinessInfo) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on BusinessInfo 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 BusinessInfoMultiError, or +// nil if none found. +func (m *BusinessInfo) ValidateAll() error { + return m.validate(true) +} + +func (m *BusinessInfo) validate(all bool) error { if m == nil { return nil } + var errors []error + // no validation rules for ProjectId // no validation rules for ProjectName @@ -39627,9 +64413,29 @@ func (m *BusinessInfo) Validate() error { // no validation rules for Url + if len(errors) > 0 { + return BusinessInfoMultiError(errors) + } + return nil } +// BusinessInfoMultiError is an error wrapping multiple validation errors +// returned by BusinessInfo.ValidateAll() if the designated constraints aren't met. +type BusinessInfoMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m BusinessInfoMultiError) 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 BusinessInfoMultiError) AllErrors() []error { return m } + // BusinessInfoValidationError is the validation error returned by // BusinessInfo.Validate if the designated constraints aren't met. type BusinessInfoValidationError struct { diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto index 5ba945075f..a01dcd47c7 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto @@ -3712,6 +3712,10 @@ message InternetAccessible { title: "bandwidthPackageId", description: "共享带宽包ID" }]; + string publicIP = 5[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "publicIP", + description: "公网ip地址" + }]; } // InstanceTemplateConfig instance config info @@ -5068,7 +5072,7 @@ message CreateClusterReq { title : "vpcID", description : "集群私有网络id,云上集群填写" }, - (validate.rules).string.max_len = 32 + (validate.rules).string.max_len = 40 ]; string projectID = 6 [ (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { @@ -5106,7 +5110,7 @@ message CreateClusterReq { title : "clusterType", description : "集群类型, 例如[federation, single], " "federation表示为联邦集群,single表示独立集群,默认为single" - },(validate.rules).string = { in: ["federation", "single"]}]; + }]; string federationClusterID = 12[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { title: "federationClusterID", description: "如果该集群为联邦集群的一部分,用该ID记录联邦Host信息" @@ -12031,6 +12035,10 @@ message Subnet { title : "cluster", description : "子网是否被集群使用" }]; + string hwNeutronSubnetID = 10[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "hwNeutronSubnetID", + description : "华为对应子网(OpenStack Neutron)接口ID" + }]; } message CheckCidrConflictFromVpcRequest { diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json index 4de8eafb24..e0b0227639 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json @@ -7872,7 +7872,7 @@ "title": "diskPartition" } }, - "title": "CloudDataDisk 云磁盘格式化数据, 对应CVM数据盘。应用于节点模版\n主要用于 CA 自动扩容节点并上架节点时重装系统,多块数据盘 mountTarget 不能重复\n上架已存在节点时, 用户需指定diskPartition参数区分设备" + "title": "CloudDataDisk 云磁盘格式化数据, 对应CVM数据盘。应用于节点模版\r\n主要用于 CA 自动扩容节点并上架节点时重装系统,多块数据盘 mountTarget 不能重复\r\n上架已存在节点时, 用户需指定diskPartition参数区分设备" }, "clustermanagerCloudModuleFlag": { "type": "object", @@ -13678,6 +13678,11 @@ "type": "string", "description": "共享带宽包ID", "title": "bandwidthPackageId" + }, + "publicIP": { + "type": "string", + "description": "公网ip地址", + "title": "publicIP" } }, "title": "InternetAccessible 公网带宽设置" @@ -17331,6 +17336,11 @@ "$ref": "#/definitions/clustermanagerClusterInfo", "description": "子网是否被集群使用", "title": "cluster" + }, + "hwNeutronSubnetID": { + "type": "string", + "description": "华为对应子网(OpenStack Neutron)接口ID", + "title": "hwNeutronSubnetID" } }, "description": "子网信息", @@ -20165,7 +20175,7 @@ } } }, - "title": "https://github.com/golang/protobuf/issues/1118\nhttps://pkg.go.dev/google.golang.org/protobuf/types/known/structpb#Struct" + "title": "https://github.com/golang/protobuf/issues/1118\r\nhttps://pkg.go.dev/google.golang.org/protobuf/types/known/structpb#Struct" }, "clustermanagerWebAnnotationsV2": { "type": "object", @@ -20283,7 +20293,7 @@ "properties": { "type_url": { "type": "string", - "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + "description": "A URL/resource name that uniquely identifies the type of the serialized\r\nprotocol buffer message. This string must contain at least\r\none \"/\" character. The last segment of the URL's path must represent\r\nthe fully qualified name of the type (as in\r\n`path/google.protobuf.Duration`). The name should be in a canonical form\r\n(e.g., leading \".\" is not accepted).\r\n\r\nIn practice, teams usually precompile into the binary all types that they\r\nexpect it to use in the context of Any. However, for URLs which use the\r\nscheme `http`, `https`, or no scheme, one can optionally set up a type\r\nserver that maps type URLs to message definitions as follows:\r\n\r\n* If no scheme is provided, `https` is assumed.\r\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\r\n value in binary format, or produce an error.\r\n* Applications are allowed to cache lookup results based on the\r\n URL, or have them precompiled into a binary to avoid any\r\n lookup. Therefore, binary compatibility needs to be preserved\r\n on changes to types. (Use versioned type names to manage\r\n breaking changes.)\r\n\r\nNote: this functionality is not currently available in the official\r\nprotobuf release, and it is not used for type URLs beginning with\r\ntype.googleapis.com.\r\n\r\nSchemes other than `http`, `https` (or the empty scheme) might be\r\nused with implementation specific semantics." }, "value": { "type": "string", @@ -20291,7 +20301,7 @@ "description": "Must be a valid serialized protocol buffer of the above specified type." } }, - "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + "title": "`Any` contains an arbitrary serialized protocol buffer message along with a\r\nURL that describes the type of the serialized message.\r\n\r\nProtobuf library provides support to pack/unpack Any values in the form\r\nof utility functions or additional generated methods of the Any type.\r\n\r\nExample 1: Pack and unpack a message in C++.\r\n\r\n Foo foo = ...;\r\n Any any;\r\n any.PackFrom(foo);\r\n ...\r\n if (any.UnpackTo(\u0026foo)) {\r\n ...\r\n }\r\n\r\nExample 2: Pack and unpack a message in Java.\r\n\r\n Foo foo = ...;\r\n Any any = Any.pack(foo);\r\n ...\r\n if (any.is(Foo.class)) {\r\n foo = any.unpack(Foo.class);\r\n }\r\n\r\n Example 3: Pack and unpack a message in Python.\r\n\r\n foo = Foo(...)\r\n any = Any()\r\n any.Pack(foo)\r\n ...\r\n if any.Is(Foo.DESCRIPTOR):\r\n any.Unpack(foo)\r\n ...\r\n\r\n Example 4: Pack and unpack a message in Go\r\n\r\n foo := \u0026pb.Foo{...}\r\n any, err := ptypes.MarshalAny(foo)\r\n ...\r\n foo := \u0026pb.Foo{}\r\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\r\n ...\r\n }\r\n\r\nThe pack methods provided by protobuf library will by default use\r\n'type.googleapis.com/full.type.name' as the type URL and the unpack\r\nmethods only use the fully qualified type name after the last '/'\r\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\r\nname \"y.z\".\r\n\r\n\r\nJSON\r\n====\r\nThe JSON representation of an `Any` value uses the regular\r\nrepresentation of the deserialized, embedded message, with an\r\nadditional field `@type` which contains the type URL. Example:\r\n\r\n package google.profile;\r\n message Person {\r\n string first_name = 1;\r\n string last_name = 2;\r\n }\r\n\r\n {\r\n \"@type\": \"type.googleapis.com/google.profile.Person\",\r\n \"firstName\": \u003cstring\u003e,\r\n \"lastName\": \u003cstring\u003e\r\n }\r\n\r\nIf the embedded message type is well-known and has a custom JSON\r\nrepresentation, that representation will be embedded adding a field\r\n`value` which holds the custom JSON in addition to the `@type`\r\nfield. Example (for message [google.protobuf.Duration][]):\r\n\r\n {\r\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\r\n \"value\": \"1.212s\"\r\n }" }, "protobufNullValue": { "type": "string", @@ -20299,7 +20309,7 @@ "NULL_VALUE" ], "default": "NULL_VALUE", - "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value." + "description": "`NullValue` is a singleton enumeration to represent the null value for the\r\n`Value` type union.\r\n\r\n The JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value." }, "runtimeError": { "type": "object", diff --git a/bcs-services/bcs-cluster-manager/i18n/lang/zh.yaml b/bcs-services/bcs-cluster-manager/i18n/lang/zh.yaml index 050660fda5..ddb2ddabf9 100644 --- a/bcs-services/bcs-cluster-manager/i18n/lang/zh.yaml +++ b/bcs-services/bcs-cluster-manager/i18n/lang/zh.yaml @@ -38,7 +38,9 @@ RegisterClusterKubeConfigTask: "注册集群kubeConfig认证" InstallGSEAgentTask: "节点安装agent插件" CreateClusterShieldAlarmTask: "屏蔽机器告警" CreateTKEClusterTask: "提交创建集群请求" +CreateCloudClusterTask: "提交创建集群请求" CheckTKEClusterStatusTask: "轮询集群创建状态" +CheckCloudClusterStatusTask: "轮询集群创建状态" CheckCreateClusterNodeStatusTask: "检测集群节点状态" RegisterManageClusterKubeConfigTask: "注册集群连接信息" EnableTkeClusterVpcCniTask: "开启VPC-CNI网络模式" diff --git a/bcs-services/bcs-cluster-manager/internal/actions/cluster/create.go b/bcs-services/bcs-cluster-manager/internal/actions/cluster/create.go index c9f3c21a93..ae3db8e1b5 100644 --- a/bcs-services/bcs-cluster-manager/internal/actions/cluster/create.go +++ b/bcs-services/bcs-cluster-manager/internal/actions/cluster/create.go @@ -30,6 +30,7 @@ import ( "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/remote/encrypt" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/store" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/taskserver" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/utils" ) const ( @@ -374,6 +375,13 @@ func (ca *CreateAction) createNodegroup(cls *cmproto.Cluster) error { } ng.LaunchTemplate.KeyPair.KeyPublic = keyPublic } + // base64 encode script file + if ng.NodeTemplate != nil { + ng.NodeTemplate.UserScript = utils.Base64Encode(ng.NodeTemplate.UserScript) + ng.NodeTemplate.PreStartUserScript = utils.Base64Encode(ng.NodeTemplate.PreStartUserScript) + ng.NodeTemplate.ScaleInPreScript = utils.Base64Encode(ng.NodeTemplate.ScaleInPreScript) + ng.NodeTemplate.ScaleInPostScript = utils.Base64Encode(ng.NodeTemplate.ScaleInPostScript) + } err := ca.model.CreateNodeGroup(context.Background(), ng) if err != nil { diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/constants.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/constants.go index dfb4d5c5da..f00fc4147f 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/constants.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/constants.go @@ -308,6 +308,8 @@ var ( MasterIDs ParamKey = "masterIDs" // CloudSystemID xxx CloudSystemID ParamKey = "systemID" + // CloudJobID xxx + CloudJobID ParamKey = "jobID" // BkSopsUrlKey bk-sops depend Key // BkSopsUrlKey url diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/cce.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/cce.go index 199268423b..54dfcd0559 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/cce.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/cce.go @@ -97,6 +97,50 @@ func (cli *CceClient) ListCceCluster(filter *ClusterFilterCond) (*[]model.Cluste return rsp.Items, nil } +// CreateCluster create cce cluster +func (cli *CceClient) CreateCluster(req *CreateClusterRequest) (*model.CreateClusterResponse, error) { + if cli == nil { + return nil, cloudprovider.ErrServerIsNil + } + + return cli.cce.CreateCluster(req.Trans2CreateClusterRequest()) +} + +// DeleteCceCluster delete cce cluster +func (cli *CceClient) DeleteCceCluster(clusterID string) error { + if cli == nil { + return cloudprovider.ErrServerIsNil + } + + var ( + deleteEfs = model.GetDeleteClusterRequestDeleteEfsEnum().TRUE + deleteEni = model.GetDeleteClusterRequestDeleteEniEnum().FALSE + deleteEvs = model.GetDeleteClusterRequestDeleteEvsEnum().TRUE + deleteNet = model.GetDeleteClusterRequestDeleteNetEnum().TRUE + deleteObs = model.GetDeleteClusterRequestDeleteObsEnum().TRUE + deleteSfs = model.GetDeleteClusterRequestDeleteSfsEnum().TRUE + deleteSfs30 = model.GetDeleteClusterRequestDeleteSfs30Enum().TRUE + tobedeleted = model.GetDeleteClusterRequestTobedeletedEnum().TRUE + ondemandNodePolicy = model.GetDeleteClusterRequestOndemandNodePolicyEnum().DELETE + periodicNodePolicy = model.GetDeleteClusterRequestPeriodicNodePolicyEnum().RESET + ) + + _, err := cli.cce.DeleteCluster(&model.DeleteClusterRequest{ + ClusterId: clusterID, + DeleteEfs: &deleteEfs, + DeleteEni: &deleteEni, + DeleteEvs: &deleteEvs, + DeleteNet: &deleteNet, + DeleteObs: &deleteObs, + DeleteSfs: &deleteSfs, + DeleteSfs30: &deleteSfs30, + Tobedeleted: &tobedeleted, + OndemandNodePolicy: &ondemandNodePolicy, + PeriodicNodePolicy: &periodicNodePolicy, + }) + return err +} + // GetCceCluster get cce cluster func (cli *CceClient) GetCceCluster(clusterID string) (*model.ShowClusterResponse, error) { if cli == nil { @@ -455,6 +499,33 @@ func (cli *CceClient) GetClusterNodePool(clusterId, nodePoolId string) (*model.N }, nil } +func (cli *CceClient) ListClusterNodeGroups(clusterId string) ([]model.NodePool, error) { + if cli == nil { + return nil, cloudprovider.ErrServerIsNil + } + + rsp, err := cli.cce.ListNodePools(&model.ListNodePoolsRequest{ + ClusterId: clusterId, + }) + if err != nil { + return nil, err + } + + nodePools := make([]model.NodePool, 0) + for _, item := range *rsp.Items { + tmp := item + nodePools = append(nodePools, model.NodePool{ + Kind: tmp.Kind, + ApiVersion: tmp.ApiVersion, + Metadata: tmp.Metadata, + Spec: tmp.Spec, + Status: tmp.Status, + }) + } + + return nodePools, nil +} + // UpdateNodePool 全量更新接口 func (cli *CceClient) UpdateNodePool(clsId, nodePoolId string, data UpdateNodePoolRequest) ( *model.UpdateNodePoolResponse, error) { @@ -491,7 +562,7 @@ func (cli *CceClient) UpdateNodePoolV2(data *model.UpdateNodePoolRequest) ( } // UpdateNodePoolDesiredNodes update nodePool desired desiredSize nodes count -func (cli *CceClient) UpdateNodePoolDesiredNodes(clusterId, nodePoolId string, desiredSize int32) ( +func (cli *CceClient) UpdateNodePoolDesiredNodes(clusterId, nodePoolId string, desiredSize int32, inc bool) ( *model.UpdateNodePoolResponse, error) { if cli == nil { return nil, cloudprovider.ErrServerIsNil @@ -526,6 +597,10 @@ func (cli *CceClient) UpdateNodePoolDesiredNodes(clusterId, nodePoolId string, d autoscalingConfig = nodePool.Spec.Autoscaling } + if inc { + desiredSize += *nodePool.Spec.InitialNodeCount + } + req := &model.UpdateNodePoolRequest{ ClusterId: clusterId, NodepoolId: nodePoolId, @@ -538,7 +613,7 @@ func (cli *CceClient) UpdateNodePoolDesiredNodes(clusterId, nodePoolId string, d Taints: taints, K8sTags: k8sTags, }, - InitialNodeCount: desiredSize + *nodePool.Spec.InitialNodeCount, + InitialNodeCount: desiredSize, Autoscaling: autoscalingConfig, }, }, diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/constant.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/constant.go index ad170ae645..2b4ad60271 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/constant.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/constant.go @@ -23,6 +23,8 @@ const ( Creating = "Creating" // Deleting 删除中 Deleting = "Deleting" + // Error 错误 + Error = "Error" ) // cluster type @@ -88,3 +90,26 @@ const ( // SubnetScopeAz {azId}表示作用域为具体的AZ SubnetScopeAz = "azId" ) + +const ( + // ClusterInstallAddonsExternalInstall cluster.install.addons.external/install + ClusterInstallAddonsExternalInstall = "cluster.install.addons.external/install" + // ClusterInstallAddonsExternalInstallValue xxx + ClusterInstallAddonsExternalInstallValue = `[{"addonTemplateName":"icagent", + "extendParam":{"logSwitch":"false","tDSEnable":"true"}}]` + + // ClusterInstallAddonsInstall cluster.install.addons/install + ClusterInstallAddonsInstall = "cluster.install.addons/install" + // ClusterInstallAddonsInstallValue xxx + ClusterInstallAddonsInstallValue = `[{"addonTemplateName":"coredns", + "values":{"flavor":{"name":20000,"recommend_cluster_flavor_types":["xlarge"], + "replicas":4,"resources":[{"limitsCpu":"2000m","limitsMem":"2048Mi", + "name":"coredns","requestsCpu":"2000m","requestsMem":"2048Mi"}], + "category":["CCE","Turbo"]}}},{"addonTemplateName":"everest"}, + {"addonTemplateName":"node-local-dns"},{"addonTemplateName":"npd"}]` +) + +const ( + ContainerNetworkModeVpcRouter = "vpc-router" + ContainerNetworkModeOverlayL2 = "overlay_l2" +) diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/types.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/types.go index 17a0152e4e..f45d8672da 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/types.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/types.go @@ -15,6 +15,7 @@ package api import ( "fmt" + "math" "sort" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/model" @@ -888,3 +889,175 @@ func GetAddNodesReinstallVolumeConfig(serverId string, opt *cloudprovider.Common return volumeConfig, nil } + +// CreateClusterRequest create cluster request +type CreateClusterRequest struct { + // Name 集群名称 + Name string + // Spec 集群配置 + Spec CreateClusterSpec +} + +func (c *CreateClusterRequest) Trans2CreateClusterRequest() *model.CreateClusterRequest { + category := model.GetClusterSpecCategoryEnum().TURBO + clusterType := model.GetClusterSpecTypeEnum().VIRTUAL_MACHINE + + billingMode, periodType, periodNum, isAutoRenew, isAutoPay := GetChargeConfig(c.Spec.Charge) + // 根据 单节点 Pod 数量上限 算出 容器网络固定IP池掩码位数 + alphaCceFixPoolMask := fmt.Sprintf("%d", 32-int(math.Log2(float64(c.Spec.AlphaCceFixPoolMask)))) + + clusterTags := make([]model.ResourceTag, 0) + for k, v := range c.Spec.ClusterTag { + tmpK := k + tmpV := v + clusterTags = append(clusterTags, model.ResourceTag{Key: &tmpK, Value: &tmpV}) + } + + confOverName := "kube-apiserver" + confName := "support-overload" + var confValue interface{} = true + + req := &model.CreateClusterRequest{ + Body: &model.Cluster{ + Kind: "Cluster", + ApiVersion: "v3", + Metadata: &model.ClusterMetadata{ + Name: c.Name, + Annotations: map[string]string{ + ClusterInstallAddonsExternalInstall: ClusterInstallAddonsExternalInstallValue, + ClusterInstallAddonsInstall: ClusterInstallAddonsInstallValue, + }, + }, + Spec: &model.ClusterSpec{ + Category: &category, + Type: &clusterType, + Flavor: c.Spec.Flavor, + Version: &c.Spec.Version, + Description: &c.Spec.Description, + Ipv6enable: &c.Spec.Ipv6Enable, + HostNetwork: &model.HostNetwork{ + Vpc: c.Spec.VpcID, + Subnet: c.Spec.SubnetID, + SecurityGroup: &c.Spec.SecurityGroupID, + }, + ServiceNetwork: &model.ServiceNetwork{IPv4CIDR: &c.Spec.ServiceCidr}, + BillingMode: &billingMode, + ClusterTags: &clusterTags, + KubeProxyMode: func() *model.ClusterSpecKubeProxyMode { + proxyMode := model.GetClusterSpecKubeProxyModeEnum().IPTABLES + if c.Spec.KubeProxyMode == model.GetClusterSpecKubeProxyModeEnum().IPVS.Value() { + proxyMode = model.GetClusterSpecKubeProxyModeEnum().IPVS + } + return &proxyMode + + }(), + ExtendParam: &model.ClusterExtendParam{ + PeriodType: &periodType, + PeriodNum: &periodNum, + IsAutoRenew: &isAutoRenew, + IsAutoPay: &isAutoPay, + }, + ConfigurationsOverride: &[]model.PackageConfiguration{ + { + Name: &confOverName, + Configurations: &[]model.ConfigurationItem{ + {Name: &confName, Value: &confValue}, + }, + }, + }, + }, + }, + } + + if len(c.Spec.Az) == 1 { + req.Body.Spec.ExtendParam.ClusterAZ = &c.Spec.Az[0] + } else if len(c.Spec.Az) == 3 { + clusterAz := "multi_az" + req.Body.Spec.ExtendParam.ClusterAZ = &clusterAz + masters := make([]model.MasterSpec, 0) + for _, az := range c.Spec.Az { + tmp := az + masters = append(masters, model.MasterSpec{AvailabilityZone: &tmp}) + } + req.Body.Spec.Masters = &masters + } + + if len(c.Spec.PublicIP) > 0 { + req.Body.Spec.ExtendParam.ClusterExternalIP = &c.Spec.PublicIP + } + + if c.Spec.Category == model.GetClusterSpecCategoryEnum().CCE.Value() { + category = model.GetClusterSpecCategoryEnum().CCE + containerCidr := make([]model.ContainerCidr, 0) + for _, cidr := range c.Spec.ContainerCidr { + containerCidr = append(containerCidr, model.ContainerCidr{Cidr: cidr}) + } + req.Body.Spec.Category = &category + req.Body.Spec.ContainerNetwork = &model.ContainerNetwork{ + Mode: func() model.ContainerNetworkMode { + mode := model.GetContainerNetworkModeEnum().OVERLAY_L2 + if c.Spec.ContainerMode == model.GetContainerNetworkModeEnum().VPC_ROUTER.Value() { + mode = model.GetContainerNetworkModeEnum().VPC_ROUTER + } + return mode + }(), + Cidrs: &containerCidr, + } + req.Body.Spec.ExtendParam.AlphaCceFixPoolMask = &alphaCceFixPoolMask + } else { + networkSubnet := make([]model.NetworkSubnet, 0) + for _, subnetId := range c.Spec.EniNetworkSubnet { + networkSubnet = append(networkSubnet, model.NetworkSubnet{ + SubnetID: subnetId, + }) + } + req.Body.Spec.ContainerNetwork = &model.ContainerNetwork{ + Mode: model.GetContainerNetworkModeEnum().ENI, + } + req.Body.Spec.EniNetwork = &model.EniNetwork{ + Subnets: networkSubnet, + } + } + + return req +} + +// CreateClusterSpec create cluster spec +type CreateClusterSpec struct { + // Category 集群类别 + Category string + // Az 可用区 + Az []string + // Flavor 节点规格 + Flavor string + // Version 集群版本 + Version string + // Description 集群描述 + Description string + // VpcID vpc ID + VpcID string + // SubnetID 子网ID + SubnetID string + // SecurityGroupID 安全组ID + SecurityGroupID string + // ContainerMode 容器网络类型 + ContainerMode string + // ContainerCidr 容器网段 + ContainerCidr []string + // ServiceCidr 服务网段 + ServiceCidr string + // Charge 节点计费模式 + Charge ChargePrepaid + // Ipv6Enable 是否开启ipv6 + Ipv6Enable bool + // AlphaCceFixPoolMask 容器网络固定IP池掩码位数 + AlphaCceFixPoolMask uint32 + // KubeProxyMode 服务转发模式 + KubeProxyMode string + // ClusterTag 集群标签 + ClusterTag map[string]string + // EniNetworkSubnet IPv4子网ID列表 + EniNetworkSubnet []string + // PublicIP 公网ip地址 + PublicIP string +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/utils.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/utils.go index d2724fc544..d31edea5ef 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/utils.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api/utils.go @@ -14,6 +14,7 @@ package api import ( + "context" "encoding/base64" "fmt" "strconv" @@ -25,6 +26,7 @@ import ( v1 "k8s.io/api/core/v1" proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/common" ) // Crypt encryption node password @@ -209,3 +211,121 @@ func GenerateCreateNodePoolRequest(group *proto.NodeGroup, }, }, nil } + +// GenerateCreateClusterRequest get cce cluster create request +func GenerateCreateClusterRequest(ctx context.Context, cluster *proto.Cluster, + operator string) (*CreateClusterRequest, error) { + flavor, err := trans2CCEFlavor(cluster.ClusterBasicSettings.ClusterLevel, cluster.Template) + if err != nil { + return nil, err + } + + containerMode := model.GetContainerNetworkModeEnum().OVERLAY_L2.Value() + if cluster.NetworkType == ContainerNetworkModeVpcRouter { + containerMode = model.GetContainerNetworkModeEnum().VPC_ROUTER.Value() + } + + chargeType := common.POSTPAIDBYHOUR + period := uint32(0) + renewFlag := "" + az := make([]string, 0) + for _, v := range cluster.Template { + if v.NodeRole == common.NodeRoleMaster { + if len(v.Zone) != 0 { + az = append(az, v.Zone) + } + + if len(v.InstanceChargeType) != 0 { + chargeType = v.InstanceChargeType + } + + if v.Charge != nil { + period = v.Charge.Period + renewFlag = v.Charge.RenewFlag + } + } + } + + var alphaCceFixPoolMask uint64 + alphaCceFixPoolMask = 256 + if v, ok := cluster.ExtraInfo["numberOfReservedPodIp"]; ok { + alphaCceFixPoolMask, err = strconv.ParseUint(v, 10, 32) + if err != nil { + return nil, fmt.Errorf("numberOfReservedPodIp conversion failed") + } + } + + req := &CreateClusterRequest{ + Name: strings.ToLower(cluster.ClusterID), + Spec: CreateClusterSpec{ + Category: cluster.ClusterType, + Flavor: flavor, + Az: az, + Version: cluster.ClusterBasicSettings.Version, + Description: cluster.GetDescription(), + VpcID: cluster.VpcID, + SubnetID: cluster.ClusterAdvanceSettings.ClusterConnectSetting.SubnetId, + SecurityGroupID: cluster.ClusterAdvanceSettings.ClusterConnectSetting.SecurityGroup, + ContainerMode: containerMode, + ContainerCidr: cluster.NetworkSettings.MultiClusterCIDR, + ServiceCidr: cluster.NetworkSettings.ServiceIPv4CIDR, + Charge: ChargePrepaid{ + ChargeType: chargeType, + Period: period, + RenewFlag: renewFlag, + }, + Ipv6Enable: false, + KubeProxyMode: func() string { + if cluster.ClusterAdvanceSettings.IPVS { + return model.GetClusterSpecKubeProxyModeEnum().IPVS.Value() + } + + return model.GetClusterSpecKubeProxyModeEnum().IPTABLES.Value() + }(), + ClusterTag: cluster.Labels, + EniNetworkSubnet: cluster.NetworkSettings.EniSubnetIDs, + AlphaCceFixPoolMask: uint32(alphaCceFixPoolMask), + }, + } + + internet := cluster.ClusterAdvanceSettings.ClusterConnectSetting.Internet + if internet != nil { + req.Spec.PublicIP = internet.PublicIP + } + + return req, nil +} + +func trans2CCEFlavor(s string, instance []*proto.InstanceTemplateConfig) (string, error) { + levelNum, err := strconv.Atoi(s) // 尝试转换为整数 + if err != nil { + return "", fmt.Errorf("failed to parse number: %w", err) + } + + flavor := "" + if levelNum <= 0 { + return "", fmt.Errorf("cluster level must be greater than 0") + } else if levelNum <= 50 { + flavor = "cce.s1.small" + } else if levelNum <= 200 { + flavor = "cce.s1.medium" + } else if levelNum <= 1000 { + flavor = "cce.s2.large" + } else { + // levelNum > 1000 + flavor = "cce.s2.xlarge" + } + + masterNum := 0 + for _, v := range instance { + if v.NodeRole == common.NodeRoleMaster { + masterNum++ + } + } + + if masterNum >= 3 { + flavor = strings.ReplaceAll(flavor, ".s1.", ".s2.") + } + + return flavor, nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/business/cce.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/business/cce.go index 2c4d0840c6..01d9e03726 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/business/cce.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/business/cce.go @@ -10,18 +10,41 @@ * limitations under the License. */ +// Package business xxx package business import ( "context" + "strings" + "time" + "github.com/Tencent/bk-bcs/bcs-common/common/blog" "github.com/avast/retry-go" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cce/v3/model" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/remote/loop" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/utils" ) +// DeleteClusterInstance delete cluster instance +func DeleteClusterInstance(client *api.CceClient, clusterID string, nodes []model.Node) ([]string, error) { + success := make([]string, 0) + for _, node := range nodes { + _, err := client.DeleteNode(clusterID, *node.Metadata.Uid, true) + if err != nil { + continue + } + + success = append(success, *node.Metadata.Uid) + } + + return success, nil +} + +func deleteNode(client *api.CceClient, clusterID string, nodes model.Node) {} // nolint + // FilterClusterInstanceFromNodesIDs nodeIDs existInCluster or notExistInCluster func FilterClusterInstanceFromNodesIDs(ctx context.Context, info *cloudprovider.CloudDependBasicInfo, nodeIDs []string) ([]string, []string, error) { @@ -59,3 +82,81 @@ func FilterClusterInstanceFromNodesIDs(ctx context.Context, info *cloudprovider. return existInCluster, notExistInCluster, nil } + +// CheckClusterDeletedNodes check if nodeIds are deleted in cluster +func CheckClusterDeletedNodes(ctx context.Context, info *cloudprovider.CloudDependBasicInfo, nodeIds []string) error { + taskID := cloudprovider.GetTaskIDFromContext(ctx) + + // get qcloud client + cli, err := api.NewCceClient(info.CmOption) + if err != nil { + blog.Errorf("checkClusterInstanceStatus[%s] failed, %s", taskID, err) + return err + } + + // wait node group state to normal + timeCtx, cancel := context.WithTimeout(context.TODO(), 5*time.Minute) + defer cancel() + + // wait all nodes to be ready + err = loop.LoopDoFunc(timeCtx, func() error { + instances, errQuery := cli.ListClusterNodes(info.Cluster.GetSystemID()) + if errQuery != nil { + blog.Errorf("CheckClusterDeletedNodes[%s] QueryTkeClusterAllInstances failed: %v", taskID, errQuery) + return nil + } + + if len(instances) == 0 { + return loop.EndLoop + } + + clusterNodeIds := make([]string, 0) + for i := range instances { + clusterNodeIds = append(clusterNodeIds, *instances[i].Metadata.Uid) + } + + for i := range nodeIds { + if utils.StringInSlice(nodeIds[i], clusterNodeIds) { + blog.Infof("CheckClusterDeletedNodes[%s] %s in cluster[%v]", taskID, nodeIds[i], clusterNodeIds) + return nil + } + } + + return loop.EndLoop + }, loop.LoopInterval(20*time.Second)) + // other error + if err != nil { + blog.Errorf("CheckClusterDeletedNodes[%s] failed: %v", taskID, err) + return err + } + + blog.Infof("CheckClusterDeletedNodes[%s] deleted nodes success[%v]", taskID, nodeIds) + return nil +} + +// DeleteTkeClusterByClusterId delete cluster by clusterId +func DeleteTkeClusterByClusterId(ctx context.Context, opt *cloudprovider.CommonOption, + clsId string, deleteMode string) error { + taskID := cloudprovider.GetTaskIDFromContext(ctx) + + if len(clsId) == 0 { + blog.Warnf("DeleteTkeClusterByClusterId[%s] clusterID empty", taskID) + return nil + } + + cli, err := api.NewCceClient(opt) + if err != nil { + blog.Errorf("DeleteTkeClusterByClusterId[%s] init tkeClient failed: %v", taskID, err) + return err + } + + err = cli.DeleteCceCluster(clsId) + if err != nil && !strings.Contains(err.Error(), "Resource not found") { + blog.Errorf("DeleteTkeClusterByClusterId[%s] deleteCluster failed: %v", taskID, err) + return err + } + + blog.Infof("DeleteTkeClusterByClusterId[%s] deleteCluster[%s] success", taskID, clsId) + + return nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/cloud.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/cloud.go index e5680f610c..d425f96c51 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/cloud.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/cloud.go @@ -15,6 +15,7 @@ package huawei import ( "fmt" + "math" "strconv" "sync" @@ -147,7 +148,7 @@ func clusterNetworkSettingByCCE(cls *cmproto.Cluster, cluster *model.ShowCluster return err } - cls.NetworkSettings.MaxNodePodNum = uint32(num) + cls.NetworkSettings.MaxNodePodNum = uint32(math.Pow(2, float64(32-num))) } } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/cluster.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/cluster.go index 6273695ddd..8eff56a587 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/cluster.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/cluster.go @@ -38,7 +38,38 @@ type Cluster struct { // CreateCluster create kubenretes cluster according cloudprovider func (c *Cluster) CreateCluster(cls *proto.Cluster, opt *cloudprovider.CreateClusterOption) (*proto.Task, error) { - return nil, cloudprovider.ErrCloudNotImplemented + // call qcloud interface to create cluster + if cls == nil { + return nil, fmt.Errorf("%s CreateCluster cluster is empty", cloudName) + } + + if opt == nil || opt.Cloud == nil { + return nil, fmt.Errorf("%s CreateCluster cluster opt or cloud is empty", cloudName) + } + + if opt.Account == nil || len(opt.Account.SecretID) == 0 || len(opt.Account.SecretKey) == 0 || len(opt.Region) == 0 { + return nil, fmt.Errorf("%s CreateCluster opt lost valid crendential info", cloudName) + } + + // GetTaskManager for nodegroup manager initialization + mgr, err := cloudprovider.GetTaskManager(opt.Cloud.CloudProvider) + if err != nil { + blog.Errorf("get cloud %s TaskManager when CreateCluster %d failed, %s", + opt.Cloud.CloudID, cls.ClusterName, err.Error(), + ) + return nil, err + } + + // build create cluster task + task, err := mgr.BuildCreateClusterTask(cls, opt) + if err != nil { + blog.Errorf("build CreateCluster task for cluster %s with cloudprovider %s failed, %s", + cls.ClusterName, cls.Provider, err.Error(), + ) + return nil, err + } + + return task, nil } // ImportCluster import cluster according cloudprovider @@ -78,7 +109,34 @@ func (c *Cluster) ImportCluster(cls *proto.Cluster, opt *cloudprovider.ImportClu // DeleteCluster delete kubenretes cluster according cloudprovider func (c *Cluster) DeleteCluster(cls *proto.Cluster, opt *cloudprovider.DeleteClusterOption) (*proto.Task, error) { - return nil, cloudprovider.ErrCloudNotImplemented + if cls == nil { + return nil, fmt.Errorf("%s DeleteCluster cluster is empty", cloudName) + } + + if opt.Account == nil || len(opt.Account.SecretID) == 0 || + len(opt.Account.SecretKey) == 0 || len(opt.Region) == 0 { + return nil, fmt.Errorf("%s DeleteCluster opt lost valid crendential info", cloudName) + } + + // GetTaskManager for nodegroup manager initialization + mgr, err := cloudprovider.GetTaskManager(opt.Cloud.CloudProvider) + if err != nil { + blog.Errorf("get cloud %s TaskManager when DeleteCluster %s failed, %s", + opt.Cloud.CloudID, cls.ClusterName, err.Error(), + ) + return nil, err + } + + // build delete cluster task + task, err := mgr.BuildDeleteClusterTask(cls, opt) + if err != nil { + blog.Errorf("build DeleteCluster task for cluster %s with cloudprovider %s failed, %s", + cls.ClusterName, cls.Provider, err.Error(), + ) + return nil, err + } + + return task, nil } // GetCluster get kubenretes cluster detail information according cloudprovider diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/taskmgr.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/taskmgr.go index 2a15119b2a..628f3394ff 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/taskmgr.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/taskmgr.go @@ -23,6 +23,7 @@ import ( "github.com/google/uuid" proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/actions" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/common" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api" @@ -47,6 +48,19 @@ func newtask() *Task { task.works[importClusterNodesStep.StepMethod] = tasks.ImportClusterNodesTask task.works[registerClusterKubeConfigStep.StepMethod] = tasks.RegisterClusterKubeConfigTask + // create cluster task + task.works[createClusterStep.StepMethod] = tasks.CreateCCEClusterTask + task.works[checkClusterStatusStep.StepMethod] = tasks.CheckCCEClusterStatusTask + task.works[createCCENodeGroupStep.StepMethod] = tasks.CreateCCENodeGroupTask + task.works[checkCCENodeGroupsStatusStep.StepMethod] = tasks.CheckCCENodeGroupsStatusTask + task.works[checkCreateClusterNodeStatusStep.StepMethod] = tasks.CheckCCEClusterNodesStatusTask + task.works[registerClusterKubeConfigStep.StepMethod] = tasks.RegisterCCEClusterKubeConfigTask + task.works[updateCreateClusterDBInfoStep.StepMethod] = tasks.UpdateCreateClusterDBInfoTask + + // delete cluster task + task.works[deleteClusterStep.StepMethod] = tasks.DeleteClusterTask + task.works[cleanClusterDBInfoStep.StepMethod] = tasks.CleanClusterDBInfoTask + // create nodeGroup task task.works[createCloudNodeGroupStep.StepMethod] = tasks.CreateCloudNodeGroupTask task.works[checkCloudNodeGroupStatusStep.StepMethod] = tasks.CheckCloudNodeGroupStatusTask @@ -81,9 +95,137 @@ func (t *Task) GetAllTask() map[string]interface{} { } // BuildCreateClusterTask build create cluster task -func (t *Task) BuildCreateClusterTask(cls *proto.Cluster, opt *cloudprovider.CreateClusterOption) ( +func (t *Task) BuildCreateClusterTask(cls *proto.Cluster, opt *cloudprovider.CreateClusterOption) ( // nolint *proto.Task, error) { - return nil, cloudprovider.ErrCloudNotImplemented + if cls == nil { + return nil, fmt.Errorf("BuildCreateClusterTask cluster info empty") + } + if opt == nil || opt.Cloud == nil { + return nil, fmt.Errorf("BuildCreateClusterTask TaskOptions is lost") + } + + nowStr := time.Now().Format(time.RFC3339) + task := &proto.Task{ + TaskID: uuid.New().String(), + TaskType: cloudprovider.GetTaskType(cloudName, cloudprovider.CreateCluster), + TaskName: cloudprovider.CreateClusterTask.String(), + Status: cloudprovider.TaskStatusInit, + Message: "task initializing", + Start: nowStr, + Steps: make(map[string]*proto.Step), + StepSequence: make([]string, 0), + ClusterID: cls.ClusterID, + ProjectID: cls.ProjectID, + Creator: opt.Operator, + Updater: opt.Operator, + LastUpdate: nowStr, + CommonParams: make(map[string]string), + ForceTerminate: false, + } + // generate taskName + taskName := fmt.Sprintf(createClusterTaskTemplate, cls.ClusterID) + task.CommonParams[cloudprovider.TaskNameKey.String()] = taskName + + // setting all steps details + createClusterTask := &CreateClusterTaskOption{Cluster: cls} + + // step1: createTKECluster and return clusterID inject common paras + createClusterTask.BuildCreateClusterStep(task) + // step2: check cluster status by clusterID + createClusterTask.BuildCheckClusterStatusStep(task) + + // 获取节点池 + for _, ngID := range opt.NodeGroupIDs { + nodeGroup, err := actions.GetNodeGroupByGroupID(cloudprovider.GetStorageModel(), ngID) + if err != nil { + return nil, fmt.Errorf("get nodegroup[%s] information failed, %s", ngID, err) + } + + createClusterTask.NodeGroupID = ngID + + // step3: create bcs nodegroup for cluster + createClusterTask.BuildCreateCCENodeGroupStep(task) + // step4: check cluster nodegroups status + createClusterTask.BuildCheckNodeGroupsStatusStep(task) + + if nodeGroup.AutoScaling.DesiredSize > 0 { + // step5: check cluster nodes status + createClusterTask.BuildCheckClusterNodesStatusStep(task) + // step9: 若需要则设置节点注解 + createClusterTask.BuildNodeAnnotationsTaskStep(task, cls.ClusterID, nil, cloudprovider.GetAnnotationsByNg(nodeGroup)) + // step10: install gse agent + passwd := nodeGroup.LaunchTemplate.InitLoginPassword + task.CommonParams[cloudprovider.PasswordKey.String()] = passwd + createClusterTask.BuildInstallGseAgentTaskStep(task, &common.GseInstallInfo{ + ClusterId: cls.ClusterID, + BusinessId: cls.BusinessID, + CloudArea: nodeGroup.GetArea(), + User: nodeGroup.GetLaunchTemplate().GetInitLoginUsername(), + Passwd: passwd, + KeyInfo: nodeGroup.GetLaunchTemplate().GetKeyPair(), + Port: "", + }) + + // step11: transfer host module + if cls.GetBusinessID() != "" && cls.GetClusterBasicSettings().GetModule().GetWorkerModuleID() != "" { + createClusterTask.BuildTransferHostModuleStep(task, cls.GetBusinessID(), + cls.GetClusterBasicSettings().GetModule().GetWorkerModuleID(), "") + } + + // step4. business define sops task 支持脚本和标准运维流程 + if nodeGroup.NodeTemplate != nil && len(nodeGroup.NodeTemplate.UserScript) > 0 { + createClusterTask.BuildJobExecuteScriptStep(task, common.JobExecParas{ + ClusterID: nodeGroup.ClusterID, + Content: nodeGroup.NodeTemplate.UserScript, + NodeIps: "", + Operator: opt.Operator, + StepName: common.PostInitStepJob, + AllowSkipJobTask: nodeGroup.NodeTemplate.GetAllowSkipScaleOutWhenFailed(), + }) + } + + if nodeGroup.NodeTemplate != nil && nodeGroup.NodeTemplate.ScaleOutExtraAddons != nil { + err := template.BuildSopsFactory{ + StepName: template.UserAfterInit, + Cluster: cls, + Extra: template.ExtraInfo{ + InstancePasswd: passwd, + NodeIPList: "", + NodeOperator: opt.Operator, + ShowSopsUrl: true, + ExternalNodeScript: "", + NodeGroupID: nodeGroup.NodeGroupID, + TranslateMethod: template.UserPostInit, + }}.BuildSopsStep(task, nodeGroup.NodeTemplate.ScaleOutExtraAddons, false) + if err != nil { + return nil, fmt.Errorf("BuildScalingNodesTask business BuildBkSopsStepAction failed: %v", err) + } + } + } + } + // step6: register cluster kubeConfig + createClusterTask.BuildRegisterClsKubeConfigStep(task) + // step7: update DB info by cluster data + createClusterTask.BuildUpdateTaskStatusStep(task) + // step8: install cluster watch component + common.BuildWatchComponentTaskStep(task, cls, "") + + // set current step + if len(task.StepSequence) == 0 { + return nil, fmt.Errorf("BuildCreateClusterTask task StepSequence empty") + } + task.CurrentStep = task.StepSequence[0] + task.CommonParams[cloudprovider.OperatorKey.String()] = opt.Operator + task.CommonParams[cloudprovider.JobTypeKey.String()] = cloudprovider.CreateClusterJob.String() + + if len(opt.WorkerNodes) > 0 { + task.CommonParams[cloudprovider.WorkerNodeIPsKey.String()] = strings.Join(opt.WorkerNodes, ",") + } + if len(opt.MasterNodes) > 0 { + task.CommonParams[cloudprovider.MasterNodeIPsKey.String()] = strings.Join(opt.MasterNodes, ",") + } + + return task, nil } // BuildImportClusterTask build import cluster task @@ -234,7 +376,57 @@ func (t *Task) BuildDeleteVirtualClusterTask(cls *proto.Cluster, // NOCC:CCN_threshold(工具误报:),golint/fnsize(设计如此:) func (t *Task) BuildDeleteClusterTask(cls *proto.Cluster, opt *cloudprovider.DeleteClusterOption) ( *proto.Task, error) { - return nil, cloudprovider.ErrCloudNotImplemented + // validate request params + if cls == nil { + return nil, fmt.Errorf("BuildDeleteClusterTask cluster info empty") + } + if opt == nil || opt.Operator == "" || opt.Cloud == nil || opt.Cluster == nil { + return nil, fmt.Errorf("BuildDeleteClusterTask TaskOptions is lost") + } + + // init task information + nowStr := time.Now().Format(time.RFC3339) + task := &proto.Task{ + TaskID: uuid.New().String(), + TaskType: cloudprovider.GetTaskType(cloudName, cloudprovider.DeleteCluster), + TaskName: cloudprovider.DeleteClusterTask.String(), + Status: cloudprovider.TaskStatusInit, + Message: "task initializing", + Start: nowStr, + Steps: make(map[string]*proto.Step), + StepSequence: make([]string, 0), + ClusterID: cls.ClusterID, + ProjectID: cls.ProjectID, + Creator: opt.Operator, + Updater: opt.Operator, + LastUpdate: nowStr, + CommonParams: make(map[string]string), + ForceTerminate: false, + } + taskName := fmt.Sprintf(deleteClusterTaskTemplate, cls.ClusterID) + task.CommonParams[cloudprovider.TaskNameKey.String()] = taskName + task.CommonParams[cloudprovider.UserKey.String()] = opt.Operator + + // setting all steps details + deleteClusterTask := &DeleteClusterTaskOption{ + Cluster: cls, + DeleteMode: opt.DeleteMode.String(), + LastClusterStatus: opt.LatsClusterStatus, + } + // step1: DeleteTKECluster delete tke cluster + deleteClusterTask.BuildDeleteClusterStep(task) + // step2: update cluster DB info and associated data + deleteClusterTask.BuildCleanClusterDBInfoStep(task) + + // set current step + if len(task.StepSequence) == 0 { + return nil, fmt.Errorf("BuildDeleteClusterTask task StepSequence empty") + } + task.CurrentStep = task.StepSequence[0] + task.CommonParams[cloudprovider.JobTypeKey.String()] = cloudprovider.DeleteClusterJob.String() + task.CommonParams[cloudprovider.OperatorKey.String()] = opt.Operator + + return task, nil } // BuildAddNodesToClusterTask build addNodes task diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/createClusterTask.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/createClusterTask.go new file mode 100644 index 0000000000..aed510c0ef --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/createClusterTask.go @@ -0,0 +1,856 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package tasks + +import ( + "context" + "fmt" + "strconv" + "strings" + "time" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + + proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/actions" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/business" + providerutils "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/utils" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/common" + icommon "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/common" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/remote/loop" +) + +// CreateCCEClusterTask call huawei interface to create cluster +func CreateCCEClusterTask(taskID string, stepName string) error { + start := time.Now() + // get task and task current step + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + // previous step successful when retry task + if step == nil { + blog.Infof("CreateClusterTask[%s]: current step[%s] successful and skip", taskID, stepName) + return nil + } + blog.Infof("CreateClusterTask[%s]: task %s run step %s, system: %s, old state: %s, params %v", + taskID, taskID, stepName, step.System, step.Status, step.Params) + + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + + nodeTemplateID := step.Params[cloudprovider.NodeTemplateIDKey.String()] + operator := state.Task.CommonParams[cloudprovider.OperatorKey.String()] + + // get dependent basic info + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + NodeTemplateID: nodeTemplateID, + }) + if err != nil { + blog.Errorf("CreateClusterTask[%s]: GetClusterDependBasicInfo for cluster %s in task %s "+ + "step %s failed, %s", taskID, clusterID, taskID, stepName, err) // nolint + retErr := fmt.Errorf("get cloud/project information failed, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // inject taskID + ctx := cloudprovider.WithTaskIDForContext(context.Background(), taskID) + + req, err := api.GenerateCreateClusterRequest(ctx, dependInfo.Cluster, operator) + if err != nil { + blog.Errorf("createCluster[%s] generateCreateClusterRequest failed: %v", taskID, err) + retErr := fmt.Errorf("generate create cluster request failed, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return err + } + + // create cluster task + clsId, jobId, err := createCluster(ctx, dependInfo, req, dependInfo.Cluster.SystemID) + if err != nil { + blog.Errorf("CreateClusterTask[%s] createCluster for cluster[%s] failed, %s", + taskID, clusterID, err) + retErr := fmt.Errorf("createCluster err, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + + _ = cloudprovider.UpdateClusterErrMessage(clusterID, fmt.Sprintf("submit createCluster[%s] failed: %v", + dependInfo.Cluster.GetClusterID(), err)) + return retErr + } + + // update response information to task common params + if state.Task.CommonParams == nil { + state.Task.CommonParams = make(map[string]string) + } + state.Task.CommonParams[cloudprovider.CloudSystemID.String()] = clsId + state.Task.CommonParams[cloudprovider.CloudJobID.String()] = jobId + + // update step + if err = state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("CreateClusterTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + return nil +} + +func createCluster(ctx context.Context, info *cloudprovider.CloudDependBasicInfo, + request *api.CreateClusterRequest, clsId string) (string, string, error) { + taskID := cloudprovider.GetTaskIDFromContext(ctx) + + client, err := api.NewCceClient(info.CmOption) + if err != nil { + return "", "", err + } + + jobId := "" + if clsId != "" { + cluster, errGet := client.GetCceCluster(clsId) + if errGet != nil { + blog.Errorf("createCluster[%s] GetCluster[%s] failed, %s", + taskID, info.Cluster.ClusterID, errGet) + retErr := fmt.Errorf("call GetCluster[%s] api err, %s", info.Cluster.ClusterID, errGet) + return "", "", retErr + } + // update cluster systemID + info.Cluster.SystemID = *cluster.Metadata.Uid + } else { + rsp, err := client.CreateCluster(request) + if err != nil { + return "", "", err + } + + if rsp.Metadata.Uid != nil { + info.Cluster.SystemID = *rsp.Metadata.Uid + + err = cloudprovider.GetStorageModel().UpdateCluster(ctx, info.Cluster) + if err != nil { + blog.Errorf("createCluster[%s] updateClusterSystemID[%s] failed %s", + taskID, info.Cluster.ClusterID, err) + retErr := fmt.Errorf("call CreateCluster updateClusterSystemID[%s] api err: %s", + info.Cluster.ClusterID, err) + return "", "", retErr + } + + blog.Infof("createCluster[%s] call CreateCluster updateClusterSystemID successful", taskID) + } else if request.Spec.Charge.ChargeType == icommon.PREPAID && rsp.Status != nil && rsp.Status.JobID != nil { + jobId = *rsp.Status.JobID + } + } + + return info.Cluster.SystemID, jobId, nil +} + +// CheckCCEClusterStatusTask check cluster status +func CheckCCEClusterStatusTask(taskID string, stepName string) error { + start := time.Now() + // get task and task current step + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + // previous step successful when retry task + if step == nil { + blog.Infof("CheckClusterStatusTask[%s]: current step[%s] successful and skip", taskID, stepName) + return nil + } + blog.Infof("CheckClusterStatusTask[%s]: task %s run step %s, system: %s, old state: %s, params %v", + taskID, taskID, stepName, step.System, step.Status, step.Params) + + // step login started here + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + systemID := state.Task.CommonParams[cloudprovider.CloudSystemID.String()] + jobID := state.Task.CommonParams[cloudprovider.CloudJobID.String()] + + if systemID == "" && jobID == "" { + blog.Errorf("CheckClusterStatusTask[%s]: cloud clusterID and cloud jobID is empty for cluster %s in task %s "+ + "step %s failed", taskID, clusterID, taskID, stepName) + retErr := fmt.Errorf("cloud clusterID and cloud jobID is empty") + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + }) + if err != nil { + blog.Errorf("CheckClusterStatusTask[%s]: GetClusterDependBasicInfo for cluster %s in task %s "+ + "step %s failed, %s", taskID, clusterID, taskID, stepName, err) + retErr := fmt.Errorf("get cloud/project information failed, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // check cluster status + ctx := cloudprovider.WithTaskIDForContext(context.Background(), taskID) + err = checkClusterStatus(ctx, dependInfo, systemID, jobID) + if err != nil { + blog.Errorf("CheckClusterStatusTask[%s] checkClusterStatus[%s] failed: %v", + taskID, clusterID, err) + retErr := fmt.Errorf("checkClusterStatus[%s] timeout|abnormal", clusterID) + _ = state.UpdateStepFailure(start, stepName, retErr) + + _ = cloudprovider.UpdateClusterErrMessage(clusterID, fmt.Sprintf("check cluster[%s] status failed: %v", + dependInfo.Cluster.GetClusterID(), err)) + + return retErr + } + + // update step + if err = state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("CheckClusterStatusTask[%s] task %s %s update to storage fatal", + taskID, taskID, stepName) + return err + } + + return nil +} + +func checkClusterStatus(ctx context.Context, info *cloudprovider.CloudDependBasicInfo, systemID, jobID string) error { + taskID := cloudprovider.GetTaskIDFromContext(ctx) + + // get cce client + cli, err := api.NewCceClient(info.CmOption) + if err != nil { + blog.Errorf("checkClusterStatus[%s] get client failed: %s", taskID, err) + retErr := fmt.Errorf("get cloud client err, %s", err) + return retErr + } + + ctx, cancel := context.WithTimeout(ctx, 30*time.Minute) + defer cancel() + + // loop cluster status + err = loop.LoopDoFunc(ctx, func() error { + if systemID == "" && jobID != "" { + rsp, errShow := cli.ShowJob(jobID) + if errShow != nil { + blog.Errorf("checkClusterStatus[%s] show job failed: %v", taskID, errShow) + return nil + } + + if rsp.Spec.ClusterUID == nil { + blog.Errorf("checkClusterStatus[%s] show job clusterID is nil", taskID) + return nil + } + + systemID = *rsp.Spec.ClusterUID + info.Cluster.SystemID = *rsp.Spec.ClusterUID + + err = cloudprovider.GetStorageModel().UpdateCluster(ctx, info.Cluster) + if err != nil { + blog.Errorf("checkClusterStatus[%s] updateClusterSystemID[%s] failed %s", + taskID, info.Cluster.ClusterID, err) + retErr := fmt.Errorf("call CreateCluster updateClusterSystemID[%s] api err: %s", + info.Cluster.ClusterID, err) + return retErr + } + + blog.Infof("checkClusterStatus[%s] call CreateCluster updateClusterSystemID successful", taskID) + } + + cluster, errGet := cli.GetCceCluster(systemID) + if errGet != nil { + blog.Errorf("checkClusterStatus[%s] GetCluster failed: %v", taskID, errGet) + return nil + } + + blog.Infof("checkClusterStatus[%s] cluster[%s] current status[%s]", taskID, + info.Cluster.ClusterID, *cluster.Status.Phase) + + switch *cluster.Status.Phase { + case api.Creating: + blog.Infof("checkClusterStatus[%s] cluster[%s] creating", taskID, info.Cluster.ClusterID) + case api.Available: + return loop.EndLoop + case api.Error: + blog.Errorf("checkClusterStatus[%s] cluster[%s] error: %s", taskID, info.Cluster.ClusterID) + return fmt.Errorf("checkClusterStatus[%s] status error, reason: %s", + info.Cluster.ClusterID, *cluster.Status.Reason) + } + + return nil + }, loop.LoopInterval(10*time.Second)) + if err != nil { + blog.Errorf("checkClusterStatus[%s] cluster[%s] failed: %v", taskID, info.Cluster.ClusterID, err) + return err + } + + blog.Infof("checkClusterStatus[%s] cluster[%s] status ok", taskID, info.Cluster.ClusterID) + + return nil +} + +// CreateCCENodeGroupTask create cce node group +func CreateCCENodeGroupTask(taskID string, stepName string) error { // nolint + start := time.Now() + + // get task and task current step + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + // previous step successful when retry task + if step == nil { + blog.Infof("CreateCCENodeGroupTask[%s]: current step[%s] successful and skip", taskID, stepName) + return nil + } + blog.Infof("CreateCCENodeGroupTask[%s]: task %s run step %s, system: %s, old state: %s, params %v", + taskID, taskID, stepName, step.System, step.Status, step.Params) + + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + nodeGroupID := step.Params[cloudprovider.NodeGroupIDKey.String()] + + // get dependent basic info + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + }) + if err != nil { + blog.Errorf("CreateCCENodeGroupTask[%s]: GetClusterDependBasicInfo for cluster %s in task %s "+ + "step %s failed, %s", taskID, clusterID, taskID, stepName, err) // nolint + retErr := fmt.Errorf("get cloud/project information failed, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + cceCli, err := api.NewCceClient(dependInfo.CmOption) + if err != nil { + blog.Errorf("CreateCCENodeGroupTask[%s]: get cce client in task %s step %s failed, %s", + taskID, taskID, stepName, err) + retErr := fmt.Errorf("get cloud cce client err, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return err + } + + ngs, err := cceCli.ListClusterNodeGroups(dependInfo.Cluster.SystemID) + if err != nil { + blog.Errorf("CreateCCENodeGroupTask[%s]: get cce all nodegroup in task %s step %s failed, %s", + taskID, taskID, stepName, err) + retErr := fmt.Errorf("get cce all nodegroup err, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return err + } + + nodeGroup, errGet := actions.GetNodeGroupByGroupID(cloudprovider.GetStorageModel(), nodeGroupID) + if errGet != nil { + blog.Errorf("CreateCCENodeGroupTask[%s]: GetNodeGroupByGroupID for cluster %s in task %s "+ + "step %s failed, %s", taskID, clusterID, taskID, stepName, errGet) + retErr := fmt.Errorf("get nodegroup information failed, %s", errGet) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // 查找云是否已经存在该节点池 + nodeGroupName := strings.ToLower(nodeGroup.NodeGroupID) + found := false + cloudNodeGroupID := "" + for _, ng := range ngs { + if ng.Metadata.Name == nodeGroupName { + cloudNodeGroupID = *ng.Metadata.Uid + found = true + } + } + + if found { + nodeGroup.CloudNodeGroupID = cloudNodeGroupID + err = updateNodeGroupCloudNodeGroupID(nodeGroup.NodeGroupID, nodeGroup) + if err != nil { + blog.Errorf("CreateCCENodeGroupTask[%s]: updateNodeGroupCloudNodeGroupID[%s] in task %s step %s failed, %s", + taskID, nodeGroup.NodeGroupID, taskID, stepName, err) + retErr := fmt.Errorf("call CreateCCENodeGroupTask updateNodeGroupCloudNodeGroupID[%s] api err, %s", + nodeGroup.NodeGroupID, err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + if err = state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("CheckCCENodeGroupStatusTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + + return nil + } + + // cce nodePool名称以小写字母开头,由小写字母、数字、中划线(-)组成,长度范围1-50位,且不能以中划线(-)结尾 + nodeGroup.NodeGroupID = nodeGroupName + req, err := api.GenerateCreateNodePoolRequest(nodeGroup, dependInfo.Cluster) + if err != nil { + blog.Errorf("CreateCCENodeGroupTask[%s]: generate create nodepool request[%s] in task %s step %s failed, %s", + taskID, nodeGroup.NodeGroupID, taskID, stepName, err) + retErr := fmt.Errorf("generate create nodepool request err, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + rsp, err := cceCli.CreateClusterNodePool(req) + if err != nil { + blog.Errorf("CreateCCENodeGroupTask[%s]: call CreateClusterNodePool[%s] api in task %s "+ + "step %s failed, %s, rsp: %+v", taskID, nodeGroup.NodeGroupID, taskID, stepName, err, rsp) + retErr := fmt.Errorf("call CreateClusterNodePool[%s] api err, %s", nodeGroup.NodeGroupID, err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + blog.Infof("CreateCCENodeGroupTask[%s]: call CreateClusterNodePool successful", taskID) + + // 保存cce节点池id + nodeGroup.CloudNodeGroupID = *rsp.Metadata.Uid + // update nodegorup cloudNodeGroupID + err = updateNodeGroupCloudNodeGroupID(nodeGroupID, nodeGroup) + if err != nil { + blog.Errorf("CreateCCENodeGroupTask[%s]: updateNodeGroupCloudNodeGroupID[%s] in task %s step %s failed, %s", + taskID, nodeGroup.NodeGroupID, taskID, stepName, err) + retErr := fmt.Errorf("call CreateCCENodeGroupTask updateNodeGroupCloudNodeGroupID[%s] api err, %s", + nodeGroup.NodeGroupID, err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + blog.Infof("CreateCCENodeGroupTask[%s]: call CreateClusterNodePool updateNodeGroupCloudNodeGroupID successful", + taskID) + + if err = state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("CheckCCENodeGroupStatusTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + + return nil +} + +// CheckCCENodeGroupsStatusTask check cce nodegroups status +func CheckCCENodeGroupsStatusTask(taskID string, stepName string) error { // nolint + start := time.Now() + // get task and task current step + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + // previous step successful when retry task + if step == nil { + blog.Infof("CheckCCENodeGroupStatusTask[%s]: current step[%s] successful and skip", taskID, stepName) + return nil + } + blog.Infof("CheckCCENodeGroupStatusTask[%s]: task %s run step %s, system: %s, old state: %s, params %v", + taskID, taskID, stepName, step.System, step.Status, step.Params) + + // step login started here + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + nodeGroupID := step.Params[cloudprovider.NodeGroupIDKey.String()] + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + }) + if err != nil { + blog.Errorf("CheckCCENodeGroupsStatusTask[%s]: GetClusterDependBasicInfo for cluster %s in task %s "+ + "step %s failed, %s", taskID, clusterID, taskID, stepName, err) // nolint + retErr := fmt.Errorf("get cloud/project information failed, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + cceCli, err := api.NewCceClient(dependInfo.CmOption) + if err != nil { + blog.Errorf("CheckCCENodeGroupStatusTask[%s]: get cce client in task %s step %s failed, %s", + taskID, taskID, stepName, err) + retErr := fmt.Errorf("get cloud cce client err, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return err + } + + nodeGroup, errGet := actions.GetNodeGroupByGroupID(cloudprovider.GetStorageModel(), nodeGroupID) + if errGet != nil { + blog.Errorf("CheckCCENodeGroupStatusTask[%s]: GetNodeGroupByGroupID for cluster %s in task %s "+ + "step %s failed, %s", taskID, clusterID, taskID, stepName, errGet) + retErr := fmt.Errorf("get nodegroup information failed, %s", errGet) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + ctx := cloudprovider.WithTaskIDForContext(context.Background(), taskID) + + ctx, cancel := context.WithTimeout(ctx, 10*time.Minute) + defer cancel() + + // loop nodegroups status + err = loop.LoopDoFunc(ctx, func() error { + nodePool, errLocal := cceCli.GetClusterNodePool(dependInfo.Cluster.SystemID, nodeGroup.CloudNodeGroupID) + if errLocal != nil { + blog.Errorf("taskID[%s] GetClusterNodePool[%s/%s] failed: %v", taskID, dependInfo.Cluster.SystemID, + nodeGroup.CloudNodeGroupID, errLocal) + return nil + } + + switch { + case nodePool.Status.Phase.Value() == api.NodePoolError: + return fmt.Errorf("create nodegroup failed") + case nodePool.Status.Phase.Value() == "": + return loop.EndLoop + default: + blog.Infof("taskID[%s] GetClusterNodePool[%s] still creating, status[%s]", + taskID, nodeGroup.CloudNodeGroupID, nodePool.Status.Phase.Value()) + } + + return nil + }, loop.LoopInterval(10*time.Second)) + if err != nil { + blog.Errorf("CheckCCENodeGroupStatusTask[%s]: GetClusterNodePool failed: %v", taskID, err) + retErr := fmt.Errorf("GetClusterNodePool failed, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + if nodeGroup.AutoScaling.DesiredSize > 0 { + _, err = cceCli.UpdateNodePoolDesiredNodes(dependInfo.Cluster.SystemID, nodeGroup.CloudNodeGroupID, + int32(nodeGroup.AutoScaling.DesiredSize), false) + if err != nil { + blog.Errorf("updateNodeGroups[%s] desired nodes failed: %s", taskID, err) + retErr := fmt.Errorf("desired nodes err, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + } + + nodeGroup.Status = common.StatusRunning + err = cloudprovider.GetStorageModel().UpdateNodeGroup(context.Background(), nodeGroup) + if err != nil { + blog.Errorf("updateNodeGroups[%s] update nodegroup failed: %s", taskID, err) + retErr := fmt.Errorf("update nodegroup failed err, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // update step + if err = state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("CheckCCENodeGroupStatusTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + + return nil +} + +// CheckCCEClusterNodesStatusTask check cluster nodes status +func CheckCCEClusterNodesStatusTask(taskID string, stepName string) error { + start := time.Now() + // get task and task current step + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + // previous step successful when retry task + if step == nil { + blog.Infof("CheckCCEClusterNodesStatusTask[%s]: current step[%s] successful and skip", taskID, stepName) + return nil + } + blog.Infof("CheckCCEClusterNodesStatusTask[%s]: task %s run step %s, system: %s, old state: %s, params %v", + taskID, taskID, stepName, step.System, step.Status, step.Params) + + // step login started here + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + nodeGroupID := step.Params[cloudprovider.NodeGroupIDKey.String()] + + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + }) + if err != nil { + blog.Errorf("CheckCCEClusterNodesStatusTask[%s]: GetClusterDependBasicInfo for cluster %s in task %s "+ + "step %s failed, %s", taskID, clusterID, taskID, stepName, err) + retErr := fmt.Errorf("get cloud/project information failed, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // check cluster status + ctx := cloudprovider.WithTaskIDForContext(context.Background(), taskID) + err = checkClusterNodesStatus(ctx, dependInfo, nodeGroupID) + if err != nil { + blog.Errorf("CheckCCEClusterNodesStatusTask[%s] checkClusterStatus[%s] failed: %v", + taskID, clusterID, err) + retErr := fmt.Errorf("CheckCCEClusterNodesStatusTask[%s] timeout|abnormal", clusterID) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + nodeIPs, err := updateNodeToDB(ctx, dependInfo, nodeGroupID) + if err != nil { + blog.Errorf("UpdateNodesToDBTask[%s] checkNodesGroupStatus[%s] failed: %v", + taskID, clusterID, err) + retErr := fmt.Errorf("UpdateNodesToDBTask[%s] timeout|abnormal", clusterID) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + state.Task.CommonParams[cloudprovider.DynamicNodeIPListKey.String()] = strings.Join(nodeIPs, ",") + state.Task.CommonParams[cloudprovider.NodeIPsKey.String()] = strings.Join(nodeIPs, ",") + state.Task.CommonParams[cloudprovider.NodeNamesKey.String()] = strings.Join(nodeIPs, ",") + state.Task.NodeIPList = nodeIPs + + // update step + if err = state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("CheckCCEClusterNodesStatusTask[%s] task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + + return nil +} + +func checkClusterNodesStatus(ctx context.Context, info *cloudprovider.CloudDependBasicInfo, // nolint + nodeGroupID string) error { + taskID := cloudprovider.GetTaskIDFromContext(ctx) + + nodeGroup, err := actions.GetNodeGroupByGroupID(cloudprovider.GetStorageModel(), nodeGroupID) + if err != nil { + return fmt.Errorf("get nodegroup information failed, %s", err) + } + + cceCli, err := api.NewCceClient(info.CmOption) + if err != nil { + blog.Errorf("checkClusterNodesStatus[%s] get cce client failed: %s", taskID, err) + return fmt.Errorf("get cloud cce client err, %s", err) + } + + ctx, cancel := context.WithTimeout(ctx, 10*time.Minute) + defer cancel() + + cloudNodeGroupID := nodeGroup.CloudNodeGroupID + err = loop.LoopDoFunc(ctx, func() error { + nodePool, errLocal := cceCli.GetClusterNodePool(info.Cluster.SystemID, cloudNodeGroupID) + if errLocal != nil { + blog.Errorf("taskID[%s] checkClusterNodesStatus[%s/%s] failed: %v", taskID, info.Cluster.SystemID, + cloudNodeGroupID, errLocal) + return nil + } + + switch { + case nodePool.Status.Phase.Value() == api.NodePoolError: + return fmt.Errorf("node expansion failed") + case nodePool.Status.Phase.Value() != "": + blog.Infof("taskID[%s] checkClusterNodesStatus[%s] still creating, status[%s]", + taskID, nodeGroupID, nodePool.Status.Phase.Value()) + case nodePool.Status.Phase.Value() == "": + return loop.EndLoop + default: + return nil + } + + return nil + }, loop.LoopInterval(10*time.Second)) + if err != nil { + blog.Errorf("checkClusterNodesStatus[%s] cluster[%s] failed: %v", taskID, info.Cluster.ClusterID, err) + return err + } + + return nil +} + +func updateNodeToDB(ctx context.Context, info *cloudprovider.CloudDependBasicInfo, + nodeGroupID string) ([]string, error) { + taskID := cloudprovider.GetTaskIDFromContext(ctx) + cceCli, err := api.NewCceClient(info.CmOption) + if err != nil { + blog.Errorf("updateNodeToDB[%s] get cce client failed: %s", taskID, err) + return nil, fmt.Errorf("get cloud cce client err, %s", err) + } + + nodeIPs := make([]string, 0) + nodeGroup, err := actions.GetNodeGroupByGroupID(cloudprovider.GetStorageModel(), nodeGroupID) + if err != nil { + return nil, fmt.Errorf("updateNodeToDB GetNodeGroupByGroupID information failed, %s", err) + } + + nodes, err := cceCli.ListClusterNodePoolNodes(info.Cluster.SystemID, nodeGroup.CloudNodeGroupID) + if err != nil { + blog.Errorf("checkClusterNodesStatus[%s] list nodes failed: %s", taskID, err) + return nil, fmt.Errorf("list nodes err, %s", err) + } + + for _, n := range nodes { + node := &proto.Node{ + NodeID: *n.Metadata.Uid, + NodeName: *n.Metadata.Name, + NodeGroupID: nodeGroup.NodeGroupID, + InstanceType: n.Spec.Flavor, + ClusterID: info.Cluster.ClusterID, + InnerIP: *n.Status.PrivateIP, + ZoneID: n.Spec.Az, + } + + if n.Status.Phase.Value() == api.NodeActive { + node.Status = common.StatusRunning + } else { + node.Status = common.StatusAddNodesFailed + } + + if n.Status.PrivateIPv6IP != nil { + node.InnerIPv6 = *n.Status.PrivateIPv6IP + } + + node.ZoneName = fmt.Sprintf("可用区%d", business.GetZoneNameByZoneId(info.Cluster.Region, n.Spec.Az)) + + err = cloudprovider.GetStorageModel().CreateNode(context.Background(), node) + if err != nil { + return nil, fmt.Errorf("updateNodeToDB CreateNode[%s] failed, %v", node.NodeName, err) + } + + nodeIPs = append(nodeIPs, node.InnerIP) + } + + return nodeIPs, nil +} + +// RegisterCCEClusterKubeConfigTask register cluster kubeconfig +func RegisterCCEClusterKubeConfigTask(taskID string, stepName string) error { + start := time.Now() + + // get task and task current step + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + // previous step successful when retry task + if step == nil { + blog.Infof("RegisterCceClusterKubeConfigTask[%s]: current step[%s] successful and skip", taskID, stepName) + return nil + } + blog.Infof("RegisterCceClusterKubeConfigTask[%s] task %s run current step %s, system: %s, old state: %s, params %v", + taskID, taskID, stepName, step.System, step.Status, step.Params) + + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + }) + if err != nil { + blog.Errorf("RegisterCceClusterKubeConfigTask[%s] GetClusterDependBasicInfo in task %s step %s failed, %s", + taskID, taskID, stepName, err) + retErr := fmt.Errorf("get cloud/project information failed, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // import cluster credential + err = importClusterCredential(dependInfo) + if err != nil { + blog.Errorf("RegisterCceClusterKubeConfigTask[%s] importClusterCredential failed: %s", taskID, err) + retErr := fmt.Errorf("importClusterCredential failed %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + blog.Infof("RegisterCceClusterKubeConfigTask[%s] importClusterCredential success", taskID) + + // dynamic inject paras + if state.Task.CommonParams == nil { + state.Task.CommonParams = make(map[string]string) + } + + // update step + if err = state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("RegisterCceClusterKubeConfigTask[%s:%s] update to storage fatal", taskID, stepName) + return err + } + + return nil +} + +// UpdateCreateClusterDBInfoTask update cluster DB info +func UpdateCreateClusterDBInfoTask(taskID string, stepName string) error { + start := time.Now() + // get task and task current step + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + // previous step successful when retry task + if step == nil { + blog.Infof("UpdateCreateClusterDBInfoTask[%s]: current step[%s] successful and skip", taskID, stepName) + return nil + } + blog.Infof("UpdateCreateClusterDBInfoTask[%s]: task %s run step %s, system: %s, old state: %s, params %v", + taskID, taskID, stepName, step.System, step.Status, step.Params) + + // step login started here + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + + ctx := cloudprovider.WithTaskIDForContext(context.Background(), taskID) + + // handler logic + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + }) + if err != nil { + blog.Errorf("UpdateCreateClusterDBInfoTask[%s] GetClusterDependBasicInfo in task %s step %s failed, %s", + taskID, taskID, stepName, err) + retErr := fmt.Errorf("get cloud/project information failed, %s", err) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // update module name + bkBizID, _ := strconv.Atoi(dependInfo.Cluster.GetBusinessID()) + if dependInfo.Cluster.GetClusterBasicSettings().GetModule().GetMasterModuleID() != "" { + bkModuleID, _ := strconv.Atoi(dependInfo.Cluster.GetClusterBasicSettings().GetModule().GetMasterModuleID()) + dependInfo.Cluster. + GetClusterBasicSettings(). + GetModule().MasterModuleName = cloudprovider.GetModuleName(bkBizID, bkModuleID) + } + if dependInfo.Cluster.GetClusterBasicSettings().GetModule().GetWorkerModuleID() != "" { + bkModuleID, _ := strconv.Atoi(dependInfo.Cluster.GetClusterBasicSettings().GetModule().GetWorkerModuleID()) + dependInfo.Cluster. + GetClusterBasicSettings(). + GetModule().WorkerModuleName = cloudprovider.GetModuleName(bkBizID, bkModuleID) + } + + // delete passwd + if dependInfo.Cluster.GetNodeSettings().GetMasterLogin() != nil { + dependInfo.Cluster.GetNodeSettings().GetMasterLogin().InitLoginPassword = "" + if dependInfo.Cluster.GetNodeSettings().GetMasterLogin().GetKeyPair() != nil { + dependInfo.Cluster.GetNodeSettings().GetMasterLogin().GetKeyPair().KeySecret = "" + } + } + if dependInfo.Cluster.GetNodeSettings().GetWorkerLogin() != nil { + dependInfo.Cluster.GetNodeSettings().GetWorkerLogin().InitLoginPassword = "" + if dependInfo.Cluster.GetNodeSettings().GetWorkerLogin().GetKeyPair() != nil { + dependInfo.Cluster.GetNodeSettings().GetWorkerLogin().GetKeyPair().KeySecret = "" + } + } + + _ = cloudprovider.UpdateCluster(dependInfo.Cluster) + + // sync clusterData to pass-cc + providerutils.SyncClusterInfoToPassCC(taskID, dependInfo.Cluster) + + // sync cluster perms + providerutils.AuthClusterResourceCreatorPerm(ctx, dependInfo.Cluster.ClusterID, + dependInfo.Cluster.ClusterName, dependInfo.Cluster.Creator) + + // update step + if err = state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("UpdateCreateClusterDBInfoTask[%s] task %s %s update to storage fatal", + taskID, taskID, stepName) + return err + } + + return nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/deleteClusterTask.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/deleteClusterTask.go new file mode 100644 index 0000000000..ca20fc1526 --- /dev/null +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/deleteClusterTask.go @@ -0,0 +1,198 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package tasks + +import ( + "context" + "fmt" + "time" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/api" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/business" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/utils" + icommon "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/common" +) + +// DeleteClusterTask delete cluster task +func DeleteClusterTask(taskID string, stepName string) error { // nolint + start := time.Now() + // get task and task current step + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + // previous step successful when retry task + if step == nil { + blog.Infof("DeleteClusterTask[%s]: current step[%s] successful and skip", taskID, stepName) + return nil + } + blog.Infof("DeleteClusterTask[%s]: task %s run step %s, system: %s, old state: %s, params %v", + taskID, taskID, stepName, step.System, step.Status, step.Params) + + // step login started here + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + cloudID := step.Params[cloudprovider.CloudIDKey.String()] + deleteMode := step.Params[cloudprovider.DeleteModeKey.String()] + clusterStatus := step.Params[cloudprovider.LastClusterStatus.String()] + + // only support retain mode + if deleteMode != cloudprovider.Retain.String() { + deleteMode = cloudprovider.Retain.String() + } + + dependInfo, err := cloudprovider.GetClusterDependBasicInfo(cloudprovider.GetBasicInfoReq{ + ClusterID: clusterID, + CloudID: cloudID, + }) + if err != nil { + blog.Errorf("DeleteClusterTask[%s]: GetClusterDependBasicInfo for cluster %s "+ + "in task %s step %s failed, %s", taskID, clusterID, taskID, stepName, err.Error()) + retErr := fmt.Errorf("get cloud/project information failed, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + client, err := api.NewCceClient(dependInfo.CmOption) + if err != nil { + return err + } + + ctx := cloudprovider.WithTaskIDForContext(context.Background(), taskID) + + blog.Infof("DeleteTKEClusterTask[%s] clusterInfo: %v", taskID, dependInfo.Cluster.GetStatus()) + + if (clusterStatus == icommon.StatusCreateClusterFailed || + clusterStatus == icommon.StatusDeleteClusterFailed) && dependInfo.Cluster.GetSystemID() != "" { + nodes, listErr := client.ListClusterNodes(dependInfo.Cluster.SystemID) + if listErr != nil { + return listErr + } + + ids, delErr := business.DeleteClusterInstance(client, dependInfo.Cluster.SystemID, nodes) + if delErr != nil { + blog.Errorf("DeleteClusterTask[%s] DeleteClusterInstance failed: %v", taskID, delErr) + } else { + blog.Infof("DeleteClusterTask[%s] DeleteClusterInstance success: %v", taskID, ids) + } + + nodeIds := make([]string, 0) + for _, node := range nodes { + nodeIds = append(nodeIds, *node.Metadata.Uid) + } + + err = business.CheckClusterDeletedNodes(ctx, dependInfo, nodeIds) + if err != nil { + blog.Errorf("DeleteClusterTask[%s] CheckClusterDeletedNodes failed: %v", taskID, err) + } + } + + err = business.DeleteTkeClusterByClusterId(ctx, dependInfo.CmOption, dependInfo.Cluster.SystemID, deleteMode) + if err != nil { + blog.Errorf("DeleteClusterTask[%s]: task[%s] step[%s] call huawei DeleteCluster failed: %v", + taskID, taskID, stepName, err) + retErr := fmt.Errorf("call huawei DeleteTKECluster failed: %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + + _ = cloudprovider.UpdateClusterErrMessage(clusterID, fmt.Sprintf("delete cluster[%s] failed: %v", + dependInfo.Cluster.GetClusterID(), err.Error())) + + return retErr + } + + blog.Infof("DeleteClusterTask[%s]: task %s DeleteCluster[%s] successful", + taskID, taskID, dependInfo.Cluster.SystemID) + + if err := state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("DeleteClusterTask[%s]: task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + + return nil +} + +// CleanClusterDBInfoTask clean cluster DB info +func CleanClusterDBInfoTask(taskID string, stepName string) error { + start := time.Now() + // get task and task current step + state, step, err := cloudprovider.GetTaskStateAndCurrentStep(taskID, stepName) + if err != nil { + return err + } + // previous step successful when retry task + if step == nil { + blog.Infof("CleanClusterDBInfoTask[%s]: current step[%s] successful and skip", taskID, stepName) + return nil + } + blog.Infof("CleanClusterDBInfoTask[%s]: task %s run step %s, system: %s, old state: %s, params %v", + taskID, taskID, stepName, step.System, step.Status, step.Params) + + // step login started here + clusterID := step.Params[cloudprovider.ClusterIDKey.String()] + cluster, err := cloudprovider.GetStorageModel().GetCluster(context.Background(), clusterID) + if err != nil { + blog.Errorf("CleanClusterDBInfoTask[%s]: get cluster for %s failed", taskID, clusterID) + retErr := fmt.Errorf("get cluster information failed, %s", err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + + // delete cluster autoscalingOption + err = cloudprovider.GetStorageModel().DeleteAutoScalingOption(context.Background(), cluster.ClusterID) + if err != nil { + blog.Errorf("CleanClusterDBInfoTask[%s]: clean cluster[%s] "+ + "autoscalingOption failed: %v", taskID, cluster.ClusterID, err) + } + + // delete nodes + err = cloudprovider.GetStorageModel().DeleteNodesByClusterID(context.Background(), cluster.ClusterID) + if err != nil { + blog.Errorf("CleanClusterDBInfoTask[%s]: delete nodes for %s failed", taskID, clusterID) + retErr := fmt.Errorf("delete node for %s failed, %s", clusterID, err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + blog.Infof("CleanClusterDBInfoTask[%s]: delete nodes for cluster[%s] in DB successful", taskID, clusterID) + + // delete nodeGroup + err = cloudprovider.GetStorageModel().DeleteNodeGroupByClusterID(context.Background(), cluster.ClusterID) + if err != nil { + blog.Errorf("CleanClusterDBInfoTask[%s]: delete nodeGroups for %s failed", taskID, clusterID) + retErr := fmt.Errorf("delete nodeGroups for %s failed, %s", clusterID, err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + blog.Infof("CleanClusterDBInfoTask[%s]: delete nodeGroups for cluster[%s] in DB successful", taskID, clusterID) + + // delete cluster + cluster.Status = icommon.StatusDeleting + err = cloudprovider.GetStorageModel().UpdateCluster(context.Background(), cluster) + if err != nil { + blog.Errorf("CleanClusterDBInfoTask[%s]: delete cluster for %s failed", taskID, clusterID) + retErr := fmt.Errorf("delete cluster for %s failed, %s", clusterID, err.Error()) + _ = state.UpdateStepFailure(start, stepName, retErr) + return retErr + } + blog.Infof("CleanClusterDBInfoTask[%s]: delete cluster[%s] in DB successful", taskID, clusterID) + + utils.SyncDeletePassCCCluster(taskID, cluster) + _ = utils.DeleteClusterCredentialInfo(cluster.ClusterID) + + if err := state.UpdateStepSucc(start, stepName); err != nil { + blog.Errorf("CleanClusterDBInfoTask[%s]: task %s %s update to storage fatal", taskID, taskID, stepName) + return err + } + return nil +} diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/importCluster.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/importCluster.go index 203bcad854..b3792445b9 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/importCluster.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/importCluster.go @@ -79,15 +79,35 @@ func RegisterClusterKubeConfigTask(taskID string, stepName string) error { return nil } -func importClusterCredential(data *cloudprovider.CloudDependBasicInfo) error { - configByte, _ := encrypt.Decrypt(nil, data.Cluster.KubeConfig) +func importClusterCredential(info *cloudprovider.CloudDependBasicInfo) error { + if info.Cluster.KubeConfig == "" { + cli, err := api.NewCceClient(info.CmOption) + if err != nil { + return err + } + + kubeConfig, err := cli.GetClusterKubeConfig(info.Cluster.SystemID, + info.Cluster.GetClusterAdvanceSettings().GetClusterConnectSetting().GetIsExtranet()) + if err != nil { + return err + } + + info.Cluster.KubeConfig, _ = encrypt.Encrypt(nil, kubeConfig) + + err = cloudprovider.UpdateCluster(info.Cluster) + if err != nil { + return err + } + } + + configByte, _ := encrypt.Decrypt(nil, info.Cluster.KubeConfig) typesConfig := &types.Config{} err := json.Unmarshal([]byte(configByte), typesConfig) if err != nil { return fmt.Errorf("failed to unmarshal kubeconfig, %v", err) } - err = cloudprovider.UpdateClusterCredentialByConfig(data.Cluster.ClusterID, typesConfig) + err = cloudprovider.UpdateClusterCredentialByConfig(info.Cluster.ClusterID, typesConfig) if err != nil { return err } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/updateDesiredNodes.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/updateDesiredNodes.go index c81f1d3ca9..b2481f1e84 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/updateDesiredNodes.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/tasks/updateDesiredNodes.go @@ -136,7 +136,7 @@ func applyInstanceMachines(ctx context.Context, info *cloudprovider.CloudDependB return err } - _, err = client.UpdateNodePoolDesiredNodes(info.Cluster.SystemID, info.NodeGroup.CloudNodeGroupID, nodeNum) + _, err = client.UpdateNodePoolDesiredNodes(info.Cluster.SystemID, info.NodeGroup.CloudNodeGroupID, nodeNum, true) if err != nil { return err } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/utils.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/utils.go index 5304d1498a..3db75f36ae 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/utils.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/utils.go @@ -20,6 +20,10 @@ import ( proto "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/api/clustermanager" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/common" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/template" + icommon "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/common" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/utils" ) var ( @@ -28,6 +32,8 @@ var ( // huaweiCloud taskName const ( + // createClusterTaskTemplate bk-sops add task template + createClusterTaskTemplate = "cce-create cluster: %s" // importClusterTaskTemplate bk-sops add task template importClusterTaskTemplate = "cce-import cluster: %s" // deleteClusterTaskTemplate bk-sops add task template @@ -66,6 +72,59 @@ var ( StepName: "导入集群节点", } + // create cluster task + // nolint + createClusterStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-CreateCloudClusterTask", cloudName), + StepName: "创建集群", + } + checkClusterStatusStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-CheckCloudClusterStatusTask", cloudName), + StepName: "检测集群状态", + } + updateCreateClusterDBInfoStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-UpdateCreateClusterDBInfoTask", cloudName), + StepName: "更新任务状态", + } + createCCENodeGroupStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-CCE-CreateCloudNodeGroupTask", cloudName), + StepName: "创建节点组", + } + checkCCENodeGroupsStatusStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-CCE-CheckCloudNodeGroupStatusTask", cloudName), + StepName: "检测集群节点池状态", + } + checkCreateClusterNodeStatusStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-CheckCreateClusterNodeStatusTask", cloudName), + StepName: "检测集群节点状态", + } + nodeSetAnnotationsActionStep = cloudprovider.StepInfo{ + StepMethod: cloudprovider.SetNodeAnnotationsAction, + StepName: "节点设置注解", + } + installGseAgentStep = cloudprovider.StepInfo{ + StepMethod: cloudprovider.InstallGseAgentAction, + StepName: "安装 GSE Agent", + } + transferHostModuleStep = cloudprovider.StepInfo{ + StepMethod: cloudprovider.TransferHostModuleAction, + StepName: "转移主机模块", + } + jobExecuteScriptStep = cloudprovider.StepInfo{ + StepMethod: cloudprovider.JobFastExecuteScriptAction, + StepName: "用户初始化作业", + } + + // delete cluster task + deleteClusterStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-DeleteTKEClusterTask", cloudName), + StepName: "删除集群", + } + cleanClusterDBInfoStep = cloudprovider.StepInfo{ + StepMethod: fmt.Sprintf("%s-CleanClusterDBInfoTask", cloudName), + StepName: "清理集群数据", + } + // create nodeGroup task createCloudNodeGroupStep = cloudprovider.StepInfo{ StepMethod: fmt.Sprintf("%s-CreateCloudNodeGroupTask", cloudName), @@ -115,6 +174,194 @@ var ( } ) +// CreateClusterTaskOption 创建集群构建step子任务 +type CreateClusterTaskOption struct { + Cluster *proto.Cluster + NodeGroupID string +} + +// BuildCreateClusterStep 创建集群任务 +func (cn *CreateClusterTaskOption) BuildCreateClusterStep(task *proto.Task) { + createStep := cloudprovider.InitTaskStep(createClusterStep) + createStep.Params[cloudprovider.ClusterIDKey.String()] = cn.Cluster.ClusterID + createStep.Params[cloudprovider.CloudIDKey.String()] = cn.Cluster.Provider + createStep.Params[cloudprovider.NodeGroupIDKey.String()] = cn.NodeGroupID + + task.Steps[createClusterStep.StepMethod] = createStep + task.StepSequence = append(task.StepSequence, createClusterStep.StepMethod) +} + +// BuildCheckClusterStatusStep 检测集群状态任务 +func (cn *CreateClusterTaskOption) BuildCheckClusterStatusStep(task *proto.Task) { + checkStep := cloudprovider.InitTaskStep(checkClusterStatusStep) + checkStep.Params[cloudprovider.ClusterIDKey.String()] = cn.Cluster.ClusterID + checkStep.Params[cloudprovider.CloudIDKey.String()] = cn.Cluster.Provider + + task.Steps[checkClusterStatusStep.StepMethod] = checkStep + task.StepSequence = append(task.StepSequence, checkClusterStatusStep.StepMethod) +} + +// BuildRegisterClsKubeConfigStep 托管集群注册连接信息 +func (cn *CreateClusterTaskOption) BuildRegisterClsKubeConfigStep(task *proto.Task) { + registerStep := cloudprovider.InitTaskStep(registerClusterKubeConfigStep) + registerStep.Params[cloudprovider.ClusterIDKey.String()] = cn.Cluster.ClusterID + registerStep.Params[cloudprovider.CloudIDKey.String()] = cn.Cluster.Provider + registerStep.Params[cloudprovider.IsExtranetKey.String()] = icommon.True + + task.Steps[registerClusterKubeConfigStep.StepMethod] = registerStep + task.StepSequence = append(task.StepSequence, registerClusterKubeConfigStep.StepMethod) +} + +// BuildUpdateTaskStatusStep 更新任务状态 +func (cn *CreateClusterTaskOption) BuildUpdateTaskStatusStep(task *proto.Task) { + updateStep := cloudprovider.InitTaskStep(updateCreateClusterDBInfoStep) + updateStep.Params[cloudprovider.ClusterIDKey.String()] = cn.Cluster.ClusterID + updateStep.Params[cloudprovider.CloudIDKey.String()] = cn.Cluster.Provider + + task.Steps[updateCreateClusterDBInfoStep.StepMethod] = updateStep + task.StepSequence = append(task.StepSequence, updateCreateClusterDBInfoStep.StepMethod) +} + +// BuildCreateCCENodeGroupStep 创建CCE节点组 +func (cn *CreateClusterTaskOption) BuildCreateCCENodeGroupStep(task *proto.Task) { + createStep := cloudprovider.InitTaskStep(createCCENodeGroupStep) + createStep.Params[cloudprovider.ClusterIDKey.String()] = cn.Cluster.ClusterID + createStep.Params[cloudprovider.CloudIDKey.String()] = cn.Cluster.Provider + createStep.Params[cloudprovider.NodeGroupIDKey.String()] = cn.NodeGroupID + + task.Steps[createCCENodeGroupStep.StepMethod+"-"+cn.NodeGroupID] = createStep + task.StepSequence = append(task.StepSequence, createCCENodeGroupStep.StepMethod+"-"+cn.NodeGroupID) +} + +// BuildCheckNodeGroupsStatusStep 检测集群节点池状态任务 +func (cn *CreateClusterTaskOption) BuildCheckNodeGroupsStatusStep(task *proto.Task) { + checkStep := cloudprovider.InitTaskStep(checkCCENodeGroupsStatusStep) + checkStep.Params[cloudprovider.ClusterIDKey.String()] = cn.Cluster.ClusterID + checkStep.Params[cloudprovider.CloudIDKey.String()] = cn.Cluster.Provider + checkStep.Params[cloudprovider.NodeGroupIDKey.String()] = cn.NodeGroupID + + task.Steps[checkCCENodeGroupsStatusStep.StepMethod+"-"+cn.NodeGroupID] = checkStep + task.StepSequence = append(task.StepSequence, checkCCENodeGroupsStatusStep.StepMethod+"-"+cn.NodeGroupID) +} + +// BuildCheckClusterNodesStatusStep 检测创建集群节点状态任务 +func (cn *CreateClusterTaskOption) BuildCheckClusterNodesStatusStep(task *proto.Task) { + checkStep := cloudprovider.InitTaskStep(checkCreateClusterNodeStatusStep) + checkStep.Params[cloudprovider.ClusterIDKey.String()] = cn.Cluster.ClusterID + checkStep.Params[cloudprovider.CloudIDKey.String()] = cn.Cluster.Provider + checkStep.Params[cloudprovider.NodeGroupIDKey.String()] = cn.NodeGroupID + + task.Steps[checkCreateClusterNodeStatusStep.StepMethod+"-"+cn.NodeGroupID] = checkStep + task.StepSequence = append(task.StepSequence, checkCreateClusterNodeStatusStep.StepMethod+"-"+cn.NodeGroupID) +} + +// BuildNodeAnnotationsTaskStep build node annotations (user define labels && common annotations) task step +func (cn *CreateClusterTaskOption) BuildNodeAnnotationsTaskStep(task *proto.Task, clusterID string, + nodeIPs []string, annotations map[string]string) { + if len(annotations) == 0 { + return + } + + annotationsStep := cloudprovider.InitTaskStep(nodeSetAnnotationsActionStep) + annotationsStep.Params[cloudprovider.ClusterIDKey.String()] = clusterID + // annotationsStep.Params[cloudprovider.NodeIPsKey.String()] = strings.Join(nodeIPs, ",") + annotationsStep.Params[cloudprovider.AnnotationsKey.String()] = utils.MapToStrings(annotations) + + task.Steps[nodeSetAnnotationsActionStep.StepMethod+"-"+cn.NodeGroupID] = annotationsStep + task.StepSequence = append(task.StepSequence, nodeSetAnnotationsActionStep.StepMethod+"-"+cn.NodeGroupID) +} + +// BuildInstallGseAgentTaskStep build install gse agent task step +func (cn *CreateClusterTaskOption) BuildInstallGseAgentTaskStep(task *proto.Task, gseInfo *common.GseInstallInfo, + options ...cloudprovider.StepOption) { + installGseStep := cloudprovider.InitTaskStep(installGseAgentStep, options...) + + installGseStep.Params[cloudprovider.ClusterIDKey.String()] = gseInfo.ClusterId // nolint + installGseStep.Params[cloudprovider.NodeGroupIDKey.String()] = gseInfo.NodeGroupId // nolint + + installGseStep.Params[cloudprovider.BKBizIDKey.String()] = gseInfo.BusinessId // nolint + if gseInfo != nil && gseInfo.CloudArea != nil { // nolint + installGseStep.Params[cloudprovider.BKCloudIDKey.String()] = strconv.Itoa(int(gseInfo.CloudArea.BkCloudID)) + } + installGseStep.Params[cloudprovider.UsernameKey.String()] = gseInfo.User + installGseStep.Params[cloudprovider.PasswordKey.String()] = gseInfo.Passwd + installGseStep.Params[cloudprovider.SecretKey.String()] = gseInfo.KeyInfo.GetKeySecret() + installGseStep.Params[cloudprovider.PortKey.String()] = gseInfo.Port + + if gseInfo.AllowReviseCloudId == "" { + gseInfo.AllowReviseCloudId = icommon.False + } + installGseStep.Params[cloudprovider.AllowReviseAgent.String()] = gseInfo.AllowReviseCloudId + + task.Steps[installGseAgentStep.StepMethod+"-"+cn.NodeGroupID] = installGseStep + task.StepSequence = append(task.StepSequence, installGseAgentStep.StepMethod+"-"+cn.NodeGroupID) +} + +// BuildTransferHostModuleStep build transfer host module step +func (cn *CreateClusterTaskOption) BuildTransferHostModuleStep(task *proto.Task, + businessID string, moduleID string, masterModuleID string) { + transStep := cloudprovider.InitTaskStep(transferHostModuleStep) + + transStep.Params[cloudprovider.BKBizIDKey.String()] = businessID + transStep.Params[cloudprovider.BKModuleIDKey.String()] = moduleID + transStep.Params[cloudprovider.BKMasterModuleIDKey.String()] = masterModuleID + + task.Steps[transferHostModuleStep.StepMethod+"-"+cn.NodeGroupID] = transStep + task.StepSequence = append(task.StepSequence, transferHostModuleStep.StepMethod+"-"+cn.NodeGroupID) +} + +// BuildJobExecuteScriptStep build job execute script step +func (cn *CreateClusterTaskOption) BuildJobExecuteScriptStep(task *proto.Task, paras common.JobExecParas) { + if paras.StepName != "" { + jobExecuteScriptStep.StepName = paras.StepName + } + jobScriptStep := cloudprovider.InitTaskStep(jobExecuteScriptStep, + cloudprovider.WithStepSkipFailed(paras.AllowSkipJobTask), + cloudprovider.WithStepTranslate(paras.Translate), + ) + + if len(paras.NodeIps) == 0 { + paras.NodeIps = template.NodeIPList + } + + jobScriptStep.Params[cloudprovider.ClusterIDKey.String()] = paras.ClusterID + jobScriptStep.Params[cloudprovider.ScriptContentKey.String()] = paras.Content + jobScriptStep.Params[cloudprovider.NodeIPsKey.String()] = paras.NodeIps + jobScriptStep.Params[cloudprovider.OperatorKey.String()] = paras.Operator + + task.Steps[jobExecuteScriptStep.StepMethod+"-"+cn.NodeGroupID] = jobScriptStep + task.StepSequence = append(task.StepSequence, jobExecuteScriptStep.StepMethod+"-"+cn.NodeGroupID) +} + +// DeleteClusterTaskOption 删除集群 +type DeleteClusterTaskOption struct { + Cluster *proto.Cluster + DeleteMode string + LastClusterStatus string +} + +// BuildDeleteClusterStep 删除集群 +func (dc *DeleteClusterTaskOption) BuildDeleteClusterStep(task *proto.Task) { + deleteStep := cloudprovider.InitTaskStep(deleteClusterStep) + deleteStep.Params[cloudprovider.ClusterIDKey.String()] = dc.Cluster.ClusterID + deleteStep.Params[cloudprovider.CloudIDKey.String()] = dc.Cluster.Provider + deleteStep.Params[cloudprovider.DeleteModeKey.String()] = dc.DeleteMode + deleteStep.Params[cloudprovider.LastClusterStatus.String()] = dc.LastClusterStatus + + task.Steps[deleteClusterStep.StepMethod] = deleteStep + task.StepSequence = append(task.StepSequence, deleteClusterStep.StepMethod) +} + +// BuildCleanClusterDBInfoStep 清理集群数据 +func (dc *DeleteClusterTaskOption) BuildCleanClusterDBInfoStep(task *proto.Task) { + updateStep := cloudprovider.InitTaskStep(cleanClusterDBInfoStep) + updateStep.Params[cloudprovider.ClusterIDKey.String()] = dc.Cluster.ClusterID + updateStep.Params[cloudprovider.CloudIDKey.String()] = dc.Cluster.Provider + + task.Steps[cleanClusterDBInfoStep.StepMethod] = updateStep + task.StepSequence = append(task.StepSequence, cleanClusterDBInfoStep.StepMethod) +} + // ImportClusterTaskOption 纳管集群 type ImportClusterTaskOption struct { Cluster *proto.Cluster diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/validate.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/validate.go index e802d814da..97687205e9 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/validate.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/validate.go @@ -260,7 +260,28 @@ func (c *CloudValidate) CreateCloudAccountValidate(account *proto.Account) error // CreateClusterValidate check createCluster operation func (c *CloudValidate) CreateClusterValidate(req *proto.CreateClusterReq, opt *cloudprovider.CommonOption) error { - return cloudprovider.ErrCloudNotImplemented + if c == nil || req == nil || opt == nil { + return fmt.Errorf("%s CreateClusterValidate request&options is empty", cloudName) + } + + if opt.Account == nil || len(opt.Account.SecretID) == 0 || len(opt.Account.SecretKey) == 0 { + return fmt.Errorf("%s CreateClusterValidate opt lost valid crendential info", cloudName) + } + + client, err := api.NewIamClient(&cloudprovider.CommonOption{Account: opt.Account}) + if err != nil { + return err + } + + regions, err := client.ListCloudRegions() + if err != nil { + return fmt.Errorf("account check failed: %v", err) + } + if len(regions) == 0 { + return fmt.Errorf("%s invalid aksk", cloudName) + } + + return nil } // DeleteNodesFromClusterValidate xxx diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/vpc.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/vpc.go index 86f4e508fe..fcfd0e109d 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/vpc.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/huawei/vpc.go @@ -110,6 +110,7 @@ func (vm *VPCManager) ListSubnets(vpcID, zone string, opt *cloudprovider.ListNet Zone: subnetZone, ZoneName: subnetZoneName, AvailableIPAddressCount: uint64(cnt), + HwNeutronSubnetID: s.NeutronSubnetId, }) } From 2f899e328c2088ba6c066d5515be77d0db06c750 Mon Sep 17 00:00:00 2001 From: kayinli Date: Tue, 27 Aug 2024 06:21:40 +0000 Subject: [PATCH 011/108] =?UTF-8?q?--story=3D118937455=20=E3=80=90Gitops?= =?UTF-8?q?=E3=80=91=20=E9=83=A8=E7=BD=B2=E5=89=8D=E6=A3=80=E6=9F=A5=20(me?= =?UTF-8?q?rge=20request=20!1900)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squash merge branch 'gitops-precheck' into 'master' feat: 新增precheck模块 TAPD: --story=118937455 --- .../cmd/manager/options/options.go | 1 + .../manager/bcs-gitops-manager.json.template | 4 + .../bcs-gitops-manager/pkg/common/options.go | 6 + .../pkg/proxy/argocd/application.go | 61 +- .../pkg/proxy/argocd/application_dryrun.go | 5 +- .../pkg/proxy/argocd/argocd.go | 7 +- .../pkg/proxy/argocd/middleware/handler.go | 3 + .../pkg/proxy/argocd/middleware/middleware.go | 16 + .../pkg/proxy/argocd/precheck.go | 66 + .../pkg/proxy/argocd/session/precheck.go | 83 + .../bcs-gitops-pre-check/.golangci.yml | 121 ++ bcs-scenarios/bcs-gitops-pre-check/Makefile | 67 + .../bcs-gitops-pre-check/cmd/option.go | 193 ++ .../bcs-gitops-pre-check/cmd/server.go | 341 ++++ bcs-scenarios/bcs-gitops-pre-check/go.mod | 305 +++ .../handler/bcs-gitops-precheck.go | 195 ++ .../bcs-gitops-pre-check/image/Dockerfile | 23 + .../image/bcs-gitops-pre-check.json.template | 62 + .../image/container-start.sh | 14 + bcs-scenarios/bcs-gitops-pre-check/main.go | 62 + .../pkg/apis/argo/client.go | 48 + .../pkg/apis/git/factory.go | 116 ++ .../pkg/apis/git/gitlab.go | 167 ++ .../bcs-gitops-pre-check/pkg/apis/git/tgit.go | 158 ++ .../pkg/apis/git/types.go | 114 ++ .../pkg/apis/requester/requester.go | 107 ++ .../bcs-gitops-pre-check/pkg/common/common.go | 506 +++++ .../pkg/storage/interface.go | 27 + .../bcs-gitops-pre-check/pkg/storage/mysql.go | 185 ++ .../pkg/storage/mysqlrate/rate.go | 58 + .../bcs-gitops-pre-check/pkg/storage/types.go | 91 + .../proto/bcs-gitops-pre-check.pb.go | 1687 +++++++++++++++++ .../proto/bcs-gitops-pre-check.pb.gw.go | 497 +++++ .../proto/bcs-gitops-pre-check.pb.micro.go | 218 +++ .../proto/bcs-gitops-pre-check.proto | 475 +++++ .../proto/bcs-gitops-pre-check.swagger.json | 625 ++++++ .../proto/bcs-gitops-pre-check_grpc.pb.go | 249 +++ 37 files changed, 6954 insertions(+), 9 deletions(-) create mode 100644 bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/precheck.go create mode 100644 bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/session/precheck.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/.golangci.yml create mode 100644 bcs-scenarios/bcs-gitops-pre-check/Makefile create mode 100644 bcs-scenarios/bcs-gitops-pre-check/cmd/option.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/cmd/server.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/go.mod create mode 100644 bcs-scenarios/bcs-gitops-pre-check/handler/bcs-gitops-precheck.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/image/Dockerfile create mode 100644 bcs-scenarios/bcs-gitops-pre-check/image/bcs-gitops-pre-check.json.template create mode 100644 bcs-scenarios/bcs-gitops-pre-check/image/container-start.sh create mode 100644 bcs-scenarios/bcs-gitops-pre-check/main.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/pkg/apis/argo/client.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/factory.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/gitlab.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/tgit.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/types.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/pkg/apis/requester/requester.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/pkg/common/common.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/pkg/storage/interface.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/pkg/storage/mysql.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/pkg/storage/mysqlrate/rate.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/pkg/storage/types.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.pb.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.pb.gw.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.pb.micro.go create mode 100644 bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.proto create mode 100644 bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.swagger.json create mode 100644 bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check_grpc.pb.go diff --git a/bcs-scenarios/bcs-gitops-manager/cmd/manager/options/options.go b/bcs-scenarios/bcs-gitops-manager/cmd/manager/options/options.go index c017bd0fc7..2432eef36e 100644 --- a/bcs-scenarios/bcs-gitops-manager/cmd/manager/options/options.go +++ b/bcs-scenarios/bcs-gitops-manager/cmd/manager/options/options.go @@ -80,6 +80,7 @@ type Options struct { AuditConfig *common.AuditConfig `json:"auditConfig,omitempty"` DBConfig *common.DBConfig `json:"dbConfig,omitempty"` MonitorConfig *common.MonitorConfig `json:"monitorConfig,omitempty"` + PreCheckConfig *common.PreCheckConfig `json:"preCheckConfig,omitempty"` AdminUsersStr string `json:"adminUsers,omitempty"` AdminUsers []string `json:"-"` diff --git a/bcs-scenarios/bcs-gitops-manager/images/manager/bcs-gitops-manager.json.template b/bcs-scenarios/bcs-gitops-manager/images/manager/bcs-gitops-manager.json.template index 764ac40d88..5c1cc82836 100644 --- a/bcs-scenarios/bcs-gitops-manager/images/manager/bcs-gitops-manager.json.template +++ b/bcs-scenarios/bcs-gitops-manager/images/manager/bcs-gitops-manager.json.template @@ -78,6 +78,10 @@ "address": "${bcsMonitorAddress}", "port": "${bcsMonitorPort}" }, + "preCheckConfig": { + "address": "${bcsPreCheckAddress}", + "port": "${bcsPreCheckPort}" + }, "terraformServer": { "address": "${bcsTerraformAddress}", "port": "${bcsTerraformPort}" diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/common/options.go b/bcs-scenarios/bcs-gitops-manager/pkg/common/options.go index 3ded479c8a..92e0c453b0 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/common/options.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/common/options.go @@ -143,6 +143,12 @@ type MonitorConfig struct { Port string `json:"port"` } +// PreCheckConfig preCheck server info +type PreCheckConfig struct { + Address string `json:"address"` + Port string `json:"port"` +} + // AnalysisServer defines the configuration of analysis server type AnalysisServer struct { Address string `json:"address"` diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/application.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/application.go index 3127af93be..b477e5774a 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/application.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/application.go @@ -176,14 +176,43 @@ func (plugin *AppPlugin) listApplicationsHandler(r *http.Request) (*http.Request if len(projects) == 0 { return r, mw.ReturnErrorResponse(http.StatusBadRequest, fmt.Errorf("query param 'projects' cannot be empty")) } - appList, statusCode, err := plugin.middleware.ListApplications(r.Context(), &appclient.ApplicationQuery{ - Projects: projects, - }) - if err != nil { - return r, mw.ReturnErrorResponse(statusCode, errors.Wrapf(err, "list applications by project '%v' from "+ - "storage failed", projects)) + query := &appclient.ApplicationQuery{Projects: projects} + repo := r.URL.Query().Get("repo") + if repo != "" { + query.Repo = &repo + } + targetRevision := r.URL.Query().Get("targetRevision") + if targetRevision != "" && repo == "" { + return r, mw.ReturnErrorResponse(http.StatusBadRequest, + fmt.Errorf("query param 'repo' cannot be empty when target revision is not empty")) + } + selectors := r.URL.Query()["selector"] + appList := &v1alpha1.ApplicationList{Items: make([]v1alpha1.Application, 0)} + if len(selectors) != 0 { + for _, selector := range selectors { + query.Selector = &selector + apps, statusCode, err := plugin.middleware.ListApplications(r.Context(), query) + if err != nil { + return r, mw.ReturnErrorResponse(statusCode, errors.Wrapf(err, "list applications by project '%v' from "+ + "storage failed", projects)) + } + if len(apps.Items) != 0 { + appList.ListMeta = apps.ListMeta + appList.TypeMeta = apps.TypeMeta + appList.Items = append(appList.Items, apps.Items...) + } + } + } else { + apps, statusCode, err := plugin.middleware.ListApplications(r.Context(), query) + if err != nil { + return r, mw.ReturnErrorResponse(statusCode, errors.Wrapf(err, "list applications by project '%v' from "+ + "storage failed", projects)) + } + appList = apps + } + if targetRevision != "" { + filterAppsByTargetRevision(appList, targetRevision, repo) } - fields := r.URL.Query().Get("fields") if fields == "" { return r, mw.ReturnJSONResponse(appList) @@ -766,3 +795,21 @@ func (plugin *AppPlugin) buildRepoAuth(ctx context.Context, repoUrl string) (tra } return nil, errors.Errorf("not https/ssh authentication") } + +func filterAppsByTargetRevision(appList *v1alpha1.ApplicationList, target string, repo string) { + filterApps := make([]v1alpha1.Application, 0) + for _, item := range appList.Items { + if item.Spec.HasMultipleSources() { + for _, source := range item.Spec.Sources { + if source.RepoURL == repo && source.TargetRevision == target { + filterApps = append(filterApps, item) + } + } + continue + } + if item.Spec.Source.TargetRevision == target { + filterApps = append(filterApps, item) + } + } + appList.Items = filterApps +} diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/application_dryrun.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/application_dryrun.go index cb5ccbcf4d..961bdbe4cc 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/application_dryrun.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/application_dryrun.go @@ -294,7 +294,10 @@ func getGroupVersionKindResource(config *rest.Config) (map[string]metav1.APIReso } _, resources, err := discoveryClient.ServerGroupsAndResources() if err != nil { - return nil, errors.Wrapf(err, "get server groups and resources failed") + blog.Warnf("get server groups and resources failed:%s", err.Error()) + } + if len(resources) == 0 { + return nil, fmt.Errorf("get server groups and resources failed, resources empty") } result := make(map[string]metav1.APIResource) for _, resourceList := range resources { diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/argocd.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/argocd.go index 2b69dc7790..1c3bbceebd 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/argocd.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/argocd.go @@ -196,11 +196,16 @@ func (ops *ArgocdProxy) initArgoPathHandler() error { middleware: middleware, permitChecker: permitChecker, } + preCheckPlugin := &PreCheckPlugin{ + Router: ops.PathPrefix(common.GitOpsProxyURL + "/api/v1/precheck").Subrouter(), + middleware: middleware, + permitChecker: permitChecker, + } initializer := []func() error{ auditPlugin.Init, projectPlugin.Init, clusterPlugin.Init, repositoryPlugin.Init, appPlugin.Init, streamPlugin.Init, webhookPlugin.Init, grpcPlugin.Init, secretPlugin.Init, metricPlugin.Init, appsetPlugin.Init, analysisPlugin.Init, - monitorPlugin.Init, terraformPlugin.Init, permissionPlugin.Init, workflowPlugin.Init, + monitorPlugin.Init, terraformPlugin.Init, permissionPlugin.Init, workflowPlugin.Init, preCheckPlugin.Init, } // access deny URL, keep in mind that there are paths need to proxy diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware/handler.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware/handler.go index c55b1f3607..af2f568e32 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware/handler.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware/handler.go @@ -75,6 +75,7 @@ type handler struct { argoStreamSession *session.ArgoStreamSession terraformSession *session.TerraformSession analysisSession *session.AnalysisSession + preCheckSession *session.PreCheckSession tracer func(context.Context) error } @@ -96,6 +97,7 @@ func NewMiddlewareHandler(permitChecker permitcheck.PermissionInterface) Middlew projectPermission: project.NewBCSProjectPermClient(op.IAMClient), clusterPermission: cluster.NewBCSClusterPermClient(op.IAMClient), namespacePermission: namespace.NewBCSNamespacePermClient(op.IAMClient), + preCheckSession: session.NewPreCheckSession(), } } @@ -130,6 +132,7 @@ func (h *handler) HttpWrapper(handler HttpHandler) http.Handler { terraformSession: h.terraformSession, analysisSession: h.analysisSession, monitorSession: h.monitorSession, + preCheckSession: h.preCheckSession, } blog.Infof("[Trace] request handler '%s' add to otel", handlerName) return otelhttp.NewHandler(hw, handlerName) diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware/middleware.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware/middleware.go index 93a3b74a9c..1a8797858a 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware/middleware.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware/middleware.go @@ -14,6 +14,7 @@ package middleware import ( + "fmt" "net/http" "strconv" "strings" @@ -42,6 +43,7 @@ type httpWrapper struct { terraformSession *session.TerraformSession analysisSession *session.AnalysisSession monitorSession *session.MonitorSession + preCheckSession *session.PreCheckSession } // HttpResponse 定义了返回信息,根据返回信息 httpWrapper 做对应处理 @@ -111,6 +113,8 @@ func (p *httpWrapper) ServeHTTP(rw http.ResponseWriter, r *http.Request) { p.analysisSession.ServeHTTP(rwWrapper, req) case reverseMonitor: p.monitorSession.ServeHTTP(rwWrapper, req) + case reversePreCheck: + p.preCheckSession.ServeHTTP(rwWrapper, req) case returnError: if resp.statusCode >= 500 { if utils.IsContextCanceled(resp.err) { @@ -133,6 +137,9 @@ func (p *httpWrapper) ServeHTTP(rw http.ResponseWriter, r *http.Request) { proxy.DirectlyResponse(rwWrapper, resp.obj) case jsonResponse: proxy.JSONResponse(rwWrapper, resp.obj) + default: + blog.Warnf("unsupported res type:%s", resp.respType) + http.Error(rwWrapper, fmt.Sprintf("unknown response type: %v", resp.respType), http.StatusBadRequest) } p.handleAudit(rwWrapper, req, resp, start) } @@ -194,6 +201,8 @@ const ( reverseAnalysis // reverseWorkflow proxy to workflow reverseWorkflow + // reversePreCheck 请求反向代理给preCheck服务 + reversePreCheck ) // ReturnArgoStreamReverse will reverse stream to argocd @@ -245,6 +254,13 @@ func ReturnMonitorReverse() *HttpResponse { } } +// ReturnPreCheckReverse will reverse to argocd +func ReturnPreCheckReverse() *HttpResponse { + return &HttpResponse{ + respType: reversePreCheck, + } +} + // ReturnErrorResponse will return error message to client func ReturnErrorResponse(statusCode int, err error) *HttpResponse { return &HttpResponse{ diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/precheck.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/precheck.go new file mode 100644 index 0000000000..84ea9f3880 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/precheck.go @@ -0,0 +1,66 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package argocd + +import ( + "fmt" + "net/http" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/gorilla/mux" + + mw "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware" + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck" +) + +// PreCheckPlugin plugin +type PreCheckPlugin struct { + *mux.Router + permitChecker permitcheck.PermissionInterface + middleware mw.MiddlewareInterface +} + +// GET: /api/v1/monitor/{biz_id}, 查询bizID下对应的所有AppMonitor信息 +// GET: /api/v1/monitor/{biz_id}/list_scenario, 查询bizID下能安装的场景信息 +// DELETE: /api/v1/monitor/{biz_id}/{scenario}, 删除bizID下安装的对应场景监控 +// POST: /api/v1/monitor/{biz_id}/{scenario}, 创建/更新bizID下安装的对应场景监控 + +// Init all project sub path handler +// project plugin is a subRouter, all path registered is relative +func (plugin *PreCheckPlugin) Init() error { + plugin.Path("/mr/info").Methods(http.MethodGet).Handler(plugin.middleware.HttpWrapper(plugin.preCheckViewHandler)) + plugin.Path("/record").Methods(http.MethodPost).Handler(plugin.middleware.HttpWrapper(plugin.common)) + plugin.Path("/task").Methods(http.MethodPut).Handler(plugin.middleware.HttpWrapper(plugin.common)) + plugin.Path("/task").Methods(http.MethodGet).Handler(plugin.middleware.HttpWrapper(plugin.common)) + plugin.Path("/tasks").Methods(http.MethodGet).Handler(plugin.middleware.HttpWrapper(plugin.common)) + blog.Infof("precheck plugin init successfully") + return nil +} + +// GET /api/v1/monitor/{biz_id} +func (plugin *PreCheckPlugin) preCheckViewHandler(r *http.Request) (*http.Request, *mw.HttpResponse) { + // repo := r.PathValue("repository") + queryValues := r.URL.Query() + repo := queryValues.Get("repository") + // mrIID := r.PathValue("mrIID") + _, statusCode, err := plugin.permitChecker.CheckRepoPermission(r.Context(), repo, permitcheck.RepoViewRSAction) + if statusCode != http.StatusOK { + return r, mw.ReturnErrorResponse(statusCode, fmt.Errorf("check repo '%s' permission failed: %w", repo, + err)) + } + return r, mw.ReturnPreCheckReverse() +} + +func (plugin *PreCheckPlugin) common(r *http.Request) (*http.Request, *mw.HttpResponse) { + return r, mw.ReturnPreCheckReverse() +} diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/session/precheck.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/session/precheck.go new file mode 100644 index 0000000000..c4338c0642 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/session/precheck.go @@ -0,0 +1,83 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package session + +import ( + "fmt" + "net/http" + "net/http/httputil" + "net/url" + "strings" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + traceconst "github.com/Tencent/bk-bcs/bcs-common/pkg/otel/trace/constants" + + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager/cmd/manager/options" + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager/pkg/common" +) + +// PreCheckSession session +type PreCheckSession struct { + op *options.Options + reverseProxy *httputil.ReverseProxy +} + +// NewPreCheckSession create the session of precheck +func NewPreCheckSession() *PreCheckSession { + s := &PreCheckSession{ + op: options.GlobalOptions(), + } + s.initReverseProxy() + return s +} + +func (s *PreCheckSession) initReverseProxy() { + s.reverseProxy = &httputil.ReverseProxy{ + Director: func(request *http.Request) {}, + ErrorHandler: func(res http.ResponseWriter, req *http.Request, e error) { + requestID := req.Context().Value(traceconst.RequestIDHeaderKey).(string) + realPath := strings.TrimPrefix(req.URL.RequestURI(), common.GitOpsProxyURL) + fullPath := fmt.Sprintf("https://%s%s", s.op.MonitorConfig.Address, realPath) + blog.Errorf("RequestID[%s] preCheck session proxy '%s' with header '%s' failure: %s", + requestID, fullPath, req.Header, e.Error()) + res.WriteHeader(http.StatusInternalServerError) + _, _ = res.Write([]byte("preCheck session proxy failed")) // nolint + }, + Transport: http.DefaultTransport, + ModifyResponse: func(r *http.Response) error { + return nil + }, + } +} + +// ServeHTTP http.Handler implementation +func (s *PreCheckSession) ServeHTTP(rw http.ResponseWriter, req *http.Request) { + requestID := req.Context().Value(traceconst.RequestIDHeaderKey).(string) + // backend real path with encoded format + realPath := strings.TrimPrefix(req.URL.RequestURI(), common.GitOpsProxyURL) + // !force https link + // fullPath := fmt.Sprintf("http://bcsmonitorcontroller.bcs-system.svc.cluster.local:18088%s", realPath) + fullPath := fmt.Sprintf("http://%s:%s%s", s.op.PreCheckConfig.Address, s.op.PreCheckConfig.Port, realPath) + newURL, err := url.Parse(fullPath) + if err != nil { + err = fmt.Errorf("preCheck session build new fullpath '%s' failed: %s", fullPath, err.Error()) + rw.WriteHeader(http.StatusInternalServerError) + blog.Errorf(err.Error()) + _, _ = rw.Write([]byte(err.Error())) // nolint + return + } + req.URL = newURL + req.Header.Set(traceconst.RequestIDHeaderKey, requestID) + blog.Infof("RequestID[%s] preCheck session serve: %s/%s", requestID, req.Method, fullPath) + s.reverseProxy.ServeHTTP(rw, req) +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/.golangci.yml b/bcs-scenarios/bcs-gitops-pre-check/.golangci.yml new file mode 100644 index 0000000000..f5dd331685 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/.golangci.yml @@ -0,0 +1,121 @@ +run: + timeout: 10m + skip-dirs: + - bcs-services/bcs-upgrader + - bcs-services/bcs-service-prometheus + - bcs-network + - bcs-runtime/bcs-mesos + - bcs-runtime/bcs-k8s/bcs-component/bcs-cc-agent + - bcs-runtime/bcs-k8s/bcs-component/bcs-cpuset-device + - .*/third_party/* + skip-files: + - .*\.docs\.go$ + - .*\.gen\.go$ + - .*\.pb\.go$ + - .*\.pb.gw\.go$ + - .*\.pb.micro\.go$ + - .*\.pb.validate\.go$ + - .*\_test\.go$ +issues: + max-issues-per-linter: 0 + max-same-issues: 0 + exclude-use-default: false +linters: + disable-all: true + enable: + - errcheck + - gosimple + - govet + - ineffassign + - staticcheck + - unused + - funlen + - gci + - goconst + - gocritic + - gocyclo + - gofmt + - goheader + - goimports + - gosec + - lll + - misspell + - nakedret + - revive + - unconvert + - unparam +linters-settings: + errcheck: + exclude-functions: + - (*os.File).Close + - (io.Closer).Close + - (net/http.ResponseWriter).Write + - github.com/go-chi/render.Render + - io.Copy + - os.RemoveAll + lll: + line-length: 120 + funlen: + lines: 90 + statements: -1 + gocyclo: + min-complexity: 30 + govet: + check-shadowing: true + goimports: + local-prefixes: github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check + gci: + sections: + - standard + - default + - prefix(github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check) + gocritic: + settings: + ifElseChain: + minThreshold: 3 + gosec: + includes: + - G201 + - G202 + - G101 + - G401 + - G402 + - G403 + - G404 + - G504 + goheader: + values: + regexp: + YEAR: 20\d\d + template: |- + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) {{ YEAR }} THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + misspell: + locale: US + revive: + confidence: 0 + rules: + - name: blank-imports + - name: context-as-argument + - name: context-keys-type + - name: dot-imports + - name: early-return + - name: error-naming + - name: error-return + - name: error-strings + - name: errorf + - name: exported + - name: increment-decrement + - name: indent-error-flow + - name: package-comments + - name: range + - name: receiver-naming + - name: time-naming + - name: var-declaration diff --git a/bcs-scenarios/bcs-gitops-pre-check/Makefile b/bcs-scenarios/bcs-gitops-pre-check/Makefile new file mode 100644 index 0000000000..a3a8e0b0b5 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/Makefile @@ -0,0 +1,67 @@ + +GOPATH:=$(shell go env GOPATH) + +bcs_edition?=inner_edition + +# init the build information +ifdef HASTAG + GITTAG=${HASTAG} +else + GITTAG=$(shell git describe --always) +endif + +BUILDTIME = $(shell date +%Y-%m-%dT%T%z) +GITHASH=$(shell git rev-parse HEAD) +VERSION?=${GITTAG}-$(shell date +%y.%m.%d) +WORKSPACE=$(shell pwd) + +LDFLAG=-ldflags "-X github.com/Tencent/bk-bcs/bcs-common/common/static.ZookeeperClientUser=${bcs_zk_client_user} \ + -X github.com/Tencent/bk-bcs/bcs-common/common/static.ZookeeperClientPwd=${bcs_zk_client_pwd} \ + -X github.com/Tencent/bk-bcs/bcs-common/common/static.EncryptionKey=${bcs_encryption_key} \ + -X github.com/Tencent/bk-bcs/bcs-common/common/static.ServerCertPwd=${bcs_server_cert_pwd} \ + -X github.com/Tencent/bk-bcs/bcs-common/common/static.ClientCertPwd=${bcs_client_cert_pwd} \ + -X github.com/Tencent/bk-bcs/bcs-common/common/static.LicenseServerClientCertPwd=${bcs_license_server_client_cert_pwd} \ + -X github.com/Tencent/bk-bcs/bcs-common/common/static.BcsDefaultUser=${bcs_registry_default_user} \ + -X github.com/Tencent/bk-bcs/bcs-common/common/static.BcsDefaultPasswd=${bcs_registry_default_pwd} \ + -X github.com/Tencent/bk-bcs/bcs-common/common/version.BcsVersion=${VERSION} \ + -X github.com/Tencent/bk-bcs/bcs-common/common/version.BcsBuildTime=${BUILDTIME} \ + -X github.com/Tencent/bk-bcs/bcs-common/common/version.BcsGitHash=${GITHASH} \ + -X github.com/Tencent/bk-bcs/bcs-common/common/version.BcsTag=${GITTAG} \ + -X github.com/Tencent/bk-bcs/bcs-common/common/version.BcsEdition=${bcs_edition}" + +# build path config +INNER_PACKAGEPATH=build/bcs.${VERSION} + +.PHONY: init +init: + go install github.com/golang/protobuf/protoc-gen-go@latest + go install github.com/micro/micro/v3/cmd/protoc-gen-openapi@latest + go install github.com/go-micro/generator/cmd/protoc-gen-micro@latest + go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@v2.7.3 + go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.7.3 + + +.PHONY: api +api: + protoc -I ../../bcs-services/bcs-nodegroup-manager/third_party/ --openapi_out=./proto/ --proto_path=. proto/bcs-gitops-pre-check.proto + +.PHONY: proto +proto: + protoc -I ../../bcs-services/bcs-nodegroup-manager/third_party/ --proto_path=. --grpc-gateway_out=logtostderr=true,register_func_suffix=Gw:. --go-grpc_out=. --micro_out=. --go_out=:. proto/bcs-gitops-pre-check.proto + + +.PHONY: build +build: + go build ${LDFLAG} -o bcs-gitops-pre-check *.go + +.PHONY: test +test: + go test -v ./... -cover + +.PHONY: docker +docker: + docker build . -t bcs-gitops-pre-check:latest + +.PHONY: client +client: + GOOS=linux GOARCH=amd64 go build -o kubectl-bcs-gitops-pre-check cmd/client/client.go \ No newline at end of file diff --git a/bcs-scenarios/bcs-gitops-pre-check/cmd/option.go b/bcs-scenarios/bcs-gitops-pre-check/cmd/option.go new file mode 100644 index 0000000000..c429cd5ef9 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/cmd/option.go @@ -0,0 +1,193 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package cmd xxx +package cmd + +import ( + "crypto/tls" + "fmt" + + "github.com/Tencent/bk-bcs/bcs-common/common/conf" + "github.com/Tencent/bk-bcs/bcs-common/common/ssl" + "github.com/Tencent/bk-bcs/bcs-common/common/static" + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager/pkg/common" +) + +const ( + defaultResourceManagerService = "resourcemanager.bkbcs.tencent.com" + defaultClusterManagerService = "clustermanager.bkbcs.tencent.com" +) + +// Etcd configuration +type Etcd struct { + Endpoints string `json:"endpoints"` + CA string `json:"ca"` + Key string `json:"key"` + Cert string `json:"cert"` + tlsConfig *tls.Config +} + +// Storage configuration +type Storage struct { + Endpoints string `json:"endpoints"` + Database string `json:"database"` + UserName string `json:"username"` + Password string `json:"password"` +} + +// ServerConfig option for server +// nolint +type ServerConfig struct { + Address string `json:"address"` + IPv6Address string `json:"ipv6address"` + Port uint `json:"port"` + HTTPPort uint `json:"httpport"` + MetricPort uint `json:"metricport"` + ServerCert string `json:"servercert"` + ServerKey string `json:"serverkey"` + ServerCa string `json:"serverca"` + serverTLS *tls.Config // nolint +} + +// ClientConfig option for as client +type ClientConfig struct { + ClientCert string `json:"clientcert"` + ClientKey string `json:"clientkey"` + ClientCa string `json:"clientca"` + clientTLS *tls.Config // nolint +} + +// GatewayConfig bcs gateway config +type GatewayConfig struct { + Endpoint string `json:"endpoint"` + Token string `json:"token"` +} + +// AppConfig app config +type AppConfig struct { + AppCode string `json:"appCode"` + AppSecret string `json:"appSecret"` + UserName string `json:"userName"` + AccessToken string `json:"accessToken"` +} + +// DefaultOptions create default options for server +func DefaultOptions() *Options { + return &Options{ + FileConfig: conf.FileConfig{}, + LogConfig: conf.LogConfig{ + LogDir: "/data/bcs/logs/bcs", + Verbosity: 3, + AlsoToStdErr: true, + }, + ServerConfig: ServerConfig{ + Address: "127.0.0.1", + Port: 8081, + HTTPPort: 8080, + MetricPort: 8082, + }, + ClientConfig: ClientConfig{}, + ResourceManager: defaultResourceManagerService, + ClusterManager: defaultClusterManagerService, + Storage: &Storage{}, + Registry: &Etcd{}, + Gateway: &GatewayConfig{}, + Debug: false, + APPConfig: &AppConfig{}, + EndPoints: &Endpoints{}, + Concurrency: 0, + DataControllerInterval: 600, + DBConfig: &common.DBConfig{}, + MaxRecvMsgSize: 10 * 1024 * 1024, + } +} + +// Options for whole server +type Options struct { + conf.FileConfig + conf.LogConfig + ServerConfig + ClientConfig + ResourceManager string `json:"resourcemanager"` + ClusterManager string `json:"clusterManager"` + Storage *Storage `json:"storage"` + Registry *Etcd `json:"registry"` + Gateway *GatewayConfig `json:"gateway"` + Debug bool `json:"debug"` + APPConfig *AppConfig `json:"appConfig"` + EndPoints *Endpoints `json:"endPoints"` + Concurrency int `json:"concurrency"` + DataControllerInterval int `json:"dataControllerInterval"` + AdminNamespace string `json:"adminNamespace"` + DBConfig *common.DBConfig `json:"dbConfig,omitempty"` + MaxRecvMsgSize int `json:"maxRecvMsgSize"` +} + +// Endpoints endpoints config +type Endpoints struct { + TGit string `json:"tGit"` + TGitSubStr string `json:"tGitSubStr"` + PowerApp string `json:"powerApp"` + TGitOut string `json:"tGitOut"` + TGitOutSubStr string `json:"tGitOutSubStr"` + TGitCommunity string `json:"tGitCommunity"` + TGitCommunitySubStr string `json:"tGitCommunitySubStr"` + Gitlab string `json:"gitlab"` + GitlabSubStr string `json:"gitlabSubStr"` +} + +// Complete all unsetting config items +func (opt *Options) Complete() error { + if len(opt.ResourceManager) == 0 { + opt.ResourceManager = defaultResourceManagerService + } + // loading registry tls configuration + etcdConfig, err := ssl.ClientTslConfVerity(opt.Registry.CA, opt.Registry.Cert, + opt.Registry.Key, "") + if err != nil { + return fmt.Errorf("loading etcd registry tls configuration failed, %s", err.Error()) + } + opt.Registry.tlsConfig = etcdConfig + // loading client tls configuration + cliConfig, err := ssl.ClientTslConfVerity(opt.ClientCa, opt.ClientCert, + opt.ClientKey, static.ClientCertPwd) + if err != nil { + return fmt.Errorf("loading client side tls configuration failed, %s", err.Error()) + } + opt.clientTLS = cliConfig + // loading server tls configuration + svrConfig, err := ssl.ServerTslConfVerityClient(opt.ServerCa, opt.ServerCert, + opt.ServerKey, static.ServerCertPwd) + if err != nil { + return fmt.Errorf("loading server side tls config failed, %s", err.Error()) + } + opt.serverTLS = svrConfig + return nil +} + +// Validate all config items +func (opt *Options) Validate() error { + if opt.clientTLS == nil { + return fmt.Errorf("lost client side TLS config") + } + if opt.serverTLS == nil { + return fmt.Errorf("lost server side TLS config") + } + if opt.Registry.tlsConfig == nil { + return fmt.Errorf("lost registry TLS config") + } + // if len(opt.Storage.Password) == 0 { + // return fmt.Errorf("lost password") + // } + return nil +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/cmd/server.go b/bcs-scenarios/bcs-gitops-pre-check/cmd/server.go new file mode 100644 index 0000000000..683124c784 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/cmd/server.go @@ -0,0 +1,341 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cmd + +import ( + "context" + "fmt" + "net" + "net/http" + "net/http/pprof" + "runtime/debug" + "strconv" + "strings" + "sync" + "time" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/Tencent/bk-bcs/bcs-common/common/version" + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager/pkg/store" + "github.com/go-micro/plugins/v4/registry/etcd" + microgrpcsvc "github.com/go-micro/plugins/v4/server/grpc" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/pkg/errors" + "github.com/prometheus/client_golang/prometheus/promhttp" + microsvc "go-micro.dev/v4" + "go-micro.dev/v4/registry" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/handler" + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git" + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/pkg/common" + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/pkg/storage" + precheck "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/proto" +) + +const ( + // RpcServerName the name of PredictApproval server + RpcServerName = "gitopsprecheck.bkbcs.tencent.com" + // RegisterTTL register ttl + RegisterTTL = 20 + // RegisterInterval register interval + RegisterInterval = 10 +) + +// Server powertrading server +type Server struct { + op *Options + + httpServer *http.Server + rpcServer microsvc.Service + metricServer *http.Server + metricListeners []net.Listener + + internalCtx context.Context + internalCancel context.CancelFunc + internalWg *sync.WaitGroup + publicFunc common.PublicFunc + db storage.Interface +} + +// NewServer new server +func NewServer(ctx context.Context, cancel context.CancelFunc, opt *Options) *Server { + return &Server{ + op: opt, + internalCtx: ctx, + internalCancel: cancel, + } +} + +// Init will parse options, and init grpc_server/http_server/metric_server +func (s *Server) Init() error { + s.initMetricServer() + if err := s.initDB(); err != nil { + return errors.Wrapf(err, "init db failed") + } + if err := s.initPublicFunc(); err != nil { + return errors.Wrapf(err, "init publicFunc failed") + } + if err := s.initHTTPServer(); err != nil { + return errors.Wrapf(err, "init http server failed") + } + if err := s.initRpcServer(); err != nil { + return errors.Wrapf(err, "init rpc server failed") + } + return nil +} + +// Run all the server that had init +func (s *Server) Run() error { + errChan := s.run(s.runHttpServer, s.runMetricServer, s.runRpcServer) + + defer func() { + s.internalCancel() + s.internalWg.Wait() + }() + for { + select { + case err := <-errChan: + return errors.Wrapf(err, "server exit with error") + // case <-s.cfgHandler.ChangedChan(): + // s.handleConfigChanged() + case <-s.internalCtx.Done(): + return nil + } + } +} + +// run will run goroutines and add wait group for them +func (s *Server) run(fs ...func(errChan chan error)) chan error { + s.internalWg = &sync.WaitGroup{} + s.internalWg.Add(len(fs)) + errChan := make(chan error, len(fs)) + for i := range fs { + go fs[i](errChan) + } + return errChan +} + +// initPProf init pprof +func (s *Server) initPProf(mux *http.ServeMux) { + if !s.op.Debug { + blog.Infof("pprof is disabled") + return + } + blog.Infof("pprof is enabled") + mux.HandleFunc("/debug/pprof/", pprof.Index) + mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline) + mux.HandleFunc("/debug/pprof/profile", pprof.Profile) + mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol) + mux.HandleFunc("/debug/pprof/trace", pprof.Trace) +} + +// initMetric init metric +func (s *Server) initMetric(mux *http.ServeMux) { + blog.Infof("init metric handler") + mux.Handle("/metrics", promhttp.Handler()) +} + +// init metric server and pprof +func (s *Server) initMetricServer() { + metricMux := http.NewServeMux() + s.initPProf(metricMux) + s.initMetric(metricMux) + extraServerEndpoint := s.op.Address + ":" + strconv.Itoa(int(s.op.MetricPort)) + s.metricServer = &http.Server{ + Addr: extraServerEndpoint, + Handler: metricMux, + } + go func() { + var err error + blog.Infof("start extra modules [pprof, metric] server %s", extraServerEndpoint) + err = s.metricServer.ListenAndServe() + if err != nil { + blog.Errorf("extra modules server listen failed, err %s", err.Error()) + s.internalCancel() + } + }() + blog.Infof("init metricServer success") +} + +// initRpcServer init micro server +func (s *Server) initRpcServer() error { + etcdRegistry := etcd.NewRegistry( + registry.Addrs(strings.Split(s.op.Registry.Endpoints, ",")...), + registry.TLSConfig(s.op.Registry.tlsConfig), + ) + microServer := microsvc.NewService( + // microsvc.Server(microgrpcsvc.NewServer(microgrpcsvc.AuthTLS(s.op.serverTLS))), + microsvc.Server(microgrpcsvc.NewServer(microgrpcsvc.MaxMsgSize(s.op.MaxRecvMsgSize))), + microsvc.Context(s.internalCtx), + microsvc.Name(RpcServerName), + microsvc.Metadata(map[string]string{ + "httpport": fmt.Sprintf("%d", s.op.HTTPPort), + }), + microsvc.Registry(etcdRegistry), + // set address to fist ip, if ipv4/ipv6 all set + microsvc.Address(fmt.Sprintf("%s:%d", s.op.Address, s.op.Port)), + microsvc.RegisterTTL(RegisterTTL*time.Second), + microsvc.RegisterInterval(RegisterInterval*time.Second), + microsvc.Version(version.BcsVersion), + ) + s.rpcServer = microServer + fmt.Println(s.rpcServer.Name()) + + if err := precheck.RegisterGitOpsPreCheckHandler(s.rpcServer.Server(), + handler.New(&handler.Opts{PublicFunc: s.publicFunc})); err != nil { + blog.Errorf("register rpc handler failed, err: %s", err.Error()) + return err + } + blog.Infof("init micro service success") + return nil +} + +// initHTTPServer init http server +func (s *Server) initHTTPServer() error { + ctx, _ := context.WithCancel(s.internalCtx) // nolint + // register grpc server information + mux := runtime.NewServeMux( + runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{}), + ) + opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())} + err := precheck.RegisterGitOpsPreCheckGwFromEndpoint( + ctx, mux, fmt.Sprintf("%s:%d", s.op.Address, s.op.Port), opts) + if err != nil { + return fmt.Errorf("http gateway register grpc service failed, %s", err.Error()) + } + s.httpServer = &http.Server{ + Addr: fmt.Sprintf("%s:%d", s.op.Address, s.op.HTTPPort), + Handler: mux, + // TLSConfig: s.op.serverTLS, + } + blog.Infof("init http server success") + return nil +} + +// initStorage init db +// func (s *Server) initStorage() error { +// // convert to mongo options +// storageOption := &mongo.Options{ +// Hosts: strings.Split(s.op.Storage.Endpoints, ","), +// ConnectTimeoutSeconds: 3, +// Database: s.op.Storage.Database, +// Username: s.op.Storage.UserName, +// Password: s.op.Storage.Password, +// } +// instance, err := mongo.NewDB(storageOption) +// if err != nil { +// return fmt.Errorf("storage create dm mongo instance failed, %s", err.Error()) +// } +// if pingErr := instance.Ping(); pingErr != nil { +// return fmt.Errorf("dm storage connection test failed, %s", pingErr.Error()) +// } +// s.storage = mongostore.NewServer(instance) +// blog.Infof("init storage success") +// return nil +//} + +// runMetricServer run metric server +func (s *Server) runMetricServer(errChan chan error) { + defer s.internalWg.Done() + errs := make(chan error, len(s.metricListeners)) + for _, listener := range s.metricListeners { + go func(listener net.Listener) { + if err := s.metricServer.Serve(listener); err != nil { + errs <- errors.Wrapf(err, "serve metric listener '%s' failed", listener.Addr()) + } + }(listener) + } + if err, ok := <-errs; ok { + if err != nil { + errChan <- err + } + } +} + +// runHttpServer run http server +func (s *Server) runHttpServer(errChan chan error) { + var err error + defer func() { + s.internalWg.Done() + if r := recover(); r != nil { + err = errors.Errorf("http_server panic, err: %v, stack:\n%s", r, string(debug.Stack())) + } + if err != nil { + blog.Errorf("http_server exited: %s", err.Error()) + errChan <- err + } else { + blog.Infof("http_server is stopped.") + } + }() + if err = s.httpServer.ListenAndServe(); err != nil { + err = errors.Wrapf(err, "serve http listener '%d' failed", s.op.HTTPPort) + } +} + +// runRpcServer run rpc server +func (s *Server) runRpcServer(errChan chan error) { + var err error + defer func() { + s.internalWg.Done() + if r := recover(); r != nil { + err = errors.Errorf("rpc_server panic, err: %v, stack:\n%s", r, string(debug.Stack())) + } + if err != nil { + blog.Errorf("rpc_server exited: %s", err.Error()) + errChan <- err + } else { + blog.Infof("rpc_server is stopped.") + } + }() + + blog.Infof("rpc_server is started.") + if err = s.rpcServer.Run(); err != nil { + err = errors.Wrapf(err, "rpc_server exit with error") + } +} + +func (s *Server) initDB() error { + db, err := storage.NewDriver(s.op.DBConfig) + if err != nil { + return errors.Wrapf(err, "create db failed") + } + if err = db.Init(); err != nil { + return errors.Wrapf(err, "init db failed") + } + s.db = db + blog.Infof("init db success.") + return nil +} + +func (s *Server) initPublicFunc() error { + argoDB, _, err := store.NewArgoDB(s.internalCtx, s.op.AdminNamespace) + if err != nil { + return fmt.Errorf("new argoDB failed:%s", err.Error()) + } + gitFactory := git.NewFactory(&git.FactoryOpts{ + TGitEndpoint: s.op.EndPoints.TGit, + TGitSubStr: s.op.EndPoints.TGitSubStr, + TGitOutEndpoint: s.op.EndPoints.TGitOut, + TGitOutSubStr: s.op.EndPoints.TGitOutSubStr, + TGitCommunityEndpoint: s.op.EndPoints.TGitCommunity, + TGitCommunitySubStr: s.op.EndPoints.TGitCommunitySubStr, + GitlabEndpoint: s.op.EndPoints.Gitlab, + GitlabSubStr: s.op.EndPoints.GitlabSubStr, + }) + gitFactory.Init() + opts := &common.PublicFuncOpts{PowerAppEp: s.op.EndPoints.PowerApp} + s.publicFunc = common.NewPublicFunc(argoDB, gitFactory, s.db, opts) + return nil +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/go.mod b/bcs-scenarios/bcs-gitops-pre-check/go.mod new file mode 100644 index 0000000000..2132e7f655 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/go.mod @@ -0,0 +1,305 @@ +module github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check + +go 1.20 + +replace ( + github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager => github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager v0.0.0-20240710113507-c09313e181ec + github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-workflow => github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-workflow v0.0.0-20240710113507-c09313e181ec + + github.com/argoproj/gitops-engine => github.com/argoproj/gitops-engine v0.7.1-0.20230906152414-b0fffe419a0f + github.com/chai2010/gettext-go => github.com/chai2010/gettext-go v0.1.0 + + // https://github.com/golang/go/issues/33546#issuecomment-519656923 + github.com/go-check/check => github.com/go-check/check v0.0.0-20180628173108-788fd7840127 + github.com/golang/protobuf => github.com/golang/protobuf v1.4.3 + go.opentelemetry.io/otel => go.opentelemetry.io/otel v1.16.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace => go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.16.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.16.0 + go.opentelemetry.io/otel/metric => go.opentelemetry.io/otel/metric v1.16.0 + go.opentelemetry.io/otel/sdk => go.opentelemetry.io/otel/sdk v1.16.0 + go.opentelemetry.io/otel/trace => go.opentelemetry.io/otel/trace v1.16.0 + google.golang.org/grpc => google.golang.org/grpc v1.46.2 + google.golang.org/protobuf => google.golang.org/protobuf v1.28.0 + + // Avoid CVE-2022-3064 + gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.4.0 + + // Avoid CVE-2022-28948 + gopkg.in/yaml.v3 => gopkg.in/yaml.v3 v3.0.1 + + // https://github.com/kubernetes/kubernetes/issues/79384#issuecomment-505627280 + k8s.io/api => k8s.io/api v0.24.2 + k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.24.2 + k8s.io/apimachinery => k8s.io/apimachinery v0.24.2 + k8s.io/apiserver => k8s.io/apiserver v0.24.2 + k8s.io/cli-runtime => k8s.io/cli-runtime v0.24.2 + k8s.io/client-go => k8s.io/client-go v0.24.2 + k8s.io/cloud-provider => k8s.io/cloud-provider v0.24.2 + k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.24.2 + k8s.io/code-generator => k8s.io/code-generator v0.24.2 + k8s.io/component-base => k8s.io/component-base v0.24.2 + k8s.io/component-helpers => k8s.io/component-helpers v0.24.2 + k8s.io/controller-manager => k8s.io/controller-manager v0.24.2 + k8s.io/cri-api => k8s.io/cri-api v0.24.2 + k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.24.2 + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.24.2 + k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.24.2 + k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20220627174259-011e075b9cb8 + k8s.io/kube-proxy => k8s.io/kube-proxy v0.24.2 + k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.24.2 + k8s.io/kubectl => k8s.io/kubectl v0.24.2 + k8s.io/kubelet => k8s.io/kubelet v0.24.2 + k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.24.2 + k8s.io/metrics => k8s.io/metrics v0.24.2 + k8s.io/mount-utils => k8s.io/mount-utils v0.24.2 + k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.24.2 + k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.24.2 + sigs.k8s.io/kustomize/api => sigs.k8s.io/kustomize/api v0.11.4 + sigs.k8s.io/kustomize/kyaml => sigs.k8s.io/kustomize/kyaml v0.13.6 +) + +require ( + github.com/Tencent/bk-bcs/bcs-common v0.0.0-20240115064206-f3812beb640b + github.com/Tencent/bk-bcs/bcs-common/pkg/audit v0.0.0-20231114032042-90745b766c4b // indirect + github.com/Tencent/bk-bcs/bcs-common/pkg/auth v0.0.0-20231130061921-aba183933987 // indirect + github.com/Tencent/bk-bcs/bcs-common/pkg/bcsapiv4 v0.0.0-20231114032042-90745b766c4b // indirect + github.com/Tencent/bk-bcs/bcs-common/pkg/otel v0.0.0-20231124101643-0d25188774c2 // indirect + github.com/Tencent/bk-bcs/bcs-services/cluster-resources v0.0.0-20231114032042-90745b766c4b // indirect + github.com/argoproj/argo-cd/v2 v2.9.3 + github.com/argoproj/gitops-engine v0.7.3 // indirect + github.com/envoyproxy/protoc-gen-validate v1.0.2 // indirect + github.com/go-micro/plugins/v4/registry/etcd v1.2.0 + github.com/go-micro/plugins/v4/server/grpc v1.2.0 + github.com/go-sql-driver/mysql v1.7.1 + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/protobuf v1.5.4 // indirect + github.com/google/uuid v1.5.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 + github.com/pkg/errors v0.9.1 + github.com/prometheus-operator/prometheus-operator/pkg/client v0.69.1 // indirect + github.com/prometheus/client_golang v1.17.0 + github.com/spf13/cobra v1.7.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + go-micro.dev/v4 v4.10.2 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.18.0 // indirect + go.opentelemetry.io/otel/metric v1.20.0 // indirect + go.opentelemetry.io/otel/trace v1.20.0 // indirect + go.opentelemetry.io/proto/otlp v1.0.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 + google.golang.org/grpc v1.59.0 + google.golang.org/protobuf v1.34.2 + gorm.io/driver/mysql v1.5.2 + gorm.io/gorm v1.25.5 + k8s.io/api v0.28.3 // indirect + k8s.io/apimachinery v0.30.0 // indirect + k8s.io/client-go v11.0.1-0.20190816222228-6d55c1b1f1ca+incompatible // indirect + k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect + k8s.io/kubernetes v1.24.2 // indirect +) + +require ( + github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager v0.0.0-20240124084046-a0156afd4af9 + github.com/go-resty/resty/v2 v2.7.0 + github.com/grpc-ecosystem/grpc-gateway v1.16.0 + github.com/xanzy/go-gitlab v0.91.1 +) + +require ( + cloud.google.com/go/compute v1.23.2 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + dario.cat/mergo v1.0.0 // indirect + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect + github.com/MakeNowJust/heredoc v1.0.0 // indirect + github.com/Masterminds/semver/v3 v3.2.1 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect + github.com/Tencent/bk-bcs/bcs-runtime/bcs-k8s/kubernetes/common v0.0.0-20220330120237-0bbed74dcf6d // indirect + github.com/TencentBlueKing/bk-audit-go-sdk v0.0.5 // indirect + github.com/TencentBlueKing/gopkg v1.1.0 // indirect + github.com/TencentBlueKing/iam-go-sdk v0.1.5 // indirect + github.com/argoproj/pkg v0.13.7-0.20230626144333-d56162821bd1 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bitly/go-simplejson v0.5.0 // indirect + github.com/blang/semver/v4 v4.0.0 // indirect + github.com/bmatcuk/doublestar/v4 v4.6.0 // indirect + github.com/bombsimon/logrusr/v2 v2.0.1 // indirect + github.com/bradleyfalzon/ghinstallation/v2 v2.6.0 // indirect + github.com/cenkalti/backoff/v4 v4.2.1 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/chai2010/gettext-go v1.0.2 // indirect + github.com/cloudflare/circl v1.3.3 // indirect + github.com/coreos/go-oidc/v3 v3.6.0 // indirect + github.com/coreos/go-semver v0.3.1 // indirect + github.com/coreos/go-systemd/v22 v22.5.0 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/evanphx/json-patch v5.6.0+incompatible // indirect + github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect + github.com/fatih/camelcase v1.0.0 // indirect + github.com/fatih/color v1.15.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fvbommel/sortorder v1.1.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect + github.com/go-acme/lego/v4 v4.4.0 // indirect + github.com/go-errors/errors v1.4.2 // indirect + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-git/go-billy/v5 v5.5.0 // indirect + github.com/go-git/go-git/v5 v5.11.0 // indirect + github.com/go-jose/go-jose/v3 v3.0.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-openapi/jsonpointer v0.20.0 // indirect + github.com/go-openapi/jsonreference v0.20.2 // indirect + github.com/go-openapi/swag v0.22.4 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.14.0 // indirect + github.com/go-redis/cache/v9 v9.0.0 // indirect + github.com/gobwas/glob v0.2.3 // indirect + github.com/gobwas/httphead v0.1.0 // indirect + github.com/gobwas/pool v0.2.1 // indirect + github.com/gobwas/ws v1.0.4 // indirect + github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang-migrate/migrate/v4 v4.16.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/google/btree v1.1.2 // indirect + github.com/google/gnostic v0.6.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/go-github/v53 v53.2.0 // indirect + github.com/google/go-querystring v1.1.0 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect + github.com/gorilla/handlers v1.5.1 // indirect + github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-hclog v0.16.2 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-retryablehttp v0.7.4 // indirect + github.com/imdario/mergo v0.3.16 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/itchyny/gojq v0.12.13 // indirect + github.com/itchyny/timefmt-go v0.1.5 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect + github.com/jonboulle/clockwork v0.2.2 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/juju/ratelimit v1.0.1 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/kevinburke/ssh_config v1.2.0 // indirect + github.com/klauspost/compress v1.17.0 // indirect + github.com/leodido/go-urn v1.2.4 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattbaird/jsonpatch v0.0.0-20200820163806-098863c1fc24 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/miekg/dns v1.1.50 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/mitchellh/hashstructure v1.1.0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/moby/spdystream v0.2.0 // indirect + github.com/moby/term v0.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/nxadm/tail v1.4.8 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.0-rc4 // indirect + github.com/opencontainers/selinux v1.10.0 // indirect + github.com/openzipkin/zipkin-go v0.3.0 // indirect + github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect + github.com/parnurzeal/gorequest v0.2.16 // indirect + github.com/patrickmn/go-cache v2.1.0+incompatible // indirect + github.com/peterbourgon/diskv v2.0.1+incompatible // indirect + github.com/pjbgf/sha1cd v0.3.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.69.1 // indirect + github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect + github.com/prometheus/common v0.44.0 // indirect + github.com/prometheus/procfs v0.11.1 // indirect + github.com/r3labs/diff v1.1.0 // indirect + github.com/redis/go-redis/v9 v9.0.5 // indirect + github.com/robfig/cron/v3 v3.0.1 // indirect + github.com/russross/blackfriday v1.6.0 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414 // indirect + github.com/sergi/go-diff v1.2.0 // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/skeema/knownhosts v1.2.1 // indirect + github.com/stretchr/testify v1.8.4 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect + github.com/urfave/cli/v2 v2.3.0 // indirect + github.com/vmihailenco/go-tinylfu v0.2.2 // indirect + github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect + github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect + github.com/xanzy/ssh-agent v0.3.3 // indirect + github.com/xlab/treeprint v1.2.0 // indirect + go.etcd.io/etcd/api/v3 v3.5.9 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect + go.etcd.io/etcd/client/v3 v3.5.9 // indirect + go.mongodb.org/mongo-driver v1.12.1 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 // indirect + go.opentelemetry.io/otel v1.20.0 // indirect + go.opentelemetry.io/otel/exporters/jaeger v1.3.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.16.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.18.0 // indirect + go.opentelemetry.io/otel/exporters/zipkin v1.3.0 // indirect + go.opentelemetry.io/otel/sdk v1.18.0 // indirect + go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect + go.uber.org/atomic v1.11.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.25.0 // indirect + golang.org/x/crypto v0.21.0 // indirect + golang.org/x/mod v0.15.0 // indirect + golang.org/x/net v0.23.0 // indirect + golang.org/x/oauth2 v0.13.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/term v0.18.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/time v0.3.0 // indirect + golang.org/x/tools v0.18.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + k8s.io/apiextensions-apiserver v0.28.3 // indirect + k8s.io/apiserver v0.28.3 // indirect + k8s.io/cli-runtime v0.28.3 // indirect + k8s.io/cloud-provider v0.24.2 // indirect + k8s.io/component-base v0.28.3 // indirect + k8s.io/component-helpers v0.28.0 // indirect + k8s.io/cri-api v0.0.0 // indirect + k8s.io/klog v1.0.0 // indirect + k8s.io/klog/v2 v2.120.1 // indirect + k8s.io/kube-aggregator v0.24.2 // indirect + k8s.io/kubectl v0.28.0 // indirect + k8s.io/mount-utils v0.24.2 // indirect + k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect + moul.io/http2curl v1.0.0 // indirect + oras.land/oras-go/v2 v2.3.0 // indirect + sigs.k8s.io/controller-runtime v0.16.3 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect + sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 // indirect + sigs.k8s.io/kustomize/kyaml v0.14.2 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect +) diff --git a/bcs-scenarios/bcs-gitops-pre-check/handler/bcs-gitops-precheck.go b/bcs-scenarios/bcs-gitops-pre-check/handler/bcs-gitops-precheck.go new file mode 100644 index 0000000000..b13dc8dd9c --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/handler/bcs-gitops-precheck.go @@ -0,0 +1,195 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package handler xxx +package handler + +import ( + "context" + "encoding/json" + "fmt" + "strconv" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/pkg/common" + precheck "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/proto" +) + +// PreCheckHandler handler struct +type PreCheckHandler struct { + opts *Opts +} + +// New handler +func New(opts *Opts) *PreCheckHandler { + return &PreCheckHandler{opts: opts} +} + +// Opts handler opts +type Opts struct { + PublicFunc common.PublicFunc +} + +var ( + // InternalErr internal err code + InternalErr = uint32(500) + // Success success code + Success = uint32(0) + requestSuccess = "request success" +) + +// GetMrInfo node cordon +func (p *PreCheckHandler) GetMrInfo(ctx context.Context, + req *precheck.GetMrInfoReq, rsp *precheck.GetMrInfoRsp) error { + blog.Infof("receive GetMRInfo request, repo:%s, mrIID:%s", req.Repository, req.MrIID) + data, err := p.opts.PublicFunc.GetMrInfo(ctx, req.GetRepository(), req.GetMrIID()) + if err != nil { + blog.Errorf("GetMrInfo request failed: %s", err.Error()) + rsp.Code = &InternalErr + msg := err.Error() + rsp.Message = msg + return nil + } + rsp.Code = &Success + msg := requestSuccess + rsp.Message = msg + rsp.Data = data + return nil +} + +// RecordTaskByPlugin record +func (p *PreCheckHandler) RecordTaskByPlugin(ctx context.Context, req *precheck.PreCheckTask, + rsp *precheck.PreCheckTaskRsp) error { + blog.Infof("receive RecordTaskByPlugin request, project:%s, repo:%s, user:%s", req.Project, + req.RepositoryAddr, req.TriggerByUser) + blog.Info("RecordTaskByPlugin req detail:", req) + task, err := p.opts.PublicFunc.RecordPreCheckTask(ctx, req) + if err != nil { + blog.Errorf("record preCheckTask failed: %s", err.Error()) + rsp.Code = &InternalErr + msg := err.Error() + rsp.Message = msg + return nil + } + rsp.Code = &Success + msg := requestSuccess + rsp.Message = msg + rsp.Data = task + return nil +} + +// GetTaskByID get task +func (p *PreCheckHandler) GetTaskByID(ctx context.Context, req *precheck.GetTaskByIDReq, + rsp *precheck.PreCheckTaskRsp) error { + blog.Infof("receive GetTaskByID request, id:%s, project:%s, diffDetail", req.Id, req.Project, req.DiffDetail) + if req.Id == "" || req.Project == "" { + blog.Errorf("get preCheckTask failed, id %s illegal or project %s illegal", req.Id, req.Project) + rsp.Code = &InternalErr + msg := fmt.Sprintf("id %s illegal or project %s illegal", req.Id, req.Project) + rsp.Message = msg + return nil + } + id, err := strconv.Atoi(req.Id) + if err != nil { + blog.Errorf("get preCheckTask failed, id %s illegal", req.Id) + rsp.Code = &InternalErr + msg := err.Error() + rsp.Message = msg + return nil + } + task, err := p.opts.PublicFunc.GetPreCheckTask(ctx, id, req.Project) + if err != nil { + blog.Errorf("get task failed: %s", err.Error()) + rsp.Code = &InternalErr + msg := err.Error() + rsp.Message = msg + return nil + } + if !req.DiffDetail { + handleDiffDetail(task) + } + rsp.Code = &Success + msg := requestSuccess + rsp.Message = msg + rsp.Data = task + return nil +} + +// UpdateTask update +func (p *PreCheckHandler) UpdateTask(ctx context.Context, req *precheck.PreCheckTask, + rsp *precheck.PreCheckTaskRsp) error { + blog.Infof("receive UpdateTask request, id:%s", req.Id) + task, err := p.opts.PublicFunc.UpdatePreCheckTask(ctx, req) + if err != nil { + blog.Errorf("update preCheckTask failed: %s", err.Error()) + rsp.Code = &InternalErr + msg := err.Error() + rsp.Message = msg + return nil + } + rsp.Code = &Success + msg := requestSuccess + rsp.Message = msg + rsp.Data = task + return nil +} + +// ListTask list +func (p *PreCheckHandler) ListTask(ctx context.Context, req *precheck.ListTaskByIDReq, + rsp *precheck.ListPreCheckTaskRsp) error { + blog.Infof("receive ListTask request, project:%v, repos:%s", req.Projects, req.Repos) + task, err := p.opts.PublicFunc.QueryPreCheckTaskList(ctx, req) + if err != nil { + blog.Errorf("list task failed: %s", err.Error()) + rsp.Code = &InternalErr + msg := err.Error() + rsp.Message = msg + return nil + } + rsp.Code = &Success + msg := requestSuccess + rsp.Message = msg + rsp.Data = task + return nil +} + +func handleDiffDetail(task *precheck.PreCheckTask) { + if task.CheckDetail == nil || task.CheckDetail["diff"] == nil || task.CheckDetail["diff"].CheckDetail == nil { + return + } + for app := range task.CheckDetail["diff"].CheckDetail { + diffApp := task.CheckDetail["diff"].CheckDetail[app] + if diffApp.Detail == nil || len(diffApp.Detail) == 0 { + continue + } + newDetail := make([]*precheck.ResourceCheckDetail, 0) + for index := range diffApp.Detail { + if diffApp.Detail[index].Detail == "" { + continue + } + newResource := &precheck.ResourceCheckDetail{} + bytes, err := json.Marshal(diffApp.Detail[index]) + if err != nil { + blog.Errorf("marshal detail to bytes error:%s", err.Error()) + continue + } + err = json.Unmarshal(bytes, newResource) + if err != nil { + blog.Errorf("unmarshal detail error:%s", err.Error()) + continue + } + newDetail = append(newDetail, newResource) + } + task.CheckDetail["diff"].CheckDetail[app].Detail = newDetail + } +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/image/Dockerfile b/bcs-scenarios/bcs-gitops-pre-check/image/Dockerfile new file mode 100644 index 0000000000..5bbcc49ade --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/image/Dockerfile @@ -0,0 +1,23 @@ +FROM centos:7 + +#for command envsubst +RUN yum install -y gettext + +RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ + && echo 'LANG="en_US.UTF-8"' > /etc/locale.conf +ENV LANG=en_US.UTF-8 \ + LANGUAGE=en_US.UTF-8 + +RUN mkdir -p /data/bcs/bcs-gitops-pre-check/ +RUN mkdir -p /data/bcs/logs/bcs + +ADD bcs-gitops-pre-check /data/bcs/bcs-gitops-pre-check/ +ADD bcs-gitops-pre-check.json.template /data/bcs/bcs-gitops-pre-check/ +ADD container-start.sh /data/bcs/bcs-gitops-pre-check/ + +RUN chmod +x /data/bcs/bcs-gitops-pre-check/container-start.sh +RUN chmod +x /data/bcs/bcs-gitops-pre-check/bcs-gitops-pre-check + + +WORKDIR /data/bcs/bcs-gitops-pre-check/ +CMD [ "/data/bcs/bcs-gitops-pre-check/container-start.sh" ] \ No newline at end of file diff --git a/bcs-scenarios/bcs-gitops-pre-check/image/bcs-gitops-pre-check.json.template b/bcs-scenarios/bcs-gitops-pre-check/image/bcs-gitops-pre-check.json.template new file mode 100644 index 0000000000..3068778a02 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/image/bcs-gitops-pre-check.json.template @@ -0,0 +1,62 @@ +{ + "log_dir": "${log_dir}", + "v": ${bcsGitopsPreCheckVerbosity}, + "alsologtostderr": true, + "log_max_size": 500, + "log_max_num": 10, + "logtostderr": false, + "stderrthreshold": "2", + "adminNamespace": "${bcsGitopsPreCheckServiceNamespace}", + "storage":{ + "endpoints":"${bcsGitopsPreCheckMongo}", + "database":"${bcsGitopsPreCheckMongoDB}", + "username":"${bcsGitopsPreCheckMongoUser}", + "password":"${bcsGitopsPreCheckMongoPassword}" + }, + "dbConfig": { + "username": "${bcsDatabaseUsername}", + "password": "${bcsDatabasePassword}", + "addr": "${bcsDatabaseAddr}", + "database": "${bcsDatabaseName}", + "limitQps": ${bcsDatabaseLimitQps} + }, + "registry": { + "endpoints": "${bcsEtcdHost}", + "cert": "${bcsEtcdCertFile}", + "key": "${bcsEtcdKeyFile}", + "ca": "${bcsEtcdCAFile}" + }, + "gateway": { + "endpoint": "${bcsGatewayEndpoint}", + "token": "${bcsGatewayToken}" + }, + "address": "${localIp}", + "port": ${bcsGitopsPreCheckPort}, + "httpport": ${bcsGitopsPreCheckHTTPPort}, + "metricport": ${bcsGitopsPreCheckMetricPort}, + "serverca": "${caFile}", + "servercert": "${serverCertFile}", + "serverkey": "${serverKeyFile}", + "clientca": "${caFile}", + "clientcert": "${clientCertFile}", + "clientkey": "${clientKeyFile}", + "debug": ${bcsGitopsPreCheckDebug}, + "maxRecvMsgSize": ${maxRecvMsgSize}, + "appConfig": { + "appCode": "${bcsGitopsPreCheckAppCode}", + "appSecret": "${bcsGitopsPreCheckAppSecret}", + "userName": "${bcsGitopsPreCheckUserName}", + "accessToken": "${accessToken}" + }, + "endPoints": { + "tGit": "${tGitEndpoint}", + "tGitSubStr": "${tGitSubStr}", + "tGitCommunity": "${tGitCommunityEndpoint}", + "tGitCommunitySubStr": "${tGitCommunitySubStr}", + "gitlab": "${gitlabEndpoint}", + "gitlabSubStr": "${gitlabSubStr}", + "tGitOut": "${tGitOutEndpoint}", + "tGitOutSubStr": "${tGitOutSubStr}", + "powerApp": "${powerAppEndpoint}" + } +} \ No newline at end of file diff --git a/bcs-scenarios/bcs-gitops-pre-check/image/container-start.sh b/bcs-scenarios/bcs-gitops-pre-check/image/container-start.sh new file mode 100644 index 0000000000..2692186230 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/image/container-start.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +module="bcs-gitops-pre-check" + +cd /data/bcs/${module} +chmod +x ${module} + +#check configuration render +if [ "$BCS_CONFIG_TYPE" == "render" ]; then + cat ${module}.json.template | envsubst | tee ${module}.json +fi + +#ready to start +exec /data/bcs/${module}/${module} $@ \ No newline at end of file diff --git a/bcs-scenarios/bcs-gitops-pre-check/main.go b/bcs-scenarios/bcs-gitops-pre-check/main.go new file mode 100644 index 0000000000..e4f8ff9298 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/main.go @@ -0,0 +1,62 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package main xxx +package main + +import ( + "context" + "fmt" + "os" + "os/signal" + "syscall" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/Tencent/bk-bcs/bcs-common/common/conf" + + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/cmd" +) + +func main() { + opts := cmd.DefaultOptions() + + conf.Parse(opts) + blog.InitLogs(opts.LogConfig) + defer blog.CloseLogs() + ctx, cancel := context.WithCancel(context.Background()) + go func() { + interrupt := make(chan os.Signal, 10) + signal.Notify(interrupt, syscall.SIGINT, syscall.SIGTERM, syscall.SIGUSR1, syscall.SIGUSR2) + for s := range interrupt { + blog.Infof("Received signal %v from system. Exit!", s) + cancel() + return + } + }() + // config option verification + if err := opts.Complete(); err != nil { + fmt.Fprintf(os.Stderr, "server option complete failed, %s\n", err.Error()) + return + } + if err := opts.Validate(); err != nil { + fmt.Fprintf(os.Stderr, "server option validate failed, %s\n", err.Error()) + return + } + blog.Infof("opts:%v", opts) + s := cmd.NewServer(ctx, cancel, opts) + if err := s.Init(); err != nil { + blog.Fatalf("init server failed: %s", err.Error()) + } + if err := s.Run(); err != nil { + blog.Fatalf("run server failed: %s", err.Error()) + } +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/argo/client.go b/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/argo/client.go new file mode 100644 index 0000000000..35663fcd5e --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/argo/client.go @@ -0,0 +1,48 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package argo xxx +package argo + +import ( + "context" + "fmt" + + appv1 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" + "github.com/argoproj/argo-cd/v2/util/db" +) + +// Client argo client +type Client interface { + GetRepository(ctx context.Context, repo string) (*appv1.Repository, error) +} + +type client struct { + argoDB db.ArgoDB +} + +// New client +func New(argoDB db.ArgoDB) Client { + return &client{argoDB: argoDB} +} + +// GetRepository get repo +func (c *client) GetRepository(ctx context.Context, repo string) (*appv1.Repository, error) { + repoInfo, err := c.argoDB.GetRepository(ctx, repo) + if err != nil { + return nil, fmt.Errorf("get repository %s failed:%s", repo, err.Error()) + } + if repoInfo == nil { + return nil, fmt.Errorf("get repository %s empty", repo) + } + return repoInfo, nil +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/factory.go b/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/factory.go new file mode 100644 index 0000000000..7954c2876b --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/factory.go @@ -0,0 +1,116 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package git xxx +package git + +import ( + "context" + "fmt" + "strings" + + precheck "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/proto" +) + +const ( + // TGitType tGit type + TGitType = "tGit" + // TGitOutType tGit type + TGitOutType = "tGitOut" + // TGitCommunityType community type + TGitCommunityType = "tGitCommunity" + // GitlabType gitlab + GitlabType = "gitlab" +) + +// Client git +type Client interface { + GetMrInfo(ctx context.Context, repoAddr, token, mrIID string) (*precheck.MRInfoData, error) + CommentMR(ctx context.Context, repoAddr, token, mrIID, comment string) error + SubmitCheckState(ctx context.Context, checkSystem, state, targetUrl, description, + token string, block bool, req *precheck.PreCheckTask) error + GetBranchDetail(ctx context.Context, repoAddr, branch, token string) (*TGitBranch, error) + GetTagDetail(ctx context.Context, repoAddr, tag, token string) (*TGitTag, error) +} + +// Factory interface +type Factory interface { + GetClient(repo string) (Client, error) + Init() +} + +type factory struct { + clients map[string]Client + opts *FactoryOpts +} + +// FactoryOpts options +type FactoryOpts struct { + TGitEndpoint string + TGitSubStr string + TGitOutEndpoint string + TGitOutSubStr string + TGitCommunityEndpoint string + TGitCommunitySubStr string + GitlabEndpoint string + GitlabSubStr string +} + +type clientOpts struct { + endpoint string + subStr string +} + +// NewFactory new factory +func NewFactory(opts *FactoryOpts) Factory { + return &factory{opts: opts, clients: make(map[string]Client)} +} + +// GetClient get client +func (f *factory) GetClient(repo string) (Client, error) { + name, err := f.judgeRepoType(repo) + if err != nil { + return nil, err + } + if exe, ok := f.clients[name]; ok { + return exe, nil + } + return nil, fmt.Errorf("wrong client type %s", name) +} + +// Init init +func (f *factory) Init() { + tGitOpts := &clientOpts{endpoint: f.opts.TGitEndpoint, subStr: f.opts.TGitSubStr} + f.clients[TGitType] = NewTGit(tGitOpts) + tGitOutOpts := &clientOpts{endpoint: f.opts.TGitOutEndpoint, subStr: f.opts.TGitOutSubStr} + f.clients[TGitOutType] = NewTGit(tGitOutOpts) + tGitCommunityOpts := &clientOpts{endpoint: f.opts.TGitCommunityEndpoint, subStr: f.opts.TGitCommunitySubStr} + f.clients[TGitCommunityType] = NewTGit(tGitCommunityOpts) + gitlabOpts := &clientOpts{endpoint: f.opts.GitlabEndpoint, subStr: f.opts.GitlabSubStr} + f.clients[GitlabType] = NewGitLab(gitlabOpts) +} + +func (f *factory) judgeRepoType(repo string) (string, error) { + if strings.Contains(repo, f.opts.TGitSubStr) { + return TGitType, nil + } + if strings.Contains(repo, f.opts.TGitOutSubStr) { + return TGitOutType, nil + } + if strings.Contains(repo, f.opts.TGitCommunitySubStr) { + return TGitCommunityType, nil + } + if strings.Contains(repo, f.opts.GitlabSubStr) { + return GitlabType, nil + } + return "", fmt.Errorf("not supported repo:%s", repo) +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/gitlab.go b/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/gitlab.go new file mode 100644 index 0000000000..0193e4fbe6 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/gitlab.go @@ -0,0 +1,167 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package git + +import ( + "context" + "fmt" + "strconv" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/pkg/errors" + "github.com/xanzy/go-gitlab" + + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/requester" + precheck "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/proto" +) + +type gitLabClient struct { + httpCli requester.Requester + opts *clientOpts +} + +var ( + // ErrNotSupportCheckState not support + ErrNotSupportCheckState = errors.New("current git client is not support submit checkstate") +) + +// NewGitLab new gitlab client +func NewGitLab(opts *clientOpts) Client { + + return &gitLabClient{opts: opts, httpCli: requester.NewRequester()} +} + +// GetMrInfo get mr info +func (c *gitLabClient) GetMrInfo(ctx context.Context, repoAddr, token, mrIID string) (*precheck.MRInfoData, error) { + cli, err := gitlab.NewClient(token, gitlab.WithBaseURL(c.opts.endpoint)) + if err != nil { + return nil, fmt.Errorf("new gitlab client failed:%s", err.Error()) + } + projectFullPath := enCodeRepoFullpath(repoAddr) + intMrIid, err := strconv.Atoi(mrIID) + if err != nil { + return nil, fmt.Errorf("trans mrIId %s to int failed:%s", mrIID, err.Error()) + } + mr, _, err := cli.MergeRequests.GetMergeRequest(projectFullPath, intMrIid, &gitlab.GetMergeRequestsOptions{}) + if err != nil { + blog.Infof("get gitlab mr request failed:%s", err.Error()) + return nil, fmt.Errorf("get gitlab mr request failed:%s", err.Error()) + } + mrInfo := &precheck.MRInfoData{ + SourceBranch: mr.SourceBranch, + TargetBranch: mr.TargetBranch, + Creator: mr.Author.Name, + CreateTime: mr.CreatedAt.String(), + UpdateTime: mr.UpdatedAt.String(), + Title: mr.Title, + MrMessage: mr.Description, + Repository: repoAddr, + SourceCommit: mr.SourceBranch, + TargetCommit: mr.TargetBranch, + } + return mrInfo, nil +} + +// CommentMR comment +func (c *gitLabClient) CommentMR(ctx context.Context, repoAddr, token, mrIID, comment string) error { + cli, err := gitlab.NewClient(token, gitlab.WithBaseURL(c.opts.endpoint)) + if err != nil { + return fmt.Errorf("new gitlab client failed:%s", err.Error()) + } + projectFullPath := enCodeRepoFullpath(repoAddr) + intMrIid, _ := strconv.Atoi(mrIID) + _, _, err = cli.Notes.CreateMergeRequestNote(projectFullPath, intMrIid, &gitlab.CreateMergeRequestNoteOptions{ + Body: &comment, + }) + if err != nil { + return err + } + return nil +} + +// SubmitCheckState submit state +func (c *gitLabClient) SubmitCheckState(ctx context.Context, checkSystem, state, targetUrl, description, + token string, block bool, req *precheck.PreCheckTask) error { + return ErrNotSupportCheckState +} + +func (c *gitLabClient) GetBranchDetail(ctx context.Context, repoAddr, branch, token string) (*TGitBranch, error) { + cli, err := gitlab.NewClient(token, gitlab.WithBaseURL(c.opts.endpoint)) + if err != nil { + return nil, fmt.Errorf("new gitlab client failed:%s", err.Error()) + } + projectFullPath := enCodeRepoFullpath(repoAddr) + branchInfo, _, err := cli.Branches.GetBranch(projectFullPath, branch) + if err != nil { + blog.Infof("get gitlab branch request failed:%s", err.Error()) + return nil, fmt.Errorf("get gitlab branch request failed:%s", err.Error()) + } + resBranchInfo := &TGitBranch{ + Protected: branchInfo.Protected, + DevelopersCanPush: branchInfo.DevelopersCanPush, + DevelopersCanMerge: branchInfo.DevelopersCanMerge, + Name: branchInfo.Name, + Commit: TGitCommit{ + ID: branchInfo.Commit.ID, + Message: branchInfo.Commit.Message, + ParentIDs: branchInfo.Commit.ParentIDs, + AuthoredDate: branchInfo.Commit.AuthoredDate.String(), + AuthorName: branchInfo.Commit.AuthorName, + AuthorEmail: branchInfo.Commit.AuthorEmail, + CommittedDate: branchInfo.Commit.CommittedDate.String(), + CommitterName: branchInfo.Commit.CommitterName, + CommitterEmail: branchInfo.Commit.CommitterEmail, + Title: branchInfo.Commit.Title, + ScrollObjectID: "", + CreatedAt: branchInfo.Commit.CreatedAt.String(), + ShortID: branchInfo.Commit.ShortID, + }, + } + return resBranchInfo, nil +} + +func (c *gitLabClient) GetTagDetail(ctx context.Context, repoAddr, tag, token string) (*TGitTag, error) { + cli, err := gitlab.NewClient(token, gitlab.WithBaseURL(c.opts.endpoint)) + if err != nil { + return nil, fmt.Errorf("new gitlab client failed:%s", err.Error()) + } + projectFullPath := enCodeRepoFullpath(repoAddr) + tagInfo, _, err := cli.Tags.GetTag(projectFullPath, tag) + if err != nil { + blog.Infof("get gitlab tag request failed:%s", err.Error()) + return nil, fmt.Errorf("get gitlab tag request failed:%s", err.Error()) + } + resTagInfo := &TGitTag{ + Name: tagInfo.Name, + Message: tagInfo.Message, + Commit: TGitCommit{ + ID: tagInfo.Commit.ID, + Message: tagInfo.Commit.Message, + ParentIDs: tagInfo.Commit.ParentIDs, + AuthoredDate: tagInfo.Commit.AuthoredDate.String(), + AuthorName: tagInfo.Commit.AuthorName, + AuthorEmail: tagInfo.Commit.AuthorEmail, + CommittedDate: tagInfo.Commit.CommittedDate.String(), + CommitterName: tagInfo.Commit.CommitterName, + CommitterEmail: tagInfo.Commit.CommitterEmail, + Title: tagInfo.Commit.Title, + ScrollObjectID: "", + CreatedAt: tagInfo.Commit.CreatedAt.String(), + ShortID: tagInfo.Commit.ShortID, + }, + CreatedAt: "", + Description: "", + } + + return resTagInfo, nil +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/tgit.go b/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/tgit.go new file mode 100644 index 0000000000..6cf36d188c --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/tgit.go @@ -0,0 +1,158 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package git + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/requester" + precheck "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/proto" +) + +type tGitClient struct { + httpCli requester.Requester + opts *clientOpts +} + +// NewTGit new tGit client +func NewTGit(opts *clientOpts) Client { + return &tGitClient{opts: opts, httpCli: requester.NewRequester()} +} + +const ( + getBranchDetailPath = "/api/v3/projects/%s/repository/branches/%s?private_token=%s" + getMrInfoPath = "/api/v3/projects/%s/merge_request/iid/%s?private_token=%s" + commentMrPath = "/api/v3/projects/%s/merge_request/%d/reviewer/summary?private_token=%s" + submitCheckState = "/api/v3/projects/%s/commit/%s/statuses?private_token=%s" + getTagPath = "/api/v3/projects/%s/repository/tags/%s?private_token=%s" +) + +// GetMrInfo get mr info +func (c *tGitClient) GetMrInfo(ctx context.Context, repoAddr, token, mrIID string) (*precheck.MRInfoData, error) { + projectFullPath := enCodeRepoFullpath(repoAddr) + uri := fmt.Sprintf("%s%s", c.opts.endpoint, fmt.Sprintf(getMrInfoPath, projectFullPath, mrIID, token)) + rsp, err := c.httpCli.DoGetRequest(uri, nil) + if err != nil { + return nil, fmt.Errorf("request git api error:%s", err.Error()) + } + + mrInfoRes := &tGitMrInfoResp{} + err = json.Unmarshal(rsp, mrInfoRes) + if err != nil { + return nil, fmt.Errorf("json unmarshal rsp failed:%s, rsp:%s", err.Error(), string(rsp)) + } + + mrInfo := &precheck.MRInfoData{ + SourceBranch: mrInfoRes.SourceBranch, + TargetBranch: mrInfoRes.TargetBranch, + SourceCommit: mrInfoRes.SourceCommit, + TargetCommit: mrInfoRes.TargetCommit, + Creator: mrInfoRes.Author.Username, + CreateTime: mrInfoRes.CreateTime, + UpdateTime: mrInfoRes.UpdateTime, + Title: mrInfoRes.Title, + MrMessage: mrInfoRes.Description, + Repository: repoAddr, + Id: uint32(mrInfoRes.ID), + Iid: uint32(mrInfoRes.IID), + } + return mrInfo, nil +} + +// CommentMR comment +func (c *tGitClient) CommentMR(ctx context.Context, repoAddr, token, mrIID, comment string) error { + mrInfo, err := c.GetMrInfo(ctx, repoAddr, token, mrIID) + if err != nil { + return err + } + projectFullPath := enCodeRepoFullpath(repoAddr) + uri := fmt.Sprintf("%s%s", c.opts.endpoint, fmt.Sprintf(commentMrPath, projectFullPath, mrInfo.Id, token)) + // blog.Infof("commentMR url:%s", uri) + req := map[string]string{ + "reviewer_event": "comment", + "summary": comment, + } + reqStr, err := json.Marshal(req) + if err != nil { + return fmt.Errorf("marshal req failed:%s", err.Error()) + } + rsp, err := c.httpCli.DoPutRequest(uri, nil, reqStr) + if err != nil { + return fmt.Errorf("request git api error:%s", err.Error()) + } + + tGitResp := &tGitMrCommentResp{} + err = json.Unmarshal(rsp, tGitResp) + if err != nil { + return fmt.Errorf("json unmarshal rsp failed:%s, rsp:%s", err.Error(), string(rsp)) + } + return nil +} + +// SubmitCheckState submit state +func (c *tGitClient) SubmitCheckState(ctx context.Context, checkSystem, state, targetUrl, description, + token string, block bool, req *precheck.PreCheckTask) error { + projectFullPath := enCodeRepoFullpath(req.RepositoryAddr) + uri := fmt.Sprintf("%s%s", c.opts.endpoint, + fmt.Sprintf(submitCheckState, projectFullPath, req.CheckRevision, token)) + // blog.Infof("SubmitCheckState url:%s", uri) + body := map[string]interface{}{ + "target_url": targetUrl, + "description": description, + "block": block, + "state": state, + "context": checkSystem, + "target_branches": make([]string, 0), + } + reqStr, err := json.Marshal(body) + if err != nil { + return fmt.Errorf("marshal req failed:%s", err.Error()) + } + _, err = c.httpCli.DoPostRequest(uri, nil, reqStr) + if err != nil { + return fmt.Errorf("request git api error:%s", err.Error()) + } + return nil +} + +func (c *tGitClient) GetBranchDetail(ctx context.Context, repoAddr, branch, token string) (*TGitBranch, error) { + projectFullPath := enCodeRepoFullpath(repoAddr) + uri := fmt.Sprintf("%s%s", c.opts.endpoint, fmt.Sprintf(getBranchDetailPath, projectFullPath, branch, token)) + rsp, err := c.httpCli.DoGetRequest(uri, nil) + if err != nil { + return nil, fmt.Errorf("request git api error:%s", err.Error()) + } + tGitBranch := &TGitBranch{} + err = json.Unmarshal(rsp, tGitBranch) + if err != nil { + return nil, fmt.Errorf("json unmarshal rsp failed:%s, rsp:%s", err.Error(), string(rsp)) + } + return tGitBranch, nil +} + +func (c *tGitClient) GetTagDetail(ctx context.Context, repoAddr, tag, token string) (*TGitTag, error) { + projectFullPath := enCodeRepoFullpath(repoAddr) + uri := fmt.Sprintf("%s%s", c.opts.endpoint, fmt.Sprintf(getTagPath, projectFullPath, tag, token)) + rsp, err := c.httpCli.DoGetRequest(uri, nil) + if err != nil { + return nil, fmt.Errorf("request git api error:%s", err.Error()) + } + tGitTag := &TGitTag{} + err = json.Unmarshal(rsp, tGitTag) + if err != nil { + return nil, fmt.Errorf("json unmarshal rsp failed:%s, rsp:%s", err.Error(), string(rsp)) + } + return tGitTag, nil +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/types.go b/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/types.go new file mode 100644 index 0000000000..107beb956f --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git/types.go @@ -0,0 +1,114 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package git + +import ( + "net/url" + "strings" +) + +// TGitBranch branch +type TGitBranch struct { + Protected bool `json:"protected"` + DevelopersCanPush bool `json:"developers_can_push"` + DevelopersCanMerge bool `json:"developers_can_merge"` + Name string `json:"name"` + Commit TGitCommit `json:"commit"` + Description string `json:"description"` + CreatedAt string `json:"created_at"` + BranchType BranchType `json:"branch_type"` + Author Author `json:"author"` +} + +// TGitCommit commit +type TGitCommit struct { + ID string `json:"id"` + Message string `json:"message"` + ParentIDs []string `json:"parent_ids"` + AuthoredDate string `json:"authored_date"` + AuthorName string `json:"author_name"` + AuthorEmail string `json:"author_email"` + CommittedDate string `json:"committed_date"` + CommitterName string `json:"committer_name"` + CommitterEmail string `json:"committer_email"` + Title string `json:"title"` + ScrollObjectID interface{} `json:"scroll_object_id"` + CreatedAt string `json:"created_at"` + ShortID string `json:"short_id"` +} + +// TGitTag tag +type TGitTag struct { + Name string `json:"name"` + Message string `json:"message"` + Commit TGitCommit `json:"commit"` + CreatedAt string `json:"created_at"` + Description string `json:"description"` +} + +// BranchType type +type BranchType struct { + Name string `json:"name"` + Color string `json:"color"` +} + +// Author author +type Author struct { + ID int `json:"id"` + Username string `json:"username"` + WebURL string `json:"web_url"` + Name string `json:"name"` + State string `json:"state"` + AvatarURL string `json:"avatar_url"` +} + +type tGitMrInfoResp struct { + ID int `json:"id"` + IID int `json:"iid"` + Title string `json:"title"` + CreateTime string `json:"created_at"` + UpdateTime string `json:"updated_at"` + Author struct { + Username string `json:"username"` + } `json:"author"` + Description string `json:"description"` + SourceBranch string `json:"source_branch"` + TargetBranch string `json:"target_branch"` + Repository string `json:"repository"` + SourceCommit string `json:"source_commit"` + TargetCommit string `json:"target_commit"` +} + +type tGitMrCommentResp struct { + CreateAt string `json:"created_at"` + UpdateAt string `json:"updated_at"` + Author struct { + Username string `json:"username"` + } `json:"author"` + Reviewers []interface{} `json:"reviewers"` + ID int `json:"id"` + ProjectID int `json:"project_id"` + ReviewableID int `json:"reviewable_id"` + State string `json:"state"` + RestrictType string `json:"restrict_type"` + PushResetEnabled bool `json:"push_reset_enabled"` +} + +// enCodeRepoFullpath repourl -> repofullpath +func enCodeRepoFullpath(repoUrl string) string { + parsedUrl, err := url.Parse(repoUrl) + if err != nil { + return repoUrl + } + return strings.Trim(url.QueryEscape(strings.TrimSuffix(parsedUrl.RequestURI(), ".git")), "%2F") +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/requester/requester.go b/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/requester/requester.go new file mode 100644 index 0000000000..00eb2b1f80 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/requester/requester.go @@ -0,0 +1,107 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package requester xxx +package requester + +import ( + "fmt" + "net/http" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/go-resty/resty/v2" +) + +// Requester for http request +type Requester interface { + DoGetRequest(url string, header map[string]string) ([]byte, error) + DoPostRequest(url string, header map[string]string, data []byte) ([]byte, error) + DoPutRequest(url string, header map[string]string, data []byte) ([]byte, error) + DoPatchRequest(url string, header map[string]string, data []byte) ([]byte, error) + DoDeleteRequest(url string, header map[string]string) ([]byte, error) +} + +type requester struct { + httpCli *resty.Client +} + +// NewRequester return interface Requester +func NewRequester() Requester { + return &requester{ + httpCli: resty.New(), + } +} + +// DoGetRequest do get request +func (r *requester) DoGetRequest(url string, header map[string]string) ([]byte, error) { + rsp, err := r.httpCli.R().SetHeaders(header).Get(url) + if err != nil { + blog.Errorf("do get request error, url: %s, error:%v", url, err) + return nil, fmt.Errorf("do get request error, url: %s, error:%v", url, err) + } + if rsp.StatusCode() != http.StatusOK { + return nil, fmt.Errorf("response code:%d, rsp:%s", rsp.StatusCode(), string(rsp.Body())) + } + return rsp.Body(), nil +} + +// DoPostRequest do post request +func (r *requester) DoPostRequest(url string, header map[string]string, data []byte) ([]byte, error) { + rsp, err := r.httpCli.R().SetHeaders(header).SetBody(data).Post(url) + if err != nil { + blog.Errorf("do post request error, url: %s, error:%v", url, err) + return nil, fmt.Errorf("do post request error, url: %s, error:%v", url, err) + } + if rsp.StatusCode() != http.StatusOK { + return nil, fmt.Errorf("response code:%d, rsp:%s", rsp.StatusCode(), string(rsp.Body())) + } + return rsp.Body(), nil +} + +// DoPutRequest do put request +func (r *requester) DoPutRequest(url string, header map[string]string, data []byte) ([]byte, error) { + rsp, err := r.httpCli.R().SetHeaders(header).SetBody(data).Put(url) + if err != nil { + blog.Errorf("do put request error, url: %s, error:%v", url, err) + return nil, fmt.Errorf("do put request error, url: %s, error:%v", url, err) + } + if rsp.StatusCode() != http.StatusOK { + return nil, fmt.Errorf("response code:%d, rsp:%s", rsp.StatusCode(), string(rsp.Body())) + } + return rsp.Body(), nil +} + +// DoPatchRequest do patch request +func (r *requester) DoPatchRequest(url string, header map[string]string, data []byte) ([]byte, error) { + rsp, err := r.httpCli.R().SetHeaders(header).SetBody(data).Patch(url) + if err != nil { + blog.Errorf("do patch request error, url: %s, error:%v", url, err) + return nil, fmt.Errorf("do patch request error, url: %s, error:%v", url, err) + } + if rsp.StatusCode() != http.StatusOK { + return nil, fmt.Errorf("response code:%d, rsp:%s", rsp.StatusCode(), string(rsp.Body())) + } + return rsp.Body(), nil +} + +// DoDeleteRequest do delete request +func (r *requester) DoDeleteRequest(url string, header map[string]string) ([]byte, error) { + rsp, err := r.httpCli.R().SetHeaders(header).Delete(url) + if err != nil { + blog.Errorf("do delete request error, url: %s, error:%v", url, err) + return nil, fmt.Errorf("do delete request error, url: %s, error:%v", url, err) + } + if rsp.StatusCode() != http.StatusOK { + return nil, fmt.Errorf("response code:%d, rsp:%s", rsp.StatusCode(), string(rsp.Body())) + } + return rsp.Body(), nil +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/pkg/common/common.go b/bcs-scenarios/bcs-gitops-pre-check/pkg/common/common.go new file mode 100644 index 0000000000..779745c782 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/pkg/common/common.go @@ -0,0 +1,506 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package common xxx +package common + +import ( + "context" + "encoding/json" + "fmt" + "strconv" + "time" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/argoproj/argo-cd/v2/util/db" + + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/argo" + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/pkg/apis/git" + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/pkg/storage" + precheck "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/proto" +) + +// PublicFunc public func +type PublicFunc interface { + GetMrInfo(ctx context.Context, repo, mrIID string) (*precheck.MRInfoData, error) + RecordPreCheckTask(ctx context.Context, req *precheck.PreCheckTask) (*precheck.PreCheckTask, error) + GetPreCheckTask(ctx context.Context, id int, project string) (*precheck.PreCheckTask, error) + UpdatePreCheckTask(ctx context.Context, req *precheck.PreCheckTask) (*precheck.PreCheckTask, error) + QueryPreCheckTaskList(ctx context.Context, query *precheck.ListTaskByIDReq) ([]*precheck.PreCheckTask, error) +} + +type publicFunc struct { + argoDBClient argo.Client + gitClientFactory git.Factory + db storage.Interface + opts *PublicFuncOpts +} + +// PublicFuncOpts opts +type PublicFuncOpts struct { + PowerAppEp string +} + +// NewPublicFunc new func +func NewPublicFunc(argoDB db.ArgoDB, gitClientFactory git.Factory, db storage.Interface, + opts *PublicFuncOpts) PublicFunc { + return &publicFunc{ + argoDBClient: argoDB, + gitClientFactory: gitClientFactory, + db: db, + opts: opts, + } +} + +// GetMrInfo get mr info +func (p *publicFunc) GetMrInfo(ctx context.Context, repo, mrIID string) (*precheck.MRInfoData, error) { + repoInfo, err := p.argoDBClient.GetRepository(ctx, repo) + if err != nil { + return nil, err + } + repoToken := repoInfo.Password + gitClient, err := p.gitClientFactory.GetClient(repo) + if err != nil { + return nil, fmt.Errorf("get git client failed:%s", err.Error()) + } + mrInfo, err := gitClient.GetMrInfo(ctx, repo, repoToken, mrIID) + if err != nil { + return nil, fmt.Errorf("get mr info failed:%s", err.Error()) + } + return mrInfo, nil +} + +// GetBranchInfo get branch info +func (p *publicFunc) GetBranchInfo(ctx context.Context, repo, branch string) (*git.TGitBranch, error) { + repoInfo, err := p.argoDBClient.GetRepository(ctx, repo) + if err != nil { + return nil, err + } + repoToken := repoInfo.Password + gitClient, err := p.gitClientFactory.GetClient(repo) + if err != nil { + return nil, fmt.Errorf("get git client failed:%s", err.Error()) + } + branchInfo, err := gitClient.GetBranchDetail(ctx, repo, branch, repoToken) + if err != nil { + return nil, fmt.Errorf("get mr info failed:%s", err.Error()) + } + return branchInfo, nil +} + +// GetTagInfo get tag info +func (p *publicFunc) GetTagInfo(ctx context.Context, repo, tag string) (*git.TGitTag, error) { + repoInfo, err := p.argoDBClient.GetRepository(ctx, repo) + if err != nil { + return nil, err + } + repoToken := repoInfo.Password + gitClient, err := p.gitClientFactory.GetClient(repo) + if err != nil { + return nil, fmt.Errorf("get git client failed:%s", err.Error()) + } + tagInfo, err := gitClient.GetTagDetail(ctx, repo, tag, repoToken) + if err != nil { + return nil, fmt.Errorf("get tag info failed:%s", err.Error()) + } + return tagInfo, nil +} + +// RecordPreCheckTask record +func (p *publicFunc) RecordPreCheckTask(ctx context.Context, + req *precheck.PreCheckTask) (*precheck.PreCheckTask, error) { + storageTask := storage.InitTask() + storageTask.Project = req.Project + storageTask.RepositoryAddr = req.RepositoryAddr + storageTask.MrIID = req.MrIid + storageTask.CheckCallbackGit = *req.CheckCallbackGit + storageTask.CheckRevision = req.CheckRevision + storageTask.ApplicationName = req.ApplicationName + storageTask.TriggerType = req.TriggerType + storageTask.BranchValue = req.BranchValue + storageTask.CreateBy = "plugin" + storageTask.TriggerByUser = req.TriggerByUser + storageTask.FlowID = req.FlowID + storageTask.FlowLink = req.FlowLink + storageTask.NeedReplaceRepo = *req.NeedReplaceRepo + storageTask.ReplaceRepo = req.ReplaceRepo + storageTask.ReplaceProject = req.ReplaceProject + storageTask.ChooseApplication = *req.ChooseApplication + storageTask.AppFilter = req.AppFilter + storageTask.LabelSelector = req.LabelSelector + p.getRevision(ctx, storageTask, req) + task, err := p.db.CreatePreCheckTask(storageTask) + if err != nil { + return nil, err + } + protoTask, err := p.transStorageTaskToProto(task) + if err != nil { + blog.Errorf("trans task failed:%s", err.Error()) + return nil, err + } + if *req.CheckCallbackGit { + go p.LockMR(ctx, protoTask) + } + return protoTask, nil +} + +// GetPreCheckTask get task +func (p *publicFunc) GetPreCheckTask(ctx context.Context, id int, project string) (*precheck.PreCheckTask, error) { + storageTask, err := p.db.GetPreCheckTask(id, project) + if err != nil { + return nil, err + } + if storageTask == nil { + return nil, fmt.Errorf("can not find task, id:%d, project:%s", id, project) + } + return p.transStorageTaskToProto(storageTask) +} + +// UpdatePreCheckTask update task +func (p *publicFunc) UpdatePreCheckTask(ctx context.Context, + req *precheck.PreCheckTask) (*precheck.PreCheckTask, error) { + id, err := strconv.Atoi(req.Id) + if err != nil { + return nil, fmt.Errorf("id illeagal:%s", req.Id) + } + storageTask, err := p.db.GetPreCheckTask(id, "") + if err != nil { + return nil, fmt.Errorf("get task by id %d failed:%s", id, err.Error()) + } + if storageTask == nil { + return nil, fmt.Errorf("cannot find task by id %d", id) + } + mergeTaskToStorage(req, storageTask) + storageTask.UpdateTime = time.Now().UTC() + if storageTask.CheckCallbackGit && storageTask.Finish && storageTask.MrIID != "" { + go p.CommentMR(ctx, req) + go p.UpdateMRCheckStatus(ctx, req) + } + err = p.db.UpdatePreCheckTask(storageTask) + if err != nil { + return nil, fmt.Errorf("update task failed:%s", err.Error()) + } + return p.GetPreCheckTask(ctx, id, storageTask.Project) +} + +// nolint +func mergeTaskToStorage(protoTask *precheck.PreCheckTask, storageTask *storage.PreCheckTask) { + handleStringType(protoTask, storageTask) + handleJsonStr(protoTask, storageTask) + handleBoolType(protoTask, storageTask) +} + +// nolint +func handleStringType(protoTask *precheck.PreCheckTask, storageTask *storage.PreCheckTask) { + if storageTask.Project != protoTask.Project && protoTask.Project != "" { + storageTask.Project = protoTask.Project + } + if storageTask.RepositoryAddr != protoTask.RepositoryAddr && protoTask.RepositoryAddr != "" { + storageTask.RepositoryAddr = protoTask.RepositoryAddr + } + if storageTask.MrIID != protoTask.MrIid && protoTask.MrIid != "" { + storageTask.MrIID = protoTask.MrIid + } + if storageTask.CheckRevision != protoTask.CheckRevision && protoTask.CheckRevision != "" { + storageTask.CheckRevision = protoTask.CheckRevision + } + if storageTask.ApplicationName != protoTask.ApplicationName && protoTask.ApplicationName != "" { + storageTask.ApplicationName = protoTask.ApplicationName + } + if storageTask.TriggerType != protoTask.TriggerType && protoTask.TriggerType != "" { + storageTask.TriggerType = protoTask.TriggerType + } + if storageTask.BranchValue != protoTask.BranchValue && protoTask.BranchValue != "" { + storageTask.BranchValue = protoTask.BranchValue + } + if storageTask.TriggerByUser != protoTask.TriggerByUser && protoTask.TriggerByUser != "" { + storageTask.TriggerByUser = protoTask.TriggerByUser + } + if storageTask.CreateBy != protoTask.CreateBy && protoTask.CreateBy != "" { + storageTask.CreateBy = protoTask.CreateBy + } + if storageTask.FlowID != protoTask.FlowID && protoTask.FlowID != "" { + storageTask.FlowID = protoTask.FlowID + } + if storageTask.ReplaceRepo != protoTask.ReplaceRepo && protoTask.ReplaceRepo != "" { + storageTask.ReplaceRepo = protoTask.ReplaceRepo + } + if storageTask.ReplaceProject != protoTask.ReplaceProject && protoTask.ReplaceProject != "" { + storageTask.ReplaceProject = protoTask.ReplaceProject + } + if storageTask.FlowLink != protoTask.FlowLink && protoTask.FlowLink != "" { + storageTask.FlowLink = protoTask.FlowLink + } + if storageTask.Message != protoTask.Message && protoTask.Message != "" { + storageTask.Message = protoTask.Message + } + if storageTask.AppFilter != protoTask.AppFilter && protoTask.AppFilter != "" { + storageTask.AppFilter = protoTask.AppFilter + } + if storageTask.LabelSelector != protoTask.LabelSelector && protoTask.LabelSelector != "" { + storageTask.LabelSelector = protoTask.LabelSelector + } +} + +func handleJsonStr(protoTask *precheck.PreCheckTask, storageTask *storage.PreCheckTask) { + if protoTask.InvolvedApplications != nil && len(protoTask.InvolvedApplications) != 0 { + involvedApplicationsStr, _ := json.Marshal(protoTask.InvolvedApplications) + storageTask.InvolvedApplications = string(involvedApplicationsStr) + } + if protoTask.CheckDetail != nil && len(protoTask.CheckDetail) != 0 { + checkDetailStr, _ := json.Marshal(protoTask.CheckDetail) + storageTask.CheckDetail = string(checkDetailStr) + } + if protoTask.MrInfo != nil { + mrInfoStr, _ := json.Marshal(protoTask.MrInfo) + storageTask.MrInfo = string(mrInfoStr) + } +} + +func handleBoolType(protoTask *precheck.PreCheckTask, storageTask *storage.PreCheckTask) { + if protoTask.CheckCallbackGit != nil { + storageTask.CheckCallbackGit = *protoTask.CheckCallbackGit + } + if protoTask.Finish != nil { + storageTask.Finish = *protoTask.Finish + } + if protoTask.NeedReplaceRepo != nil { + storageTask.NeedReplaceRepo = *protoTask.NeedReplaceRepo + } + if protoTask.Pass != nil { + storageTask.Pass = *protoTask.Pass + } + if protoTask.ChooseApplication != nil { + storageTask.ChooseApplication = *protoTask.ChooseApplication + } +} + +// LockMR lock mr +func (p *publicFunc) LockMR(ctx context.Context, task *precheck.PreCheckTask) { + repoInfo, err := p.argoDBClient.GetRepository(ctx, task.RepositoryAddr) + if err != nil { + blog.Errorf("get token failed:%s", err.Error()) + return + } + repoToken := repoInfo.Password + gitClient, err := p.gitClientFactory.GetClient(task.RepositoryAddr) + if err != nil { + blog.Errorf("get git client failed:%s", err.Error()) + return + } + err = gitClient.SubmitCheckState(ctx, "powerapp", "pending", task.FlowLink, "gitops部署前检查", + repoToken, true, task) + if err != nil { + blog.Errorf("comment failed:%s", err.Error()) + return + } +} + +// UpdateMRCheckStatus update status +func (p *publicFunc) UpdateMRCheckStatus(ctx context.Context, task *precheck.PreCheckTask) { + repoInfo, err := p.argoDBClient.GetRepository(ctx, task.RepositoryAddr) + if err != nil { + blog.Errorf("get token failed:%s", err.Error()) + return + } + repoToken := repoInfo.Password + gitClient, err := p.gitClientFactory.GetClient(task.RepositoryAddr) + if err != nil { + blog.Errorf("get git client failed:%s", err.Error()) + return + } + state := "success" + block := false + if !*task.Pass { + state = "failure" + block = true + } + err = gitClient.SubmitCheckState(ctx, "powerapp", state, task.FlowLink, "gitops部署前检查", + repoToken, block, task) + if err != nil { + blog.Errorf("comment failed:%s", err.Error()) + return + } +} + +// CommentMR comment mr +func (p *publicFunc) CommentMR(ctx context.Context, task *precheck.PreCheckTask) { + repoInfo, err := p.argoDBClient.GetRepository(ctx, task.RepositoryAddr) + if err != nil { + blog.Errorf("get token failed:%s", err.Error()) + return + } + repoToken := repoInfo.Password + gitClient, err := p.gitClientFactory.GetClient(task.RepositoryAddr) + if err != nil { + blog.Errorf("get git client failed:%s", err.Error()) + return + } + linkComment := fmt.Sprintf("检查详情:%s", p.opts.PowerAppEp) + err = gitClient.CommentMR(ctx, task.RepositoryAddr, repoToken, task.MrIid, linkComment) + if err != nil { + blog.Errorf("comment failed:%s", err.Error()) + return + } + // diffFinish := true + // diffPass := true + // for step := range task.CheckDetail { + // switch step { + // case "diff": + // for app := range task.CheckDetail[step].CheckDetail { + // if !task.CheckDetail[step].CheckDetail[app].Finish { + // diffFinish = false + // } + // } + // } + // } +} + +// QueryPreCheckTaskList query tasks +func (p *publicFunc) QueryPreCheckTaskList(ctx context.Context, + query *precheck.ListTaskByIDReq) ([]*precheck.PreCheckTask, error) { + storageQuery := &storage.PreCheckTaskQuery{ + Projects: query.Projects, + Repositories: query.Repos, + StartTime: query.StartTime, + EndTime: query.EndTime, + Limit: int(query.Limit), + Offset: int(query.Offset), + WithDetail: query.WithDetail, + } + if storageQuery.Limit == 0 { + storageQuery.Limit = 50 + } + result, err := p.db.ListPreCheckTask(storageQuery) + if err != nil { + return nil, fmt.Errorf("query task list failed:%s", err.Error()) + } + blog.Infof("query:%v", storageQuery) + blog.Infof("result:%v", result) + projectMap := make(map[string]bool) + for _, project := range query.Projects { + projectMap[project] = true + } + protoTaskList := make([]*precheck.PreCheckTask, 0) + for _, task := range result { + if task.NeedReplaceRepo && task.ReplaceProject != "" && !projectMap[task.ReplaceProject] { + blog.Infof("task %d is inplace by project %s, skip.", task.ID, task.ReplaceProject) + continue + } + protoTask, err := p.transStorageTaskToProto(task) + if err != nil { + blog.Errorf("trans task failed:%s", err.Error()) + return nil, err + } + protoTaskList = append(protoTaskList, protoTask) + } + return protoTaskList, nil +} + +func (p *publicFunc) transStorageTaskToProto(storageTask *storage.PreCheckTask) (*precheck.PreCheckTask, error) { + protoTask := &precheck.PreCheckTask{ + Id: strconv.Itoa(storageTask.ID), + Project: storageTask.Project, + RepositoryAddr: storageTask.RepositoryAddr, + MrIid: storageTask.MrIID, + CheckCallbackGit: &storageTask.CheckCallbackGit, + CheckRevision: storageTask.CheckRevision, + ApplicationName: storageTask.ApplicationName, + TriggerType: storageTask.TriggerType, + BranchValue: storageTask.BranchValue, + CreateTime: storageTask.CreateTime.UTC().Format("2006-01-02T15:04:05Z"), + UpdateTime: storageTask.UpdateTime.UTC().Format("2006-01-02T15:04:05Z"), + TriggerByUser: storageTask.TriggerByUser, + CreateBy: storageTask.CreateBy, + Finish: &storageTask.Finish, + FlowID: storageTask.FlowID, + ReplaceRepo: storageTask.ReplaceRepo, + NeedReplaceRepo: &storageTask.NeedReplaceRepo, + ReplaceProject: storageTask.ReplaceProject, + FlowLink: storageTask.FlowLink, + Pass: &storageTask.Pass, + Message: storageTask.Message, + ChooseApplication: &storageTask.ChooseApplication, + AppFilter: storageTask.AppFilter, + LabelSelector: storageTask.LabelSelector, + } + + checkDetail := make(map[string]*precheck.ApplicationCheckDetail) + if storageTask.CheckDetail != "" { + if unmarshalErr := json.Unmarshal([]byte(storageTask.CheckDetail), &checkDetail); unmarshalErr != nil { + return nil, fmt.Errorf("unmashal checkDetail fail:%s", unmarshalErr.Error()) + } + } + protoTask.CheckDetail = checkDetail + involvedApplications := make([]string, 0) + if storageTask.InvolvedApplications != "" { + if unmarshalErr := json.Unmarshal([]byte(storageTask.InvolvedApplications), + &involvedApplications); unmarshalErr != nil { + return nil, fmt.Errorf("unmashal involvedApplications fail:%s", unmarshalErr.Error()) + } + } + protoTask.InvolvedApplications = involvedApplications + mrInfo := &precheck.MRInfoData{} + if storageTask.MrInfo != "" { + if unmarshalErr := json.Unmarshal([]byte(storageTask.MrInfo), &mrInfo); unmarshalErr != nil { + return nil, fmt.Errorf("unmashal mrInfo fail:%s", unmarshalErr.Error()) + } + } + protoTask.MrInfo = mrInfo + return protoTask, nil +} + +func (p *publicFunc) getRevision(ctx context.Context, storageTask *storage.PreCheckTask, req *precheck.PreCheckTask) { + switch req.TriggerType { + case "mr": + mrInfo, err := p.GetMrInfo(ctx, req.RepositoryAddr, req.MrIid) + if err != nil { + blog.Errorf("get mr info err:%s", err.Error()) + req.CheckRevision = "" + storageTask.CheckRevision = "" + storageTask.Message = fmt.Sprintf("get mr info err:%s", err.Error()) + } else { + req.CheckRevision = mrInfo.SourceCommit + req.MrInfo = mrInfo + storageTask.CheckRevision = mrInfo.SourceCommit + mrInfoStr, _ := json.Marshal(mrInfo) + storageTask.MrInfo = string(mrInfoStr) + } + return + case "commit": + req.CheckRevision = req.BranchValue + storageTask.CheckRevision = req.BranchValue + case "tag": + tagInfo, err := p.GetTagInfo(ctx, req.RepositoryAddr, req.BranchValue) + if err != nil { + blog.Errorf("get tag info err:%s", err.Error()) + req.CheckRevision = "" + storageTask.CheckRevision = "" + storageTask.Message = fmt.Sprintf("get tag info err:%s", err.Error()) + } else { + req.CheckRevision = tagInfo.Commit.ID + storageTask.CheckRevision = tagInfo.Commit.ID + } + case "branch": + branchInfo, err := p.GetBranchInfo(ctx, req.RepositoryAddr, req.BranchValue) + if err != nil { + blog.Errorf("get branch info err:%s", err.Error()) + req.CheckRevision = "" + storageTask.CheckRevision = "" + storageTask.Message = fmt.Sprintf("get branch info err:%s", err.Error()) + } else { + req.CheckRevision = branchInfo.Commit.ID + storageTask.CheckRevision = branchInfo.Commit.ID + } + } + blog.Info(storageTask.CheckRevision) +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/pkg/storage/interface.go b/bcs-scenarios/bcs-gitops-pre-check/pkg/storage/interface.go new file mode 100644 index 0000000000..736abb5b37 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/pkg/storage/interface.go @@ -0,0 +1,27 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package storage xxx +package storage + +const ( + tablePreCheckTask = "bcs_gitops_precheck_task" // nolint +) + +// Interface xxx interface +type Interface interface { + Init() error + CreatePreCheckTask(task *PreCheckTask) (*PreCheckTask, error) + UpdatePreCheckTask(task *PreCheckTask) error + ListPreCheckTask(query *PreCheckTaskQuery) ([]*PreCheckTask, error) + GetPreCheckTask(id int, project string) (*PreCheckTask, error) +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/pkg/storage/mysql.go b/bcs-scenarios/bcs-gitops-pre-check/pkg/storage/mysql.go new file mode 100644 index 0000000000..ee44a6f7e6 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/pkg/storage/mysql.go @@ -0,0 +1,185 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package storage + +import ( + "fmt" + "strings" + + "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager/pkg/common" + _ "github.com/go-sql-driver/mysql" // nolint + "github.com/pkg/errors" + "gorm.io/driver/mysql" + "gorm.io/gorm" + + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/pkg/storage/mysqlrate" +) + +type driver struct { + db *gorm.DB + rateClient mysqlrate.RateInterface +} + +var ( + globalDB *driver +) + +// GlobalDB global db +func GlobalDB() Interface { + return globalDB +} + +// NewDriver creates the MySQL instance +func NewDriver(dbCfg *common.DBConfig) (Interface, error) { + connArgs := fmt.Sprintf("%s:%s@(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", + dbCfg.Username, dbCfg.Password, dbCfg.Addr, dbCfg.Database) + var err error + globalDB, err = newDriver(connArgs) + if err != nil { + return nil, err + } + if dbCfg.LimitQPS == 0 { + dbCfg.LimitQPS = 200 + } + globalDB.rateClient = mysqlrate.NewRateLimit(globalDB.db, dbCfg.LimitQPS) + return globalDB, nil +} + +func newDriver(connArgs string) (*driver, error) { + db, err := gorm.Open(mysql.Open(connArgs), &gorm.Config{}) + if err != nil { + blog.Errorf("Connect to MySQL '%s' failed, err: %s", connArgs, err.Error()) + return nil, err + } + return &driver{ + db: db, + }, nil +} + +// Init will auto create the tables if not exist +func (d *driver) Init() error { + if err := d.autoCreateTable(); err != nil { + return errors.Wrapf(err, "db driver init failed") + } + return nil +} + +func (d *driver) autoCreateTable() error { + if err := d.createTable(tablePreCheckTask, &PreCheckTask{}); err != nil { + return errors.Wrapf(err, "create table '%s' failed", tablePreCheckTask) + } + return nil +} + +func (d *driver) createTable(tableName string, obj interface{}) error { + if d.db.Migrator().HasTable(tableName) { + blog.Infof("[DB] table '%s' existed.", tableName) + if !d.db.Table(tableName).Migrator().HasColumn(obj, "labelSelector") { + if err := d.db.Table(tableName).AutoMigrate(obj); err != nil { + return errors.Wrapf(err, "update table '%s' failed", tableName) + } + } + } else { + if err := d.db.Table(tableName).Set("gorm:table_options", "ENGINE=InnoDB AUTO_INCREMENT = 0"). + AutoMigrate(obj); err != nil { + return errors.Wrapf(err, "create table '%s' failed", tableName) + } + blog.Infof("[DB] create table '%s' success.", tableName) + } + return nil +} + +func (d *driver) CreatePreCheckTask(task *PreCheckTask) (*PreCheckTask, error) { + if err := d.db.Table(tablePreCheckTask).Create(task).Error; err != nil { + if strings.Contains(err.Error(), "Duplicate") { + return nil, nil + } + return nil, errors.Wrapf(err, "create precheck task failed") + } + return task, nil +} + +func (d *driver) UpdatePreCheckTask(task *PreCheckTask) error { + if err := d.rateClient.Table(tablePreCheckTask).Save(task).Error; err != nil { + return errors.Wrapf(err, "update task '%d' failed", task.ID) + } + return nil +} + +func (d *driver) GetPreCheckTask(id int, project string) (*PreCheckTask, error) { + result := make([]*PreCheckTask, 0) + rows, err := d.db.Table(tablePreCheckTask).Where("id = ?", id).Rows() + if err != nil { + return nil, errors.Wrapf(err, "get preCheck task failed") + } + defer rows.Close() // nolint + + for rows.Next() { + obj := new(PreCheckTask) + if err = d.db.ScanRows(rows, obj); err != nil { + return nil, errors.Wrapf(err, "scan preCheck task failed") + } + result = append(result, obj) + } + if len(result) == 0 { + return nil, nil + } + if len(result) > 1 { + blog.Errorf("duplicated id %d", id) + for _, task := range result { + if validateProject(task, project) { + return task, nil + } + } + } + if validateProject(result[0], project) { + return result[0], nil + } + return nil, nil +} + +func (d *driver) ListPreCheckTask(query *PreCheckTaskQuery) ([]*PreCheckTask, error) { + dbQuery := d.db.Table(tablePreCheckTask).Where("project IN (?) and needReplaceRepo = ?", query.Projects, false). + Or("project IN (?) and needReplaceRepo = ? and replaceProject = ?", query.Projects, true, ""). + Or("replaceProject IN (?) and needReplaceRepo = ?", query.Projects, true) + + if len(query.Repositories) != 0 { + dbQuery.Where("repository_addr IN (?)", query.Repositories) + } + if query.StartTime != "" { + dbQuery.Where("create_time >= ?", query.StartTime) + } + if query.EndTime != "" { + dbQuery.Where("update_time <>>= ?", query.EndTime) + } + if !query.WithDetail { + dbQuery.Omit("check_detail") + } + tasks := make([]*PreCheckTask, 0) + if err := dbQuery.Order("id desc").Offset(query.Offset).Limit(query.Limit).Find(&tasks).Error; err != nil { + return nil, errors.Wrapf(err, "query task failed") + } + return tasks, nil +} + +func validateProject(task *PreCheckTask, project string) bool { + if project == "" { + return true + } + if (task.Project == project && !task.NeedReplaceRepo) || (task.ReplaceProject == project && task.NeedReplaceRepo) || + (task.Project == project && task.NeedReplaceRepo && task.ReplaceProject == "") { + return true + } + return false +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/pkg/storage/mysqlrate/rate.go b/bcs-scenarios/bcs-gitops-pre-check/pkg/storage/mysqlrate/rate.go new file mode 100644 index 0000000000..435c9ce550 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/pkg/storage/mysqlrate/rate.go @@ -0,0 +1,58 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package mysqlrate xxx +package mysqlrate + +import ( + "sync" + + "github.com/Tencent/bk-bcs/bcs-common/pkg/throttle" + "gorm.io/gorm" +) + +var ( + rateLimit *RateLimit + once sync.Once +) + +// RateInterface defines the interface the db rate limit +type RateInterface interface { + Table(table string) *gorm.DB +} + +// RateLimit defines the limit of mysql db +type RateLimit struct { + sync.Mutex + *gorm.DB + + limitQPS int64 + rateLimiter throttle.RateLimiter +} + +// NewRateLimit create the instance of mysql rate limit +func NewRateLimit(db *gorm.DB, limitQPS int64) RateInterface { + once.Do(func() { + rateLimit = &RateLimit{ + DB: db, + limitQPS: limitQPS, + rateLimiter: throttle.NewTokenBucket(limitQPS, limitQPS), + } + }) + return rateLimit +} + +// Table add rate lock and rate unlock after executed +func (rl *RateLimit) Table(table string) *gorm.DB { + rl.rateLimiter.Accept() + return rl.DB.Table(table) +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/pkg/storage/types.go b/bcs-scenarios/bcs-gitops-pre-check/pkg/storage/types.go new file mode 100644 index 0000000000..b7c5b33aee --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/pkg/storage/types.go @@ -0,0 +1,91 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package storage + +import ( + "encoding/json" + "time" + + precheck "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-pre-check/proto" +) + +// PreCheckTask task +type PreCheckTask struct { + ID int `json:"ID" gorm:"column:id;primaryKey;type:int(11) AUTO_INCREMENT NOT NULL"` + Project string `json:"project" gorm:"column:project;primaryKey;type:varchar(255);index:idx_project"` + RepositoryAddr string `json:"repositoryAddr" gorm:"column:repository_addr;type:varchar(255);index:idx_repo"` + MrIID string `json:"mrIID" gorm:"column:mr_iid;type:varchar(255)"` + CheckCallbackGit bool `json:"checkCallbackGit" gorm:"column:check_callback_git;type:boolean"` + CheckRevision string `json:"checkRevision" gorm:"column:check_revision;type:varchar(255)"` + // nolint + ApplicationName string `json:"applicationName" gorm:"column:application_name;type:varchar(255);index:idx_application"` + TriggerType string `json:"triggerType" gorm:"column:trigger_type;type:varchar(255)"` + BranchValue string `json:"branchValue" gorm:"column:branchValue;type:varchar(255)"` + CheckDetail string `json:"checkDetail" gorm:"column:check_detail;type:JSON"` + CreateTime time.Time `json:"createTime" gorm:"column:create_time;type:datetime"` + UpdateTime time.Time `json:"updateTime" gorm:"column:update_time;type:datetime"` + TriggerByUser string `json:"triggerByUser" gorm:"column:trigger_by_user;type:varchar(255)"` + CreateBy string `json:"createBy" gorm:"column:create_by;type:varchar(255)"` + Finish bool `json:"finish" gorm:"column:finish;type:boolean"` + Pass bool `json:"pass" gorm:"column:pass;type:boolean"` + FlowID string `json:"flowID" gorm:"column:flow_id;type:varchar(255)"` + InvolvedApplications string `json:"involvedApplications" gorm:"column:involved_applications;type:JSON"` + NeedReplaceRepo bool `json:"needReplaceRepo" gorm:"column:needReplaceRepo;type:boolean"` + ReplaceRepo string `json:"replaceRepo" gorm:"column:replaceRepo;type:varchar(255)"` + ReplaceProject string `json:"replaceProject" gorm:"column:replaceProject;type:varchar(255)"` + FlowLink string `json:"flowLink" gorm:"column:flowLink;type:varchar(255)"` + MrInfo string `json:"mrInfo" gorm:"column:mrInfo;type:JSON"` + Message string `json:"message" gorm:"column:message;type:varchar(255)"` + ChooseApplication bool `json:"chooseApplication" gorm:"column:chooseApplication;type:boolean"` + AppFilter string `json:"appFilter" gorm:"column:appFilter;type:varchar(255)"` + LabelSelector string `json:"labelSelector" gorm:"column:labelSelector;type:varchar(255)"` +} + +// InitTask init +func InitTask() *PreCheckTask { + checkDetail := make(map[string]*precheck.ApplicationCheckDetail) + checkDetailStr, _ := json.Marshal(checkDetail) + involvedApplications := make([]string, 0) + involvedApplicationsStr, _ := json.Marshal(involvedApplications) + mrInfo := &precheck.MRInfoData{} + mrInfoStr, _ := json.Marshal(mrInfo) + return &PreCheckTask{ + CheckDetail: string(checkDetailStr), + CreateTime: time.Now().UTC(), + UpdateTime: time.Now().UTC(), + InvolvedApplications: string(involvedApplicationsStr), + MrInfo: string(mrInfoStr), + Pass: true, + Finish: false, + } +} + +// ResourceCheckDetail resource detail +type ResourceCheckDetail struct { + Finish bool `json:"finish" gorm:"column:finish;type:boolean"` + Pass bool `json:"pass" gorm:"column:pass;type:boolean"` + ResourceType string `json:"resourceType" gorm:"column:resource_type;type:varchar(255)"` + ResourceName string `json:"resourceName" gorm:"column:resource_name;type:varchar(255)"` + Detail string `json:"detail" gorm:"column:detail;type:varchar(255)"` +} + +// PreCheckTaskQuery query +type PreCheckTaskQuery struct { + Projects []string `json:"projects"` + Repositories []string `json:"repositories"` + StartTime string `json:"startTime"` + EndTime string `json:"endTime"` + Limit int `json:"limit"` + Offset int `json:"offset"` + WithDetail bool `json:"withDetail"` +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.pb.go b/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.pb.go new file mode 100644 index 0000000000..129669bef6 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.pb.go @@ -0,0 +1,1687 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.33.0 +// protoc v3.19.4 +// source: proto/bcs-gitops-pre-check.proto + +package precheck + +import ( + _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type GetMrInfoReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Repository string `protobuf:"bytes,1,opt,name=repository,proto3" json:"repository,omitempty"` + MrIID string `protobuf:"bytes,2,opt,name=mrIID,proto3" json:"mrIID,omitempty"` +} + +func (x *GetMrInfoReq) Reset() { + *x = GetMrInfoReq{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMrInfoReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMrInfoReq) ProtoMessage() {} + +func (x *GetMrInfoReq) ProtoReflect() protoreflect.Message { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMrInfoReq.ProtoReflect.Descriptor instead. +func (*GetMrInfoReq) Descriptor() ([]byte, []int) { + return file_proto_bcs_gitops_pre_check_proto_rawDescGZIP(), []int{0} +} + +func (x *GetMrInfoReq) GetRepository() string { + if x != nil { + return x.Repository + } + return "" +} + +func (x *GetMrInfoReq) GetMrIID() string { + if x != nil { + return x.MrIID + } + return "" +} + +type GetMrInfoRsp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code *uint32 `protobuf:"varint,1,opt,name=code,proto3,oneof" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + RequestID string `protobuf:"bytes,3,opt,name=requestID,proto3" json:"requestID,omitempty"` + Data *MRInfoData `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *GetMrInfoRsp) Reset() { + *x = GetMrInfoRsp{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMrInfoRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMrInfoRsp) ProtoMessage() {} + +func (x *GetMrInfoRsp) ProtoReflect() protoreflect.Message { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMrInfoRsp.ProtoReflect.Descriptor instead. +func (*GetMrInfoRsp) Descriptor() ([]byte, []int) { + return file_proto_bcs_gitops_pre_check_proto_rawDescGZIP(), []int{1} +} + +func (x *GetMrInfoRsp) GetCode() uint32 { + if x != nil && x.Code != nil { + return *x.Code + } + return 0 +} + +func (x *GetMrInfoRsp) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *GetMrInfoRsp) GetRequestID() string { + if x != nil { + return x.RequestID + } + return "" +} + +func (x *GetMrInfoRsp) GetData() *MRInfoData { + if x != nil { + return x.Data + } + return nil +} + +type MRInfoData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SourceBranch string `protobuf:"bytes,1,opt,name=sourceBranch,proto3" json:"sourceBranch,omitempty"` + TargetBranch string `protobuf:"bytes,2,opt,name=targetBranch,proto3" json:"targetBranch,omitempty"` + Creator string `protobuf:"bytes,3,opt,name=creator,proto3" json:"creator,omitempty"` + CreateTime string `protobuf:"bytes,4,opt,name=createTime,proto3" json:"createTime,omitempty"` + UpdateTime string `protobuf:"bytes,5,opt,name=updateTime,proto3" json:"updateTime,omitempty"` + Title string `protobuf:"bytes,6,opt,name=title,proto3" json:"title,omitempty"` + MrMessage string `protobuf:"bytes,7,opt,name=mrMessage,proto3" json:"mrMessage,omitempty"` + Repository string `protobuf:"bytes,8,opt,name=repository,proto3" json:"repository,omitempty"` + SourceCommit string `protobuf:"bytes,9,opt,name=sourceCommit,proto3" json:"sourceCommit,omitempty"` + TargetCommit string `protobuf:"bytes,10,opt,name=targetCommit,proto3" json:"targetCommit,omitempty"` + Id uint32 `protobuf:"varint,11,opt,name=id,proto3" json:"id,omitempty"` + Iid uint32 `protobuf:"varint,12,opt,name=iid,proto3" json:"iid,omitempty"` +} + +func (x *MRInfoData) Reset() { + *x = MRInfoData{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MRInfoData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MRInfoData) ProtoMessage() {} + +func (x *MRInfoData) ProtoReflect() protoreflect.Message { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MRInfoData.ProtoReflect.Descriptor instead. +func (*MRInfoData) Descriptor() ([]byte, []int) { + return file_proto_bcs_gitops_pre_check_proto_rawDescGZIP(), []int{2} +} + +func (x *MRInfoData) GetSourceBranch() string { + if x != nil { + return x.SourceBranch + } + return "" +} + +func (x *MRInfoData) GetTargetBranch() string { + if x != nil { + return x.TargetBranch + } + return "" +} + +func (x *MRInfoData) GetCreator() string { + if x != nil { + return x.Creator + } + return "" +} + +func (x *MRInfoData) GetCreateTime() string { + if x != nil { + return x.CreateTime + } + return "" +} + +func (x *MRInfoData) GetUpdateTime() string { + if x != nil { + return x.UpdateTime + } + return "" +} + +func (x *MRInfoData) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *MRInfoData) GetMrMessage() string { + if x != nil { + return x.MrMessage + } + return "" +} + +func (x *MRInfoData) GetRepository() string { + if x != nil { + return x.Repository + } + return "" +} + +func (x *MRInfoData) GetSourceCommit() string { + if x != nil { + return x.SourceCommit + } + return "" +} + +func (x *MRInfoData) GetTargetCommit() string { + if x != nil { + return x.TargetCommit + } + return "" +} + +func (x *MRInfoData) GetId() uint32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *MRInfoData) GetIid() uint32 { + if x != nil { + return x.Iid + } + return 0 +} + +type ApplicationDetail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Finish *bool `protobuf:"varint,1,opt,name=finish,proto3,oneof" json:"finish,omitempty"` + Detail []*ResourceCheckDetail `protobuf:"bytes,2,rep,name=detail,proto3" json:"detail,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *ApplicationDetail) Reset() { + *x = ApplicationDetail{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplicationDetail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplicationDetail) ProtoMessage() {} + +func (x *ApplicationDetail) ProtoReflect() protoreflect.Message { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplicationDetail.ProtoReflect.Descriptor instead. +func (*ApplicationDetail) Descriptor() ([]byte, []int) { + return file_proto_bcs_gitops_pre_check_proto_rawDescGZIP(), []int{3} +} + +func (x *ApplicationDetail) GetFinish() bool { + if x != nil && x.Finish != nil { + return *x.Finish + } + return false +} + +func (x *ApplicationDetail) GetDetail() []*ResourceCheckDetail { + if x != nil { + return x.Detail + } + return nil +} + +func (x *ApplicationDetail) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +type ResourceCheckDetail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Finish *bool `protobuf:"varint,1,opt,name=finish,proto3,oneof" json:"finish,omitempty"` + ResourceType string `protobuf:"bytes,2,opt,name=resourceType,proto3" json:"resourceType,omitempty"` + ResourceName string `protobuf:"bytes,3,opt,name=resourceName,proto3" json:"resourceName,omitempty"` + ApiVersion string `protobuf:"bytes,6,opt,name=apiVersion,proto3" json:"apiVersion,omitempty"` + Detail string `protobuf:"bytes,4,opt,name=detail,proto3" json:"detail,omitempty"` + Pass *bool `protobuf:"varint,5,opt,name=pass,proto3,oneof" json:"pass,omitempty"` + Cluster string `protobuf:"bytes,7,opt,name=cluster,proto3" json:"cluster,omitempty"` + Namespace string `protobuf:"bytes,8,opt,name=namespace,proto3" json:"namespace,omitempty"` +} + +func (x *ResourceCheckDetail) Reset() { + *x = ResourceCheckDetail{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceCheckDetail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceCheckDetail) ProtoMessage() {} + +func (x *ResourceCheckDetail) ProtoReflect() protoreflect.Message { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceCheckDetail.ProtoReflect.Descriptor instead. +func (*ResourceCheckDetail) Descriptor() ([]byte, []int) { + return file_proto_bcs_gitops_pre_check_proto_rawDescGZIP(), []int{4} +} + +func (x *ResourceCheckDetail) GetFinish() bool { + if x != nil && x.Finish != nil { + return *x.Finish + } + return false +} + +func (x *ResourceCheckDetail) GetResourceType() string { + if x != nil { + return x.ResourceType + } + return "" +} + +func (x *ResourceCheckDetail) GetResourceName() string { + if x != nil { + return x.ResourceName + } + return "" +} + +func (x *ResourceCheckDetail) GetApiVersion() string { + if x != nil { + return x.ApiVersion + } + return "" +} + +func (x *ResourceCheckDetail) GetDetail() string { + if x != nil { + return x.Detail + } + return "" +} + +func (x *ResourceCheckDetail) GetPass() bool { + if x != nil && x.Pass != nil { + return *x.Pass + } + return false +} + +func (x *ResourceCheckDetail) GetCluster() string { + if x != nil { + return x.Cluster + } + return "" +} + +func (x *ResourceCheckDetail) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +type ApplicationCheckDetail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CheckDetail map[string]*ApplicationDetail `protobuf:"bytes,1,rep,name=checkDetail,proto3" json:"checkDetail,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *ApplicationCheckDetail) Reset() { + *x = ApplicationCheckDetail{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ApplicationCheckDetail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ApplicationCheckDetail) ProtoMessage() {} + +func (x *ApplicationCheckDetail) ProtoReflect() protoreflect.Message { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ApplicationCheckDetail.ProtoReflect.Descriptor instead. +func (*ApplicationCheckDetail) Descriptor() ([]byte, []int) { + return file_proto_bcs_gitops_pre_check_proto_rawDescGZIP(), []int{5} +} + +func (x *ApplicationCheckDetail) GetCheckDetail() map[string]*ApplicationDetail { + if x != nil { + return x.CheckDetail + } + return nil +} + +type PreCheckTask struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` + RepositoryAddr string `protobuf:"bytes,3,opt,name=repositoryAddr,proto3" json:"repositoryAddr,omitempty"` + MrIid string `protobuf:"bytes,4,opt,name=mrIid,proto3" json:"mrIid,omitempty"` + CheckCallbackGit *bool `protobuf:"varint,5,opt,name=checkCallbackGit,proto3,oneof" json:"checkCallbackGit,omitempty"` + CheckRevision string `protobuf:"bytes,6,opt,name=checkRevision,proto3" json:"checkRevision,omitempty"` + ApplicationName string `protobuf:"bytes,7,opt,name=applicationName,proto3" json:"applicationName,omitempty"` + TriggerType string `protobuf:"bytes,8,opt,name=triggerType,proto3" json:"triggerType,omitempty"` + BranchValue string `protobuf:"bytes,9,opt,name=branchValue,proto3" json:"branchValue,omitempty"` + CheckDetail map[string]*ApplicationCheckDetail `protobuf:"bytes,10,rep,name=checkDetail,proto3" json:"checkDetail,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + CreateTime string `protobuf:"bytes,11,opt,name=createTime,proto3" json:"createTime,omitempty"` + UpdateTime string `protobuf:"bytes,12,opt,name=updateTime,proto3" json:"updateTime,omitempty"` + TriggerByUser string `protobuf:"bytes,13,opt,name=triggerByUser,proto3" json:"triggerByUser,omitempty"` + CreateBy string `protobuf:"bytes,14,opt,name=createBy,proto3" json:"createBy,omitempty"` + Finish *bool `protobuf:"varint,15,opt,name=finish,proto3,oneof" json:"finish,omitempty"` + FlowID string `protobuf:"bytes,16,opt,name=flowID,proto3" json:"flowID,omitempty"` + InvolvedApplications []string `protobuf:"bytes,17,rep,name=involvedApplications,proto3" json:"involvedApplications,omitempty"` + ReplaceRepo string `protobuf:"bytes,18,opt,name=replaceRepo,proto3" json:"replaceRepo,omitempty"` + NeedReplaceRepo *bool `protobuf:"varint,19,opt,name=needReplaceRepo,proto3,oneof" json:"needReplaceRepo,omitempty"` + ReplaceProject string `protobuf:"bytes,20,opt,name=replaceProject,proto3" json:"replaceProject,omitempty"` + FlowLink string `protobuf:"bytes,21,opt,name=flowLink,proto3" json:"flowLink,omitempty"` + MrInfo *MRInfoData `protobuf:"bytes,22,opt,name=mrInfo,proto3" json:"mrInfo,omitempty"` + Pass *bool `protobuf:"varint,23,opt,name=pass,proto3,oneof" json:"pass,omitempty"` + Message string `protobuf:"bytes,24,opt,name=message,proto3" json:"message,omitempty"` + ChooseApplication *bool `protobuf:"varint,25,opt,name=chooseApplication,proto3,oneof" json:"chooseApplication,omitempty"` + AppFilter string `protobuf:"bytes,26,opt,name=appFilter,proto3" json:"appFilter,omitempty"` + LabelSelector string `protobuf:"bytes,27,opt,name=labelSelector,proto3" json:"labelSelector,omitempty"` +} + +func (x *PreCheckTask) Reset() { + *x = PreCheckTask{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PreCheckTask) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PreCheckTask) ProtoMessage() {} + +func (x *PreCheckTask) ProtoReflect() protoreflect.Message { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PreCheckTask.ProtoReflect.Descriptor instead. +func (*PreCheckTask) Descriptor() ([]byte, []int) { + return file_proto_bcs_gitops_pre_check_proto_rawDescGZIP(), []int{6} +} + +func (x *PreCheckTask) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *PreCheckTask) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *PreCheckTask) GetRepositoryAddr() string { + if x != nil { + return x.RepositoryAddr + } + return "" +} + +func (x *PreCheckTask) GetMrIid() string { + if x != nil { + return x.MrIid + } + return "" +} + +func (x *PreCheckTask) GetCheckCallbackGit() bool { + if x != nil && x.CheckCallbackGit != nil { + return *x.CheckCallbackGit + } + return false +} + +func (x *PreCheckTask) GetCheckRevision() string { + if x != nil { + return x.CheckRevision + } + return "" +} + +func (x *PreCheckTask) GetApplicationName() string { + if x != nil { + return x.ApplicationName + } + return "" +} + +func (x *PreCheckTask) GetTriggerType() string { + if x != nil { + return x.TriggerType + } + return "" +} + +func (x *PreCheckTask) GetBranchValue() string { + if x != nil { + return x.BranchValue + } + return "" +} + +func (x *PreCheckTask) GetCheckDetail() map[string]*ApplicationCheckDetail { + if x != nil { + return x.CheckDetail + } + return nil +} + +func (x *PreCheckTask) GetCreateTime() string { + if x != nil { + return x.CreateTime + } + return "" +} + +func (x *PreCheckTask) GetUpdateTime() string { + if x != nil { + return x.UpdateTime + } + return "" +} + +func (x *PreCheckTask) GetTriggerByUser() string { + if x != nil { + return x.TriggerByUser + } + return "" +} + +func (x *PreCheckTask) GetCreateBy() string { + if x != nil { + return x.CreateBy + } + return "" +} + +func (x *PreCheckTask) GetFinish() bool { + if x != nil && x.Finish != nil { + return *x.Finish + } + return false +} + +func (x *PreCheckTask) GetFlowID() string { + if x != nil { + return x.FlowID + } + return "" +} + +func (x *PreCheckTask) GetInvolvedApplications() []string { + if x != nil { + return x.InvolvedApplications + } + return nil +} + +func (x *PreCheckTask) GetReplaceRepo() string { + if x != nil { + return x.ReplaceRepo + } + return "" +} + +func (x *PreCheckTask) GetNeedReplaceRepo() bool { + if x != nil && x.NeedReplaceRepo != nil { + return *x.NeedReplaceRepo + } + return false +} + +func (x *PreCheckTask) GetReplaceProject() string { + if x != nil { + return x.ReplaceProject + } + return "" +} + +func (x *PreCheckTask) GetFlowLink() string { + if x != nil { + return x.FlowLink + } + return "" +} + +func (x *PreCheckTask) GetMrInfo() *MRInfoData { + if x != nil { + return x.MrInfo + } + return nil +} + +func (x *PreCheckTask) GetPass() bool { + if x != nil && x.Pass != nil { + return *x.Pass + } + return false +} + +func (x *PreCheckTask) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *PreCheckTask) GetChooseApplication() bool { + if x != nil && x.ChooseApplication != nil { + return *x.ChooseApplication + } + return false +} + +func (x *PreCheckTask) GetAppFilter() string { + if x != nil { + return x.AppFilter + } + return "" +} + +func (x *PreCheckTask) GetLabelSelector() string { + if x != nil { + return x.LabelSelector + } + return "" +} + +type PreCheckTaskRsp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code *uint32 `protobuf:"varint,1,opt,name=code,proto3,oneof" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + RequestID string `protobuf:"bytes,3,opt,name=requestID,proto3" json:"requestID,omitempty"` + Data *PreCheckTask `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` +} + +func (x *PreCheckTaskRsp) Reset() { + *x = PreCheckTaskRsp{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PreCheckTaskRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PreCheckTaskRsp) ProtoMessage() {} + +func (x *PreCheckTaskRsp) ProtoReflect() protoreflect.Message { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PreCheckTaskRsp.ProtoReflect.Descriptor instead. +func (*PreCheckTaskRsp) Descriptor() ([]byte, []int) { + return file_proto_bcs_gitops_pre_check_proto_rawDescGZIP(), []int{7} +} + +func (x *PreCheckTaskRsp) GetCode() uint32 { + if x != nil && x.Code != nil { + return *x.Code + } + return 0 +} + +func (x *PreCheckTaskRsp) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *PreCheckTaskRsp) GetRequestID() string { + if x != nil { + return x.RequestID + } + return "" +} + +func (x *PreCheckTaskRsp) GetData() *PreCheckTask { + if x != nil { + return x.Data + } + return nil +} + +type ListPreCheckTaskRsp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code *uint32 `protobuf:"varint,1,opt,name=code,proto3,oneof" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + RequestID string `protobuf:"bytes,3,opt,name=requestID,proto3" json:"requestID,omitempty"` + Data []*PreCheckTask `protobuf:"bytes,4,rep,name=data,proto3" json:"data,omitempty"` +} + +func (x *ListPreCheckTaskRsp) Reset() { + *x = ListPreCheckTaskRsp{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListPreCheckTaskRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListPreCheckTaskRsp) ProtoMessage() {} + +func (x *ListPreCheckTaskRsp) ProtoReflect() protoreflect.Message { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListPreCheckTaskRsp.ProtoReflect.Descriptor instead. +func (*ListPreCheckTaskRsp) Descriptor() ([]byte, []int) { + return file_proto_bcs_gitops_pre_check_proto_rawDescGZIP(), []int{8} +} + +func (x *ListPreCheckTaskRsp) GetCode() uint32 { + if x != nil && x.Code != nil { + return *x.Code + } + return 0 +} + +func (x *ListPreCheckTaskRsp) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *ListPreCheckTaskRsp) GetRequestID() string { + if x != nil { + return x.RequestID + } + return "" +} + +func (x *ListPreCheckTaskRsp) GetData() []*PreCheckTask { + if x != nil { + return x.Data + } + return nil +} + +type GetTaskByIDReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Project string `protobuf:"bytes,2,opt,name=project,proto3" json:"project,omitempty"` + DiffDetail bool `protobuf:"varint,3,opt,name=diffDetail,proto3" json:"diffDetail,omitempty"` +} + +func (x *GetTaskByIDReq) Reset() { + *x = GetTaskByIDReq{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTaskByIDReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTaskByIDReq) ProtoMessage() {} + +func (x *GetTaskByIDReq) ProtoReflect() protoreflect.Message { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTaskByIDReq.ProtoReflect.Descriptor instead. +func (*GetTaskByIDReq) Descriptor() ([]byte, []int) { + return file_proto_bcs_gitops_pre_check_proto_rawDescGZIP(), []int{9} +} + +func (x *GetTaskByIDReq) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *GetTaskByIDReq) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *GetTaskByIDReq) GetDiffDetail() bool { + if x != nil { + return x.DiffDetail + } + return false +} + +type ListTaskByIDReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Projects []string `protobuf:"bytes,1,rep,name=projects,proto3" json:"projects,omitempty"` + Repos []string `protobuf:"bytes,2,rep,name=repos,proto3" json:"repos,omitempty"` + StartTime string `protobuf:"bytes,3,opt,name=startTime,proto3" json:"startTime,omitempty"` + EndTime string `protobuf:"bytes,4,opt,name=endTime,proto3" json:"endTime,omitempty"` + Limit uint32 `protobuf:"varint,5,opt,name=limit,proto3" json:"limit,omitempty"` + Offset uint32 `protobuf:"varint,6,opt,name=offset,proto3" json:"offset,omitempty"` + WithDetail bool `protobuf:"varint,7,opt,name=withDetail,proto3" json:"withDetail,omitempty"` + DiffDetail bool `protobuf:"varint,8,opt,name=diffDetail,proto3" json:"diffDetail,omitempty"` +} + +func (x *ListTaskByIDReq) Reset() { + *x = ListTaskByIDReq{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTaskByIDReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTaskByIDReq) ProtoMessage() {} + +func (x *ListTaskByIDReq) ProtoReflect() protoreflect.Message { + mi := &file_proto_bcs_gitops_pre_check_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListTaskByIDReq.ProtoReflect.Descriptor instead. +func (*ListTaskByIDReq) Descriptor() ([]byte, []int) { + return file_proto_bcs_gitops_pre_check_proto_rawDescGZIP(), []int{10} +} + +func (x *ListTaskByIDReq) GetProjects() []string { + if x != nil { + return x.Projects + } + return nil +} + +func (x *ListTaskByIDReq) GetRepos() []string { + if x != nil { + return x.Repos + } + return nil +} + +func (x *ListTaskByIDReq) GetStartTime() string { + if x != nil { + return x.StartTime + } + return "" +} + +func (x *ListTaskByIDReq) GetEndTime() string { + if x != nil { + return x.EndTime + } + return "" +} + +func (x *ListTaskByIDReq) GetLimit() uint32 { + if x != nil { + return x.Limit + } + return 0 +} + +func (x *ListTaskByIDReq) GetOffset() uint32 { + if x != nil { + return x.Offset + } + return 0 +} + +func (x *ListTaskByIDReq) GetWithDetail() bool { + if x != nil { + return x.WithDetail + } + return false +} + +func (x *ListTaskByIDReq) GetDiffDetail() bool { + if x != nil { + return x.DiffDetail + } + return false +} + +var File_proto_bcs_gitops_pre_check_proto protoreflect.FileDescriptor + +var file_proto_bcs_gitops_pre_check_proto_rawDesc = []byte{ + 0x0a, 0x20, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x67, 0x69, 0x74, 0x6f, + 0x70, 0x73, 0x2d, 0x70, 0x72, 0x65, 0x2d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x08, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x1a, 0x1c, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2c, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x2d, 0x67, 0x65, 0x6e, 0x2d, 0x73, 0x77, 0x61, 0x67, 0x67, 0x65, 0x72, 0x2f, 0x6f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9e, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, + 0x4d, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x12, 0x3d, 0x0a, 0x0a, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, + 0x41, 0x1a, 0x2a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x32, 0x0c, + 0xe4, 0xbb, 0x93, 0xe5, 0xba, 0x93, 0xe5, 0x9c, 0xb0, 0xe5, 0x9d, 0x80, 0x52, 0x0a, 0x72, 0x65, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x6d, 0x72, 0x49, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x11, 0x92, 0x41, 0x0e, 0x2a, 0x05, 0x6d, 0x72, + 0x49, 0x49, 0x44, 0x32, 0x05, 0x6d, 0x72, 0x49, 0x49, 0x44, 0x52, 0x05, 0x6d, 0x72, 0x49, 0x49, + 0x44, 0x3a, 0x26, 0x92, 0x41, 0x23, 0x0a, 0x21, 0x2a, 0x0c, 0x47, 0x65, 0x74, 0x4d, 0x72, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x32, 0x11, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x6d, 0x72, + 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x72, 0x65, 0x71, 0x22, 0xc6, 0x02, 0x0a, 0x0c, 0x47, 0x65, + 0x74, 0x4d, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x73, 0x70, 0x12, 0x33, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x2a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x32, 0x0f, 0xe8, 0xbf, 0x94, 0xe5, 0x9b, 0x9e, 0xe9, 0x94, 0x99, 0xe8, 0xaf, + 0xaf, 0xe7, 0xa0, 0x81, 0x48, 0x00, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x12, + 0x3a, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x12, + 0xe8, 0xbf, 0x94, 0xe5, 0x9b, 0x9e, 0xe9, 0x94, 0x99, 0xe8, 0xaf, 0xaf, 0xe4, 0xbf, 0xa1, 0xe6, + 0x81, 0xaf, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x09, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, + 0x92, 0x41, 0x15, 0x2a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x32, 0x08, + 0xe8, 0xaf, 0xb7, 0xe6, 0xb1, 0x82, 0x49, 0x44, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x49, 0x44, 0x12, 0x4a, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x4d, 0x52, 0x49, + 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x32, 0x15, 0xe8, 0xbf, 0x94, 0xe5, 0x9b, 0x9e, 0xe7, 0x9a, 0x84, 0xe8, 0xae, 0xbe, + 0xe5, 0xa4, 0x87, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, + 0x38, 0x92, 0x41, 0x35, 0x0a, 0x33, 0x2a, 0x0c, 0x47, 0x65, 0x74, 0x4d, 0x72, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x73, 0x70, 0x32, 0x12, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x6d, 0x72, 0x49, 0x6e, + 0x66, 0x6f, 0xe5, 0x93, 0x8d, 0xe5, 0xba, 0x94, 0xd2, 0x01, 0x04, 0x63, 0x6f, 0x64, 0x65, 0xd2, + 0x01, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x63, 0x6f, + 0x64, 0x65, 0x22, 0xaf, 0x05, 0x0a, 0x0a, 0x4d, 0x52, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x44, 0x0a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x0c, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x32, 0x0d, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x20, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x44, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, + 0x41, 0x1d, 0x2a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, + 0x32, 0x0d, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x20, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x52, + 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x12, 0x2f, 0x0a, + 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x15, + 0x92, 0x41, 0x12, 0x2a, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x32, 0x07, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x07, 0x63, 0x72, 0x65, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x3c, + 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x1c, 0x92, 0x41, 0x19, 0x2a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x32, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, + 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x1c, 0x92, 0x41, 0x19, 0x2a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x32, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x52, 0x0a, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x11, 0x92, 0x41, 0x0e, 0x2a, 0x05, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x32, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x52, 0x05, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x6d, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x2a, 0x09, 0x6d, 0x72, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x0a, 0x4d, 0x52, 0x20, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x09, 0x6d, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3b, 0x0a, + 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x2a, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, + 0x72, 0x79, 0x32, 0x0a, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x52, 0x0a, + 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, 0x44, 0x0a, 0x0c, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x32, 0x0d, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x74, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x12, 0x44, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x0c, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x32, 0x0d, 0x54, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x12, 0x1b, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x0d, 0x42, 0x0b, 0x92, 0x41, 0x08, 0x2a, 0x02, 0x69, 0x64, 0x32, 0x02, 0x69, 0x64, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x03, 0x69, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, + 0x42, 0x0d, 0x92, 0x41, 0x0a, 0x2a, 0x03, 0x69, 0x69, 0x64, 0x32, 0x03, 0x69, 0x69, 0x64, 0x52, + 0x03, 0x69, 0x69, 0x64, 0x22, 0xcd, 0x01, 0x0a, 0x11, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x30, 0x0a, 0x06, 0x66, 0x69, + 0x6e, 0x69, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x13, 0x92, 0x41, 0x10, 0x2a, + 0x06, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x32, 0x06, 0x46, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x48, + 0x00, 0x52, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x88, 0x01, 0x01, 0x12, 0x4a, 0x0a, 0x06, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, + 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x42, 0x13, 0x92, 0x41, 0x10, + 0x2a, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x32, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x52, 0x06, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x2f, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x15, 0x92, 0x41, 0x12, 0x2a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x66, 0x69, + 0x6e, 0x69, 0x73, 0x68, 0x22, 0xe6, 0x03, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x30, 0x0a, 0x06, + 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x13, 0x92, 0x41, + 0x10, 0x2a, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x32, 0x06, 0x46, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x48, 0x00, 0x52, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x88, 0x01, 0x01, 0x12, 0x44, + 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x32, 0x0d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, + 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x32, 0x0d, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x0c, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x61, 0x70, + 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, + 0x92, 0x41, 0x19, 0x2a, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x32, + 0x0b, 0x61, 0x70, 0x69, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x61, 0x70, + 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x06, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x13, 0x92, 0x41, 0x10, 0x2a, 0x06, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x32, 0x06, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x06, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x28, 0x0a, 0x04, 0x70, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x42, 0x0f, 0x92, 0x41, 0x0c, 0x2a, 0x04, 0x70, 0x61, 0x73, 0x73, 0x32, 0x04, + 0x70, 0x61, 0x73, 0x73, 0x48, 0x01, 0x52, 0x04, 0x70, 0x61, 0x73, 0x73, 0x88, 0x01, 0x01, 0x12, + 0x2f, 0x0a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x15, 0x92, 0x41, 0x12, 0x2a, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x32, 0x07, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x12, 0x37, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x19, 0x92, 0x41, 0x16, 0x2a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x32, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x66, 0x69, + 0x6e, 0x69, 0x73, 0x68, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x22, 0xea, 0x01, + 0x0a, 0x16, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x73, 0x0a, 0x0b, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x2e, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x42, 0x1e, 0x92, 0x41, 0x1b, 0x2a, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x32, 0x0c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x1a, 0x5b, 0x0a, + 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x41, 0x70, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc8, 0x0f, 0x0a, 0x0c, 0x50, + 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x20, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0x92, 0x41, 0x0d, 0x2a, 0x02, 0x69, 0x64, + 0x32, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x20, 0x49, 0x44, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2f, 0x0a, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x15, + 0x92, 0x41, 0x12, 0x2a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x32, 0x07, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x4f, + 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x27, 0x92, 0x41, 0x24, 0x2a, 0x0e, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x32, 0x12, 0x52, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, + 0x0e, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x12, + 0x28, 0x0a, 0x05, 0x6d, 0x72, 0x49, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x12, + 0x92, 0x41, 0x0f, 0x2a, 0x05, 0x6d, 0x72, 0x49, 0x49, 0x44, 0x32, 0x06, 0x4d, 0x52, 0x20, 0x49, + 0x49, 0x44, 0x52, 0x05, 0x6d, 0x72, 0x49, 0x69, 0x64, 0x12, 0x5a, 0x0a, 0x10, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x47, 0x69, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x42, 0x29, 0x92, 0x41, 0x26, 0x2a, 0x10, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x43, + 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x47, 0x69, 0x74, 0x32, 0x12, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x47, 0x69, 0x74, 0x48, 0x00, + 0x52, 0x10, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x47, + 0x69, 0x74, 0x88, 0x01, 0x01, 0x12, 0x48, 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x22, 0x92, 0x41, + 0x1f, 0x2a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x32, 0x0e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x50, 0x0a, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x42, 0x26, 0x92, 0x41, 0x23, 0x2a, 0x0f, 0x61, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x32, 0x10, + 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, + 0x52, 0x0f, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x40, 0x0a, 0x0b, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1e, 0x92, 0x41, 0x1b, 0x2a, 0x0b, 0x74, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x32, 0x0c, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x20, 0x74, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x3f, 0x0a, 0x0b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, 0x0b, 0x62, + 0x72, 0x61, 0x6e, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x0b, 0x62, 0x72, 0x61, 0x6e, + 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x62, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x69, 0x0a, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x50, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x61, 0x73, + 0x6b, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x42, 0x1e, 0x92, 0x41, 0x1b, 0x2a, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x32, 0x0c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, + 0x3c, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x1c, 0x92, 0x41, 0x19, 0x2a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x32, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x74, 0x69, 0x6d, + 0x65, 0x52, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x3c, 0x0a, + 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x1c, 0x92, 0x41, 0x19, 0x2a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x32, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x52, + 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x49, 0x0a, 0x0d, 0x74, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x23, 0x92, 0x41, 0x20, 0x2a, 0x0d, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, + 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x32, 0x0f, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x20, + 0x62, 0x79, 0x20, 0x75, 0x73, 0x65, 0x72, 0x52, 0x0d, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, + 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x12, 0x34, 0x0a, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x42, 0x79, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0x92, 0x41, 0x15, 0x2a, 0x08, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x79, 0x32, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, + 0x62, 0x79, 0x52, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x42, 0x79, 0x12, 0x30, 0x0a, 0x06, + 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x42, 0x13, 0x92, 0x41, + 0x10, 0x2a, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x32, 0x06, 0x46, 0x69, 0x6e, 0x69, 0x73, + 0x68, 0x48, 0x01, 0x52, 0x06, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x88, 0x01, 0x01, 0x12, 0x2c, + 0x0a, 0x06, 0x66, 0x6c, 0x6f, 0x77, 0x49, 0x44, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, + 0x92, 0x41, 0x11, 0x2a, 0x06, 0x66, 0x6c, 0x6f, 0x77, 0x49, 0x44, 0x32, 0x07, 0x66, 0x6c, 0x6f, + 0x77, 0x20, 0x49, 0x44, 0x52, 0x06, 0x66, 0x6c, 0x6f, 0x77, 0x49, 0x44, 0x12, 0x63, 0x0a, 0x14, + 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x09, 0x42, 0x2f, 0x92, 0x41, 0x2c, 0x2a, + 0x14, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x32, 0x14, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x14, 0x69, 0x6e, 0x76, + 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x3f, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x52, 0x65, 0x70, 0x6f, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1d, 0x92, 0x41, 0x1a, 0x2a, 0x0b, 0x72, 0x65, 0x70, + 0x6c, 0x61, 0x63, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x32, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x70, 0x6f, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x70, 0x6f, 0x12, 0x54, 0x0a, 0x0f, 0x6e, 0x65, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x70, 0x6f, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x42, 0x25, 0x92, 0x41, 0x22, + 0x2a, 0x0f, 0x6e, 0x65, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x52, 0x65, 0x70, + 0x6f, 0x32, 0x0f, 0x6e, 0x65, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x52, 0x65, + 0x70, 0x6f, 0x48, 0x02, 0x52, 0x0f, 0x6e, 0x65, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x52, 0x65, 0x70, 0x6f, 0x88, 0x01, 0x01, 0x12, 0x4b, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x6c, + 0x61, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x23, 0x92, 0x41, 0x20, 0x2a, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x32, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x50, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x33, 0x0a, 0x08, 0x66, 0x6c, 0x6f, 0x77, 0x4c, 0x69, 0x6e, + 0x6b, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x42, 0x17, 0x92, 0x41, 0x14, 0x2a, 0x08, 0x66, 0x6c, + 0x6f, 0x77, 0x4c, 0x69, 0x6e, 0x6b, 0x32, 0x08, 0x66, 0x6c, 0x6f, 0x77, 0x4c, 0x69, 0x6e, 0x6b, + 0x52, 0x08, 0x66, 0x6c, 0x6f, 0x77, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x41, 0x0a, 0x06, 0x6d, 0x72, + 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x65, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x4d, 0x52, 0x49, 0x6e, 0x66, 0x6f, 0x44, 0x61, 0x74, 0x61, + 0x42, 0x13, 0x92, 0x41, 0x10, 0x2a, 0x06, 0x6d, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x32, 0x06, 0x6d, + 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x6d, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x28, 0x0a, + 0x04, 0x70, 0x61, 0x73, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x08, 0x42, 0x0f, 0x92, 0x41, 0x0c, + 0x2a, 0x04, 0x70, 0x61, 0x73, 0x73, 0x32, 0x04, 0x70, 0x61, 0x73, 0x73, 0x48, 0x03, 0x52, 0x04, + 0x70, 0x61, 0x73, 0x73, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x42, 0x15, 0x92, 0x41, 0x12, 0x2a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5c, 0x0a, 0x11, 0x63, 0x68, 0x6f, 0x6f, + 0x73, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x19, 0x20, + 0x01, 0x28, 0x08, 0x42, 0x29, 0x92, 0x41, 0x26, 0x2a, 0x11, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, + 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x11, 0x63, 0x68, 0x6f, + 0x6f, 0x73, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x04, + 0x52, 0x11, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x37, 0x0a, 0x09, 0x61, 0x70, 0x70, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x42, 0x19, 0x92, 0x41, 0x16, 0x2a, 0x09, + 0x61, 0x70, 0x70, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x32, 0x09, 0x61, 0x70, 0x70, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x52, 0x09, 0x61, 0x70, 0x70, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, + 0x3f, 0x0a, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x19, 0x92, 0x41, 0x16, 0x2a, 0x09, 0x61, 0x70, 0x70, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x32, 0x09, 0x61, 0x70, 0x70, 0x46, 0x69, 0x6c, 0x74, 0x65, + 0x72, 0x52, 0x0d, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x1a, 0x60, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x36, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, + 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x61, 0x6c, 0x6c, + 0x62, 0x61, 0x63, 0x6b, 0x47, 0x69, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x66, 0x69, 0x6e, 0x69, + 0x73, 0x68, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6e, 0x65, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x70, 0x6f, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x42, + 0x14, 0x0a, 0x12, 0x5f, 0x63, 0x68, 0x6f, 0x6f, 0x73, 0x65, 0x41, 0x70, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd1, 0x02, 0x0a, 0x0f, 0x50, 0x72, 0x65, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x73, 0x70, 0x12, 0x33, 0x0a, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x1a, 0x92, 0x41, 0x17, 0x2a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x32, 0x0f, 0xe8, 0xbf, 0x94, 0xe5, 0x9b, 0x9e, 0xe9, 0x94, 0x99, 0xe8, 0xaf, 0xaf, + 0xe7, 0xa0, 0x81, 0x48, 0x00, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x12, 0x3a, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x12, 0xe8, + 0xbf, 0x94, 0xe5, 0x9b, 0x9e, 0xe9, 0x94, 0x99, 0xe8, 0xaf, 0xaf, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, + 0xaf, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x09, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0x92, + 0x41, 0x15, 0x2a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x32, 0x08, 0xe8, + 0xaf, 0xb7, 0xe6, 0xb1, 0x82, 0x49, 0x44, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x49, 0x44, 0x12, 0x4c, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x50, 0x72, 0x65, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x54, 0x61, 0x73, 0x6b, 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x32, 0x15, 0xe8, 0xbf, 0x94, 0xe5, 0x9b, 0x9e, 0xe7, 0x9a, 0x84, 0xe8, 0xae, + 0xbe, 0xe5, 0xa4, 0x87, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x3a, 0x3e, 0x92, 0x41, 0x3b, 0x0a, 0x39, 0x2a, 0x0f, 0x50, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x73, 0x70, 0x32, 0x15, 0xe9, 0x83, 0xa8, 0xe7, 0xbd, 0xb2, + 0xe5, 0x89, 0x8d, 0xe6, 0xa3, 0x80, 0xe6, 0x9f, 0xa5, 0xe5, 0x93, 0x8d, 0xe5, 0xba, 0x94, 0xd2, + 0x01, 0x04, 0x63, 0x6f, 0x64, 0x65, 0xd2, 0x01, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x22, 0xe3, 0x02, 0x0a, 0x13, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x73, + 0x70, 0x12, 0x33, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, + 0x1a, 0x92, 0x41, 0x17, 0x2a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x32, 0x0f, 0xe8, 0xbf, 0x94, 0xe5, + 0x9b, 0x9e, 0xe9, 0x94, 0x99, 0xe8, 0xaf, 0xaf, 0xe7, 0xa0, 0x81, 0x48, 0x00, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x88, 0x01, 0x01, 0x12, 0x3a, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x12, 0xe8, 0xbf, 0x94, 0xe5, 0x9b, 0x9e, 0xe9, 0x94, 0x99, + 0xe8, 0xaf, 0xaf, 0xe4, 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x36, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0x92, 0x41, 0x15, 0x2a, 0x09, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x49, 0x44, 0x32, 0x08, 0xe8, 0xaf, 0xb7, 0xe6, 0xb1, 0x82, 0x49, 0x44, 0x52, + 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x4c, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x65, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x2e, 0x50, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x61, 0x73, 0x6b, + 0x42, 0x20, 0x92, 0x41, 0x1d, 0x2a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x32, 0x15, 0xe8, 0xbf, 0x94, + 0xe5, 0x9b, 0x9e, 0xe7, 0x9a, 0x84, 0xe8, 0xae, 0xbe, 0xe5, 0xa4, 0x87, 0xe5, 0x88, 0x97, 0xe8, + 0xa1, 0xa8, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x4c, 0x92, 0x41, 0x49, 0x0a, 0x47, 0x2a, + 0x13, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x61, 0x73, + 0x6b, 0x52, 0x73, 0x70, 0x32, 0x1f, 0xe9, 0x83, 0xa8, 0xe7, 0xbd, 0xb2, 0xe5, 0x89, 0x8d, 0xe6, + 0xa3, 0x80, 0xe6, 0x9f, 0xa5, 0x74, 0x61, 0x73, 0x6b, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0xe5, + 0x93, 0x8d, 0xe5, 0xba, 0x94, 0xd2, 0x01, 0x04, 0x63, 0x6f, 0x64, 0x65, 0xd2, 0x01, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x22, + 0xbe, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x42, 0x79, 0x49, 0x44, 0x52, + 0x65, 0x71, 0x12, 0x1b, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, + 0x92, 0x41, 0x08, 0x2a, 0x02, 0x69, 0x64, 0x32, 0x02, 0x69, 0x64, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x2f, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x15, 0x92, 0x41, 0x12, 0x2a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x32, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x12, 0x3b, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x42, 0x1b, 0x92, 0x41, 0x18, 0x2a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x32, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x3a, 0x21, 0x92, + 0x41, 0x1e, 0x0a, 0x1c, 0x2a, 0x0e, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x42, 0x79, 0x49, + 0x44, 0x52, 0x65, 0x71, 0x32, 0x0a, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x74, 0x61, 0x73, 0x6b, + 0x22, 0xec, 0x03, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x42, 0x79, 0x49, + 0x44, 0x52, 0x65, 0x71, 0x12, 0x31, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x15, 0x92, 0x41, 0x12, 0x2a, 0x08, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x73, 0x32, 0x06, 0xe9, 0xa1, 0xb9, 0xe7, 0x9b, 0xae, 0x52, 0x08, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x05, 0x72, 0x65, 0x70, 0x6f, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x12, 0x92, 0x41, 0x0f, 0x2a, 0x05, 0x72, 0x65, 0x70, + 0x6f, 0x73, 0x32, 0x06, 0xe4, 0xbb, 0x93, 0xe5, 0xba, 0x93, 0x52, 0x05, 0x72, 0x65, 0x70, 0x6f, + 0x73, 0x12, 0x3a, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x1c, 0x92, 0x41, 0x19, 0x2a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x32, 0x0c, 0xe5, 0xbc, 0x80, 0xe5, 0xa7, 0x8b, 0xe6, 0x97, 0xb6, 0xe9, + 0x97, 0xb4, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x34, 0x0a, + 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, + 0x92, 0x41, 0x17, 0x2a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x32, 0x0c, 0xe7, 0xbb, + 0x93, 0xe6, 0x9d, 0x9f, 0xe6, 0x97, 0xb6, 0xe9, 0x97, 0xb4, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0d, 0x42, 0x18, 0x92, 0x41, 0x15, 0x2a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x32, 0x0c, + 0xe5, 0x8d, 0x95, 0xe9, 0xa1, 0xb5, 0xe6, 0x95, 0xb0, 0xe9, 0x87, 0x8f, 0x52, 0x05, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0d, 0x42, 0x16, 0x92, 0x41, 0x13, 0x2a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, + 0x32, 0x09, 0xe5, 0x81, 0x8f, 0xe7, 0xa7, 0xbb, 0xe9, 0x87, 0x8f, 0x52, 0x06, 0x6f, 0x66, 0x66, + 0x73, 0x65, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x42, 0x23, 0x92, 0x41, 0x20, 0x2a, 0x0a, 0x77, 0x69, + 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x32, 0x12, 0xe6, 0x98, 0xaf, 0xe5, 0x90, 0xa6, + 0xe8, 0xbf, 0x94, 0xe5, 0x9b, 0x9e, 0xe8, 0xaf, 0xa6, 0xe6, 0x83, 0x85, 0x52, 0x0a, 0x77, 0x69, + 0x74, 0x68, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x3b, 0x0a, 0x0a, 0x64, 0x69, 0x66, 0x66, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x42, 0x1b, 0x92, 0x41, + 0x18, 0x2a, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x32, 0x0a, 0x64, + 0x69, 0x66, 0x66, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x0a, 0x64, 0x69, 0x66, 0x66, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x3a, 0x28, 0x92, 0x41, 0x25, 0x0a, 0x23, 0x2a, 0x0f, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x32, 0x10, 0xe8, + 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x74, 0x61, 0x73, 0x6b, 0xe5, 0x88, 0x97, 0xe8, 0xa1, 0xa8, 0x32, + 0x90, 0x06, 0x0a, 0x0e, 0x47, 0x69, 0x74, 0x4f, 0x70, 0x73, 0x50, 0x72, 0x65, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x12, 0x80, 0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4d, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x16, 0x2e, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x47, 0x65, 0x74, 0x4d, + 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x65, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x73, 0x70, + 0x22, 0x43, 0x92, 0x41, 0x20, 0x12, 0x0e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x6d, 0x72, 0xe4, + 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x1a, 0x0e, 0xe8, 0x8e, 0xb7, 0xe5, 0x8f, 0x96, 0x6d, 0x72, 0xe4, + 0xbf, 0xa1, 0xe6, 0x81, 0xaf, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x12, 0x18, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x6d, 0x72, + 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x9a, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x54, 0x61, 0x73, 0x6b, 0x42, 0x79, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x12, 0x16, 0x2e, 0x70, + 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x50, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x54, 0x61, 0x73, 0x6b, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, + 0x50, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x61, 0x73, 0x6b, 0x52, 0x73, 0x70, 0x22, + 0x51, 0x92, 0x41, 0x2c, 0x12, 0x14, 0xe8, 0xa1, 0xa5, 0xe5, 0xbd, 0x95, 0x70, 0x72, 0x65, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0xe4, 0xbb, 0xbb, 0xe5, 0x8a, 0xa1, 0x1a, 0x14, 0xe8, 0xa1, 0xa5, 0xe5, + 0xbd, 0x95, 0x70, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0xe4, 0xbb, 0xbb, 0xe5, 0x8a, 0xa1, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x72, 0x65, 0x63, 0x6f, + 0x72, 0x64, 0x12, 0x9c, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x42, 0x79, + 0x49, 0x44, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x47, 0x65, + 0x74, 0x54, 0x61, 0x73, 0x6b, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, + 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x50, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x54, 0x61, 0x73, 0x6b, 0x52, 0x73, 0x70, 0x22, 0x58, 0x92, 0x41, 0x38, 0x12, 0x1a, 0xe6, 0x9f, + 0xa5, 0xe8, 0xaf, 0xa2, 0xe5, 0x8d, 0x95, 0xe4, 0xb8, 0xaa, 0x70, 0x72, 0x65, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0xe4, 0xbb, 0xbb, 0xe5, 0x8a, 0xa1, 0x1a, 0x1a, 0xe6, 0x9f, 0xa5, 0xe8, 0xaf, 0xa2, + 0xe5, 0x8d, 0x95, 0xe4, 0xb8, 0xaa, 0x70, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0xe4, 0xbb, + 0xbb, 0xe5, 0x8a, 0xa1, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x74, 0x61, 0x73, + 0x6b, 0x12, 0x9c, 0x01, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x61, 0x73, 0x6b, + 0x12, 0x16, 0x2e, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x50, 0x72, 0x65, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x54, 0x61, 0x73, 0x6b, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x65, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x2e, 0x50, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x61, 0x73, 0x6b, + 0x52, 0x73, 0x70, 0x22, 0x5b, 0x92, 0x41, 0x38, 0x12, 0x1a, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, + 0xe5, 0x8d, 0x95, 0xe4, 0xb8, 0xaa, 0x70, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0xe4, 0xbb, + 0xbb, 0xe5, 0x8a, 0xa1, 0x1a, 0x1a, 0xe6, 0x9b, 0xb4, 0xe6, 0x96, 0xb0, 0xe5, 0x8d, 0x95, 0xe4, + 0xb8, 0xaa, 0x70, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0xe4, 0xbb, 0xbb, 0xe5, 0x8a, 0xa1, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x1a, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x74, 0x61, 0x73, 0x6b, + 0x12, 0x9f, 0x01, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x19, 0x2e, + 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x61, 0x73, + 0x6b, 0x42, 0x79, 0x49, 0x44, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x65, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x54, 0x61, 0x73, 0x6b, 0x52, 0x73, 0x70, 0x22, 0x59, 0x92, 0x41, 0x38, 0x12, 0x1a, 0xe6, 0x9f, + 0xa5, 0xe8, 0xaf, 0xa2, 0xe5, 0x8d, 0x95, 0xe4, 0xb8, 0xaa, 0x70, 0x72, 0x65, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0xe4, 0xbb, 0xbb, 0xe5, 0x8a, 0xa1, 0x1a, 0x1a, 0xe6, 0x9f, 0xa5, 0xe8, 0xaf, 0xa2, + 0xe5, 0x8d, 0x95, 0xe4, 0xb8, 0xaa, 0x70, 0x72, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0xe4, 0xbb, + 0xbb, 0xe5, 0x8a, 0xa1, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x2f, 0x74, 0x61, 0x73, + 0x6b, 0x73, 0x42, 0x12, 0x5a, 0x10, 0x2e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x72, + 0x65, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_proto_bcs_gitops_pre_check_proto_rawDescOnce sync.Once + file_proto_bcs_gitops_pre_check_proto_rawDescData = file_proto_bcs_gitops_pre_check_proto_rawDesc +) + +func file_proto_bcs_gitops_pre_check_proto_rawDescGZIP() []byte { + file_proto_bcs_gitops_pre_check_proto_rawDescOnce.Do(func() { + file_proto_bcs_gitops_pre_check_proto_rawDescData = protoimpl.X.CompressGZIP(file_proto_bcs_gitops_pre_check_proto_rawDescData) + }) + return file_proto_bcs_gitops_pre_check_proto_rawDescData +} + +var file_proto_bcs_gitops_pre_check_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +var file_proto_bcs_gitops_pre_check_proto_goTypes = []interface{}{ + (*GetMrInfoReq)(nil), // 0: precheck.GetMrInfoReq + (*GetMrInfoRsp)(nil), // 1: precheck.GetMrInfoRsp + (*MRInfoData)(nil), // 2: precheck.MRInfoData + (*ApplicationDetail)(nil), // 3: precheck.ApplicationDetail + (*ResourceCheckDetail)(nil), // 4: precheck.ResourceCheckDetail + (*ApplicationCheckDetail)(nil), // 5: precheck.ApplicationCheckDetail + (*PreCheckTask)(nil), // 6: precheck.PreCheckTask + (*PreCheckTaskRsp)(nil), // 7: precheck.PreCheckTaskRsp + (*ListPreCheckTaskRsp)(nil), // 8: precheck.ListPreCheckTaskRsp + (*GetTaskByIDReq)(nil), // 9: precheck.GetTaskByIDReq + (*ListTaskByIDReq)(nil), // 10: precheck.ListTaskByIDReq + nil, // 11: precheck.ApplicationCheckDetail.CheckDetailEntry + nil, // 12: precheck.PreCheckTask.CheckDetailEntry +} +var file_proto_bcs_gitops_pre_check_proto_depIdxs = []int32{ + 2, // 0: precheck.GetMrInfoRsp.data:type_name -> precheck.MRInfoData + 4, // 1: precheck.ApplicationDetail.detail:type_name -> precheck.ResourceCheckDetail + 11, // 2: precheck.ApplicationCheckDetail.checkDetail:type_name -> precheck.ApplicationCheckDetail.CheckDetailEntry + 12, // 3: precheck.PreCheckTask.checkDetail:type_name -> precheck.PreCheckTask.CheckDetailEntry + 2, // 4: precheck.PreCheckTask.mrInfo:type_name -> precheck.MRInfoData + 6, // 5: precheck.PreCheckTaskRsp.data:type_name -> precheck.PreCheckTask + 6, // 6: precheck.ListPreCheckTaskRsp.data:type_name -> precheck.PreCheckTask + 3, // 7: precheck.ApplicationCheckDetail.CheckDetailEntry.value:type_name -> precheck.ApplicationDetail + 5, // 8: precheck.PreCheckTask.CheckDetailEntry.value:type_name -> precheck.ApplicationCheckDetail + 0, // 9: precheck.GitOpsPreCheck.GetMrInfo:input_type -> precheck.GetMrInfoReq + 6, // 10: precheck.GitOpsPreCheck.RecordTaskByPlugin:input_type -> precheck.PreCheckTask + 9, // 11: precheck.GitOpsPreCheck.GetTaskByID:input_type -> precheck.GetTaskByIDReq + 6, // 12: precheck.GitOpsPreCheck.UpdateTask:input_type -> precheck.PreCheckTask + 10, // 13: precheck.GitOpsPreCheck.ListTask:input_type -> precheck.ListTaskByIDReq + 1, // 14: precheck.GitOpsPreCheck.GetMrInfo:output_type -> precheck.GetMrInfoRsp + 7, // 15: precheck.GitOpsPreCheck.RecordTaskByPlugin:output_type -> precheck.PreCheckTaskRsp + 7, // 16: precheck.GitOpsPreCheck.GetTaskByID:output_type -> precheck.PreCheckTaskRsp + 7, // 17: precheck.GitOpsPreCheck.UpdateTask:output_type -> precheck.PreCheckTaskRsp + 8, // 18: precheck.GitOpsPreCheck.ListTask:output_type -> precheck.ListPreCheckTaskRsp + 14, // [14:19] is the sub-list for method output_type + 9, // [9:14] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name +} + +func init() { file_proto_bcs_gitops_pre_check_proto_init() } +func file_proto_bcs_gitops_pre_check_proto_init() { + if File_proto_bcs_gitops_pre_check_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_proto_bcs_gitops_pre_check_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMrInfoReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_bcs_gitops_pre_check_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMrInfoRsp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_bcs_gitops_pre_check_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MRInfoData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_bcs_gitops_pre_check_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplicationDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_bcs_gitops_pre_check_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceCheckDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_bcs_gitops_pre_check_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ApplicationCheckDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_bcs_gitops_pre_check_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PreCheckTask); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_bcs_gitops_pre_check_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PreCheckTaskRsp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_bcs_gitops_pre_check_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListPreCheckTaskRsp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_bcs_gitops_pre_check_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTaskByIDReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_bcs_gitops_pre_check_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListTaskByIDReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_proto_bcs_gitops_pre_check_proto_msgTypes[1].OneofWrappers = []interface{}{} + file_proto_bcs_gitops_pre_check_proto_msgTypes[3].OneofWrappers = []interface{}{} + file_proto_bcs_gitops_pre_check_proto_msgTypes[4].OneofWrappers = []interface{}{} + file_proto_bcs_gitops_pre_check_proto_msgTypes[6].OneofWrappers = []interface{}{} + file_proto_bcs_gitops_pre_check_proto_msgTypes[7].OneofWrappers = []interface{}{} + file_proto_bcs_gitops_pre_check_proto_msgTypes[8].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_proto_bcs_gitops_pre_check_proto_rawDesc, + NumEnums: 0, + NumMessages: 13, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_proto_bcs_gitops_pre_check_proto_goTypes, + DependencyIndexes: file_proto_bcs_gitops_pre_check_proto_depIdxs, + MessageInfos: file_proto_bcs_gitops_pre_check_proto_msgTypes, + }.Build() + File_proto_bcs_gitops_pre_check_proto = out.File + file_proto_bcs_gitops_pre_check_proto_rawDesc = nil + file_proto_bcs_gitops_pre_check_proto_goTypes = nil + file_proto_bcs_gitops_pre_check_proto_depIdxs = nil +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.pb.gw.go b/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.pb.gw.go new file mode 100644 index 0000000000..d97255ae9c --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.pb.gw.go @@ -0,0 +1,497 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: proto/bcs-gitops-pre-check.proto + +/* +Package precheck is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package precheck + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +var ( + filter_GitOpsPreCheck_GetMrInfo_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_GitOpsPreCheck_GetMrInfo_0(ctx context.Context, marshaler runtime.Marshaler, client GitOpsPreCheckClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMrInfoReq + 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_GitOpsPreCheck_GetMrInfo_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetMrInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GitOpsPreCheck_GetMrInfo_0(ctx context.Context, marshaler runtime.Marshaler, server GitOpsPreCheckServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMrInfoReq + 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_GitOpsPreCheck_GetMrInfo_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetMrInfo(ctx, &protoReq) + return msg, metadata, err + +} + +func request_GitOpsPreCheck_RecordTaskByPlugin_0(ctx context.Context, marshaler runtime.Marshaler, client GitOpsPreCheckClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PreCheckTask + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RecordTaskByPlugin(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GitOpsPreCheck_RecordTaskByPlugin_0(ctx context.Context, marshaler runtime.Marshaler, server GitOpsPreCheckServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PreCheckTask + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RecordTaskByPlugin(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_GitOpsPreCheck_GetTaskByID_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_GitOpsPreCheck_GetTaskByID_0(ctx context.Context, marshaler runtime.Marshaler, client GitOpsPreCheckClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTaskByIDReq + 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_GitOpsPreCheck_GetTaskByID_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetTaskByID(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GitOpsPreCheck_GetTaskByID_0(ctx context.Context, marshaler runtime.Marshaler, server GitOpsPreCheckServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTaskByIDReq + 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_GitOpsPreCheck_GetTaskByID_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetTaskByID(ctx, &protoReq) + return msg, metadata, err + +} + +func request_GitOpsPreCheck_UpdateTask_0(ctx context.Context, marshaler runtime.Marshaler, client GitOpsPreCheckClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PreCheckTask + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdateTask(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GitOpsPreCheck_UpdateTask_0(ctx context.Context, marshaler runtime.Marshaler, server GitOpsPreCheckServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PreCheckTask + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdateTask(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_GitOpsPreCheck_ListTask_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_GitOpsPreCheck_ListTask_0(ctx context.Context, marshaler runtime.Marshaler, client GitOpsPreCheckClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListTaskByIDReq + 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_GitOpsPreCheck_ListTask_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ListTask(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_GitOpsPreCheck_ListTask_0(ctx context.Context, marshaler runtime.Marshaler, server GitOpsPreCheckServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ListTaskByIDReq + 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_GitOpsPreCheck_ListTask_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ListTask(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterGitOpsPreCheckGwServer registers the http handlers for service GitOpsPreCheck to "mux". +// UnaryRPC :call GitOpsPreCheckServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterGitOpsPreCheckGwFromEndpoint instead. +func RegisterGitOpsPreCheckGwServer(ctx context.Context, mux *runtime.ServeMux, server GitOpsPreCheckServer) error { + + mux.Handle("GET", pattern_GitOpsPreCheck_GetMrInfo_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/precheck.GitOpsPreCheck/GetMrInfo", runtime.WithHTTPPathPattern("/api/v1/precheck/mr/info")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GitOpsPreCheck_GetMrInfo_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GitOpsPreCheck_GetMrInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_GitOpsPreCheck_RecordTaskByPlugin_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/precheck.GitOpsPreCheck/RecordTaskByPlugin", runtime.WithHTTPPathPattern("/api/v1/precheck/record")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GitOpsPreCheck_RecordTaskByPlugin_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GitOpsPreCheck_RecordTaskByPlugin_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_GitOpsPreCheck_GetTaskByID_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/precheck.GitOpsPreCheck/GetTaskByID", runtime.WithHTTPPathPattern("/api/v1/precheck/task")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GitOpsPreCheck_GetTaskByID_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GitOpsPreCheck_GetTaskByID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_GitOpsPreCheck_UpdateTask_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/precheck.GitOpsPreCheck/UpdateTask", runtime.WithHTTPPathPattern("/api/v1/precheck/task")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GitOpsPreCheck_UpdateTask_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GitOpsPreCheck_UpdateTask_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_GitOpsPreCheck_ListTask_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) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/precheck.GitOpsPreCheck/ListTask", runtime.WithHTTPPathPattern("/api/v1/precheck/tasks")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_GitOpsPreCheck_ListTask_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GitOpsPreCheck_ListTask_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterGitOpsPreCheckGwFromEndpoint is same as RegisterGitOpsPreCheckGw but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterGitOpsPreCheckGwFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterGitOpsPreCheckGw(ctx, mux, conn) +} + +// RegisterGitOpsPreCheckGw registers the http handlers for service GitOpsPreCheck to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterGitOpsPreCheckGw(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterGitOpsPreCheckGwClient(ctx, mux, NewGitOpsPreCheckClient(conn)) +} + +// RegisterGitOpsPreCheckGwClient registers the http handlers for service GitOpsPreCheck +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "GitOpsPreCheckClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "GitOpsPreCheckClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "GitOpsPreCheckClient" to call the correct interceptors. +func RegisterGitOpsPreCheckGwClient(ctx context.Context, mux *runtime.ServeMux, client GitOpsPreCheckClient) error { + + mux.Handle("GET", pattern_GitOpsPreCheck_GetMrInfo_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) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/precheck.GitOpsPreCheck/GetMrInfo", runtime.WithHTTPPathPattern("/api/v1/precheck/mr/info")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GitOpsPreCheck_GetMrInfo_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GitOpsPreCheck_GetMrInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_GitOpsPreCheck_RecordTaskByPlugin_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) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/precheck.GitOpsPreCheck/RecordTaskByPlugin", runtime.WithHTTPPathPattern("/api/v1/precheck/record")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GitOpsPreCheck_RecordTaskByPlugin_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GitOpsPreCheck_RecordTaskByPlugin_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_GitOpsPreCheck_GetTaskByID_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) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/precheck.GitOpsPreCheck/GetTaskByID", runtime.WithHTTPPathPattern("/api/v1/precheck/task")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GitOpsPreCheck_GetTaskByID_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GitOpsPreCheck_GetTaskByID_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("PUT", pattern_GitOpsPreCheck_UpdateTask_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) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/precheck.GitOpsPreCheck/UpdateTask", runtime.WithHTTPPathPattern("/api/v1/precheck/task")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GitOpsPreCheck_UpdateTask_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GitOpsPreCheck_UpdateTask_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_GitOpsPreCheck_ListTask_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) + rctx, err := runtime.AnnotateContext(ctx, mux, req, "/precheck.GitOpsPreCheck/ListTask", runtime.WithHTTPPathPattern("/api/v1/precheck/tasks")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_GitOpsPreCheck_ListTask_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_GitOpsPreCheck_ListTask_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_GitOpsPreCheck_GetMrInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"api", "v1", "precheck", "mr", "info"}, "")) + + pattern_GitOpsPreCheck_RecordTaskByPlugin_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "precheck", "record"}, "")) + + pattern_GitOpsPreCheck_GetTaskByID_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "precheck", "task"}, "")) + + pattern_GitOpsPreCheck_UpdateTask_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "precheck", "task"}, "")) + + pattern_GitOpsPreCheck_ListTask_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"api", "v1", "precheck", "tasks"}, "")) +) + +var ( + forward_GitOpsPreCheck_GetMrInfo_0 = runtime.ForwardResponseMessage + + forward_GitOpsPreCheck_RecordTaskByPlugin_0 = runtime.ForwardResponseMessage + + forward_GitOpsPreCheck_GetTaskByID_0 = runtime.ForwardResponseMessage + + forward_GitOpsPreCheck_UpdateTask_0 = runtime.ForwardResponseMessage + + forward_GitOpsPreCheck_ListTask_0 = runtime.ForwardResponseMessage +) diff --git a/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.pb.micro.go b/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.pb.micro.go new file mode 100644 index 0000000000..828cc73169 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.pb.micro.go @@ -0,0 +1,218 @@ +// Code generated by protoc-gen-micro. DO NOT EDIT. +// source: proto/bcs-gitops-pre-check.proto + +package precheck + +import ( + fmt "fmt" + _ "github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger/options" + _ "google.golang.org/genproto/googleapis/api/annotations" + proto "google.golang.org/protobuf/proto" + math "math" +) + +import ( + context "context" + api "go-micro.dev/v4/api" + client "go-micro.dev/v4/client" + server "go-micro.dev/v4/server" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Reference imports to suppress errors if they are not otherwise used. +var _ api.Endpoint +var _ context.Context +var _ client.Option +var _ server.Option + +// Api Endpoints for GitOpsPreCheck service + +func NewGitOpsPreCheckEndpoints() []*api.Endpoint { + return []*api.Endpoint{ + { + Name: "GitOpsPreCheck.GetMrInfo", + Path: []string{"/api/v1/precheck/mr/info"}, + Method: []string{"GET"}, + Handler: "rpc", + }, + { + Name: "GitOpsPreCheck.RecordTaskByPlugin", + Path: []string{"/api/v1/precheck/record"}, + Method: []string{"POST"}, + Handler: "rpc", + }, + { + Name: "GitOpsPreCheck.GetTaskByID", + Path: []string{"/api/v1/precheck/task"}, + Method: []string{"GET"}, + Handler: "rpc", + }, + { + Name: "GitOpsPreCheck.UpdateTask", + Path: []string{"/api/v1/precheck/task"}, + Method: []string{"PUT"}, + Handler: "rpc", + }, + { + Name: "GitOpsPreCheck.ListTask", + Path: []string{"/api/v1/precheck/tasks"}, + Method: []string{"GET"}, + Handler: "rpc", + }, + } +} + +// Client API for GitOpsPreCheck service + +type GitOpsPreCheckService interface { + GetMrInfo(ctx context.Context, in *GetMrInfoReq, opts ...client.CallOption) (*GetMrInfoRsp, error) + RecordTaskByPlugin(ctx context.Context, in *PreCheckTask, opts ...client.CallOption) (*PreCheckTaskRsp, error) + GetTaskByID(ctx context.Context, in *GetTaskByIDReq, opts ...client.CallOption) (*PreCheckTaskRsp, error) + UpdateTask(ctx context.Context, in *PreCheckTask, opts ...client.CallOption) (*PreCheckTaskRsp, error) + ListTask(ctx context.Context, in *ListTaskByIDReq, opts ...client.CallOption) (*ListPreCheckTaskRsp, error) +} + +type gitOpsPreCheckService struct { + c client.Client + name string +} + +func NewGitOpsPreCheckService(name string, c client.Client) GitOpsPreCheckService { + return &gitOpsPreCheckService{ + c: c, + name: name, + } +} + +func (c *gitOpsPreCheckService) GetMrInfo(ctx context.Context, in *GetMrInfoReq, opts ...client.CallOption) (*GetMrInfoRsp, error) { + req := c.c.NewRequest(c.name, "GitOpsPreCheck.GetMrInfo", in) + out := new(GetMrInfoRsp) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *gitOpsPreCheckService) RecordTaskByPlugin(ctx context.Context, in *PreCheckTask, opts ...client.CallOption) (*PreCheckTaskRsp, error) { + req := c.c.NewRequest(c.name, "GitOpsPreCheck.RecordTaskByPlugin", in) + out := new(PreCheckTaskRsp) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *gitOpsPreCheckService) GetTaskByID(ctx context.Context, in *GetTaskByIDReq, opts ...client.CallOption) (*PreCheckTaskRsp, error) { + req := c.c.NewRequest(c.name, "GitOpsPreCheck.GetTaskByID", in) + out := new(PreCheckTaskRsp) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *gitOpsPreCheckService) UpdateTask(ctx context.Context, in *PreCheckTask, opts ...client.CallOption) (*PreCheckTaskRsp, error) { + req := c.c.NewRequest(c.name, "GitOpsPreCheck.UpdateTask", in) + out := new(PreCheckTaskRsp) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *gitOpsPreCheckService) ListTask(ctx context.Context, in *ListTaskByIDReq, opts ...client.CallOption) (*ListPreCheckTaskRsp, error) { + req := c.c.NewRequest(c.name, "GitOpsPreCheck.ListTask", in) + out := new(ListPreCheckTaskRsp) + err := c.c.Call(ctx, req, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for GitOpsPreCheck service + +type GitOpsPreCheckHandler interface { + GetMrInfo(context.Context, *GetMrInfoReq, *GetMrInfoRsp) error + RecordTaskByPlugin(context.Context, *PreCheckTask, *PreCheckTaskRsp) error + GetTaskByID(context.Context, *GetTaskByIDReq, *PreCheckTaskRsp) error + UpdateTask(context.Context, *PreCheckTask, *PreCheckTaskRsp) error + ListTask(context.Context, *ListTaskByIDReq, *ListPreCheckTaskRsp) error +} + +func RegisterGitOpsPreCheckHandler(s server.Server, hdlr GitOpsPreCheckHandler, opts ...server.HandlerOption) error { + type gitOpsPreCheck interface { + GetMrInfo(ctx context.Context, in *GetMrInfoReq, out *GetMrInfoRsp) error + RecordTaskByPlugin(ctx context.Context, in *PreCheckTask, out *PreCheckTaskRsp) error + GetTaskByID(ctx context.Context, in *GetTaskByIDReq, out *PreCheckTaskRsp) error + UpdateTask(ctx context.Context, in *PreCheckTask, out *PreCheckTaskRsp) error + ListTask(ctx context.Context, in *ListTaskByIDReq, out *ListPreCheckTaskRsp) error + } + type GitOpsPreCheck struct { + gitOpsPreCheck + } + h := &gitOpsPreCheckHandler{hdlr} + opts = append(opts, api.WithEndpoint(&api.Endpoint{ + Name: "GitOpsPreCheck.GetMrInfo", + Path: []string{"/api/v1/precheck/mr/info"}, + Method: []string{"GET"}, + Handler: "rpc", + })) + opts = append(opts, api.WithEndpoint(&api.Endpoint{ + Name: "GitOpsPreCheck.RecordTaskByPlugin", + Path: []string{"/api/v1/precheck/record"}, + Method: []string{"POST"}, + Handler: "rpc", + })) + opts = append(opts, api.WithEndpoint(&api.Endpoint{ + Name: "GitOpsPreCheck.GetTaskByID", + Path: []string{"/api/v1/precheck/task"}, + Method: []string{"GET"}, + Handler: "rpc", + })) + opts = append(opts, api.WithEndpoint(&api.Endpoint{ + Name: "GitOpsPreCheck.UpdateTask", + Path: []string{"/api/v1/precheck/task"}, + Method: []string{"PUT"}, + Handler: "rpc", + })) + opts = append(opts, api.WithEndpoint(&api.Endpoint{ + Name: "GitOpsPreCheck.ListTask", + Path: []string{"/api/v1/precheck/tasks"}, + Method: []string{"GET"}, + Handler: "rpc", + })) + return s.Handle(s.NewHandler(&GitOpsPreCheck{h}, opts...)) +} + +type gitOpsPreCheckHandler struct { + GitOpsPreCheckHandler +} + +func (h *gitOpsPreCheckHandler) GetMrInfo(ctx context.Context, in *GetMrInfoReq, out *GetMrInfoRsp) error { + return h.GitOpsPreCheckHandler.GetMrInfo(ctx, in, out) +} + +func (h *gitOpsPreCheckHandler) RecordTaskByPlugin(ctx context.Context, in *PreCheckTask, out *PreCheckTaskRsp) error { + return h.GitOpsPreCheckHandler.RecordTaskByPlugin(ctx, in, out) +} + +func (h *gitOpsPreCheckHandler) GetTaskByID(ctx context.Context, in *GetTaskByIDReq, out *PreCheckTaskRsp) error { + return h.GitOpsPreCheckHandler.GetTaskByID(ctx, in, out) +} + +func (h *gitOpsPreCheckHandler) UpdateTask(ctx context.Context, in *PreCheckTask, out *PreCheckTaskRsp) error { + return h.GitOpsPreCheckHandler.UpdateTask(ctx, in, out) +} + +func (h *gitOpsPreCheckHandler) ListTask(ctx context.Context, in *ListTaskByIDReq, out *ListPreCheckTaskRsp) error { + return h.GitOpsPreCheckHandler.ListTask(ctx, in, out) +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.proto b/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.proto new file mode 100644 index 0000000000..657d548e58 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.proto @@ -0,0 +1,475 @@ +syntax = "proto3"; + +package precheck; + +option go_package = "./proto;precheck"; + +import "google/api/annotations.proto"; +import "protoc-gen-swagger/options/annotations.proto"; + +service GitOpsPreCheck { + rpc GetMrInfo(GetMrInfoReq) returns (GetMrInfoRsp) { + option (google.api.http) = { + get : "/api/v1/precheck/mr/info" + }; + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { + description : "获取mr信息" + summary : "获取mr信息" + }; + } + rpc RecordTaskByPlugin(PreCheckTask) returns (PreCheckTaskRsp) { + option (google.api.http) = { + post : "/api/v1/precheck/record" + body: "*" + }; + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { + description : "补录preCheck任务" + summary : "补录preCheck任务" + }; + } + rpc GetTaskByID(GetTaskByIDReq) returns (PreCheckTaskRsp) { + option (google.api.http) = { + get : "/api/v1/precheck/task" + }; + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { + description : "查询单个preCheck任务" + summary : "查询单个preCheck任务" + }; + } + rpc UpdateTask(PreCheckTask) returns (PreCheckTaskRsp) { + option (google.api.http) = { + put : "/api/v1/precheck/task" + body: "*" + }; + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { + description : "更新单个preCheck任务" + summary : "更新单个preCheck任务" + }; + } + rpc ListTask(ListTaskByIDReq) returns (ListPreCheckTaskRsp) { + option (google.api.http) = { + get : "/api/v1/precheck/tasks" + }; + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = { + description : "查询单个preCheck任务" + summary : "查询单个preCheck任务" + }; + } +} + +message GetMrInfoReq { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema : { + title : "GetMrInfoReq" + description : "获取mr信息req" + } + }; + string repository = 1 [ + (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "repository", + description : "仓库地址" + }]; + string mrIID = 2 [ + (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "mrIID", + description : "mrIID" + }]; +} + +message GetMrInfoRsp { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema : { + title : "GetMrInfoRsp" + description : "获取mrInfo响应" + required: ["code", "message"] + } + }; + optional uint32 code = 1[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "code", + description : "返回错误码" + }]; + string message = 2[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "message", + description : "返回错误信息" + }]; + string requestID = 3[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "requestID", + description : "请求ID" + }]; + MRInfoData data = 4 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "data", + description : "返回的设备列表" + }]; +} + +message MRInfoData { + string sourceBranch = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "sourceBranch", + description: "Source branch" + }]; + + string targetBranch = 2 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "targetBranch", + description: "Target branch" + }]; + + string creator = 3 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "creator", + description: "Creator" + }]; + + string createTime = 4 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "createTime", + description: "Create time" + }]; + + string updateTime = 5 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "updateTime", + description: "Update time" + }]; + + string title = 6 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "title", + description: "Title" + }]; + + string mrMessage = 7 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "mrMessage", + description: "MR message" + }]; + + string repository = 8 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "repository", + description: "Repository" + }]; + + string sourceCommit = 9 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "sourceCommit", + description: "Source commit" + }]; + + string targetCommit = 10 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "targetCommit", + description: "Target commit" + }]; + uint32 id = 11 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "id", + description: "id" + }]; + uint32 iid = 12 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "iid", + description: "iid" + }]; +} + +message ApplicationDetail { + optional bool finish = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "finish", + description: "Finish" + }]; + repeated ResourceCheckDetail detail = 2 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "detail", + description: "detail" + }]; + string message = 3 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "message", + description: "message" + }]; +} + +message ResourceCheckDetail { + optional bool finish = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "finish", + description: "Finish" + }]; + + string resourceType = 2 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "resourceType", + description: "Resource type" + }]; + + string resourceName = 3 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "resourceName", + description: "Resource name" + }]; + + string apiVersion = 6 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "apiVersion", + description: "api version" + }]; + + + string detail = 4 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "detail", + description: "Detail" + }]; + optional bool pass = 5 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "pass", + description: "pass" + }]; + string cluster = 7 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "cluster", + description: "cluster" + }]; + string namespace = 8 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "namespace", + description: "namespace" + }]; +} + +message ApplicationCheckDetail { + map checkDetail = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "checkDetail", + description: "Check detail" + }]; +} + + +message PreCheckTask { + string id = 1 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "id", + description: "task ID" + }]; + + string project = 2 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "project", + description: "Project" + }]; + + string repositoryAddr = 3 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "repositoryAddr", + description: "Repository address" + }]; + + string mrIid = 4 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "mrIID", + description: "MR IID" + }]; + + optional bool checkCallbackGit = 5 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "checkCallbackGit", + description: "Check callback Git" + }]; + + string checkRevision = 6 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "checkRevision", + description: "Check revision" + }]; + + string applicationName = 7 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "applicationName", + description: "Application name" + }]; + + string triggerType = 8 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "triggerType", + description: "Trigger type" + }]; + + string branchValue = 9 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "branchValue", + description: "branchValue" + }]; + + map checkDetail = 10 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "checkDetail", + description: "Check detail" + }]; + + string createTime = 11 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "createTime", + description: "Create time" + }]; + + string updateTime = 12 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "updateTime", + description: "Update time" + }]; + + string triggerByUser = 13 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "triggerByUser", + description: "Trigger by user" + }]; + + string createBy = 14 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "createBy", + description: "Create by" + }]; + optional bool finish = 15 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "finish", + description: "Finish" + }]; + string flowID = 16 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "flowID", + description: "flow ID" + }]; + repeated string involvedApplications = 17 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "involvedApplications", + description: "involvedApplications" + }]; + string replaceRepo = 18 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "replaceRepo", + description: "replaceRepo" + }]; + optional bool needReplaceRepo = 19 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "needReplaceRepo", + description: "needReplaceRepo" + }]; + string replaceProject = 20 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "replaceProject", + description: "replaceProject" + }]; + string flowLink = 21 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "flowLink", + description: "flowLink" + }]; + MRInfoData mrInfo = 22 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "mrInfo", + description: "mrInfo" + }]; + optional bool pass = 23 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "pass", + description: "pass" + }]; + string message = 24 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "message", + description: "message" + }]; + optional bool chooseApplication = 25 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "chooseApplication", + description: "chooseApplication" + }]; + string appFilter = 26 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "appFilter", + description: "appFilter" + }]; + string labelSelector = 27 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title: "appFilter", + description: "appFilter" + }]; +} + +message PreCheckTaskRsp { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema : { + title : "PreCheckTaskRsp" + description : "部署前检查响应" + required: ["code", "message"] + } + }; + optional uint32 code = 1[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "code", + description : "返回错误码" + }]; + string message = 2[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "message", + description : "返回错误信息" + }]; + string requestID = 3[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "requestID", + description : "请求ID" + }]; + PreCheckTask data = 4 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "data", + description : "返回的设备列表" + }]; +} + +message ListPreCheckTaskRsp { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema : { + title : "ListPreCheckTaskRsp" + description : "部署前检查task列表响应" + required: ["code", "message"] + } + }; + optional uint32 code = 1[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "code", + description : "返回错误码" + }]; + string message = 2[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "message", + description : "返回错误信息" + }]; + string requestID = 3[(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "requestID", + description : "请求ID" + }]; + repeated PreCheckTask data = 4 [(grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "data", + description : "返回的设备列表" + }]; +} + +message GetTaskByIDReq { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema : { + title : "GetTaskByIDReq" + description : "获取task" + } + }; + string id = 1 [ + (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "id", + description : "id" + }]; + string project = 2 [ + (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "project", + description : "project" + }]; + bool diffDetail = 3 [ + (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "diffDetail", + description : "diffDetail" + }]; +} + +message ListTaskByIDReq { + option (grpc.gateway.protoc_gen_swagger.options.openapiv2_schema) = { + json_schema : { + title : "ListTaskByIDReq" + description : "获取task列表" + } + }; + repeated string projects = 1 [ + (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "projects", + description : "项目" + }]; + repeated string repos = 2 [ + (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "repos", + description : "仓库" + }]; + string startTime = 3 [ + (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "startTime", + description : "开始时间" + }]; + string endTime = 4 [ + (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "endTime", + description : "结束时间" + }]; + uint32 limit = 5 [ + (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "limit", + description : "单页数量" + }]; + uint32 offset = 6 [ + (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "offset", + description : "偏移量" + }]; + bool withDetail = 7 [ + (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "withDetail", + description : "是否返回详情" + }]; + bool diffDetail = 8 [ + (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "diffDetail", + description : "diffDetail" + }]; +} \ No newline at end of file diff --git a/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.swagger.json b/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.swagger.json new file mode 100644 index 0000000000..a348e98325 --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check.swagger.json @@ -0,0 +1,625 @@ +{ + "swagger": "2.0", + "info": { + "title": "proto/bcs-gitops-pre-check.proto", + "version": "version not set" + }, + "tags": [ + { + "name": "GitOpsPreCheck" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/api/v1/precheck/mr/info": { + "get": { + "summary": "获取mr信息", + "description": "获取mr信息", + "operationId": "GitOpsPreCheck_GetMrInfo", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/precheckGetMrInfoRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "repository", + "description": "repository. 仓库地址", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "mrIID", + "description": "mrIID. mrIID", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "GitOpsPreCheck" + ] + } + }, + "/api/v1/precheck/record": { + "post": { + "summary": "补录preCheck任务", + "description": "补录preCheck任务", + "operationId": "GitOpsPreCheck_RecordTaskByPlugin", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/precheckPreCheckTaskRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/precheckPreCheckTask" + } + } + ], + "tags": [ + "GitOpsPreCheck" + ] + } + }, + "/api/v1/precheck/task": { + "get": { + "summary": "查询单个preCheck任务", + "description": "查询单个preCheck任务", + "operationId": "GitOpsPreCheck_GetTaskByID", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/precheckPreCheckTaskRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "description": "id. id", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "project", + "description": "project. project", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "GitOpsPreCheck" + ] + }, + "put": { + "summary": "更新单个preCheck任务", + "description": "更新单个preCheck任务", + "operationId": "GitOpsPreCheck_UpdateTask", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/precheckPreCheckTaskRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/precheckPreCheckTask" + } + } + ], + "tags": [ + "GitOpsPreCheck" + ] + } + }, + "/api/v1/precheck/tasks": { + "get": { + "summary": "查询单个preCheck任务", + "description": "查询单个preCheck任务", + "operationId": "GitOpsPreCheck_ListTask", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/precheckListPreCheckTaskRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "projects", + "description": "projects. 项目", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "repos", + "description": "repos. 仓库", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "startTime", + "description": "startTime. 开始时间", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "endTime", + "description": "endTime. 结束时间", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "limit", + "description": "limit. 单页数量", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "offset", + "description": "offset. 偏移量", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "withDetail", + "description": "withDetail. 是否返回详情", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "GitOpsPreCheck" + ] + } + } + }, + "definitions": { + "precheckApplicationCheckDetail": { + "type": "object", + "properties": { + "checkDetail": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/precheckApplicationDetail" + }, + "description": "Check detail", + "title": "checkDetail" + } + } + }, + "precheckApplicationDetail": { + "type": "object", + "properties": { + "finish": { + "type": "boolean", + "description": "Finish", + "title": "finish" + }, + "detail": { + "type": "array", + "items": { + "$ref": "#/definitions/precheckResourceCheckDetail" + }, + "description": "detail", + "title": "detail" + }, + "message": { + "type": "string", + "description": "message", + "title": "message" + } + } + }, + "precheckGetMrInfoRsp": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int64", + "description": "返回错误码", + "title": "code" + }, + "message": { + "type": "string", + "description": "返回错误信息", + "title": "message" + }, + "requestID": { + "type": "string", + "description": "请求ID", + "title": "requestID" + }, + "data": { + "$ref": "#/definitions/precheckMRInfoData", + "description": "返回的设备列表", + "title": "data" + } + }, + "description": "获取mrInfo响应", + "title": "GetMrInfoRsp", + "required": [ + "code", + "message" + ] + }, + "precheckListPreCheckTaskRsp": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int64", + "description": "返回错误码", + "title": "code" + }, + "message": { + "type": "string", + "description": "返回错误信息", + "title": "message" + }, + "requestID": { + "type": "string", + "description": "请求ID", + "title": "requestID" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/definitions/precheckPreCheckTask" + }, + "description": "返回的设备列表", + "title": "data" + } + }, + "description": "部署前检查task列表响应", + "title": "ListPreCheckTaskRsp", + "required": [ + "code", + "message" + ] + }, + "precheckMRInfoData": { + "type": "object", + "properties": { + "sourceBranch": { + "type": "string", + "description": "Source branch", + "title": "sourceBranch" + }, + "targetBranch": { + "type": "string", + "description": "Target branch", + "title": "targetBranch" + }, + "creator": { + "type": "string", + "description": "Creator", + "title": "creator" + }, + "createTime": { + "type": "string", + "description": "Create time", + "title": "createTime" + }, + "updateTime": { + "type": "string", + "description": "Update time", + "title": "updateTime" + }, + "title": { + "type": "string", + "description": "Title", + "title": "title" + }, + "mrMessage": { + "type": "string", + "description": "MR message", + "title": "mrMessage" + }, + "repository": { + "type": "string", + "description": "Repository", + "title": "repository" + }, + "sourceCommit": { + "type": "string", + "description": "Source commit", + "title": "sourceCommit" + }, + "targetCommit": { + "type": "string", + "description": "Target commit", + "title": "targetCommit" + }, + "id": { + "type": "integer", + "format": "int64", + "description": "id", + "title": "id" + }, + "iid": { + "type": "integer", + "format": "int64", + "description": "iid", + "title": "iid" + } + } + }, + "precheckPreCheckTask": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "task ID", + "title": "id" + }, + "project": { + "type": "string", + "description": "Project", + "title": "project" + }, + "repositoryAddr": { + "type": "string", + "description": "Repository address", + "title": "repositoryAddr" + }, + "mrIid": { + "type": "string", + "description": "MR IID", + "title": "mrIID" + }, + "checkCallbackGit": { + "type": "boolean", + "description": "Check callback Git", + "title": "checkCallbackGit" + }, + "checkRevision": { + "type": "string", + "description": "Check revision", + "title": "checkRevision" + }, + "applicationName": { + "type": "string", + "description": "Application name", + "title": "applicationName" + }, + "triggerType": { + "type": "string", + "description": "Trigger type", + "title": "triggerType" + }, + "tag": { + "type": "string", + "description": "Tag", + "title": "tag" + }, + "checkDetail": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/precheckApplicationCheckDetail" + }, + "description": "Check detail", + "title": "checkDetail" + }, + "createTime": { + "type": "string", + "description": "Create time", + "title": "createTime" + }, + "updateTime": { + "type": "string", + "description": "Update time", + "title": "updateTime" + }, + "triggerByUser": { + "type": "string", + "description": "Trigger by user", + "title": "triggerByUser" + }, + "createBy": { + "type": "string", + "description": "Create by", + "title": "createBy" + }, + "finish": { + "type": "boolean", + "description": "Finish", + "title": "finish" + }, + "flowID": { + "type": "string", + "description": "flow ID", + "title": "flowID" + }, + "involvedApplications": { + "type": "array", + "items": { + "type": "string" + }, + "description": "involvedApplications", + "title": "involvedApplications" + } + } + }, + "precheckPreCheckTaskRsp": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int64", + "description": "返回错误码", + "title": "code" + }, + "message": { + "type": "string", + "description": "返回错误信息", + "title": "message" + }, + "requestID": { + "type": "string", + "description": "请求ID", + "title": "requestID" + }, + "data": { + "$ref": "#/definitions/precheckPreCheckTask", + "description": "返回的设备列表", + "title": "data" + } + }, + "description": "部署前检查响应", + "title": "PreCheckTaskRsp", + "required": [ + "code", + "message" + ] + }, + "precheckResourceCheckDetail": { + "type": "object", + "properties": { + "finish": { + "type": "boolean", + "description": "Finish", + "title": "finish" + }, + "resourceType": { + "type": "string", + "description": "Resource type", + "title": "resourceType" + }, + "resourceName": { + "type": "string", + "description": "Resource name", + "title": "resourceName" + }, + "apiVersion": { + "type": "string", + "description": "api version", + "title": "apiVersion" + }, + "detail": { + "type": "string", + "description": "Detail", + "title": "detail" + }, + "pass": { + "type": "boolean", + "description": "pass", + "title": "pass" + }, + "cluster": { + "type": "string", + "description": "cluster", + "title": "cluster" + }, + "namespace": { + "type": "string", + "description": "namespace", + "title": "namespace" + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := ptypes.MarshalAny(foo)\n ...\n foo := \u0026pb.Foo{}\n if err := ptypes.UnmarshalAny(any, foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check_grpc.pb.go b/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check_grpc.pb.go new file mode 100644 index 0000000000..3e45355dba --- /dev/null +++ b/bcs-scenarios/bcs-gitops-pre-check/proto/bcs-gitops-pre-check_grpc.pb.go @@ -0,0 +1,249 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc v3.19.4 +// source: proto/bcs-gitops-pre-check.proto + +package precheck + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// GitOpsPreCheckClient is the client API for GitOpsPreCheck service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type GitOpsPreCheckClient interface { + GetMrInfo(ctx context.Context, in *GetMrInfoReq, opts ...grpc.CallOption) (*GetMrInfoRsp, error) + RecordTaskByPlugin(ctx context.Context, in *PreCheckTask, opts ...grpc.CallOption) (*PreCheckTaskRsp, error) + GetTaskByID(ctx context.Context, in *GetTaskByIDReq, opts ...grpc.CallOption) (*PreCheckTaskRsp, error) + UpdateTask(ctx context.Context, in *PreCheckTask, opts ...grpc.CallOption) (*PreCheckTaskRsp, error) + ListTask(ctx context.Context, in *ListTaskByIDReq, opts ...grpc.CallOption) (*ListPreCheckTaskRsp, error) +} + +type gitOpsPreCheckClient struct { + cc grpc.ClientConnInterface +} + +func NewGitOpsPreCheckClient(cc grpc.ClientConnInterface) GitOpsPreCheckClient { + return &gitOpsPreCheckClient{cc} +} + +func (c *gitOpsPreCheckClient) GetMrInfo(ctx context.Context, in *GetMrInfoReq, opts ...grpc.CallOption) (*GetMrInfoRsp, error) { + out := new(GetMrInfoRsp) + err := c.cc.Invoke(ctx, "/precheck.GitOpsPreCheck/GetMrInfo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *gitOpsPreCheckClient) RecordTaskByPlugin(ctx context.Context, in *PreCheckTask, opts ...grpc.CallOption) (*PreCheckTaskRsp, error) { + out := new(PreCheckTaskRsp) + err := c.cc.Invoke(ctx, "/precheck.GitOpsPreCheck/RecordTaskByPlugin", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *gitOpsPreCheckClient) GetTaskByID(ctx context.Context, in *GetTaskByIDReq, opts ...grpc.CallOption) (*PreCheckTaskRsp, error) { + out := new(PreCheckTaskRsp) + err := c.cc.Invoke(ctx, "/precheck.GitOpsPreCheck/GetTaskByID", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *gitOpsPreCheckClient) UpdateTask(ctx context.Context, in *PreCheckTask, opts ...grpc.CallOption) (*PreCheckTaskRsp, error) { + out := new(PreCheckTaskRsp) + err := c.cc.Invoke(ctx, "/precheck.GitOpsPreCheck/UpdateTask", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *gitOpsPreCheckClient) ListTask(ctx context.Context, in *ListTaskByIDReq, opts ...grpc.CallOption) (*ListPreCheckTaskRsp, error) { + out := new(ListPreCheckTaskRsp) + err := c.cc.Invoke(ctx, "/precheck.GitOpsPreCheck/ListTask", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// GitOpsPreCheckServer is the server API for GitOpsPreCheck service. +// All implementations must embed UnimplementedGitOpsPreCheckServer +// for forward compatibility +type GitOpsPreCheckServer interface { + GetMrInfo(context.Context, *GetMrInfoReq) (*GetMrInfoRsp, error) + RecordTaskByPlugin(context.Context, *PreCheckTask) (*PreCheckTaskRsp, error) + GetTaskByID(context.Context, *GetTaskByIDReq) (*PreCheckTaskRsp, error) + UpdateTask(context.Context, *PreCheckTask) (*PreCheckTaskRsp, error) + ListTask(context.Context, *ListTaskByIDReq) (*ListPreCheckTaskRsp, error) + mustEmbedUnimplementedGitOpsPreCheckServer() +} + +// UnimplementedGitOpsPreCheckServer must be embedded to have forward compatible implementations. +type UnimplementedGitOpsPreCheckServer struct { +} + +func (UnimplementedGitOpsPreCheckServer) GetMrInfo(context.Context, *GetMrInfoReq) (*GetMrInfoRsp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMrInfo not implemented") +} +func (UnimplementedGitOpsPreCheckServer) RecordTaskByPlugin(context.Context, *PreCheckTask) (*PreCheckTaskRsp, error) { + return nil, status.Errorf(codes.Unimplemented, "method RecordTaskByPlugin not implemented") +} +func (UnimplementedGitOpsPreCheckServer) GetTaskByID(context.Context, *GetTaskByIDReq) (*PreCheckTaskRsp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetTaskByID not implemented") +} +func (UnimplementedGitOpsPreCheckServer) UpdateTask(context.Context, *PreCheckTask) (*PreCheckTaskRsp, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateTask not implemented") +} +func (UnimplementedGitOpsPreCheckServer) ListTask(context.Context, *ListTaskByIDReq) (*ListPreCheckTaskRsp, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListTask not implemented") +} +func (UnimplementedGitOpsPreCheckServer) mustEmbedUnimplementedGitOpsPreCheckServer() {} + +// UnsafeGitOpsPreCheckServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to GitOpsPreCheckServer will +// result in compilation errors. +type UnsafeGitOpsPreCheckServer interface { + mustEmbedUnimplementedGitOpsPreCheckServer() +} + +func RegisterGitOpsPreCheckServer(s grpc.ServiceRegistrar, srv GitOpsPreCheckServer) { + s.RegisterService(&GitOpsPreCheck_ServiceDesc, srv) +} + +func _GitOpsPreCheck_GetMrInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMrInfoReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GitOpsPreCheckServer).GetMrInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/precheck.GitOpsPreCheck/GetMrInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GitOpsPreCheckServer).GetMrInfo(ctx, req.(*GetMrInfoReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _GitOpsPreCheck_RecordTaskByPlugin_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PreCheckTask) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GitOpsPreCheckServer).RecordTaskByPlugin(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/precheck.GitOpsPreCheck/RecordTaskByPlugin", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GitOpsPreCheckServer).RecordTaskByPlugin(ctx, req.(*PreCheckTask)) + } + return interceptor(ctx, in, info, handler) +} + +func _GitOpsPreCheck_GetTaskByID_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTaskByIDReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GitOpsPreCheckServer).GetTaskByID(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/precheck.GitOpsPreCheck/GetTaskByID", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GitOpsPreCheckServer).GetTaskByID(ctx, req.(*GetTaskByIDReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _GitOpsPreCheck_UpdateTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PreCheckTask) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GitOpsPreCheckServer).UpdateTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/precheck.GitOpsPreCheck/UpdateTask", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GitOpsPreCheckServer).UpdateTask(ctx, req.(*PreCheckTask)) + } + return interceptor(ctx, in, info, handler) +} + +func _GitOpsPreCheck_ListTask_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ListTaskByIDReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(GitOpsPreCheckServer).ListTask(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/precheck.GitOpsPreCheck/ListTask", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(GitOpsPreCheckServer).ListTask(ctx, req.(*ListTaskByIDReq)) + } + return interceptor(ctx, in, info, handler) +} + +// GitOpsPreCheck_ServiceDesc is the grpc.ServiceDesc for GitOpsPreCheck service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var GitOpsPreCheck_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "precheck.GitOpsPreCheck", + HandlerType: (*GitOpsPreCheckServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetMrInfo", + Handler: _GitOpsPreCheck_GetMrInfo_Handler, + }, + { + MethodName: "RecordTaskByPlugin", + Handler: _GitOpsPreCheck_RecordTaskByPlugin_Handler, + }, + { + MethodName: "GetTaskByID", + Handler: _GitOpsPreCheck_GetTaskByID_Handler, + }, + { + MethodName: "UpdateTask", + Handler: _GitOpsPreCheck_UpdateTask_Handler, + }, + { + MethodName: "ListTask", + Handler: _GitOpsPreCheck_ListTask_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "proto/bcs-gitops-pre-check.proto", +} From a0a0069b396eafbe908c52ca1f5fd2579c6a813b Mon Sep 17 00:00:00 2001 From: haojiefan Date: Tue, 27 Aug 2024 09:56:14 +0000 Subject: [PATCH 012/108] =?UTF-8?q?--story=3D119353334=20=E3=80=90bcs?= =?UTF-8?q?=E7=BD=91=E5=85=B3=E3=80=91=E7=BD=91=E5=85=B3=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E8=AE=A4=E8=AF=81=E6=96=B9=E5=BC=8F=20(merge?= =?UTF-8?q?=20request=20!1990)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squash merge branch 'bcs-api-gateway-20240827' into 'master' --story=119353334 【bcs网关】网关接口切换认证方式 TAPD: --story=119353334 --- .../plugins/apisix/bcs-auth/bklogin.lua | 7 +++++-- .../plugins/apisix/bcs-dynamic-route.lua | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/bcs-services/bcs-gateway-discovery/plugins/apisix/bcs-auth/bklogin.lua b/bcs-services/bcs-gateway-discovery/plugins/apisix/bcs-auth/bklogin.lua index 1217649cc8..eb1f66d52e 100644 --- a/bcs-services/bcs-gateway-discovery/plugins/apisix/bcs-auth/bklogin.lua +++ b/bcs-services/bcs-gateway-discovery/plugins/apisix/bcs-auth/bklogin.lua @@ -54,11 +54,12 @@ end -- get_username_for_token used for LoginTokenAuthentication function _M.get_username_for_token(credential, bk_login_host) local httpc = http.new() - local res, err = httpc:request_uri(bk_login_host .. "/login/accounts/is_login/", { + local res, err = httpc:request_uri(bk_login_host .. "/accounts/is_login/", { method = "GET", query = {bk_token = credential.user_token}, headers = { ["Content-Type"] = "application/json", + ["X-Bkapi-Authorization"] = authorization, }, }) @@ -89,11 +90,13 @@ end -- get_username_for_token_esb used for LoginTokenAuthentication function _M.get_username_for_token_esb(credential, conf) local httpc = http.new() + local authorization = string.format('{"bk_app_code": "%s", "bk_app_secret": "%s"}', conf.bk_app_code, conf.bk_app_secret) local res, err = httpc:request_uri(conf.bk_login_host_esb .. "/api/c/compapi/v2/bk_login/is_login/", { method = "GET", - query = {bk_token = credential.user_token, bk_app_code = conf.bk_app_code, bk_app_secret = conf.bk_app_secret}, + query = {bk_token = credential.user_token}, headers = { ["Content-Type"] = "application/json", + ["X-Bkapi-Authorization"] = authorization, }, }) diff --git a/bcs-services/bcs-gateway-discovery/plugins/apisix/bcs-dynamic-route.lua b/bcs-services/bcs-gateway-discovery/plugins/apisix/bcs-dynamic-route.lua index d273da0e76..567351c015 100644 --- a/bcs-services/bcs-gateway-discovery/plugins/apisix/bcs-dynamic-route.lua +++ b/bcs-services/bcs-gateway-discovery/plugins/apisix/bcs-dynamic-route.lua @@ -349,7 +349,7 @@ local function periodly_sync_cluster_credentials_in_master() table_insert(healthy_nodes, node) else -- 如果节点不健康,记录警告日志 - core.log.warn("Node ", node.host, ":", node.port, " is unhealthy") + core.log.warn("Cluster ", cluster_credential["clusterID"], " Node ", node.host, ":", node.port, " is unhealthy") end end -- 将upstream_nodes更新为只包含健康节点的列表 From cb4961b50fa5deccc2e25bb3bffa238ca20dbf2c Mon Sep 17 00:00:00 2001 From: Joe Lei Date: Wed, 28 Aug 2024 11:23:56 +0800 Subject: [PATCH 013/108] feat: bcs-task add revoker interface and etcd revoker (#3460) * feat: bcs-task etcd broker add keepRespCh * feat: use time * feat: add revoke * feat: add revoke * feat: add revoke * feat: add workername * feat: add workername * feat: add workername * feat: add revoke * feat: add revoke * feat: add revoke * feat: add revoke * feat: add revoke * feat: add revoke * feat: add revoke * feat: add revoke * feat: add updateTaskField * feat: add revoker * feat: add revoker * feat: add revoker * feat: payload use string * feat: task manager stop ctx * feat: task manager stop ctx * feat: add pendingTaskPrefix * feat: add pendingTaskPrefix * feat: add taskEndStatus * feat: add unix zero time * feat: add unix zero time --- .../common/task/brokers/etcd/delivery.go | 20 ++- bcs-common/common/task/brokers/etcd/etcd.go | 36 +++-- bcs-common/common/task/go.mod | 2 +- bcs-common/common/task/manager.go | 58 +++++-- bcs-common/common/task/revokers/etcd/etcd.go | 78 +++++++++ .../common/task/revokers/etcd/revoke.go | 153 ++++++++++++++++++ .../common/task/revokers/iface/interfaces.go | 24 +++ bcs-common/common/task/state.go | 53 +++--- bcs-common/common/task/steps/iface/context.go | 6 + bcs-common/common/task/stores/mysql/helper.go | 29 +++- bcs-common/common/task/stores/mysql/mysql.go | 11 +- bcs-common/common/task/stores/mysql/table.go | 32 +++- bcs-common/common/task/types/step.go | 4 +- bcs-common/common/task/types/task.go | 16 +- bcs-common/common/task/types/type.go | 13 +- 15 files changed, 461 insertions(+), 74 deletions(-) create mode 100644 bcs-common/common/task/revokers/etcd/etcd.go create mode 100644 bcs-common/common/task/revokers/etcd/revoke.go create mode 100644 bcs-common/common/task/revokers/iface/interfaces.go diff --git a/bcs-common/common/task/brokers/etcd/delivery.go b/bcs-common/common/task/brokers/etcd/delivery.go index cec1974be6..2d50e2e8ae 100644 --- a/bcs-common/common/task/brokers/etcd/delivery.go +++ b/bcs-common/common/task/brokers/etcd/delivery.go @@ -98,11 +98,29 @@ func (d *deliver) assign(key string, node string) error { } aliveCtx, aliveCancel := context.WithCancel(d.ctx) - if _, err = d.client.KeepAlive(aliveCtx, grantResp.ID); err != nil { + keepRespCh, err := d.client.KeepAlive(aliveCtx, grantResp.ID) + if err != nil { aliveCancel() return err } + go func() { + defer aliveCancel() + + for { + select { + case <-d.ctx.Done(): + return + case <-aliveCtx.Done(): + return + case _, ok := <-keepRespCh: + if !ok { + return + } + } + } + }() + d.aliveCancel = aliveCancel d.signature = signature d.value = kv.Value diff --git a/bcs-common/common/task/brokers/etcd/etcd.go b/bcs-common/common/task/brokers/etcd/etcd.go index 99cc78b06e..740ee9237b 100644 --- a/bcs-common/common/task/brokers/etcd/etcd.go +++ b/bcs-common/common/task/brokers/etcd/etcd.go @@ -35,6 +35,12 @@ import ( "golang.org/x/sync/errgroup" ) +const ( + pendingTaskPrefix = "/machinery/v2/broker/pending_tasks" + delayedTaskPrefix = "/machinery/v2/broker/delayed_tasks" + delayedTaskLockKey = "/machinery/v2/lock/delayed_tasks" +) + type etcdBroker struct { common.Broker ctx context.Context @@ -196,7 +202,6 @@ func (b *etcdBroker) consume(deliveries <-chan Delivery, concurrency int, taskPr } return eg.Wait() - } // consumeOne processes a single message using TaskProcessor @@ -236,18 +241,21 @@ func (b *etcdBroker) Publish(ctx context.Context, signature *tasks.Signature) er return fmt.Errorf("JSON marshal error: %s", err) } - key := fmt.Sprintf("/machinery/v2/broker/pending_tasks/%s/%s", signature.RoutingKey, signature.UUID) + key := fmt.Sprintf("%s/%s/%s", pendingTaskPrefix, signature.RoutingKey, signature.UUID) // Check the ETA signature field, if it is set and it is in the future, // delay the task if signature.ETA != nil && signature.ETA.After(now) { - key = fmt.Sprintf("/machinery/v2/broker/delayed_tasks/eta-%d/%s/%s", - signature.ETA.UnixMilli(), signature.RoutingKey, signature.UUID) - _, err = b.client.Put(ctx, key, string(msg)) - return err + key = fmt.Sprintf("%s/eta-%d/%s/%s", + delayedTaskPrefix, signature.ETA.UnixMilli(), signature.RoutingKey, signature.UUID) } _, err = b.client.Put(ctx, key, string(msg)) + if err != nil { + log.ERROR.Printf("Publish queue[%s] new message: %s", key, string(msg)) + } else { + log.DEBUG.Printf("Publish queue[%s] new message: %s", key, string(msg)) + } return err } @@ -282,7 +290,7 @@ func (b *etcdBroker) GetPendingTasks(queue string) ([]*tasks.Signature, error) { queue = b.GetConfig().DefaultQueue } - key := fmt.Sprintf("/machinery/v2/broker/pending_tasks/%s", queue) + key := fmt.Sprintf("%s/%s", pendingTaskPrefix, queue) items, err := b.getTasks(b.ctx, key) if err != nil { return nil, err @@ -293,9 +301,7 @@ func (b *etcdBroker) GetPendingTasks(queue string) ([]*tasks.Signature, error) { // GetDelayedTasks 任务统计可使用 func (b *etcdBroker) GetDelayedTasks() ([]*tasks.Signature, error) { - key := "/machinery/v2/broker/delayed_tasks" - - items, err := b.getTasks(b.ctx, key) + items, err := b.getTasks(b.ctx, delayedTaskPrefix) if err != nil { return nil, err } @@ -344,7 +350,7 @@ func (b *etcdBroker) setAssign(key string, assign bool) bool { } func (b *etcdBroker) listWatchTasks(ctx context.Context, queue string) error { - keyPrefix := fmt.Sprintf("/machinery/v2/broker/pending_tasks/%s", queue) + keyPrefix := fmt.Sprintf("%s/%s", pendingTaskPrefix, queue) // List listCtx, listCancel := context.WithTimeout(ctx, time.Second*10) @@ -418,15 +424,14 @@ func (b *etcdBroker) handleDelayedTask(ctx context.Context) error { } defer s.Orphan() - lockKey := "/machinery/v2/lock/delayed_tasks" - m := concurrency.NewMutex(s, lockKey) + m := concurrency.NewMutex(s, delayedTaskLockKey) if err = m.Lock(ctx); err != nil { return err } defer m.Unlock(ctx) // nolint - keyPrefix := "/machinery/v2/broker/delayed_tasks/eta-" + keyPrefix := fmt.Sprintf("%s/eta-", delayedTaskPrefix) end := strconv.FormatInt(time.Now().UnixMilli(), 10) resp, err := b.client.Get(b.ctx, keyPrefix+"0", clientv3.WithRange(keyPrefix+end)) if err != nil { @@ -439,9 +444,10 @@ func (b *etcdBroker) handleDelayedTask(ctx context.Context) error { log.WARNING.Printf("invalid delay task %s, continue", key) continue } + pendingKey := fmt.Sprintf("%s/%s/%s", pendingTaskPrefix, parts[6], parts[7]) + cmp := clientv3.Compare(clientv3.ModRevision(key), "=", kv.ModRevision) deleteReq := clientv3.OpDelete(key) - pendingKey := fmt.Sprintf("/machinery/v2/broker/pending_tasks/%s/%s", parts[6], parts[7]) putReq := clientv3.OpPut(pendingKey, string(kv.Value)) c, err := b.client.Txn(b.ctx).If(cmp).Then(deleteReq, putReq).Commit() if err != nil { diff --git a/bcs-common/common/task/go.mod b/bcs-common/common/task/go.mod index f5528d65e3..71de2417f4 100644 --- a/bcs-common/common/task/go.mod +++ b/bcs-common/common/task/go.mod @@ -8,6 +8,7 @@ require ( github.com/google/uuid v1.6.0 github.com/stretchr/testify v1.9.0 github.com/urfave/cli v1.22.5 + go.etcd.io/etcd/api/v3 v3.5.2 go.etcd.io/etcd/client/v3 v3.5.2 go.mongodb.org/mongo-driver v1.15.0 golang.org/x/sync v0.6.0 @@ -87,7 +88,6 @@ require ( github.com/xdg-go/stringprep v1.0.4 // indirect github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect go-micro.dev/v4 v4.8.1 // indirect - go.etcd.io/etcd/api/v3 v3.5.2 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.2 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 // indirect diff --git a/bcs-common/common/task/manager.go b/bcs-common/common/task/manager.go index dda5781b2f..28f72547d7 100644 --- a/bcs-common/common/task/manager.go +++ b/bcs-common/common/task/manager.go @@ -27,6 +27,7 @@ import ( "github.com/RichardKnop/machinery/v2/log" "github.com/RichardKnop/machinery/v2/tasks" + irevoker "github.com/Tencent/bk-bcs/bcs-common/common/task/revokers/iface" istep "github.com/Tencent/bk-bcs/bcs-common/common/task/steps/iface" istore "github.com/Tencent/bk-bcs/bcs-common/common/task/stores/iface" "github.com/Tencent/bk-bcs/bcs-common/common/task/types" @@ -59,8 +60,10 @@ type TaskManager struct { // nolint // ManagerConfig options for manager type ManagerConfig struct { ModuleName string + WorkerName string WorkerNum int Broker ibroker.Broker + Revoker irevoker.Revoker Backend ibackend.Backend Lock ilock.Lock Store istore.Store @@ -117,7 +120,7 @@ func (m *TaskManager) Init(cfg *ManagerConfig) error { return err } - if err := m.initWorker(cfg.WorkerNum); err != nil { + if err := m.initWorker(cfg.WorkerName, cfg.WorkerNum); err != nil { return err } @@ -145,13 +148,13 @@ func (m *TaskManager) initServer() error { } // register step workers and init workers -func (m *TaskManager) initWorker(workerNum int) error { +func (m *TaskManager) initWorker(workerName string, workerNum int) error { // register all workers if err := m.registerStepWorkers(); err != nil { return fmt.Errorf("register workers failed, err: %s", err.Error()) } - m.worker = m.server.NewWorker("", workerNum) + m.worker = m.server.NewWorker(workerName, workerNum) preTaskHandler := func(signature *tasks.Signature) { log.INFO.Printf("start task[%s] handler for: %s", signature.UUID, signature.Name) @@ -208,6 +211,22 @@ func (m *TaskManager) RetryAt(task *types.Task, stepName string) error { return m.dispatchAt(task, stepName) } +// Revoke revoke the task +func (m *TaskManager) Revoke(task *types.Task) error { + // task revoke + if m.cfg == nil || m.cfg.Revoker == nil { + return fmt.Errorf("task revoker is required") + } + + task.SetStatus(types.TaskStatusRevoked) + task.SetMessage("task has been revoked") + + if err := GetGlobalStorage().UpdateTask(context.Background(), task); err != nil { + return err + } + return m.cfg.Revoker.Revoke(context.Background(), task.TaskID) +} + // Dispatch dispatch task func (m *TaskManager) Dispatch(task *types.Task) error { if err := task.Validate(); err != nil { @@ -310,8 +329,7 @@ func (m *TaskManager) doWork(taskID string, stepName string) error { // nolint // step executed success if state.step == nil { - log.INFO.Printf("task[%s] stepName[%s] already exec successful && skip", - taskID, stepName, err) + log.INFO.Printf("task[%s] stepName[%s] already exec successful && skip", taskID, stepName) return nil } @@ -324,12 +342,18 @@ func (m *TaskManager) doWork(taskID string, stepName string) error { // nolint start := time.Now() // step timeout - stepCtx, stepCancel := GetTimeOutCtx(m.ctx, step.MaxExecutionSeconds) + stepCtx, stepCancel := GetTimeOutCtx(context.Background(), step.MaxExecutionSeconds) defer stepCancel() + // task revoke + revokeCtx := context.TODO() + if m.cfg != nil && m.cfg.Revoker != nil { + revokeCtx = m.cfg.Revoker.RevokeCtx(taskID) + } + // task timeout t := state.task.GetStartTime() - taskCtx, taskCancel := GetDeadlineCtx(m.ctx, &t, state.task.MaxExecutionSeconds) + taskCtx, taskCancel := GetDeadlineCtx(context.Background(), &t, state.task.MaxExecutionSeconds) defer taskCancel() tmpCh := make(chan error, 1) @@ -348,7 +372,7 @@ func (m *TaskManager) doWork(taskID string, stepName string) error { // nolint state.updateStepSuccess(start) return nil } - state.updateStepFailure(start, retErr, false) + state.updateStepFailure(start, retErr, nil) if step.GetSkipOnFailed() { return nil @@ -365,7 +389,7 @@ func (m *TaskManager) doWork(taskID string, stepName string) error { // nolint case <-stepCtx.Done(): retErr := fmt.Errorf("task %s step %s timeout", taskID, step.GetName()) - state.updateStepFailure(start, retErr, false) + state.updateStepFailure(start, retErr, nil) if step.GetSkipOnFailed() { return nil @@ -380,12 +404,26 @@ func (m *TaskManager) doWork(taskID string, stepName string) error { // nolint return retErr + case <-revokeCtx.Done(): + // task revoke + retErr := fmt.Errorf("task %s has been revoked", taskID) + state.updateStepFailure(start, retErr, &taskEndStatus{types.TaskStatusRevoked, "task has been revoked"}) + + // 取消指令, 不再重试 + return retErr + case <-taskCtx.Done(): // task timeOut retErr := fmt.Errorf("task %s exec timeout", taskID) - state.updateStepFailure(start, retErr, true) + state.updateStepFailure(start, retErr, &taskEndStatus{types.TaskStatusTimeout, "task timeout"}) + // 整个任务结束 return retErr + + case <-m.ctx.Done(): + // task manager stop, try later + log.INFO.Printf("task manager stop, task %s step %s will retry later", taskID, stepName) + return tasks.NewErrRetryTaskLater("task manager stop", time.Second*10) } } diff --git a/bcs-common/common/task/revokers/etcd/etcd.go b/bcs-common/common/task/revokers/etcd/etcd.go new file mode 100644 index 0000000000..d06cec527d --- /dev/null +++ b/bcs-common/common/task/revokers/etcd/etcd.go @@ -0,0 +1,78 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package etcd is revoker use etcd +package etcd + +import ( + "context" + "sync" + "time" + + "github.com/RichardKnop/machinery/v2/config" + "github.com/RichardKnop/machinery/v2/log" + clientv3 "go.etcd.io/etcd/client/v3" + + "github.com/Tencent/bk-bcs/bcs-common/common/task/revokers/iface" +) + +type etcdRevoker struct { + ctx context.Context + client *clientv3.Client + mtx sync.Mutex + revokeSignMap map[string]*revokeSign +} + +// New .. +func New(ctx context.Context, conf *config.Config) (iface.Revoker, error) { + etcdConf := clientv3.Config{ + Endpoints: []string{conf.Broker}, // 复用broker的etcd配置 + Context: ctx, + DialTimeout: time.Second * 5, + TLS: conf.TLSConfig, + } + + client, err := clientv3.New(etcdConf) + if err != nil { + return nil, err + } + + revoker := etcdRevoker{ + ctx: ctx, + client: client, + revokeSignMap: map[string]*revokeSign{}, + } + + go revoker.Run() + + return &revoker, nil +} + +func (r *etcdRevoker) Run() { + ticker := time.NewTicker(time.Minute * 10) + defer ticker.Stop() + + for { + select { + case <-r.ctx.Done(): + return + + case <-ticker.C: + r.expireRevokeSign() + + err := r.listWatchRevoke(r.ctx) + if err != nil { + log.ERROR.Printf("list and watch revoke err: %s", err) + } + } + } +} diff --git a/bcs-common/common/task/revokers/etcd/revoke.go b/bcs-common/common/task/revokers/etcd/revoke.go new file mode 100644 index 0000000000..af69a9dddc --- /dev/null +++ b/bcs-common/common/task/revokers/etcd/revoke.go @@ -0,0 +1,153 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package etcd + +import ( + "context" + "path/filepath" + "time" + + "github.com/RichardKnop/machinery/v2/log" + "go.etcd.io/etcd/api/v3/mvccpb" + clientv3 "go.etcd.io/etcd/client/v3" +) + +const ( + revokePrefix = "/machinery/v2/revoker/tasks" +) + +type revokeSign struct { + taskID string + registerTime time.Time + ctx context.Context + cancel context.CancelFunc +} + +// Revoke etcd revoker send sign +func (b *etcdRevoker) Revoke(ctx context.Context, taskID string) error { + key := revokePrefix + "/" + taskID + + // 2分钟自动过期 + lease, err := b.client.Grant(ctx, 120) + if err != nil { + return err + } + + _, err = b.client.Put(ctx, key, time.Now().Format(time.RFC3339), clientv3.WithLease(lease.ID)) + if err != nil { + return err + } + + return nil +} + +// RevokeCtx etcd revoker ctx +func (b *etcdRevoker) RevokeCtx(taskID string) context.Context { + b.mtx.Lock() + defer b.mtx.Unlock() + + sign, ok := b.revokeSignMap[taskID] + if ok { + sign.registerTime = time.Now() + return sign.ctx + } + + ctx, cancel := context.WithCancel(context.Background()) + sign = &revokeSign{ + taskID: taskID, + registerTime: time.Now(), + ctx: ctx, + cancel: cancel, + } + b.revokeSignMap[taskID] = sign + + return sign.ctx +} + +func (b *etcdRevoker) tryRevoke(kv *mvccpb.KeyValue) { + key := string(kv.Key) + taskID := filepath.Base(key) + + b.mtx.Lock() + sign, ok := b.revokeSignMap[taskID] + if ok { + sign.cancel() + delete(b.revokeSignMap, taskID) + } + b.mtx.Unlock() + + if !ok { + return + } + + ctx, cancel := context.WithTimeout(b.ctx, time.Second*5) + defer cancel() + + _, err := b.client.Delete(ctx, key) + if err != nil { + log.ERROR.Printf("revoke %s failed: %s", key, err) + } +} + +func (b *etcdRevoker) listWatchRevoke(ctx context.Context) error { + // List + listCtx, listCancel := context.WithTimeout(ctx, time.Second*10) + defer listCancel() + + resp, err := b.client.Get(listCtx, revokePrefix, clientv3.WithPrefix(), clientv3.WithKeysOnly()) + if err != nil { + return err + } + + for _, kv := range resp.Kvs { + b.tryRevoke(kv) + } + + // Watch + watchCtx, watchCancel := context.WithTimeout(ctx, time.Minute*60) + defer watchCancel() + + watchOpts := []clientv3.OpOption{ + clientv3.WithPrefix(), + clientv3.WithKeysOnly(), + clientv3.WithRev(resp.Header.Revision), + } + wc := b.client.Watch(watchCtx, revokePrefix, watchOpts...) + for wresp := range wc { + if wresp.Err() != nil { + return watchCtx.Err() + } + + for _, ev := range wresp.Events { + if ev.Type != clientv3.EventTypePut { + continue + } + + b.tryRevoke(ev.Kv) + } + } + + return nil +} + +func (b *etcdRevoker) expireRevokeSign() { + b.mtx.Lock() + defer b.mtx.Unlock() + + for taskID, sign := range b.revokeSignMap { + if time.Since(sign.registerTime) > time.Hour*24 { + sign.cancel() + delete(b.revokeSignMap, taskID) + } + } +} diff --git a/bcs-common/common/task/revokers/iface/interfaces.go b/bcs-common/common/task/revokers/iface/interfaces.go new file mode 100644 index 0000000000..2ffc5b1020 --- /dev/null +++ b/bcs-common/common/task/revokers/iface/interfaces.go @@ -0,0 +1,24 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Package iface defines the interface for a task revocation +package iface + +import ( + "context" +) + +// Revoker is an interface for task revocation +type Revoker interface { + Revoke(ctx context.Context, taskID string) error + RevokeCtx(taskID string) context.Context +} diff --git a/bcs-common/common/task/state.go b/bcs-common/common/task/state.go index 7ef5b9fbb7..58ca661c30 100644 --- a/bcs-common/common/task/state.go +++ b/bcs-common/common/task/state.go @@ -24,6 +24,12 @@ import ( "github.com/Tencent/bk-bcs/bcs-common/common/task/types" ) +// taskEndStatus task结束状态,处理超时和revoke +type taskEndStatus struct { + status string + messsage string +} + // getTaskStateAndCurrentStep get task state and current step func (m *TaskManager) getTaskState(taskId, stepName string) (*State, error) { task, err := GetGlobalStorage().GetTask(context.Background(), taskId) @@ -83,8 +89,10 @@ func NewState(task *types.Task, stepName string) *State { // isTaskTerminated is terminated func (s *State) isTaskTerminated() bool { status := s.task.GetStatus() - if status == types.TaskStatusFailure || status == types.TaskStatusForceTerminate || - status == types.TaskStatusTimeout || status == types.TaskStatusSuccess { + if status == types.TaskStatusFailure || + status == types.TaskStatusSuccess || + status == types.TaskStatusRevoked || + status == types.TaskStatusTimeout { return true } return false @@ -98,8 +106,6 @@ func (s *State) isReadyToStep(stepName string) (*types.Step, error) { case types.TaskStatusInit: s.task.SetStartTime(nowTime) case types.TaskStatusRunning: - case types.TaskStatusForceTerminate: - return nil, fmt.Errorf("task %s state for terminate", s.task.GetTaskID()) default: return nil, fmt.Errorf("task %s is not running, state is %s", s.task.GetTaskID(), s.task.GetStatus()) } @@ -110,12 +116,6 @@ func (s *State) isReadyToStep(stepName string) (*types.Step, error) { return nil, fmt.Errorf("step %s is not exist", stepName) } - // return nil & nil means step had been executed - if curStep.IsCompleted() { - // step is success, skip - return nil, nil - } - defer func() { // update Task in storage if err := GetGlobalStorage().UpdateTask(context.Background(), s.task); err != nil { @@ -123,6 +123,23 @@ func (s *State) isReadyToStep(stepName string) (*types.Step, error) { } }() + // return nil & nil means step had been executed + if curStep.IsCompleted() { + // 如果是重试等, 需要更新任务状态 + if s.isLastStep(curStep) { + if curStep.Status == types.TaskStatusSuccess { + s.task.SetStatus(types.TaskStatusSuccess).SetMessage("task finished successfully") + } else { + s.task.SetStatus(types.TaskStatusFailure).SetMessage(fmt.Sprintf("step %s running failed", curStep.Name)) + } + endTime := time.Now() + s.task.SetExecutionTime(s.task.GetStartTime(), endTime).SetLastUpdate(endTime) + } + + // step is success, skip + return nil, nil + } + // not first time to execute current step if curStep.GetStatus() == types.TaskStatusFailure { curStep.AddRetryCount(1) @@ -161,7 +178,7 @@ func (s *State) updateStepSuccess(start time.Time) { SetLastUpdate(endTime) // last step - if s.isLastStep() { + if s.isLastStep(s.step) { s.task.SetEndTime(endTime). SetStatus(types.TaskStatusSuccess). SetMessage("task finished successfully") @@ -175,7 +192,7 @@ func (s *State) updateStepSuccess(start time.Time) { } // updateStepFailure update step status to failure -func (s *State) updateStepFailure(start time.Time, stepErr error, taskTimeOut bool) { +func (s *State) updateStepFailure(start time.Time, stepErr error, taskStatus *taskEndStatus) { defer func() { // update Task in storage if err := GetGlobalStorage().UpdateTask(context.Background(), s.task); err != nil { @@ -200,8 +217,8 @@ func (s *State) updateStepFailure(start time.Time, stepErr error, taskTimeOut bo SetLastUpdate(endTime) // 任务超时, 整体结束 - if taskTimeOut { - s.task.SetStatus(types.TaskStatusTimeout).SetMessage("task timeout") + if taskStatus != nil { + s.task.SetStatus(taskStatus.status).SetMessage(taskStatus.messsage) // callback if s.cbExecutor != nil { @@ -212,7 +229,7 @@ func (s *State) updateStepFailure(start time.Time, stepErr error, taskTimeOut bo } // last step failed and skipOnFailed is true, update task status to success - if s.isLastStep() { + if s.isLastStep(s.step) { if s.step.GetSkipOnFailed() { s.task.SetStatus(types.TaskStatusSuccess).SetMessage("task finished successfully") } else { @@ -248,7 +265,7 @@ func (s *State) updateStepFailure(start time.Time, stepErr error, taskTimeOut bo } } -func (s *State) isLastStep() bool { +func (s *State) isLastStep(step *types.Step) bool { count := len(s.task.Steps) // 没有step默认返回false if count == 0 { @@ -256,12 +273,12 @@ func (s *State) isLastStep() bool { } // 非最后一步 - if s.step.GetName() != s.task.Steps[count-1].Name { + if step.GetName() != s.task.Steps[count-1].Name { return false } // 最后一步还需要看重试次数 - return s.step.IsCompleted() + return step.IsCompleted() } // GetCommonParam get common params by key diff --git a/bcs-common/common/task/steps/iface/context.go b/bcs-common/common/task/steps/iface/context.go index dc5cb2cd71..7beeb7293b 100644 --- a/bcs-common/common/task/steps/iface/context.go +++ b/bcs-common/common/task/steps/iface/context.go @@ -14,6 +14,7 @@ package iface import ( "context" + "time" istore "github.com/Tencent/bk-bcs/bcs-common/common/task/stores/iface" "github.com/Tencent/bk-bcs/bcs-common/common/task/types" @@ -134,6 +135,11 @@ func (t *Context) GetPayload(obj interface{}) error { return t.currentStep.GetPayload(obj) } +// GetStartTime return step start time +func (t *Context) GetStartTime() time.Time { + return t.currentStep.Start +} + // SetPayload set step extras by json string func (t *Context) SetPayload(obj interface{}) error { if err := t.currentStep.SetPayload(obj); err != nil { diff --git a/bcs-common/common/task/stores/mysql/helper.go b/bcs-common/common/task/stores/mysql/helper.go index 0cc6e64183..a79bbe0cc7 100644 --- a/bcs-common/common/task/stores/mysql/helper.go +++ b/bcs-common/common/task/stores/mysql/helper.go @@ -61,7 +61,6 @@ func getTaskRecord(t *types.Task) *TaskRecords { CommonPayload: t.CommonPayload, Status: t.Status, Message: t.Message, - ForceTerminate: t.ForceTerminate, Start: t.Start, End: t.End, ExecutionTime: t.ExecutionTime, @@ -85,7 +84,6 @@ func toTask(task *TaskRecords, steps []*StepRecords) *types.Task { CommonPayload: task.CommonPayload, Status: task.Status, Message: task.Message, - ForceTerminate: task.ForceTerminate, Start: task.Start, End: task.End, ExecutionTime: task.ExecutionTime, @@ -102,6 +100,33 @@ func toTask(task *TaskRecords, steps []*StepRecords) *types.Task { return t } +var ( + // updateTaskField task 支持更新的字段 + updateTaskField = []string{ + "CurrentStep", + "CommonParams", + "CommonPayload", + "Status", + "Message", + "Start", + "End", + "ExecutionTime", + "Updater", + } + + // updateStepField step 支持更新的字段 + updateStepField = []string{ + "Params", + "Payload", + "Status", + "Message", + "Start", + "End", + "ExecutionTime", + "RetryCount", + } +) + func getUpdateTaskRecord(t *types.Task) *TaskRecords { record := &TaskRecords{ CurrentStep: t.CurrentStep, diff --git a/bcs-common/common/task/stores/mysql/mysql.go b/bcs-common/common/task/stores/mysql/mysql.go index 0bca926bec..a0d2965a68 100644 --- a/bcs-common/common/task/stores/mysql/mysql.go +++ b/bcs-common/common/task/stores/mysql/mysql.go @@ -109,15 +109,22 @@ func (s *mysqlStore) ListTask(ctx context.Context, opt *iface.ListOption) ([]typ func (s *mysqlStore) UpdateTask(ctx context.Context, task *types.Task) error { return s.db.Transaction(func(tx *gorm.DB) error { updateTask := getUpdateTaskRecord(task) - if err := tx.Model(&TaskRecords{}).Where("task_id = ?", task.TaskID).Updates(updateTask).Error; err != nil { + if err := tx.Model(&TaskRecords{}). + Where("task_id = ?", task.TaskID). + Select(updateTaskField). + Updates(updateTask).Error; err != nil { return err } + for _, step := range task.Steps { if step.Name != task.CurrentStep { continue } updateStep := getUpdateStepRecord(step) - if err := tx.Where("task_id = ? AND name= ?", task.TaskID, step.Name).Updates(updateStep).Error; err != nil { + if err := tx.Model(&StepRecords{}). + Where("task_id = ? AND name= ?", task.TaskID, step.Name). + Select(updateStepField). + Updates(updateStep).Error; err != nil { return err } } diff --git a/bcs-common/common/task/stores/mysql/table.go b/bcs-common/common/task/stores/mysql/table.go index e851a5def3..6a6d795153 100644 --- a/bcs-common/common/task/stores/mysql/table.go +++ b/bcs-common/common/task/stores/mysql/table.go @@ -27,6 +27,12 @@ import ( 3. string 类型必须指定类型和长度,字段是索引的,设置为 varchar(191) **/ +var ( + // UnixZeroTime mysql 8.0 版本以上不能写入, 使用unix 0时作为zero time + // https://dev.mysql.com/doc/refman/8.0/en/datetime.html + UnixZeroTime = time.Unix(0, 0) +) + // TaskRecords 任务记录 type TaskRecords struct { gorm.Model @@ -39,7 +45,7 @@ type TaskRecords struct { StepSequence []string `json:"stepSequence" gorm:"type:text;serializer:json"` CallbackName string `json:"callbackName" gorm:"type:varchar(255)"` CommonParams map[string]string `json:"commonParams" gorm:"type:text;serializer:json"` - CommonPayload []byte `json:"commonPayload" gorm:"type:text"` + CommonPayload string `json:"commonPayload" gorm:"type:text"` Status string `json:"status" gorm:"type:varchar(255)"` Message string `json:"message" gorm:"type:text"` ForceTerminate bool `json:"forceTerminate"` @@ -56,6 +62,17 @@ func (t *TaskRecords) TableName() string { return "task_records" } +// BeforeCreate .. +func (t *TaskRecords) BeforeCreate(tx *gorm.DB) (err error) { + if t.Start.IsZero() { + t.Start = UnixZeroTime + } + if t.End.IsZero() { + t.End = UnixZeroTime + } + return nil +} + // StepRecords 步骤记录 type StepRecords struct { gorm.Model @@ -64,7 +81,7 @@ type StepRecords struct { Alias string `json:"alias" gorm:"type:varchar(255)"` Executor string `json:"executor" gorm:"type:varchar(255)"` Params map[string]string `json:"input" gorm:"type:text;serializer:json"` - Payload []byte `json:"payload" gorm:"type:text"` + Payload string `json:"payload" gorm:"type:text"` Status string `json:"status" gorm:"type:varchar(255)"` Message string `json:"message" gorm:"type:varchar(255)"` ETA *time.Time `json:"eta"` @@ -82,6 +99,17 @@ func (t *StepRecords) TableName() string { return "task_step_records" } +// BeforeCreate .. +func (t *StepRecords) BeforeCreate(tx *gorm.DB) (err error) { + if t.Start.IsZero() { + t.Start = UnixZeroTime + } + if t.End.IsZero() { + t.End = UnixZeroTime + } + return nil +} + // ToStep 类型转换 func (t *StepRecords) ToStep() *types.Step { return &types.Step{ diff --git a/bcs-common/common/task/types/step.go b/bcs-common/common/task/types/step.go index b309719656..4cfceb11a0 100644 --- a/bcs-common/common/task/types/step.go +++ b/bcs-common/common/task/types/step.go @@ -132,7 +132,7 @@ func (s *Step) GetPayload(obj interface{}) error { if len(s.Payload) == 0 { s.Payload = DefaultPayloadContent } - return json.Unmarshal(s.Payload, obj) + return json.Unmarshal([]byte(s.Payload), obj) } // SetPayload set step extras by json string @@ -141,7 +141,7 @@ func (s *Step) SetPayload(obj interface{}) error { if err != nil { return err } - s.Payload = result + s.Payload = string(result) return nil } diff --git a/bcs-common/common/task/types/task.go b/bcs-common/common/task/types/task.go index 50c31fa953..c0264f7368 100644 --- a/bcs-common/common/task/types/task.go +++ b/bcs-common/common/task/types/task.go @@ -75,7 +75,6 @@ func NewTask(o TaskInfo, opts ...TaskOption) *Task { TaskIndex: o.TaskIndex, TaskIndexType: o.TaskIndexType, Status: TaskStatusInit, - ForceTerminate: false, Steps: make([]*Step, 0), Creator: o.Creator, Updater: o.Creator, @@ -165,7 +164,7 @@ func (t *Task) GetCommonPayload(obj interface{}) error { if len(t.CommonPayload) == 0 { t.CommonPayload = DefaultPayloadContent } - return json.Unmarshal(t.CommonPayload, obj) + return json.Unmarshal([]byte(t.CommonPayload), obj) } // SetCommonPayload set extra json @@ -174,7 +173,7 @@ func (t *Task) SetCommonPayload(obj interface{}) error { if err != nil { return err } - t.CommonPayload = result + t.CommonPayload = string(result) return nil } @@ -200,17 +199,6 @@ func (t *Task) SetMessage(msg string) *Task { return t } -// GetForceTerminate get force terminate -func (t *Task) GetForceTerminate() bool { - return t.ForceTerminate -} - -// SetForceTerminate set force terminate -func (t *Task) SetForceTerminate(f bool) *Task { - t.ForceTerminate = f - return t -} - // GetStartTime get start time func (t *Task) GetStartTime() time.Time { return t.Start diff --git a/bcs-common/common/task/types/type.go b/bcs-common/common/task/types/type.go index 75ad19fa22..5299aef0ff 100644 --- a/bcs-common/common/task/types/type.go +++ b/bcs-common/common/task/types/type.go @@ -26,6 +26,8 @@ const ( DefaultMaxExecuteTimeSeconds = 3600 // DefaultTaskMessage default message DefaultTaskMessage = "task initializing" + // DefaultPayloadContent default json extras content + DefaultPayloadContent = "{}" ) const ( @@ -39,15 +41,13 @@ const ( TaskStatusFailure = "FAILURE" // TaskStatusTimeout task run timeout TaskStatusTimeout = "TIMEOUT" - // TaskStatusForceTerminate force task terminate - TaskStatusForceTerminate = "FORCETERMINATE" + // TaskStatusRevoked task has been revoked + TaskStatusRevoked = "REVOKED" // TaskStatusNotStarted force task terminate TaskStatusNotStarted = "NOTSTARTED" ) var ( - // DefaultPayloadContent default json extras content - DefaultPayloadContent = []byte("{}") // ErrNotImplemented not implemented error ErrNotImplemented = errors.New("not implemented") ) @@ -63,10 +63,9 @@ type Task struct { Steps []*Step `json:"steps"` CallbackName string `json:"callbackName"` CommonParams map[string]string `json:"commonParams"` - CommonPayload []byte `json:"commonPayload"` + CommonPayload string `json:"commonPayload"` Status string `json:"status"` Message string `json:"message"` - ForceTerminate bool `json:"forceTerminate"` ExecutionTime uint32 `json:"executionTime"` MaxExecutionSeconds uint32 `json:"maxExecutionSeconds"` Creator string `json:"creator"` @@ -82,7 +81,7 @@ type Step struct { Alias string `json:"alias"` Executor string `json:"executor"` Params map[string]string `json:"params"` - Payload []byte `json:"payload"` + Payload string `json:"payload"` Status string `json:"status"` Message string `json:"message"` ETA *time.Time `json:"eta"` // 延迟执行时间(Estimated Time of Arrival) From 4293a094cadc67134f457ccb581998d6cb8663e6 Mon Sep 17 00:00:00 2001 From: evanxinli Date: Wed, 28 Aug 2024 03:50:12 +0000 Subject: [PATCH 014/108] =?UTF-8?q?--story=3D118570047=20=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E6=B1=A0=E6=94=AF=E6=8C=81=E8=B6=85=E5=8D=96=20(merge?= =?UTF-8?q?=20request=20!1992)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squash merge branch 'bcs-cluster-manager-0826' into 'master' --story=118570047 资源池支持超卖 TAPD: --story=118570047 --- .../api/clustermanager/clustermanager.pb.go | 3490 +++++++++-------- .../clustermanager.pb.validate.go | 2 + .../api/clustermanager/clustermanager.proto | 4 + .../clustermanager.swagger.json | 6 + .../internal/actions/thirdparty/resource.go | 2 +- .../internal/cloudprovider/aws/cloud.go | 2 +- .../cloudprovider/ladder/nodegroup.go | 11 +- .../internal/cloudprovider/qcloud/nodemgr.go | 40 + .../internal/daemon/device_pool.go | 20 +- .../remote/resource/tresource/options.go | 2 + .../remote/resource/tresource/resource.go | 146 +- .../internal/remote/resource/types.go | 40 +- 12 files changed, 1918 insertions(+), 1847 deletions(-) diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go index 6bc60160c6..ed4c0527fb 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.go @@ -23350,6 +23350,7 @@ type InstanceType struct { ResourcePoolID string `protobuf:"bytes,11,opt,name=resourcePoolID,proto3" json:"resourcePoolID,omitempty"` SystemDisk *DataDisk `protobuf:"bytes,12,opt,name=systemDisk,proto3" json:"systemDisk,omitempty"` DataDisks []*DataDisk `protobuf:"bytes,13,rep,name=dataDisks,proto3" json:"dataDisks,omitempty"` + AvailableQuota uint32 `protobuf:"varint,14,opt,name=availableQuota,proto3" json:"availableQuota,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-" bson:"-"` XXX_unrecognized []byte `json:"-" bson:"-"` XXX_sizecache int32 `json:"-" bson:"-"` @@ -23471,6 +23472,13 @@ func (m *InstanceType) GetDataDisks() []*DataDisk { return nil } +func (m *InstanceType) GetAvailableQuota() uint32 { + if m != nil { + return m.AvailableQuota + } + return 0 +} + type GetMasterSuggestedMachinesRequest struct { CloudID string `protobuf:"bytes,1,opt,name=cloudID,proto3" json:"cloudID,omitempty"` Region string `protobuf:"bytes,2,opt,name=region,proto3" json:"region,omitempty"` @@ -33005,7 +33013,7 @@ func init() { func init() { proto.RegisterFile("clustermanager.proto", fileDescriptor_d789ea45d40d7a6b) } var fileDescriptor_d789ea45d40d7a6b = []byte{ - // 74964 bytes of a gzipped FileDescriptorProto + // 75003 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x70, 0x14, 0x57, 0xd6, 0x20, 0xf8, 0xa5, 0x78, 0x49, 0x57, 0x08, 0x70, 0xda, 0xd8, 0x32, 0xb6, 0x71, 0x59, 0xee, 0xb6, 0xa5, 0xb4, 0xc4, 0x23, 0xed, 0xf6, 0x03, 0xb7, 0xbb, 0x9d, 0x2a, 0x09, 0x5c, 0x0d, 0x08, @@ -35921,1777 +35929,1779 @@ var fileDescriptor_d789ea45d40d7a6b = []byte{ 0x33, 0x21, 0x2c, 0x50, 0xaf, 0xe1, 0xcc, 0x46, 0xe3, 0xcb, 0x17, 0xea, 0x4a, 0xb1, 0x64, 0xab, 0x70, 0x2c, 0x11, 0x8f, 0x77, 0xad, 0x3c, 0x57, 0x17, 0xb2, 0xf2, 0x05, 0xd5, 0xd6, 0x52, 0x3c, 0x28, 0x98, 0xdb, 0xab, 0x35, 0xd3, 0x88, 0xe4, 0xa5, 0xde, 0xd9, 0x17, 0x38, 0xc0, 0x5e, 0x64, - 0x2e, 0x85, 0xc4, 0xe6, 0x5e, 0xa3, 0x2b, 0x2f, 0xff, 0xff, 0xec, 0xfd, 0x0b, 0x74, 0x14, 0xc7, - 0xb6, 0x18, 0x0c, 0x9f, 0x1e, 0x49, 0x20, 0x15, 0xe2, 0xd5, 0x06, 0x2c, 0x8b, 0xd7, 0x78, 0x8c, - 0x6d, 0x31, 0x96, 0x10, 0x34, 0xf8, 0x25, 0x1b, 0xdb, 0x2d, 0x09, 0x38, 0xb2, 0x79, 0xc8, 0xc3, - 0xe3, 0x9c, 0x63, 0x1f, 0x1f, 0x3c, 0xcc, 0x34, 0x62, 0x0e, 0xd2, 0xcc, 0x9c, 0x99, 0x91, 0x6c, - 0xf0, 0x3d, 0xf7, 0x17, 0x58, 0x02, 0xc9, 0x08, 0x04, 0x6d, 0x1e, 0x46, 0x16, 0x2f, 0x1b, 0x0c, - 0xb6, 0x91, 0x04, 0xc6, 0xc6, 0x42, 0x12, 0xe6, 0xde, 0x95, 0x7b, 0xf3, 0xe7, 0xbb, 0xb9, 0x37, - 0xb9, 0x71, 0x72, 0x73, 0xb3, 0x92, 0x2f, 0x39, 0xc9, 0xf2, 0xf4, 0xcc, 0x28, 0xdf, 0x97, 0x45, - 0xf2, 0xad, 0xac, 0x6f, 0xe5, 0x73, 0x1e, 0xdf, 0xb7, 0xaa, 0x76, 0x55, 0x77, 0xf5, 0x74, 0xf7, - 0x48, 0xf2, 0x1b, 0x1f, 0xaf, 0xe5, 0x65, 0x34, 0x55, 0xbb, 0xaa, 0xab, 0x76, 0xed, 0xbd, 0x6b, - 0xd7, 0xae, 0x5d, 0x7b, 0x7b, 0xa1, 0xbd, 0xf4, 0x34, 0x7c, 0x13, 0xb2, 0x12, 0xc3, 0x37, 0xb9, - 0x87, 0x5c, 0xc3, 0x99, 0xf7, 0xf6, 0xc0, 0xbd, 0x1b, 0x14, 0x82, 0x7f, 0x0c, 0x56, 0x4d, 0x47, - 0xf6, 0x6a, 0x83, 0x83, 0xa9, 0x13, 0xd7, 0xbf, 0xac, 0x9e, 0xdc, 0x23, 0xe4, 0x17, 0x0a, 0x33, - 0x66, 0xf9, 0xa0, 0x47, 0xf1, 0x65, 0xeb, 0xfd, 0x68, 0x35, 0x09, 0x30, 0x6c, 0xdc, 0x8f, 0xea, - 0x13, 0x35, 0x58, 0x7f, 0x22, 0xe1, 0xbd, 0x5e, 0xe0, 0xc3, 0x01, 0xc1, 0xfd, 0xe9, 0x93, 0xe4, - 0x0b, 0x46, 0x38, 0x20, 0xf3, 0x17, 0x48, 0x20, 0x20, 0xe6, 0x48, 0x63, 0x93, 0x6d, 0xcc, 0x68, - 0xc8, 0x27, 0x65, 0x2a, 0xb6, 0x4d, 0xca, 0x04, 0xb4, 0x4b, 0x3c, 0x81, 0x92, 0x43, 0x43, 0x36, - 0x49, 0x99, 0xea, 0x10, 0x6a, 0xf4, 0xc7, 0x13, 0xa0, 0x82, 0xd1, 0xbb, 0x54, 0x72, 0xc9, 0xcd, - 0x15, 0x4b, 0x25, 0xf4, 0x05, 0xd1, 0xe0, 0x1b, 0xa9, 0xcb, 0xe7, 0x68, 0xd8, 0x67, 0xa0, 0x49, - 0x0e, 0xaa, 0x74, 0x3d, 0x42, 0xc6, 0xb2, 0xd9, 0x84, 0x2d, 0xf6, 0x9a, 0x53, 0xf0, 0x5a, 0x94, - 0x57, 0xdc, 0x98, 0x0f, 0x66, 0x1c, 0x55, 0xe5, 0x26, 0xb4, 0xd3, 0x6b, 0x15, 0x7b, 0x2c, 0x6f, - 0x2e, 0x23, 0x06, 0x78, 0x55, 0xa2, 0x8b, 0xa5, 0xcf, 0x05, 0x13, 0xf9, 0x7d, 0x2e, 0xc0, 0x52, - 0x9b, 0xdd, 0xe9, 0x0c, 0x24, 0x1a, 0xe9, 0x54, 0x3c, 0xff, 0x56, 0x40, 0x22, 0xff, 0xb5, 0x3b, - 0x63, 0xaf, 0x2b, 0x1b, 0xfb, 0x4c, 0x40, 0xf3, 0xac, 0x7e, 0x21, 0xa0, 0x19, 0x3e, 0x25, 0x11, - 0xdb, 0xc5, 0xef, 0x21, 0x3f, 0xd7, 0x1f, 0x05, 0xeb, 0xe9, 0x37, 0x45, 0x2f, 0x2d, 0x92, 0x0a, - 0x01, 0xc7, 0x58, 0x29, 0x29, 0x89, 0xcd, 0x21, 0x09, 0xd2, 0x6d, 0xd2, 0xdf, 0xd1, 0x67, 0xc4, - 0x6b, 0x8c, 0x18, 0xf5, 0x30, 0xef, 0x0a, 0x55, 0x76, 0x1b, 0x31, 0xea, 0x67, 0x43, 0x5f, 0x70, - 0x06, 0xd4, 0xba, 0x8f, 0x64, 0x3e, 0xf9, 0x94, 0xd0, 0xa4, 0x25, 0xf3, 0x7a, 0xd5, 0x93, 0xaa, - 0xfc, 0x38, 0x7a, 0xd4, 0x6b, 0x19, 0xab, 0x34, 0x03, 0x1a, 0xe3, 0x22, 0xb6, 0xec, 0xf4, 0xe3, - 0x5c, 0xb6, 0xe4, 0xff, 0x21, 0xa0, 0x99, 0x5c, 0xcb, 0x3b, 0x2d, 0xf7, 0xa3, 0xf3, 0xc1, 0x8e, - 0x6c, 0x4b, 0x70, 0xb0, 0xbb, 0x4b, 0x8f, 0x61, 0x6d, 0x44, 0x47, 0xa6, 0x8b, 0x9c, 0x14, 0xd0, - 0xf4, 0x8d, 0x3b, 0x43, 0xd1, 0x6f, 0x67, 0x8d, 0x9f, 0xcd, 0x5e, 0xe3, 0xa5, 0x78, 0xf7, 0xd2, - 0xd7, 0x98, 0x4a, 0x8a, 0xcc, 0xa7, 0xd7, 0x32, 0xb7, 0xf6, 0xa7, 0x7b, 0xda, 0x72, 0x2e, 0x33, - 0x75, 0xc4, 0xcb, 0x1e, 0xad, 0x34, 0x03, 0x9a, 0xe7, 0x5e, 0xe5, 0xff, 0x2e, 0xa0, 0x19, 0x46, - 0xc3, 0x3f, 0xb6, 0x45, 0xce, 0x4c, 0x42, 0x33, 0x41, 0xec, 0xf2, 0xcb, 0xbc, 0x26, 0x6b, 0x99, - 0x2b, 0x1d, 0x96, 0x19, 0xb6, 0x96, 0x45, 0xce, 0xab, 0xbc, 0x23, 0x4b, 0xb1, 0xab, 0xcf, 0xa1, - 0xd8, 0xad, 0x88, 0x49, 0x63, 0x2a, 0x76, 0x93, 0xb1, 0x62, 0xb7, 0xd9, 0xb7, 0xea, 0xbb, 0xd7, - 0xec, 0xa8, 0x8e, 0x96, 0xff, 0x95, 0x75, 0xb4, 0x82, 0x6f, 0x50, 0x47, 0x9b, 0xf4, 0x0d, 0xe9, - 0x68, 0x86, 0x42, 0x35, 0xd9, 0x5e, 0xa1, 0xb2, 0x90, 0xc6, 0x77, 0xa7, 0x50, 0x71, 0x89, 0x4a, - 0x0a, 0x6d, 0x13, 0x95, 0xc0, 0x54, 0x09, 0x65, 0x9b, 0x55, 0x12, 0x0a, 0xf2, 0x8d, 0xeb, 0x11, - 0x2b, 0x55, 0xb9, 0x0a, 0x3d, 0xe6, 0xb5, 0xf2, 0x8b, 0x34, 0x03, 0x86, 0x91, 0x5b, 0xd0, 0xfc, - 0x4f, 0x01, 0x89, 0x7c, 0xd3, 0x3f, 0x36, 0x51, 0xf3, 0xba, 0x0b, 0xcd, 0x84, 0xc3, 0xe0, 0xb7, - 0x22, 0x6a, 0x12, 0xd9, 0xb9, 0x07, 0x88, 0x6b, 0xa4, 0x1e, 0xc0, 0x62, 0x2d, 0x1f, 0x9f, 0xc2, - 0x18, 0x1b, 0xa6, 0xc1, 0x83, 0xd7, 0x92, 0x37, 0x6f, 0xa5, 0x7a, 0x3f, 0x00, 0x77, 0x77, 0x60, - 0x1b, 0xad, 0xbf, 0x2b, 0xd5, 0x41, 0x22, 0xdc, 0xdf, 0x38, 0x43, 0x12, 0x08, 0xbc, 0xad, 0xb5, - 0x5f, 0x48, 0x0f, 0x77, 0xa4, 0xfa, 0xde, 0xe1, 0x53, 0x05, 0x54, 0x55, 0xaa, 0x72, 0x39, 0xf2, - 0x7a, 0xad, 0x13, 0x93, 0x8a, 0x69, 0xda, 0x7e, 0x32, 0x03, 0x9d, 0x1e, 0x3c, 0xad, 0x2e, 0x16, - 0xda, 0xe4, 0x4e, 0xa2, 0x82, 0xe7, 0xc6, 0x41, 0x05, 0xe4, 0xd6, 0x0e, 0xa8, 0x60, 0x0e, 0x1f, - 0x89, 0xdc, 0x42, 0x08, 0xfb, 0x05, 0x34, 0x6d, 0x8d, 0x92, 0xe0, 0xa9, 0x60, 0x75, 0x16, 0x15, - 0x2c, 0x51, 0xe5, 0x99, 0x3a, 0x15, 0x4c, 0xc6, 0x90, 0xee, 0xf1, 0x10, 0x41, 0x55, 0x85, 0x2a, - 0x7b, 0x51, 0x99, 0x37, 0xab, 0x7b, 0x69, 0x0e, 0x78, 0xe2, 0x1b, 0x23, 0xa1, 0x51, 0xba, 0xff, - 0xdc, 0x85, 0xa6, 0xeb, 0xa0, 0x3f, 0x4e, 0x7e, 0xd4, 0x63, 0x73, 0x67, 0x2f, 0x43, 0xd5, 0x2a, - 0x55, 0xae, 0x46, 0xcf, 0x78, 0xb3, 0x11, 0x30, 0xd1, 0xb0, 0xd8, 0xff, 0x6d, 0x12, 0x9a, 0xbe, - 0x36, 0x14, 0x37, 0x2d, 0x67, 0xc0, 0xfa, 0x26, 0x6c, 0x95, 0x2a, 0x3f, 0xc1, 0x1f, 0x86, 0x97, - 0x18, 0x47, 0xd5, 0xf1, 0xc5, 0xc1, 0x86, 0xbb, 0x28, 0x53, 0xbc, 0x1e, 0xee, 0x3c, 0x0c, 0xa8, - 0x97, 0x48, 0x44, 0x7c, 0xe3, 0x3c, 0x3c, 0x37, 0xeb, 0x23, 0x7c, 0x6c, 0x5c, 0xe8, 0xd1, 0xcd, - 0x9f, 0x82, 0x9f, 0x32, 0x4e, 0xc1, 0x79, 0x46, 0x6e, 0x40, 0xfb, 0x53, 0x30, 0x79, 0xb8, 0x05, - 0xb9, 0x01, 0xf5, 0x33, 0xf0, 0x53, 0xc6, 0x96, 0x95, 0xcf, 0xb5, 0xb7, 0xdd, 0xb2, 0xf8, 0xf6, - 0x2c, 0xb3, 0x16, 0x6f, 0x85, 0x2b, 0xf8, 0xee, 0xad, 0x70, 0x31, 0x5d, 0x59, 0x9b, 0x64, 0xf8, - 0x96, 0x33, 0x65, 0x6d, 0x1d, 0xaf, 0xac, 0x95, 0xf1, 0x6a, 0x5a, 0xb9, 0x5b, 0xf7, 0x8c, 0xa7, - 0x6a, 0x9a, 0xe1, 0x0d, 0x4f, 0xb5, 0xb4, 0x72, 0xf7, 0xea, 0x0d, 0xbe, 0x9a, 0x55, 0x7a, 0xac, - 0xa2, 0xc5, 0xba, 0xda, 0xb6, 0x99, 0x3e, 0x89, 0xa8, 0xa7, 0x76, 0x27, 0xbc, 0xc7, 0xd2, 0x27, - 0x11, 0xf5, 0xd2, 0xd2, 0xd4, 0x99, 0xc3, 0xc9, 0xa1, 0xb7, 0xb5, 0xde, 0xa1, 0xd4, 0xc9, 0x81, - 0xe4, 0xe0, 0x01, 0x23, 0xf2, 0x77, 0x5d, 0x3d, 0x0d, 0x25, 0x3c, 0x70, 0x43, 0x1b, 0x3a, 0xaa, - 0x87, 0xee, 0xa0, 0xef, 0x25, 0xea, 0xc5, 0x5f, 0xd8, 0xc5, 0xc0, 0x21, 0x41, 0xf9, 0x4c, 0xd6, - 0xf2, 0xfb, 0xa0, 0x47, 0xce, 0x21, 0x26, 0x73, 0x6b, 0x7f, 0x6a, 0xf8, 0x3c, 0x5b, 0x68, 0xe2, - 0xfa, 0x6a, 0xb2, 0x95, 0xbf, 0x21, 0xa8, 0xf2, 0x3e, 0x01, 0xbd, 0x2e, 0x78, 0xb3, 0x89, 0x5e, - 0x8a, 0xc2, 0x90, 0x30, 0x3a, 0xbf, 0xa3, 0xd8, 0xc9, 0x1f, 0xe6, 0xa1, 0x19, 0xc6, 0x28, 0xee, - 0x0c, 0xf9, 0xb5, 0x31, 0xb7, 0x2b, 0x32, 0x91, 0x5f, 0xf0, 0x38, 0x82, 0xc8, 0xaf, 0x05, 0xa6, - 0x88, 0xc9, 0xdc, 0xb2, 0x98, 0xa2, 0xd0, 0x28, 0x08, 0x35, 0xfa, 0x13, 0x0a, 0x60, 0x82, 0x5e, - 0x3b, 0xda, 0x77, 0x8d, 0xf7, 0x6b, 0xda, 0xf5, 0x22, 0xbd, 0x6b, 0xed, 0xe6, 0x9b, 0x5a, 0xe7, - 0xc1, 0x54, 0x6f, 0x6b, 0xea, 0xf8, 0x95, 0xac, 0xf0, 0x93, 0x3e, 0xae, 0x63, 0xdd, 0x9c, 0x90, - 0x8d, 0x73, 0x49, 0xa4, 0x22, 0x13, 0x74, 0x60, 0x87, 0xe0, 0xcc, 0xc3, 0x8b, 0xd0, 0x02, 0x60, - 0x55, 0x2e, 0x3d, 0xe5, 0x86, 0x28, 0xd6, 0xf1, 0x99, 0xdc, 0xfc, 0x1d, 0x9a, 0x19, 0x8a, 0x13, - 0xdb, 0x7e, 0x6d, 0xe4, 0x95, 0x30, 0x5c, 0x32, 0x91, 0x85, 0x2c, 0x84, 0x47, 0x0f, 0xd6, 0x5a, - 0xe9, 0x21, 0x92, 0x17, 0xb3, 0x22, 0x18, 0x79, 0x25, 0x5c, 0x01, 0x11, 0xf7, 0x83, 0xe5, 0x34, - 0x66, 0x7f, 0xfb, 0x9e, 0x4c, 0xff, 0x20, 0xbd, 0x02, 0x80, 0xbc, 0xd4, 0xd6, 0xf6, 0xe2, 0x2b, - 0xa8, 0x50, 0x79, 0x35, 0xea, 0x0f, 0x07, 0xf5, 0x83, 0xf8, 0x8b, 0xaa, 0xfc, 0x4b, 0xaf, 0x5e, - 0x28, 0xad, 0x65, 0x7f, 0x51, 0xe7, 0x96, 0x74, 0xff, 0x89, 0xd4, 0xb5, 0x63, 0x24, 0x0c, 0x6c, - 0x07, 0x78, 0xe4, 0xdf, 0x1e, 0xe9, 0x8c, 0xf9, 0xc3, 0xc1, 0x48, 0x53, 0xb9, 0xbb, 0x51, 0xf1, - 0xc7, 0x13, 0x15, 0xaf, 0xf8, 0xe3, 0x09, 0xa5, 0xdc, 0xdd, 0x14, 0x89, 0x27, 0x2a, 0xa2, 0x91, - 0x60, 0xbc, 0xdc, 0x1d, 0x8d, 0x85, 0x22, 0xb1, 0x50, 0x62, 0x97, 0x4f, 0xef, 0x57, 0xdc, 0x8d, - 0xc4, 0x26, 0xff, 0xab, 0xab, 0x9a, 0xa2, 0x89, 0x5d, 0xd5, 0xcd, 0x8d, 0x3b, 0x41, 0x40, 0x51, - 0x7f, 0xe5, 0x67, 0x55, 0x79, 0x8d, 0xd7, 0xa6, 0x5a, 0x5a, 0xd6, 0xe4, 0x7f, 0xb5, 0x42, 0xc1, - 0x85, 0x15, 0xdb, 0x9a, 0x1b, 0x77, 0x56, 0x40, 0x00, 0xb3, 0x72, 0xed, 0xe0, 0xb1, 0xd4, 0xe5, - 0x73, 0x34, 0xc8, 0x13, 0xf1, 0x44, 0x35, 0xdc, 0x20, 0x6c, 0xba, 0x11, 0x5f, 0x43, 0xd3, 0xe2, - 0x0c, 0x0f, 0xb5, 0x4a, 0xa3, 0x7f, 0x17, 0x7d, 0xc1, 0xb4, 0x51, 0x95, 0xeb, 0xbd, 0x59, 0x55, - 0xd2, 0x53, 0x2c, 0xb6, 0x23, 0x71, 0xed, 0x39, 0x7c, 0x48, 0x3b, 0xdf, 0x33, 0x7a, 0xec, 0x16, - 0x9c, 0xd3, 0xb4, 0x91, 0x56, 0xed, 0xe2, 0x01, 0xad, 0xe3, 0xbc, 0xd6, 0xdf, 0x03, 0x9f, 0xd7, - 0xdf, 0x29, 0x2c, 0x5b, 0xaa, 0x75, 0xec, 0x1b, 0x55, 0xcf, 0xf8, 0xb2, 0xfa, 0x13, 0xff, 0x81, - 0x80, 0x66, 0xeb, 0x45, 0x9b, 0xc3, 0x61, 0x45, 0x09, 0x2a, 0x41, 0xee, 0x88, 0x08, 0xc1, 0x55, - 0xbd, 0xf6, 0x30, 0x52, 0x84, 0x5b, 0xef, 0x66, 0x5a, 0x51, 0x91, 0x08, 0x35, 0x29, 0xe5, 0xf4, - 0xbc, 0x07, 0x31, 0xea, 0xfa, 0x3a, 0xb5, 0xcf, 0xda, 0x61, 0x8c, 0x78, 0x43, 0xa5, 0xef, 0x43, - 0x4f, 0xa7, 0x87, 0xfb, 0xd2, 0xef, 0x0f, 0x8d, 0x9e, 0xf8, 0x48, 0x3b, 0xdf, 0xa3, 0x5d, 0x39, - 0x02, 0x23, 0xd4, 0x0e, 0x1f, 0xca, 0xbc, 0xf3, 0xa1, 0xd3, 0xf0, 0xed, 0xc7, 0x21, 0xfe, 0x67, - 0x01, 0xcd, 0x37, 0x6a, 0x12, 0xa1, 0xc6, 0xd0, 0x6e, 0x72, 0x6f, 0xb5, 0x69, 0x47, 0x4c, 0xf1, - 0xef, 0x88, 0x34, 0x06, 0xe9, 0xa5, 0x04, 0x0d, 0x6d, 0x9d, 0x1b, 0x56, 0x7a, 0x5d, 0xe0, 0xa7, - 0x65, 0x40, 0x54, 0x24, 0x76, 0xc4, 0x94, 0x38, 0x06, 0x29, 0x87, 0xc8, 0x6a, 0x94, 0x9c, 0x49, - 0xfe, 0xa9, 0xd1, 0xb7, 0x3a, 0xb4, 0xd6, 0x11, 0x63, 0x7a, 0x5c, 0x76, 0x46, 0x2c, 0x23, 0x6f, - 0x1e, 0x4a, 0x0e, 0x1d, 0x82, 0x79, 0xa6, 0x4f, 0x7e, 0xa6, 0x75, 0xec, 0x4b, 0x0d, 0x1c, 0x85, - 0x95, 0x02, 0xb1, 0x3a, 0x7a, 0xe2, 0x23, 0x23, 0x47, 0xd8, 0xe0, 0xd0, 0xc3, 0x4b, 0x7d, 0xb9, - 0x07, 0x29, 0x1e, 0x14, 0xd0, 0x3d, 0xf1, 0x9d, 0x21, 0x48, 0x50, 0xf5, 0x8b, 0x50, 0x62, 0xc7, - 0xda, 0x48, 0xc0, 0xdf, 0xb8, 0x31, 0x11, 0x89, 0x61, 0xe1, 0x39, 0x99, 0xb0, 0xe9, 0x06, 0x55, - 0x5e, 0xeb, 0x75, 0x86, 0x92, 0x2a, 0xb5, 0x5b, 0x37, 0xd3, 0xc7, 0x2e, 0xa4, 0x7a, 0x3b, 0x53, - 0xbd, 0x97, 0xb5, 0xde, 0x2b, 0x5a, 0xdf, 0x5b, 0xda, 0xde, 0x4b, 0xba, 0x0f, 0x0a, 0x3f, 0x20, - 0xc8, 0x80, 0xeb, 0xdc, 0x97, 0x78, 0x5a, 0x40, 0x77, 0x9b, 0x6a, 0x37, 0xee, 0x8a, 0x27, 0x94, - 0xa6, 0xfa, 0x48, 0x30, 0x4e, 0xa3, 0x5d, 0x93, 0x18, 0x7e, 0x4e, 0x30, 0xd2, 0x6a, 0x18, 0xcb, - 0xce, 0xe6, 0x6d, 0x4a, 0x45, 0x9c, 0x14, 0xbb, 0xd7, 0x6f, 0xc4, 0xdb, 0xec, 0xa9, 0xd3, 0xb5, - 0x7e, 0xa5, 0x29, 0x12, 0xde, 0xa8, 0x24, 0xf4, 0x27, 0x14, 0xf5, 0x91, 0xa0, 0x75, 0x94, 0x30, - 0x44, 0xa7, 0x0f, 0x88, 0x87, 0x05, 0x34, 0x37, 0xd4, 0x10, 0x8e, 0xc4, 0x14, 0xbd, 0xbf, 0x38, - 0x87, 0x59, 0x1a, 0x37, 0x8e, 0x64, 0x3a, 0xcd, 0x05, 0x27, 0x95, 0xc3, 0x40, 0x8d, 0x41, 0xb1, - 0x3c, 0xaa, 0x99, 0xfe, 0x73, 0xe9, 0xfe, 0x13, 0x59, 0xc3, 0xc9, 0xd5, 0x95, 0xb8, 0x47, 0x40, - 0x77, 0x45, 0x76, 0x6e, 0x8a, 0x24, 0xfc, 0x8d, 0x9b, 0xc3, 0x31, 0xc5, 0x1f, 0xdc, 0x55, 0x13, - 0x69, 0x0e, 0x27, 0xc8, 0x8d, 0xcd, 0x54, 0x58, 0x3d, 0xbb, 0x7a, 0xe9, 0xe1, 0xc8, 0xce, 0x8a, - 0x04, 0x2e, 0xad, 0x68, 0x86, 0xe2, 0x8a, 0x00, 0x2e, 0x2f, 0x07, 0x21, 0xeb, 0xa6, 0x85, 0x6e, - 0x3d, 0x94, 0x58, 0xea, 0xd8, 0x95, 0xd1, 0xfd, 0xdd, 0x3e, 0xbb, 0xbe, 0xc4, 0xcf, 0x05, 0x74, - 0x4f, 0x93, 0xff, 0x55, 0xbe, 0xa2, 0x5e, 0x89, 0x05, 0x94, 0x70, 0x02, 0xd3, 0xd1, 0x14, 0x32, - 0x92, 0x37, 0x05, 0x55, 0xee, 0x16, 0xbc, 0xce, 0x70, 0x52, 0x0c, 0x8b, 0x42, 0xf3, 0x90, 0xa2, - 0x7a, 0x6d, 0x39, 0x2d, 0xa2, 0x9c, 0x41, 0xa2, 0x7e, 0x51, 0x31, 0xd6, 0x3a, 0xac, 0x0f, 0x52, - 0x67, 0x0b, 0xcc, 0x43, 0x04, 0x26, 0xd5, 0x77, 0x1e, 0xb8, 0x4a, 0xeb, 0x38, 0xa9, 0xed, 0xe9, - 0x4d, 0xf5, 0xbd, 0xc3, 0xfb, 0xbb, 0xfb, 0x9c, 0x87, 0x23, 0xaa, 0x02, 0x9a, 0xc5, 0x49, 0x0a, - 0x52, 0x4d, 0x84, 0x5a, 0x31, 0x99, 0xcf, 0x6f, 0x54, 0xf9, 0x45, 0xaf, 0x2d, 0x80, 0x54, 0x63, - 0x92, 0x68, 0x30, 0x13, 0x22, 0xd0, 0x4c, 0x73, 0xb0, 0x95, 0x6b, 0xda, 0xc1, 0x63, 0xc9, 0x9b, - 0x07, 0xd3, 0x17, 0x55, 0x9f, 0x6d, 0xd7, 0xe2, 0x5f, 0x0a, 0x68, 0x2e, 0xee, 0xa5, 0x21, 0x84, - 0x15, 0x01, 0xe6, 0x0e, 0xd4, 0x14, 0x69, 0xf1, 0x37, 0x92, 0xb1, 0x4d, 0x25, 0x63, 0x23, 0xee, - 0x9f, 0xde, 0x5c, 0x80, 0xd2, 0xcb, 0x2c, 0x02, 0x24, 0x7b, 0x28, 0x43, 0x74, 0x67, 0xed, 0xb3, - 0x76, 0xd3, 0x66, 0x70, 0x65, 0x1f, 0x0d, 0xe4, 0xd9, 0xfb, 0x81, 0xd6, 0x7b, 0x09, 0xf3, 0x55, - 0x2c, 0xac, 0x24, 0x94, 0x78, 0x72, 0xb0, 0x2f, 0x75, 0xed, 0x92, 0xb6, 0xaf, 0xcb, 0xca, 0x41, - 0xcb, 0x99, 0x98, 0xcd, 0xf5, 0x79, 0xb1, 0x89, 0x3f, 0x4f, 0x4d, 0x63, 0x57, 0xe4, 0xe5, 0xfc, - 0x79, 0x6a, 0x21, 0x77, 0x58, 0xc2, 0x98, 0x31, 0x1f, 0xaa, 0x26, 0x96, 0x48, 0xa8, 0xca, 0x38, - 0x07, 0x4d, 0x67, 0x2a, 0xe1, 0x2c, 0xe3, 0x1c, 0x54, 0xc4, 0x9d, 0x80, 0x2c, 0xf7, 0x80, 0x2b, - 0xb9, 0xe4, 0xc0, 0x33, 0x58, 0xe0, 0x8b, 0x05, 0x5c, 0x6a, 0x60, 0x31, 0xdd, 0x79, 0x23, 0xd5, - 0x7a, 0x91, 0x66, 0x01, 0x26, 0x21, 0x4f, 0xb9, 0x9c, 0xbd, 0x97, 0x6c, 0x92, 0x8c, 0xcf, 0x24, - 0x62, 0xe2, 0x4f, 0x55, 0xf9, 0x35, 0x6b, 0x22, 0xf1, 0x1d, 0x7c, 0x7e, 0xa2, 0x2c, 0xbf, 0x07, - 0x62, 0x5f, 0x24, 0x79, 0x8b, 0x0e, 0x1f, 0x4a, 0x8e, 0xf4, 0x68, 0xbd, 0x97, 0x32, 0x03, 0x17, - 0x00, 0x1f, 0xa3, 0xaf, 0x5f, 0x4a, 0xdf, 0xfc, 0xc8, 0x4d, 0x8f, 0x41, 0x9c, 0x3e, 0xe6, 0x4e, - 0x0f, 0xb7, 0x25, 0x87, 0xaf, 0xf3, 0x72, 0xd8, 0xed, 0x90, 0x8a, 0xfc, 0x1f, 0x09, 0xe8, 0xae, - 0x6d, 0xcd, 0xdb, 0xb7, 0x2b, 0x31, 0x1f, 0x4d, 0x19, 0xec, 0xc3, 0x32, 0x86, 0xbc, 0x2a, 0x9c, - 0x5a, 0x7d, 0x4c, 0x50, 0xe5, 0x23, 0x82, 0xd7, 0x0e, 0x42, 0xda, 0x0d, 0x85, 0x15, 0x2c, 0xd5, - 0x70, 0x05, 0x49, 0x17, 0x4e, 0x77, 0x38, 0xea, 0x60, 0xc7, 0xed, 0x70, 0x3c, 0x9b, 0xd2, 0x27, - 0x27, 0xdc, 0x56, 0x97, 0x3e, 0xb4, 0x1f, 0x78, 0x37, 0x33, 0x70, 0x01, 0xb6, 0x43, 0xad, 0xe3, - 0x24, 0xdf, 0x95, 0x3e, 0x17, 0xf7, 0xb2, 0xa5, 0x4b, 0x7d, 0x76, 0x03, 0x12, 0xcf, 0x83, 0x44, - 0x5a, 0x13, 0xf3, 0x07, 0x94, 0xed, 0xcd, 0x8d, 0x9b, 0x68, 0x90, 0xed, 0x10, 0x96, 0x9f, 0x01, - 0x92, 0xcc, 0x77, 0x6a, 0xf5, 0x76, 0x55, 0x0e, 0x78, 0x9d, 0xa1, 0xa4, 0xd5, 0x58, 0x1e, 0x35, - 0xd0, 0xba, 0x8a, 0x84, 0x51, 0x59, 0x11, 0x57, 0x02, 0xe5, 0x54, 0x37, 0x23, 0x61, 0x55, 0x81, - 0x73, 0xdc, 0xf5, 0x91, 0xa0, 0x7b, 0xb4, 0xb5, 0x55, 0xdb, 0x3f, 0x94, 0xea, 0x6d, 0xd5, 0x99, - 0xc8, 0xe7, 0xfc, 0x09, 0xb1, 0x4d, 0x40, 0xc5, 0xf1, 0x80, 0x3f, 0x5c, 0x17, 0x4e, 0x28, 0xb1, - 0x16, 0x7f, 0x63, 0xc9, 0x2c, 0x32, 0xb2, 0x97, 0x55, 0xf9, 0x25, 0xaf, 0xa9, 0x42, 0x5a, 0x87, - 0x7f, 0x55, 0x84, 0xe8, 0xcf, 0xf2, 0x2c, 0xc2, 0x48, 0xbd, 0xdb, 0x9a, 0xfa, 0xe4, 0x00, 0x7c, - 0x0f, 0xff, 0xd7, 0x73, 0x54, 0x97, 0x25, 0x58, 0x35, 0xb8, 0xa8, 0x9a, 0x96, 0x7f, 0xd9, 0x52, - 0x9f, 0xa9, 0x73, 0xbc, 0xef, 0xce, 0x6a, 0xf2, 0xbf, 0x8a, 0x99, 0xb4, 0x1e, 0xd3, 0x6d, 0x9c, - 0x99, 0xf8, 0x67, 0x93, 0xe1, 0xfc, 0x56, 0x95, 0x1b, 0xbc, 0xb6, 0x00, 0xd2, 0x06, 0x8c, 0x23, - 0x7c, 0x9c, 0xac, 0x88, 0xb2, 0x72, 0x10, 0x75, 0x80, 0x12, 0xaa, 0xb4, 0x76, 0x1f, 0x4e, 0x7e, - 0xf6, 0x36, 0x8f, 0x13, 0x5e, 0xd2, 0x19, 0xab, 0xf9, 0xf8, 0xd2, 0xa5, 0x3e, 0xdb, 0xcf, 0x88, - 0xa7, 0x04, 0x34, 0x9d, 0xd0, 0xe8, 0xe6, 0x28, 0x3e, 0xec, 0xbf, 0xa0, 0xc4, 0x22, 0x25, 0x73, - 0xc6, 0xcc, 0xd4, 0xff, 0x0b, 0x55, 0xde, 0xe4, 0xcd, 0x6e, 0x27, 0xc9, 0x20, 0x9d, 0x9b, 0xa3, - 0x15, 0xdb, 0x63, 0x91, 0xa6, 0x8a, 0xdd, 0x4a, 0x2c, 0x42, 0x37, 0x3d, 0x7e, 0x67, 0xb8, 0x3d, - 0xd2, 0x91, 0xfa, 0xe8, 0x5c, 0xaa, 0xb7, 0xd3, 0xcd, 0xef, 0x83, 0x64, 0xb9, 0x3b, 0x7d, 0xd9, - 0x7d, 0xe2, 0xf1, 0xcd, 0x31, 0x2b, 0xc5, 0xf2, 0x76, 0xcc, 0x86, 0xc1, 0x60, 0xc9, 0xdd, 0x04, - 0x85, 0x8a, 0x2a, 0x6f, 0xf3, 0x3a, 0x80, 0x48, 0x3f, 0xe7, 0xf6, 0x8b, 0x20, 0xae, 0xa9, 0xf0, - 0x6f, 0x27, 0xa2, 0x39, 0x18, 0x2c, 0x37, 0x94, 0xf4, 0x8e, 0xf3, 0xa9, 0xe3, 0x7d, 0x3a, 0xd5, - 0x59, 0x17, 0x1a, 0x6f, 0x1a, 0x0e, 0x5f, 0x10, 0xdf, 0xc3, 0x8a, 0x9e, 0xb5, 0x8a, 0x1e, 0x51, - 0x4a, 0xc8, 0x10, 0x49, 0xb4, 0x5b, 0x67, 0x28, 0xc7, 0x51, 0xd2, 0x13, 0x0b, 0xe8, 0xe2, 0xc9, - 0xc1, 0xf3, 0xc6, 0xb9, 0xc5, 0x69, 0x94, 0xce, 0x1f, 0x11, 0xff, 0xb1, 0x80, 0x4a, 0x6d, 0x6a, - 0x57, 0xfb, 0x43, 0x8d, 0xcd, 0x31, 0xa5, 0xe4, 0x9e, 0x71, 0x64, 0x13, 0x6f, 0x52, 0xe5, 0xdf, - 0x7a, 0x73, 0x74, 0x22, 0xad, 0x75, 0x98, 0xc8, 0x76, 0xa8, 0xa7, 0x9c, 0x0d, 0xc9, 0x48, 0xb5, - 0xc3, 0x87, 0xe0, 0x62, 0xdd, 0x71, 0x32, 0x39, 0xbe, 0x24, 0xee, 0x75, 0x21, 0xb7, 0x5e, 0xbd, - 0x26, 0xda, 0x9c, 0xa5, 0x84, 0x93, 0x63, 0x40, 0x49, 0x29, 0xc1, 0xfe, 0x27, 0x82, 0x2a, 0x5f, - 0x15, 0xbc, 0x63, 0x82, 0x4b, 0x5d, 0xfc, 0xc1, 0xa2, 0x21, 0xda, 0x3c, 0xc1, 0xc3, 0x45, 0xd9, - 0x9a, 0xfa, 0xcd, 0x8b, 0xbf, 0xc1, 0x13, 0xc6, 0x98, 0x03, 0x16, 0xff, 0x4e, 0x40, 0x73, 0xcc, - 0x22, 0xba, 0x26, 0xda, 0x0c, 0x1b, 0xcb, 0x5c, 0x32, 0xf5, 0x5e, 0x41, 0x95, 0xdf, 0x12, 0xbc, - 0x0e, 0x40, 0xd2, 0x9f, 0xda, 0x97, 0x4f, 0x60, 0x73, 0x09, 0x44, 0x9b, 0xbf, 0xc6, 0xfe, 0xe2, - 0x30, 0x2e, 0x9b, 0x79, 0xad, 0x53, 0x9a, 0x60, 0x5e, 0xf3, 0x72, 0xcc, 0x8b, 0x01, 0x65, 0xcf, - 0x8b, 0x95, 0x4f, 0x60, 0x5e, 0x4d, 0x4a, 0xd3, 0x37, 0x37, 0x2f, 0xf6, 0xfd, 0x2a, 0xbc, 0x2d, - 0x22, 0xbf, 0x77, 0x0c, 0xcb, 0x8e, 0x34, 0x1f, 0x74, 0x26, 0x4b, 0xbd, 0x5d, 0x28, 0x5b, 0x5b, - 0x97, 0xa2, 0xff, 0x25, 0xa0, 0x85, 0x8e, 0xdf, 0xb8, 0x33, 0x4c, 0x7f, 0x4f, 0x9a, 0xae, 0x2e, - 0xca, 0x2c, 0xce, 0x7b, 0x16, 0x65, 0x8c, 0x4e, 0x0f, 0xee, 0x19, 0xd2, 0x0f, 0xb1, 0x37, 0x17, - 0x3f, 0x24, 0xf3, 0xd9, 0x45, 0xc1, 0x62, 0x3f, 0x7b, 0x43, 0xf8, 0x16, 0x0d, 0x68, 0x5f, 0x56, - 0x97, 0xc7, 0xbc, 0xbe, 0x49, 0x00, 0xee, 0x9b, 0xc2, 0x81, 0xfb, 0x8a, 0x74, 0x70, 0xac, 0x4f, - 0x5b, 0xec, 0x6d, 0xaf, 0x0b, 0x39, 0x0c, 0x6e, 0x1b, 0xbf, 0x39, 0x83, 0xdb, 0x97, 0xd5, 0x93, - 0xbc, 0xf9, 0x25, 0xc1, 0x32, 0xc1, 0xd6, 0xf2, 0xb6, 0x4f, 0x70, 0x30, 0xbd, 0xfd, 0xe6, 0x5b, - 0x30, 0xbd, 0x7d, 0x59, 0x5d, 0xe8, 0x9d, 0x54, 0xd2, 0xfa, 0x6e, 0x41, 0xd9, 0x93, 0x16, 0x2b, - 0xdc, 0x3f, 0x19, 0xc3, 0x0a, 0x77, 0xe2, 0x07, 0x65, 0x85, 0xe3, 0x67, 0xe2, 0x60, 0x90, 0xfb, - 0x7f, 0xc6, 0x69, 0x90, 0xfb, 0xe8, 0xce, 0x31, 0xc8, 0x01, 0x29, 0xd5, 0x97, 0xfd, 0x6c, 0x2c, - 0xcb, 0xdc, 0xfb, 0x63, 0x5a, 0xe6, 0x72, 0xab, 0xbe, 0xdf, 0xa5, 0xd5, 0x6e, 0x68, 0x0c, 0xab, - 0x5d, 0xee, 0x91, 0x7e, 0xcf, 0x16, 0xbd, 0xd3, 0xe3, 0xb0, 0xe8, 0xe5, 0x9e, 0xc0, 0x33, 0xaa, - 0xbc, 0x32, 0xb7, 0xb5, 0x6f, 0x41, 0x6e, 0x6b, 0x5f, 0x6e, 0xfb, 0x5e, 0x57, 0x4e, 0xfb, 0xde, - 0x0b, 0xdf, 0xb0, 0x7d, 0x8f, 0xb2, 0xe5, 0x5f, 0xdc, 0x55, 0xf6, 0x33, 0x7b, 0x53, 0xdf, 0xbf, - 0x19, 0x87, 0xa9, 0xaf, 0xf7, 0x87, 0x68, 0xea, 0x63, 0x52, 0xfc, 0x67, 0xb9, 0x6c, 0x7e, 0xa7, - 0x73, 0xdb, 0xfc, 0x7e, 0xfb, 0xed, 0xda, 0xfc, 0xbe, 0xac, 0x2e, 0xf2, 0x4e, 0x26, 0x32, 0xf1, - 0x4a, 0xd1, 0x8f, 0xdc, 0xfe, 0xb7, 0x99, 0x77, 0x75, 0x98, 0xc6, 0x9e, 0x7e, 0x55, 0xf0, 0xae, - 0x0e, 0x6e, 0xf0, 0x6d, 0xc8, 0x32, 0xfe, 0xe5, 0xf6, 0x77, 0xd8, 0xc4, 0x9b, 0x15, 0xa7, 0xb3, - 0xf0, 0x67, 0x13, 0x34, 0x2b, 0x5a, 0xfc, 0x32, 0xaa, 0x0c, 0x2f, 0x88, 0x19, 0x9c, 0xf5, 0x90, - 0x79, 0x41, 0x14, 0xe5, 0x70, 0xd9, 0x33, 0x59, 0x0f, 0x67, 0x4e, 0xdc, 0x7a, 0x38, 0xae, 0x13, - 0xa4, 0xf8, 0x23, 0x3f, 0x41, 0xde, 0x76, 0xb0, 0x4b, 0xde, 0x35, 0x0e, 0x6b, 0xc0, 0xe9, 0x1f, - 0xa6, 0xd5, 0xd2, 0x90, 0x46, 0xb6, 0xe6, 0xcb, 0x81, 0x9c, 0xe6, 0x4b, 0x30, 0x12, 0xfe, 0xee, - 0xbb, 0x31, 0x5f, 0xf2, 0x8a, 0x5a, 0x0e, 0x4b, 0x66, 0x77, 0xb6, 0x25, 0x13, 0x4c, 0x87, 0x3b, - 0xbf, 0x6d, 0x4b, 0xa6, 0x31, 0xbc, 0x82, 0x2c, 0xa3, 0xe6, 0x07, 0x4e, 0x46, 0xcd, 0x39, 0x64, - 0x64, 0x2d, 0xdf, 0x9d, 0x51, 0xd3, 0x90, 0xeb, 0x6d, 0x93, 0x27, 0x60, 0xe0, 0xbc, 0xfb, 0x07, - 0x64, 0xe0, 0x7c, 0xdf, 0xd9, 0xc0, 0x59, 0xc2, 0xa8, 0xf1, 0x3b, 0x30, 0x70, 0x9a, 0x76, 0x48, - 0x27, 0x63, 0xe7, 0xd5, 0x9c, 0xc6, 0xce, 0x7b, 0xc8, 0x70, 0xe3, 0xdf, 0x95, 0xb1, 0xd3, 0xa0, - 0xcf, 0x9f, 0xe5, 0xb2, 0x7b, 0xfe, 0xcb, 0xdc, 0x76, 0xcf, 0xd2, 0x71, 0x48, 0xba, 0x57, 0xbf, - 0x53, 0xbb, 0x27, 0x2f, 0x16, 0x72, 0x99, 0x40, 0xff, 0xdd, 0x58, 0xd6, 0xbf, 0x0b, 0x3f, 0x68, - 0xeb, 0x9f, 0x21, 0xa7, 0x9d, 0xcc, 0x80, 0xff, 0x6e, 0x2c, 0x33, 0xe0, 0x85, 0x1f, 0xb4, 0x19, - 0xd0, 0x71, 0x82, 0x6c, 0x20, 0xa2, 0x1f, 0x4d, 0x6a, 0x8a, 0x04, 0x9b, 0x1b, 0x95, 0x92, 0xf9, - 0x54, 0x20, 0x65, 0x99, 0xb9, 0xd6, 0x91, 0x5a, 0x92, 0xe3, 0xbb, 0x42, 0x95, 0xbd, 0x5e, 0x0a, - 0x2e, 0xb9, 0x61, 0x78, 0x2c, 0x20, 0x6f, 0xe6, 0xe6, 0xe5, 0xf4, 0xc5, 0x61, 0xac, 0xe1, 0x9c, - 0x3a, 0x41, 0x6d, 0x6f, 0x14, 0x52, 0x6c, 0x40, 0x93, 0x5f, 0x51, 0xb6, 0xed, 0x88, 0x44, 0x76, - 0x96, 0x2c, 0x20, 0xdf, 0x98, 0x6b, 0xf3, 0x16, 0x1d, 0x57, 0xaf, 0x8b, 0x04, 0x95, 0xea, 0xa5, - 0x58, 0x51, 0x64, 0x0d, 0x24, 0x0f, 0xfb, 0x8a, 0x9b, 0x96, 0x80, 0x0e, 0x65, 0x8a, 0x5e, 0xc7, - 0x80, 0xc5, 0x28, 0xe4, 0x54, 0x04, 0xab, 0x1b, 0xc9, 0xa9, 0xb8, 0x90, 0x18, 0xd3, 0x7e, 0xae, - 0xca, 0xab, 0xbc, 0x59, 0x55, 0xd2, 0xf2, 0xe4, 0x70, 0x3b, 0xa8, 0x76, 0x35, 0x32, 0x5c, 0xa2, - 0x42, 0xa7, 0x5a, 0xf7, 0xde, 0xd4, 0xb1, 0x2b, 0xd0, 0x75, 0x79, 0x72, 0xf0, 0x20, 0xc5, 0x2d, - 0x49, 0x89, 0xe8, 0xcb, 0xea, 0x44, 0x4c, 0x0b, 0x68, 0x9e, 0xf2, 0x6a, 0x54, 0x09, 0x07, 0xfd, - 0xdb, 0x1a, 0x15, 0x7c, 0xe4, 0xac, 0xa7, 0x96, 0xac, 0x9a, 0xe6, 0x44, 0x64, 0xfb, 0xf6, 0x92, - 0xfb, 0xe9, 0x84, 0xb3, 0x59, 0x9b, 0xe3, 0x6c, 0xc8, 0x0b, 0xe7, 0xcd, 0xd9, 0x8f, 0xe4, 0x4f, - 0x8e, 0xbc, 0xa5, 0xb5, 0x77, 0xa4, 0x87, 0x2e, 0x82, 0x0e, 0x96, 0xea, 0x3b, 0x8f, 0xa9, 0xa5, - 0xa7, 0xcd, 0x1d, 0x8d, 0x04, 0x6f, 0x8f, 0x74, 0xe1, 0xa6, 0xa1, 0x70, 0x83, 0x9b, 0xcf, 0xea, - 0xa8, 0xd3, 0x83, 0x2e, 0xc3, 0x92, 0x23, 0x3d, 0xe9, 0xb7, 0x3f, 0x4e, 0x1d, 0xba, 0xe0, 0xde, - 0x19, 0x6a, 0x6c, 0x64, 0xa1, 0x6f, 0xb5, 0xd6, 0x91, 0x8a, 0x65, 0x4b, 0x7d, 0x39, 0x07, 0x20, - 0x5e, 0x11, 0x90, 0x18, 0x56, 0x5e, 0xa9, 0x8f, 0x04, 0x37, 0xc2, 0xe6, 0x01, 0xc6, 0xb0, 0x07, - 0xc6, 0x21, 0xba, 0xb6, 0xa9, 0xf2, 0x2f, 0xbd, 0x36, 0x8d, 0xa5, 0x6a, 0x6b, 0xd9, 0xed, 0x91, - 0xae, 0xd4, 0xf1, 0x2b, 0xd1, 0x48, 0x50, 0x1b, 0x1e, 0x4a, 0x7f, 0x78, 0x40, 0x3b, 0xdf, 0x93, - 0xbc, 0xd1, 0x9e, 0xbc, 0x71, 0x40, 0x3b, 0x7c, 0x28, 0xd5, 0x49, 0xd7, 0xa2, 0x46, 0x66, 0x23, - 0x77, 0x2f, 0x65, 0x11, 0x3f, 0x6d, 0xba, 0xd7, 0x4d, 0xdd, 0xb9, 0xad, 0xb0, 0xd2, 0x7c, 0xa0, - 0x82, 0x89, 0x9b, 0xba, 0xd9, 0x43, 0x99, 0xf7, 0xf2, 0xd0, 0x42, 0xc7, 0x6f, 0xdc, 0x19, 0xa6, - 0xee, 0xd0, 0x57, 0x33, 0x75, 0x57, 0x3f, 0xa4, 0xca, 0x65, 0xd4, 0x3d, 0xd5, 0xad, 0xbf, 0xa4, - 0xb1, 0x80, 0xfd, 0x40, 0x32, 0x30, 0x7a, 0x4e, 0xe4, 0xa1, 0xfb, 0xe8, 0x42, 0xc5, 0x61, 0x64, - 0xb5, 0x24, 0xc8, 0x74, 0x3d, 0x3d, 0x8f, 0x31, 0xbb, 0xfc, 0x26, 0xeb, 0x73, 0x80, 0x6f, 0xe0, - 0x9c, 0x79, 0x46, 0xe0, 0x0e, 0x8b, 0xb0, 0xa8, 0x70, 0x92, 0x37, 0x4e, 0x8b, 0x71, 0x68, 0x4e, - 0xfd, 0x55, 0xf4, 0x64, 0x29, 0x20, 0xf8, 0x99, 0x59, 0x29, 0x75, 0xf5, 0x2c, 0x38, 0xd4, 0x97, - 0xa5, 0xdf, 0xee, 0xd7, 0x3a, 0x0f, 0x62, 0x39, 0x46, 0x42, 0x4d, 0xed, 0x6a, 0x0e, 0x27, 0x42, - 0x5f, 0xb4, 0xee, 0x89, 0x2b, 0x8d, 0xdb, 0xb3, 0x40, 0x79, 0xb5, 0x9a, 0x80, 0xe9, 0xf5, 0x8b, - 0x8d, 0xe3, 0x68, 0xd5, 0xab, 0xaa, 0xdc, 0x8c, 0xe2, 0xde, 0xf1, 0xe0, 0x48, 0x7a, 0xd8, 0x81, - 0x6b, 0x52, 0xbd, 0x97, 0x53, 0x97, 0xcf, 0x59, 0x87, 0x0c, 0x34, 0x60, 0xe6, 0x26, 0xfd, 0xcb, - 0x9e, 0xbf, 0x14, 0xd0, 0xa2, 0xdc, 0x5f, 0xbd, 0x23, 0xf8, 0xc8, 0xf3, 0xcf, 0x17, 0xa3, 0x79, - 0x1b, 0x77, 0x85, 0x03, 0x3f, 0x5d, 0xf9, 0x7c, 0x95, 0x2b, 0x9f, 0x93, 0xb9, 0xae, 0x7c, 0x42, - 0xf8, 0xac, 0x69, 0x77, 0xe5, 0xb3, 0x66, 0xc2, 0x57, 0x3e, 0x4f, 0xb8, 0x6b, 0x64, 0xed, 0xc6, - 0x75, 0xc3, 0xfe, 0x41, 0x2a, 0x72, 0x5f, 0x04, 0x1d, 0x73, 0xba, 0x08, 0x6a, 0x52, 0xe5, 0xad, - 0x96, 0x8b, 0xa0, 0x75, 0x5f, 0xef, 0x22, 0xe8, 0xf6, 0xc8, 0xdb, 0xa9, 0x13, 0x67, 0x53, 0xc7, - 0x3a, 0x40, 0x19, 0xf9, 0xe9, 0x5e, 0xe8, 0x8f, 0xe4, 0x5e, 0xa8, 0x6b, 0x1c, 0x1e, 0xdb, 0xc4, - 0xfd, 0x38, 0xc7, 0xdd, 0xcf, 0x92, 0xf1, 0xdf, 0xfd, 0x24, 0x62, 0xcd, 0x39, 0xaf, 0x7e, 0x4e, - 0x8d, 0xe9, 0xb0, 0x1d, 0x50, 0xe5, 0x97, 0x9d, 0xaf, 0x77, 0x56, 0x7d, 0xed, 0xeb, 0x1d, 0x32, - 0x42, 0xc7, 0xdb, 0x9d, 0x23, 0xe3, 0xf2, 0xd7, 0x26, 0x97, 0x65, 0x39, 0x6f, 0x70, 0x2a, 0x72, - 0xdf, 0xe0, 0x70, 0x29, 0x22, 0xc8, 0x78, 0x7e, 0xba, 0xd0, 0xf9, 0xe9, 0x42, 0x67, 0x9c, 0x17, - 0x3a, 0x26, 0x4d, 0x72, 0xea, 0xb7, 0x70, 0x63, 0x31, 0x6d, 0xa2, 0x37, 0x16, 0xe3, 0xba, 0x72, - 0x98, 0xfe, 0x23, 0xbf, 0x72, 0xf8, 0x67, 0x0e, 0x57, 0x0e, 0x33, 0xc8, 0xbc, 0xef, 0xcc, 0x4b, - 0x85, 0xcb, 0x39, 0x2f, 0x15, 0x20, 0x6b, 0x4d, 0x18, 0x8b, 0xeb, 0x1c, 0x97, 0x0a, 0x35, 0xe3, - 0xbb, 0x54, 0xf8, 0x56, 0x6e, 0x14, 0xc4, 0x1f, 0xec, 0x8d, 0xc2, 0x5d, 0x3f, 0xc0, 0x1b, 0x85, - 0xf3, 0xa0, 0x2a, 0xe3, 0x8a, 0x8d, 0x09, 0x7f, 0x2c, 0xd1, 0x1c, 0x25, 0x43, 0x85, 0xbb, 0xa3, - 0x84, 0x2a, 0x2b, 0x5e, 0x9b, 0x6a, 0x6e, 0xa0, 0x71, 0x28, 0xe5, 0x87, 0xa9, 0x75, 0xbf, 0x95, - 0x1c, 0x1c, 0x22, 0xb2, 0x0b, 0xef, 0x2f, 0x13, 0x1e, 0xa8, 0xcd, 0x07, 0xc5, 0x7f, 0x24, 0xa0, - 0x12, 0xbe, 0x98, 0x66, 0x36, 0x52, 0x38, 0xf7, 0xf3, 0x03, 0x82, 0x2a, 0xff, 0x89, 0xd7, 0x11, - 0x4a, 0x7a, 0xd9, 0x3c, 0xe6, 0x8a, 0x38, 0xad, 0xb4, 0x62, 0x18, 0x26, 0xa0, 0x75, 0x0f, 0xd0, - 0x3c, 0x4c, 0x5f, 0x65, 0x12, 0x8e, 0xe3, 0xf8, 0xc1, 0x3b, 0xa9, 0xbf, 0x3f, 0x96, 0x93, 0xfa, - 0x1d, 0x73, 0x87, 0x53, 0x72, 0x27, 0xde, 0xe1, 0xdc, 0xf3, 0x63, 0xbc, 0xc3, 0x29, 0xfd, 0xb1, - 0xdf, 0xe1, 0xcc, 0xfd, 0x51, 0xdc, 0xe1, 0x70, 0x17, 0x2c, 0xf3, 0xbe, 0xd5, 0x0b, 0x96, 0x31, - 0xaf, 0x3b, 0xe6, 0xff, 0xc8, 0xaf, 0x3b, 0x16, 0xfc, 0x80, 0xaf, 0x3b, 0x7e, 0xa9, 0xca, 0x9b, - 0xd1, 0x46, 0x6f, 0x4e, 0xfb, 0xa3, 0x34, 0x5f, 0x3b, 0xdc, 0x95, 0xea, 0xbb, 0x60, 0xa9, 0x07, - 0x43, 0x93, 0xd9, 0x3c, 0xab, 0x5f, 0x70, 0x9c, 0xcf, 0x43, 0xf3, 0x1d, 0x7a, 0xfd, 0xe3, 0xb9, - 0xde, 0x00, 0xc4, 0xa5, 0x7b, 0xda, 0x7e, 0xb0, 0xd7, 0x1b, 0x1f, 0xe4, 0xa1, 0x05, 0xb0, 0x59, - 0x39, 0x9a, 0x9f, 0x7f, 0x65, 0xbd, 0xd9, 0x78, 0x42, 0x95, 0x4b, 0xf8, 0xf3, 0xe8, 0x14, 0x53, - 0x14, 0xa3, 0xf1, 0x3f, 0xc2, 0xfd, 0xf7, 0x42, 0x76, 0x40, 0xb3, 0xbf, 0x14, 0x54, 0xf9, 0xcf, - 0x05, 0x23, 0xa4, 0xd9, 0x27, 0x02, 0x1f, 0xd3, 0xcc, 0x01, 0x8d, 0x5f, 0x2d, 0xc0, 0x99, 0x36, - 0x70, 0x23, 0x39, 0x74, 0x08, 0x2b, 0x4f, 0x24, 0x07, 0xae, 0xd5, 0xfb, 0x51, 0xeb, 0xef, 0xcc, - 0xbc, 0xdb, 0x9e, 0xee, 0x69, 0xd3, 0x83, 0xf3, 0x60, 0xd6, 0x7b, 0x6b, 0xc0, 0x94, 0x99, 0xff, - 0xd3, 0x8f, 0xe0, 0x9d, 0x6d, 0xba, 0xa7, 0xad, 0x46, 0x86, 0xab, 0x6c, 0x53, 0xf0, 0xb4, 0x67, - 0x55, 0x79, 0x0d, 0x5a, 0xe5, 0x1d, 0x03, 0xc9, 0xd2, 0xdd, 0x0e, 0x13, 0xe4, 0xb9, 0xcb, 0xf3, - 0x7e, 0x1e, 0x5a, 0xe8, 0xd8, 0xcf, 0x9d, 0x92, 0x49, 0xea, 0xab, 0x71, 0x15, 0xa1, 0x73, 0xe0, - 0xaa, 0xfb, 0xf8, 0xc0, 0x6b, 0x3f, 0x58, 0xc6, 0xba, 0xe1, 0x42, 0x73, 0xd7, 0x28, 0x89, 0xef, - 0x83, 0xab, 0x5a, 0x2c, 0x77, 0x86, 0x24, 0xca, 0x95, 0x71, 0x65, 0xf8, 0x5c, 0x8d, 0x0c, 0x33, - 0x48, 0x0e, 0x1d, 0x61, 0x85, 0x24, 0x6d, 0x72, 0x72, 0xf8, 0x02, 0xcb, 0xd2, 0x0b, 0xff, 0xa6, - 0x4e, 0x5c, 0x2f, 0x77, 0x6b, 0xe7, 0x0f, 0xa6, 0x8f, 0x5e, 0x62, 0xb7, 0x13, 0x59, 0xed, 0xb8, - 0xab, 0xc0, 0x35, 0xaa, 0x5c, 0x8b, 0xaa, 0xbd, 0xb9, 0xa6, 0x2d, 0xdd, 0x07, 0x51, 0x84, 0x1c, - 0x96, 0x8d, 0x86, 0xac, 0xfb, 0x6f, 0x79, 0x68, 0x9e, 0x7d, 0x27, 0x7f, 0x3c, 0x5b, 0x87, 0x1e, - 0xd3, 0xee, 0x87, 0x4a, 0xe1, 0x2c, 0x4f, 0x48, 0xce, 0x95, 0x92, 0xe6, 0x3b, 0xac, 0xb7, 0x53, - 0x00, 0xa9, 0x4b, 0xf9, 0x68, 0xde, 0xda, 0x50, 0xdc, 0x99, 0x6f, 0xc2, 0x56, 0xbe, 0xa9, 0x57, - 0xe5, 0xd5, 0x3c, 0xdf, 0x3c, 0x6e, 0xbd, 0x60, 0xfe, 0xea, 0x11, 0xf8, 0x5e, 0xb4, 0x46, 0xe0, - 0x5b, 0xa9, 0xca, 0xcb, 0x79, 0xb7, 0xf4, 0x07, 0x9c, 0xbf, 0x37, 0x86, 0x73, 0x7a, 0x5d, 0x76, - 0x30, 0xbe, 0x4a, 0x55, 0xbe, 0xdf, 0x08, 0x42, 0x51, 0x6a, 0x55, 0xb9, 0x1c, 0xe3, 0xf2, 0xd5, - 0x65, 0xc7, 0xe5, 0x83, 0xae, 0x98, 0x7d, 0xd7, 0xda, 0x95, 0x63, 0x88, 0xbe, 0xaa, 0xf3, 0x82, - 0x2a, 0x9f, 0x15, 0xd0, 0x29, 0xc1, 0x9b, 0x73, 0x29, 0xa4, 0xdf, 0x3b, 0xac, 0xed, 0x77, 0x14, - 0x19, 0xee, 0xbf, 0xb8, 0xd0, 0x7c, 0x87, 0xf1, 0xdd, 0x19, 0x62, 0xe2, 0x45, 0x53, 0x98, 0xb8, + 0x2e, 0x85, 0xc4, 0xe6, 0x5e, 0xa3, 0x2b, 0x2f, 0xff, 0xff, 0xec, 0xfd, 0x0d, 0x74, 0x14, 0x47, + 0x96, 0x20, 0x0a, 0x77, 0x96, 0x24, 0x90, 0x02, 0xf1, 0x97, 0x06, 0x2c, 0x8b, 0xbf, 0x72, 0x19, + 0xdb, 0xa2, 0x2c, 0x21, 0x48, 0xf0, 0x9f, 0x6c, 0x6c, 0xa7, 0x24, 0xa0, 0x65, 0xf3, 0x23, 0x17, + 0x3f, 0xdd, 0x6d, 0xb7, 0x1b, 0x17, 0x55, 0x89, 0xa8, 0x46, 0xaa, 0xaa, 0xae, 0x2a, 0xc9, 0x06, + 0x4f, 0xcf, 0x27, 0xb0, 0x04, 0x92, 0x11, 0x08, 0xd2, 0x06, 0x8c, 0x2c, 0xfe, 0x6c, 0x30, 0xd8, + 0x46, 0x12, 0x18, 0x1b, 0x0b, 0x49, 0x98, 0x99, 0xb3, 0x33, 0xfb, 0xed, 0x9b, 0x9d, 0xd9, 0x9d, + 0xf5, 0xee, 0xec, 0xec, 0x99, 0x79, 0x33, 0x3d, 0x7b, 0x5c, 0x59, 0x55, 0xda, 0xf7, 0xe6, 0xb0, + 0xf3, 0xce, 0x9e, 0x77, 0xf6, 0x79, 0x77, 0xf6, 0xbd, 0x13, 0x71, 0x23, 0x32, 0x23, 0x2b, 0x33, + 0x4b, 0x92, 0xff, 0x71, 0xfb, 0x1c, 0x1f, 0xa3, 0x8a, 0xb8, 0x11, 0x19, 0x71, 0xe3, 0xde, 0x1b, + 0x37, 0x6e, 0xdc, 0xb8, 0xd7, 0x0b, 0xed, 0xa5, 0x27, 0xe1, 0x9b, 0x90, 0x95, 0x18, 0xbe, 0xc9, + 0x3d, 0xe4, 0x1a, 0xce, 0xbc, 0xbb, 0x07, 0xee, 0xdd, 0xa0, 0x10, 0xfc, 0x63, 0xb0, 0x6a, 0x3a, + 0xb2, 0x57, 0x1b, 0x1c, 0x4c, 0x1d, 0xbf, 0xf6, 0x45, 0xf5, 0xe4, 0x1e, 0x21, 0xbf, 0x50, 0x98, + 0x31, 0xcb, 0x07, 0x3d, 0x8a, 0x2f, 0x5a, 0xef, 0x47, 0xab, 0x49, 0x80, 0x61, 0xe3, 0x7e, 0x54, + 0x9f, 0xa8, 0xc1, 0xfa, 0x13, 0x09, 0xef, 0xf5, 0x1c, 0x1f, 0x0e, 0x08, 0xee, 0x4f, 0x1f, 0x27, + 0x5f, 0x30, 0xc2, 0x01, 0x99, 0xbf, 0x40, 0x02, 0x01, 0x31, 0x47, 0x1a, 0x9b, 0x6c, 0x63, 0x46, + 0x43, 0x3e, 0x29, 0x53, 0xb1, 0x6d, 0x52, 0x26, 0xa0, 0x5d, 0xe2, 0x09, 0x94, 0x1c, 0x1a, 0xb2, + 0x49, 0xca, 0x54, 0x87, 0x50, 0xa3, 0x3f, 0x9e, 0x00, 0x15, 0x8c, 0xde, 0xa5, 0x92, 0x4b, 0x6e, + 0xae, 0x58, 0x2a, 0xa1, 0x2f, 0x88, 0x06, 0x5f, 0x4b, 0x5d, 0x3a, 0x4b, 0xc3, 0x3e, 0x03, 0x4d, + 0x72, 0x50, 0xa5, 0xeb, 0x11, 0x32, 0x96, 0xcd, 0x26, 0x6c, 0xb1, 0xd7, 0x9c, 0x82, 0xd7, 0xa2, + 0xbc, 0xe2, 0xc6, 0x7c, 0x30, 0xe3, 0xa8, 0x2a, 0x37, 0xa1, 0x9d, 0x5e, 0xab, 0xd8, 0x63, 0x79, + 0x73, 0x19, 0x31, 0xc0, 0xab, 0x12, 0x5d, 0x2c, 0x7d, 0x26, 0x98, 0xc8, 0xef, 0x33, 0x01, 0x96, + 0xda, 0xec, 0x4e, 0x67, 0x20, 0xd1, 0x48, 0xa7, 0xe2, 0xf9, 0x3b, 0x01, 0x89, 0xfc, 0xd7, 0x6e, + 0x8f, 0xbd, 0xae, 0x6c, 0xec, 0x33, 0x01, 0xcd, 0xb3, 0xfa, 0xb9, 0x80, 0x66, 0xf8, 0x94, 0x44, + 0x6c, 0x17, 0xbf, 0x87, 0xfc, 0x54, 0x7f, 0x14, 0xac, 0xa7, 0xdf, 0x14, 0xbd, 0xb4, 0x48, 0x2a, + 0x04, 0x1c, 0x63, 0xa5, 0xa4, 0x24, 0x36, 0x87, 0x24, 0x48, 0xb7, 0x49, 0x7f, 0x47, 0x9f, 0x11, + 0xaf, 0x31, 0x62, 0xd4, 0xc3, 0xbc, 0x2b, 0x54, 0xd9, 0x6d, 0xc4, 0xa8, 0x9f, 0x0d, 0x7d, 0xc1, + 0x19, 0x50, 0xeb, 0x3e, 0x92, 0xf9, 0xf8, 0x13, 0x42, 0x93, 0x96, 0xcc, 0xeb, 0x55, 0x8f, 0xab, + 0xf2, 0xa3, 0xe8, 0x61, 0xaf, 0x65, 0xac, 0xd2, 0x0c, 0x68, 0x8c, 0x8b, 0xd8, 0xb2, 0xd3, 0x8f, + 0x73, 0xd9, 0x92, 0xff, 0xa7, 0x80, 0x66, 0x72, 0x2d, 0x6f, 0xb7, 0xdc, 0x8f, 0xce, 0x07, 0x3b, + 0xb2, 0x2d, 0xc1, 0xc1, 0xee, 0x0e, 0x3d, 0x86, 0xb5, 0x11, 0x1d, 0x99, 0x2e, 0x72, 0x52, 0x40, + 0xd3, 0x37, 0xee, 0x0c, 0x45, 0xbf, 0x99, 0x35, 0x7e, 0x3a, 0x7b, 0x8d, 0x97, 0xe2, 0xdd, 0x4b, + 0x5f, 0x63, 0x2a, 0x29, 0x32, 0x9f, 0x5c, 0xcd, 0xdc, 0xdc, 0x9f, 0xee, 0x69, 0xcb, 0xb9, 0xcc, + 0xd4, 0x11, 0x2f, 0x7b, 0xb4, 0xd2, 0x0c, 0x68, 0x9e, 0x7b, 0x95, 0xff, 0x87, 0x80, 0x66, 0x18, + 0x0d, 0x7f, 0xdf, 0x16, 0x39, 0x33, 0x09, 0xcd, 0x04, 0xb1, 0xcb, 0x2f, 0xf3, 0x9a, 0xac, 0x65, + 0xae, 0x74, 0x58, 0x66, 0xd8, 0x5a, 0x16, 0x39, 0xaf, 0xf2, 0x8e, 0x2c, 0xc5, 0xae, 0x3e, 0x87, + 0x62, 0xb7, 0x22, 0x26, 0x8d, 0xa9, 0xd8, 0x4d, 0xc6, 0x8a, 0xdd, 0x66, 0xdf, 0xaa, 0x6f, 0x5f, + 0xb3, 0xa3, 0x3a, 0x5a, 0xfe, 0x97, 0xd6, 0xd1, 0x0a, 0xbe, 0x46, 0x1d, 0x6d, 0xd2, 0xd7, 0xa4, + 0xa3, 0x19, 0x0a, 0xd5, 0x64, 0x7b, 0x85, 0xca, 0x42, 0x1a, 0xdf, 0x9e, 0x42, 0xc5, 0x25, 0x2a, + 0x29, 0xb4, 0x4d, 0x54, 0x02, 0x53, 0x25, 0x94, 0x6d, 0x56, 0x49, 0x28, 0xc8, 0xd7, 0xae, 0x47, + 0xac, 0x54, 0xe5, 0x2a, 0xf4, 0x88, 0xd7, 0xca, 0x2f, 0xd2, 0x0c, 0x18, 0x46, 0x6e, 0x41, 0xf3, + 0xcf, 0x02, 0x12, 0xf9, 0xa6, 0xbf, 0x6f, 0xa2, 0xe6, 0x55, 0x17, 0x9a, 0x09, 0x87, 0xc1, 0x6f, + 0x44, 0xd4, 0x24, 0xb2, 0x73, 0x0f, 0x10, 0xd7, 0x48, 0x3d, 0x80, 0xc5, 0x5a, 0x3e, 0x3e, 0x85, + 0x31, 0x36, 0x4c, 0x83, 0x07, 0xaf, 0x26, 0x6f, 0xdc, 0x4c, 0xf5, 0xbe, 0x0f, 0xee, 0xee, 0xc0, + 0x36, 0x5a, 0x7f, 0x57, 0xaa, 0x83, 0x44, 0xb8, 0xbf, 0x7e, 0x9a, 0x24, 0x10, 0x78, 0x4b, 0x6b, + 0x3f, 0x9f, 0x1e, 0xee, 0x48, 0xf5, 0xbd, 0xcd, 0xa7, 0x0a, 0xa8, 0xaa, 0x54, 0xe5, 0x72, 0xe4, + 0xf5, 0x5a, 0x27, 0x26, 0x15, 0xd3, 0xb4, 0xfd, 0x64, 0x06, 0x3a, 0x3d, 0x78, 0x5a, 0x5d, 0x2c, + 0xb4, 0xc9, 0xed, 0x44, 0x05, 0xcf, 0x8c, 0x83, 0x0a, 0xc8, 0xad, 0x1d, 0x50, 0xc1, 0x1c, 0x3e, + 0x12, 0xb9, 0x85, 0x10, 0xf6, 0x0b, 0x68, 0xda, 0x1a, 0x25, 0xc1, 0x53, 0xc1, 0xea, 0x2c, 0x2a, + 0x58, 0xa2, 0xca, 0x33, 0x75, 0x2a, 0x98, 0x8c, 0x21, 0xdd, 0xe3, 0x21, 0x82, 0xaa, 0x0a, 0x55, + 0xf6, 0xa2, 0x32, 0x6f, 0x56, 0xf7, 0xd2, 0x1c, 0xf0, 0xc4, 0x37, 0x46, 0x42, 0xa3, 0x74, 0xff, + 0xb1, 0x0b, 0x4d, 0xd7, 0x41, 0x7f, 0x98, 0xfc, 0xa8, 0xc7, 0xe6, 0xce, 0x5e, 0x86, 0xaa, 0x55, + 0xaa, 0x5c, 0x8d, 0x9e, 0xf2, 0x66, 0x23, 0x60, 0xa2, 0x61, 0xb1, 0xff, 0xfb, 0x24, 0x34, 0x7d, + 0x6d, 0x28, 0x6e, 0x5a, 0xce, 0x80, 0xf5, 0x4d, 0xd8, 0x2a, 0x55, 0x7e, 0x8c, 0x3f, 0x0c, 0x2f, + 0x31, 0x8e, 0xaa, 0xe3, 0x8b, 0x83, 0x0d, 0x77, 0x51, 0xa6, 0x78, 0x3d, 0xdc, 0x79, 0x18, 0x50, + 0x2f, 0x91, 0x88, 0xf8, 0xc6, 0x79, 0x78, 0x6e, 0xd6, 0x47, 0xf8, 0xd8, 0xb8, 0xd0, 0xa3, 0x9b, + 0x3f, 0x05, 0x3f, 0x61, 0x9c, 0x82, 0xf3, 0x8c, 0xdc, 0x80, 0xf6, 0xa7, 0x60, 0xf2, 0x70, 0x0b, + 0x72, 0x03, 0xea, 0x67, 0xe0, 0x27, 0x8c, 0x2d, 0x2b, 0x9f, 0x6b, 0x6f, 0xbb, 0x65, 0xf1, 0xed, + 0x59, 0x66, 0x2d, 0xde, 0x0a, 0x57, 0xf0, 0xed, 0x5b, 0xe1, 0x62, 0xba, 0xb2, 0x36, 0xc9, 0xf0, + 0x2d, 0x67, 0xca, 0xda, 0x3a, 0x5e, 0x59, 0x2b, 0xe3, 0xd5, 0xb4, 0x72, 0xb7, 0xee, 0x19, 0x4f, + 0xd5, 0x34, 0xc3, 0x1b, 0x9e, 0x6a, 0x69, 0xe5, 0xee, 0xd5, 0x1b, 0x7c, 0x35, 0xab, 0xf4, 0x58, + 0x45, 0x8b, 0x75, 0xb5, 0x6d, 0x33, 0x7d, 0x12, 0x51, 0x4f, 0xed, 0x4e, 0x78, 0x8f, 0xa5, 0x4f, + 0x22, 0xea, 0xa5, 0xa5, 0xa9, 0xd3, 0x87, 0x93, 0x43, 0x6f, 0x69, 0xbd, 0x43, 0xa9, 0x13, 0x03, + 0xc9, 0xc1, 0x03, 0x46, 0xe4, 0xef, 0xba, 0x7a, 0x1a, 0x4a, 0x78, 0xe0, 0xba, 0x36, 0xf4, 0x86, + 0x1e, 0xba, 0x83, 0xbe, 0x97, 0xa8, 0x17, 0x7f, 0x66, 0x17, 0x03, 0x87, 0x04, 0xe5, 0x33, 0x59, + 0xcb, 0xef, 0x81, 0x1e, 0x39, 0x87, 0x98, 0xcc, 0xcd, 0xfd, 0xa9, 0xe1, 0x73, 0x6c, 0xa1, 0x89, + 0xeb, 0xab, 0xc9, 0x56, 0xfe, 0x9a, 0xa0, 0xca, 0xfb, 0x04, 0xf4, 0xaa, 0xe0, 0xcd, 0x26, 0x7a, + 0x29, 0x0a, 0x43, 0xc2, 0xe8, 0xfc, 0x96, 0x62, 0x27, 0x7f, 0x90, 0x87, 0x66, 0x18, 0xa3, 0xb8, + 0x3d, 0xe4, 0xd7, 0xc6, 0xdc, 0xae, 0xc8, 0x44, 0x7e, 0xc1, 0xe3, 0x08, 0x22, 0xbf, 0x16, 0x98, + 0x22, 0x26, 0x73, 0xcb, 0x62, 0x8a, 0x42, 0xa3, 0x20, 0xd4, 0xe8, 0x4f, 0x28, 0x80, 0x09, 0x7a, + 0xed, 0x68, 0xdf, 0x35, 0xde, 0xaf, 0x69, 0xd7, 0x8b, 0xf4, 0xae, 0xb5, 0x1b, 0xaf, 0x6b, 0x9d, + 0x07, 0x53, 0xbd, 0xad, 0xa9, 0x63, 0x97, 0xb3, 0xc2, 0x4f, 0xfa, 0xb8, 0x8e, 0x75, 0x73, 0x42, + 0x36, 0xce, 0x25, 0x91, 0x8a, 0x4c, 0xd0, 0x81, 0x1d, 0x82, 0x33, 0x0f, 0x2f, 0x42, 0x0b, 0x80, + 0x55, 0xb9, 0xf4, 0x94, 0x1b, 0xa2, 0x58, 0xc7, 0x67, 0x72, 0xf3, 0x37, 0x68, 0x66, 0x28, 0x4e, + 0x6c, 0xfb, 0xb5, 0x91, 0x97, 0xc2, 0x70, 0xc9, 0x44, 0x16, 0xb2, 0x10, 0x1e, 0x3d, 0x58, 0x6b, + 0xa5, 0x07, 0x48, 0x5e, 0xcc, 0x8a, 0x60, 0xe4, 0xa5, 0x70, 0x05, 0x44, 0xdc, 0x0f, 0x96, 0xd3, + 0x98, 0xfd, 0xed, 0x7b, 0x32, 0xfd, 0x83, 0xf4, 0x0a, 0x00, 0xf2, 0x52, 0x5b, 0xdb, 0x8b, 0x2f, + 0xa1, 0x42, 0xe5, 0xe5, 0xa8, 0x3f, 0x1c, 0xd4, 0x0f, 0xe2, 0xcf, 0xab, 0xf2, 0xcf, 0xbd, 0x7a, + 0xa1, 0xb4, 0x96, 0xfd, 0x45, 0x9d, 0x5b, 0xd2, 0xfd, 0xc7, 0x53, 0x57, 0x8f, 0x92, 0x30, 0xb0, + 0x1d, 0xe0, 0x91, 0x7f, 0x6b, 0xa4, 0x33, 0xe6, 0x0f, 0x07, 0x23, 0x4d, 0xe5, 0xee, 0x46, 0xc5, + 0x1f, 0x4f, 0x54, 0xbc, 0xe4, 0x8f, 0x27, 0x94, 0x72, 0x77, 0x53, 0x24, 0x9e, 0xa8, 0x88, 0x46, + 0x82, 0xf1, 0x72, 0x77, 0x34, 0x16, 0x8a, 0xc4, 0x42, 0x89, 0x5d, 0x3e, 0xbd, 0x5f, 0x71, 0x37, + 0x12, 0x9b, 0xfc, 0x2f, 0xaf, 0x6a, 0x8a, 0x26, 0x76, 0x55, 0x37, 0x37, 0xee, 0x04, 0x01, 0x45, + 0xfd, 0x95, 0x9f, 0x56, 0xe5, 0x35, 0x5e, 0x9b, 0x6a, 0x69, 0x59, 0x93, 0xff, 0xe5, 0x0a, 0x05, + 0x17, 0x56, 0x6c, 0x6b, 0x6e, 0xdc, 0x59, 0x01, 0x01, 0xcc, 0xca, 0xb5, 0x83, 0x47, 0x53, 0x97, + 0xce, 0xd2, 0x20, 0x4f, 0xc4, 0x13, 0xd5, 0x70, 0x83, 0xb0, 0xe9, 0x46, 0x7c, 0x05, 0x4d, 0x8b, + 0x33, 0x3c, 0xd4, 0x2a, 0x8d, 0xfe, 0x5d, 0xf4, 0x05, 0xd3, 0x46, 0x55, 0xae, 0xf7, 0x66, 0x55, + 0x49, 0x4f, 0xb0, 0xd8, 0x8e, 0xc4, 0xb5, 0xe7, 0xf0, 0x21, 0xed, 0x5c, 0xcf, 0xe8, 0xd1, 0x9b, + 0x70, 0x4e, 0xd3, 0x46, 0x5a, 0xb5, 0x0b, 0x07, 0xb4, 0x8e, 0x73, 0x5a, 0x7f, 0x0f, 0x7c, 0x5e, + 0x7f, 0xa7, 0xb0, 0x6c, 0xa9, 0xd6, 0xb1, 0x6f, 0x54, 0x3d, 0xed, 0xcb, 0xea, 0x4f, 0xfc, 0x17, + 0x02, 0x9a, 0xad, 0x17, 0x6d, 0x0e, 0x87, 0x15, 0x25, 0xa8, 0x04, 0xb9, 0x23, 0x22, 0x04, 0x57, + 0xf5, 0xda, 0xc3, 0x48, 0x11, 0x6e, 0xbd, 0x9b, 0x69, 0x45, 0x45, 0x22, 0xd4, 0xa4, 0x94, 0xd3, + 0xf3, 0x1e, 0xc4, 0xa8, 0xeb, 0xeb, 0xd4, 0x3e, 0x6d, 0x87, 0x31, 0xe2, 0x0d, 0x95, 0xbe, 0x0f, + 0x3d, 0x95, 0x1e, 0xee, 0x4b, 0xbf, 0x37, 0x34, 0x7a, 0xfc, 0x43, 0xed, 0x5c, 0x8f, 0x76, 0xf9, + 0x08, 0x8c, 0x50, 0x3b, 0x7c, 0x28, 0xf3, 0xf6, 0x07, 0x4e, 0xc3, 0xb7, 0x1f, 0x87, 0xf8, 0x5f, + 0x05, 0x34, 0xdf, 0xa8, 0x49, 0x84, 0x1a, 0x43, 0xbb, 0xc9, 0xbd, 0xd5, 0xa6, 0x1d, 0x31, 0xc5, + 0xbf, 0x23, 0xd2, 0x18, 0xa4, 0x97, 0x12, 0x34, 0xb4, 0x75, 0x6e, 0x58, 0xe9, 0x55, 0x81, 0x9f, + 0x96, 0x01, 0x51, 0x91, 0xd8, 0x11, 0x53, 0xe2, 0x18, 0xa4, 0x1c, 0x22, 0xab, 0x51, 0x72, 0x26, + 0xf9, 0xa7, 0x46, 0xdf, 0xec, 0xd0, 0x5a, 0x47, 0x8c, 0xe9, 0x71, 0xd9, 0x19, 0xb1, 0x8c, 0xbc, + 0x71, 0x28, 0x39, 0x74, 0x08, 0xe6, 0x99, 0x3e, 0xf1, 0xa9, 0xd6, 0xb1, 0x2f, 0x35, 0xf0, 0x06, + 0xac, 0x14, 0x88, 0xd5, 0xd1, 0xe3, 0x1f, 0x1a, 0x39, 0xc2, 0x06, 0x87, 0x1e, 0x5c, 0xea, 0xcb, + 0x3d, 0x48, 0xf1, 0xa0, 0x80, 0xee, 0x8a, 0xef, 0x0c, 0x41, 0x82, 0xaa, 0x9f, 0x85, 0x12, 0x3b, + 0xd6, 0x46, 0x02, 0xfe, 0xc6, 0x8d, 0x89, 0x48, 0x0c, 0x0b, 0xcf, 0xc9, 0x84, 0x4d, 0x37, 0xa8, + 0xf2, 0x5a, 0xaf, 0x33, 0x94, 0x54, 0xa9, 0xdd, 0xbc, 0x91, 0x3e, 0x7a, 0x3e, 0xd5, 0xdb, 0x99, + 0xea, 0xbd, 0xa4, 0xf5, 0x5e, 0xd6, 0xfa, 0xde, 0xd4, 0xf6, 0x5e, 0xd4, 0x7d, 0x50, 0xf8, 0x01, + 0x41, 0x06, 0x5c, 0xe7, 0xbe, 0xc4, 0x53, 0x02, 0xba, 0xd3, 0x54, 0xbb, 0x71, 0x57, 0x3c, 0xa1, + 0x34, 0xd5, 0x47, 0x82, 0x71, 0x1a, 0xed, 0x9a, 0xc4, 0xf0, 0x73, 0x82, 0x91, 0x56, 0xc3, 0x58, + 0x76, 0x36, 0x6f, 0x53, 0x2a, 0xe2, 0xa4, 0xd8, 0xbd, 0x7e, 0x23, 0xde, 0x66, 0x4f, 0x9e, 0xaa, + 0xf5, 0x2b, 0x4d, 0x91, 0xf0, 0x46, 0x25, 0xa1, 0x3f, 0xa1, 0xa8, 0x8f, 0x04, 0xad, 0xa3, 0x84, + 0x21, 0x3a, 0x7d, 0x40, 0x3c, 0x2c, 0xa0, 0xb9, 0xa1, 0x86, 0x70, 0x24, 0xa6, 0xe8, 0xfd, 0xc5, + 0x39, 0xcc, 0xd2, 0xb8, 0x71, 0x24, 0xd3, 0x69, 0x2e, 0x38, 0xa9, 0x1c, 0x06, 0x6a, 0x0c, 0x8a, + 0xe5, 0x51, 0xcd, 0xf4, 0x9f, 0x4d, 0xf7, 0x1f, 0xcf, 0x1a, 0x4e, 0xae, 0xae, 0xc4, 0x3d, 0x02, + 0xba, 0x23, 0xb2, 0x73, 0x53, 0x24, 0xe1, 0x6f, 0xdc, 0x1c, 0x8e, 0x29, 0xfe, 0xe0, 0xae, 0x9a, + 0x48, 0x73, 0x38, 0x41, 0x6e, 0x6c, 0xa6, 0xc2, 0xea, 0xd9, 0xd5, 0x4b, 0x0f, 0x46, 0x76, 0x56, + 0x24, 0x70, 0x69, 0x45, 0x33, 0x14, 0x57, 0x04, 0x70, 0x79, 0x39, 0x08, 0x59, 0x37, 0x2d, 0x74, + 0xeb, 0xa1, 0xc4, 0x52, 0x47, 0x2f, 0x8f, 0xee, 0xef, 0xf6, 0xd9, 0xf5, 0x25, 0x7e, 0x26, 0xa0, + 0xbb, 0x9a, 0xfc, 0x2f, 0xf3, 0x15, 0xf5, 0x4a, 0x2c, 0xa0, 0x84, 0x13, 0x98, 0x8e, 0xa6, 0x90, + 0x91, 0xbc, 0x2e, 0xa8, 0x72, 0xb7, 0xe0, 0x75, 0x86, 0x93, 0x62, 0x58, 0x14, 0x9a, 0x87, 0x14, + 0xd5, 0x6b, 0xcb, 0x69, 0x11, 0xe5, 0x0c, 0x12, 0xf5, 0x8b, 0x8a, 0xb1, 0xd6, 0x61, 0x7d, 0x90, + 0x3a, 0x5b, 0x60, 0x1e, 0x22, 0x30, 0xa9, 0xbe, 0x73, 0xc0, 0x55, 0x5a, 0xc7, 0x09, 0x6d, 0x4f, + 0x6f, 0xaa, 0xef, 0x6d, 0xde, 0xdf, 0xdd, 0xe7, 0x3c, 0x1c, 0x51, 0x15, 0xd0, 0x2c, 0x4e, 0x52, + 0x90, 0x6a, 0x22, 0xd4, 0x8a, 0xc9, 0x7c, 0x7e, 0xa5, 0xca, 0xcf, 0x7b, 0x6d, 0x01, 0xa4, 0x1a, + 0x93, 0x44, 0x83, 0x99, 0x10, 0x81, 0x66, 0x9a, 0x83, 0xad, 0x5c, 0xd3, 0x0e, 0x1e, 0x4d, 0xde, + 0x38, 0x98, 0xbe, 0xa0, 0xfa, 0x6c, 0xbb, 0x16, 0xff, 0x54, 0x40, 0x73, 0x71, 0x2f, 0x0d, 0x21, + 0xac, 0x08, 0x30, 0x77, 0xa0, 0xa6, 0x48, 0x8b, 0xbf, 0x91, 0x8c, 0x6d, 0x2a, 0x19, 0x1b, 0x71, + 0xff, 0xf4, 0xe6, 0x02, 0x94, 0x5e, 0x64, 0x11, 0x20, 0xd9, 0x43, 0x19, 0xa2, 0x3b, 0x6b, 0x9f, + 0xb6, 0x9b, 0x36, 0x83, 0xcb, 0xfb, 0x68, 0x20, 0xcf, 0xde, 0xf7, 0xb5, 0xde, 0x8b, 0x98, 0xaf, + 0x62, 0x61, 0x25, 0xa1, 0xc4, 0x93, 0x83, 0x7d, 0xa9, 0xab, 0x17, 0xb5, 0x7d, 0x5d, 0x56, 0x0e, + 0x5a, 0xce, 0xc4, 0x6c, 0xae, 0xcf, 0x8b, 0x4d, 0xfc, 0x79, 0x6a, 0x1a, 0xbb, 0x22, 0x2f, 0xe7, + 0xcf, 0x53, 0x0b, 0xb9, 0xc3, 0x12, 0xc6, 0x8c, 0xf9, 0x50, 0x35, 0xb1, 0x44, 0x42, 0x55, 0xc6, + 0x39, 0x68, 0x3a, 0x53, 0x09, 0x67, 0x19, 0xe7, 0xa0, 0x22, 0xee, 0x04, 0x64, 0xb9, 0x07, 0x5c, + 0xc9, 0x25, 0x07, 0x9e, 0xc1, 0x02, 0x5f, 0x2c, 0xe0, 0x52, 0x03, 0x8b, 0xe9, 0xce, 0xeb, 0xa9, + 0xd6, 0x0b, 0x34, 0x0b, 0x30, 0x09, 0x79, 0xca, 0xe5, 0xec, 0xbd, 0x68, 0x93, 0x64, 0x7c, 0x26, + 0x11, 0x13, 0x7f, 0xa8, 0xca, 0xaf, 0x58, 0x13, 0x89, 0xef, 0xe0, 0xf3, 0x13, 0x65, 0xf9, 0x3d, + 0x10, 0xfb, 0x22, 0xc9, 0x5b, 0x74, 0xf8, 0x50, 0x72, 0xa4, 0x47, 0xeb, 0xbd, 0x98, 0x19, 0x38, + 0x0f, 0xf8, 0x18, 0x7d, 0xf5, 0x62, 0xfa, 0xc6, 0x87, 0x6e, 0x7a, 0x0c, 0xe2, 0xf4, 0x31, 0x77, + 0x7a, 0xb8, 0x2d, 0x39, 0x7c, 0x8d, 0x97, 0xc3, 0x6e, 0x87, 0x54, 0xe4, 0xff, 0x4a, 0x40, 0x77, + 0x6c, 0x6b, 0xde, 0xbe, 0x5d, 0x89, 0xf9, 0x68, 0xca, 0x60, 0x1f, 0x96, 0x31, 0xe4, 0x55, 0xe1, + 0xd4, 0xea, 0xa3, 0x82, 0x2a, 0x1f, 0x11, 0xbc, 0x76, 0x10, 0xd2, 0x6e, 0x28, 0xac, 0x60, 0xa9, + 0x86, 0x2b, 0x48, 0xba, 0x70, 0xba, 0xc3, 0x51, 0x07, 0x3b, 0x6e, 0x87, 0xe3, 0xd9, 0x94, 0x3e, + 0x39, 0xe1, 0xb6, 0xba, 0xf4, 0xa1, 0xfd, 0xc0, 0xbb, 0x99, 0x81, 0xf3, 0xb0, 0x1d, 0x6a, 0x1d, + 0x27, 0xf8, 0xae, 0xf4, 0xb9, 0xb8, 0x97, 0x2d, 0x5d, 0xea, 0xb3, 0x1b, 0x90, 0x78, 0x0e, 0x24, + 0xd2, 0x9a, 0x98, 0x3f, 0xa0, 0x6c, 0x6f, 0x6e, 0xdc, 0x44, 0x83, 0x6c, 0x87, 0xb0, 0xfc, 0x0c, + 0x90, 0x64, 0xbe, 0x53, 0xab, 0xb7, 0xab, 0x72, 0xc0, 0xeb, 0x0c, 0x25, 0xad, 0xc6, 0xf2, 0xa8, + 0x81, 0xd6, 0x55, 0x24, 0x8c, 0xca, 0x8a, 0xb8, 0x12, 0x28, 0xa7, 0xba, 0x19, 0x09, 0xab, 0x0a, + 0x9c, 0xe3, 0xae, 0x8f, 0x04, 0xdd, 0xa3, 0xad, 0xad, 0xda, 0xfe, 0xa1, 0x54, 0x6f, 0xab, 0xce, + 0x44, 0x3e, 0xe7, 0x4f, 0x88, 0x6d, 0x02, 0x2a, 0x8e, 0x07, 0xfc, 0xe1, 0xba, 0x70, 0x42, 0x89, + 0xb5, 0xf8, 0x1b, 0x4b, 0x66, 0x91, 0x91, 0xbd, 0xa8, 0xca, 0x2f, 0x78, 0x4d, 0x15, 0xd2, 0x3a, + 0xfc, 0xab, 0x22, 0x44, 0x7f, 0x96, 0x67, 0x11, 0x46, 0xea, 0x9d, 0xd6, 0xd4, 0xc7, 0x07, 0xe0, + 0x7b, 0xf8, 0xbf, 0x9e, 0x37, 0x74, 0x59, 0x82, 0x55, 0x83, 0x0b, 0xaa, 0x69, 0xf9, 0x97, 0x2d, + 0xf5, 0x99, 0x3a, 0xc7, 0xfb, 0xee, 0xac, 0x26, 0xff, 0xcb, 0x98, 0x49, 0xeb, 0x31, 0xdd, 0xc6, + 0x99, 0x89, 0x7f, 0x36, 0x19, 0xce, 0xaf, 0x55, 0xb9, 0xc1, 0x6b, 0x0b, 0x20, 0x6d, 0xc0, 0x38, + 0xc2, 0xc7, 0xc9, 0x8a, 0x28, 0x2b, 0x07, 0x51, 0x07, 0x28, 0xa1, 0x4a, 0x6b, 0xf7, 0xe1, 0xe4, + 0xa7, 0x6f, 0xf1, 0x38, 0xe1, 0x25, 0x9d, 0xb1, 0x9a, 0x8f, 0x2e, 0x5d, 0xea, 0xb3, 0xfd, 0x8c, + 0x78, 0x52, 0x40, 0xd3, 0x09, 0x8d, 0x6e, 0x8e, 0xe2, 0xc3, 0xfe, 0x73, 0x4a, 0x2c, 0x52, 0x32, + 0x67, 0xcc, 0x4c, 0xfd, 0x3f, 0x53, 0xe5, 0x4d, 0xde, 0xec, 0x76, 0x92, 0x0c, 0xd2, 0xb9, 0x39, + 0x5a, 0xb1, 0x3d, 0x16, 0x69, 0xaa, 0xd8, 0xad, 0xc4, 0x22, 0x74, 0xd3, 0xe3, 0x77, 0x86, 0x5b, + 0x23, 0x1d, 0xa9, 0x0f, 0xcf, 0xa6, 0x7a, 0x3b, 0xdd, 0xfc, 0x3e, 0x48, 0x96, 0xbb, 0xd3, 0x97, + 0xdd, 0x27, 0x1e, 0xdf, 0x1c, 0xb3, 0x52, 0x2c, 0x6f, 0xc7, 0x6c, 0x18, 0x0c, 0x96, 0xdc, 0x49, + 0x50, 0xa8, 0xa8, 0xf2, 0x36, 0xaf, 0x03, 0x88, 0xf4, 0x53, 0x6e, 0xbf, 0x08, 0xe2, 0x9a, 0x0a, + 0xff, 0x76, 0x22, 0x9a, 0x83, 0xc1, 0x72, 0x43, 0x49, 0xef, 0x38, 0x97, 0x3a, 0xd6, 0xa7, 0x53, + 0x9d, 0x75, 0xa1, 0xf1, 0xa6, 0xe1, 0xf0, 0x05, 0xf1, 0x5d, 0xac, 0xe8, 0x59, 0xab, 0xe8, 0x11, + 0xa5, 0x84, 0x0c, 0x91, 0x44, 0xbb, 0x75, 0x86, 0x72, 0x1c, 0x25, 0x3d, 0xb1, 0x80, 0x2e, 0x9e, + 0x1c, 0x3c, 0x67, 0x9c, 0x5b, 0x9c, 0x46, 0xe9, 0xfc, 0x11, 0xf1, 0x5f, 0x0b, 0xa8, 0xd4, 0xa6, + 0x76, 0xb5, 0x3f, 0xd4, 0xd8, 0x1c, 0x53, 0x4a, 0xee, 0x1a, 0x47, 0x36, 0xf1, 0x26, 0x55, 0xfe, + 0xb5, 0x37, 0x47, 0x27, 0xd2, 0x5a, 0x87, 0x89, 0x6c, 0x87, 0x7a, 0xca, 0xd9, 0x90, 0x8c, 0x54, + 0x3b, 0x7c, 0x08, 0x2e, 0xd6, 0x1d, 0x27, 0x93, 0xe3, 0x4b, 0xe2, 0x5e, 0x17, 0x72, 0xeb, 0xd5, + 0x6b, 0xa2, 0xcd, 0x59, 0x4a, 0x38, 0x39, 0x06, 0x94, 0x94, 0x12, 0xec, 0x7f, 0x2c, 0xa8, 0xf2, + 0x15, 0xc1, 0x3b, 0x26, 0xb8, 0xd4, 0xc5, 0x1f, 0x2c, 0x1a, 0xa2, 0xcd, 0x13, 0x3c, 0x5c, 0x94, + 0xad, 0xa9, 0xdf, 0xbc, 0xf8, 0x6b, 0x3c, 0x61, 0x8c, 0x39, 0x60, 0xf1, 0xaf, 0x04, 0x34, 0xc7, + 0x2c, 0xa2, 0x6b, 0xa2, 0xcd, 0xb0, 0xb1, 0xcc, 0x25, 0x53, 0xef, 0x15, 0x54, 0xf9, 0x4d, 0xc1, + 0xeb, 0x00, 0x24, 0xfd, 0xa1, 0x7d, 0xf9, 0x04, 0x36, 0x97, 0x40, 0xb4, 0xf9, 0x2b, 0xec, 0x2f, + 0x0e, 0xe3, 0xb2, 0x99, 0xd7, 0x3a, 0xa5, 0x09, 0xe6, 0x35, 0x2f, 0xc7, 0xbc, 0x18, 0x50, 0xf6, + 0xbc, 0x58, 0xf9, 0x04, 0xe6, 0xd5, 0xa4, 0x34, 0x7d, 0x7d, 0xf3, 0x62, 0xdf, 0xaf, 0xc2, 0xdb, + 0x22, 0xf2, 0x7b, 0xc7, 0xb0, 0xec, 0x48, 0xf3, 0x41, 0x67, 0xb2, 0xd4, 0xdb, 0x85, 0xb2, 0xb5, + 0x75, 0x29, 0xfa, 0x5f, 0x02, 0x5a, 0xe8, 0xf8, 0x8d, 0xdb, 0xc3, 0xf4, 0xf7, 0xb8, 0xe9, 0xea, + 0xa2, 0xcc, 0xe2, 0xbc, 0x67, 0x51, 0xc6, 0xe8, 0xf4, 0xe0, 0x9e, 0x21, 0xfd, 0x00, 0x7b, 0x73, + 0xf1, 0x7d, 0x32, 0x9f, 0x5d, 0x10, 0x2c, 0xf6, 0xb3, 0xd7, 0x84, 0x6f, 0xd0, 0x80, 0xf6, 0x45, + 0x75, 0x79, 0xcc, 0xeb, 0x9b, 0x04, 0xe0, 0xbe, 0x29, 0x1c, 0xb8, 0xaf, 0x48, 0x07, 0xc7, 0xfa, + 0xb4, 0xc5, 0xde, 0xf6, 0xaa, 0x90, 0xc3, 0xe0, 0xb6, 0xf1, 0xeb, 0x33, 0xb8, 0x7d, 0x51, 0x3d, + 0xc9, 0x9b, 0x5f, 0x12, 0x2c, 0x13, 0x6c, 0x2d, 0x6f, 0xfb, 0x04, 0x07, 0xd3, 0xdb, 0xaf, 0xbe, + 0x01, 0xd3, 0xdb, 0x17, 0xd5, 0x85, 0xde, 0x49, 0x25, 0xad, 0xef, 0x14, 0x94, 0x3d, 0x6e, 0xb1, + 0xc2, 0xfd, 0x9b, 0x31, 0xac, 0x70, 0xc7, 0xbf, 0x57, 0x56, 0x38, 0x7e, 0x26, 0x0e, 0x06, 0xb9, + 0xff, 0x67, 0x9c, 0x06, 0xb9, 0x0f, 0x6f, 0x1f, 0x83, 0x1c, 0x90, 0x52, 0x7d, 0xd9, 0x4f, 0xc6, + 0xb2, 0xcc, 0xbd, 0x37, 0xa6, 0x65, 0x2e, 0xb7, 0xea, 0xfb, 0x6d, 0x5a, 0xed, 0x86, 0xc6, 0xb0, + 0xda, 0xe5, 0x1e, 0xe9, 0x77, 0x6c, 0xd1, 0x3b, 0x35, 0x0e, 0x8b, 0x5e, 0xee, 0x09, 0x3c, 0xa5, + 0xca, 0x2b, 0x73, 0x5b, 0xfb, 0x16, 0xe4, 0xb6, 0xf6, 0xe5, 0xb6, 0xef, 0x75, 0xe5, 0xb4, 0xef, + 0x3d, 0xf7, 0x35, 0xdb, 0xf7, 0x28, 0x5b, 0xfe, 0xc9, 0x1d, 0x65, 0x3f, 0xb1, 0x37, 0xf5, 0xfd, + 0xed, 0x38, 0x4c, 0x7d, 0xbd, 0xdf, 0x47, 0x53, 0x1f, 0x93, 0xe2, 0x3f, 0xc9, 0x65, 0xf3, 0x3b, + 0x95, 0xdb, 0xe6, 0xf7, 0xeb, 0x6f, 0xd6, 0xe6, 0xf7, 0x45, 0x75, 0x91, 0x77, 0x32, 0x91, 0x89, + 0x97, 0x8b, 0x7e, 0xe0, 0xf6, 0xbf, 0xcd, 0xbc, 0xab, 0xc3, 0x34, 0xf6, 0xf4, 0xab, 0x82, 0x77, + 0x75, 0x70, 0x83, 0x6f, 0x43, 0x96, 0xf1, 0x2f, 0xb7, 0xbf, 0xc3, 0x26, 0xde, 0xac, 0x38, 0x9d, + 0x85, 0x3f, 0x9b, 0xa0, 0x59, 0xd1, 0xe2, 0x97, 0x51, 0x65, 0x78, 0x41, 0xcc, 0xe0, 0xac, 0x87, + 0xcc, 0x0b, 0xa2, 0x28, 0x87, 0xcb, 0x9e, 0xc9, 0x7a, 0x38, 0x73, 0xe2, 0xd6, 0xc3, 0x71, 0x9d, + 0x20, 0xc5, 0x1f, 0xf8, 0x09, 0xf2, 0x96, 0x83, 0x5d, 0xf2, 0x8e, 0x71, 0x58, 0x03, 0x4e, 0x7d, + 0x3f, 0xad, 0x96, 0x86, 0x34, 0xb2, 0x35, 0x5f, 0x0e, 0xe4, 0x34, 0x5f, 0x82, 0x91, 0xf0, 0x37, + 0xdf, 0x8e, 0xf9, 0x92, 0x57, 0xd4, 0x72, 0x58, 0x32, 0xbb, 0xb3, 0x2d, 0x99, 0x60, 0x3a, 0xdc, + 0xf9, 0x4d, 0x5b, 0x32, 0x8d, 0xe1, 0x15, 0x64, 0x19, 0x35, 0xdf, 0x77, 0x32, 0x6a, 0xce, 0x21, + 0x23, 0x6b, 0xf9, 0xf6, 0x8c, 0x9a, 0x86, 0x5c, 0x6f, 0x9b, 0x3c, 0x01, 0x03, 0xe7, 0x9d, 0xdf, + 0x23, 0x03, 0xe7, 0x7b, 0xce, 0x06, 0xce, 0x12, 0x46, 0x8d, 0xdf, 0x82, 0x81, 0xd3, 0xb4, 0x43, + 0x3a, 0x19, 0x3b, 0xaf, 0xe4, 0x34, 0x76, 0xde, 0x45, 0x86, 0x1b, 0xff, 0xb6, 0x8c, 0x9d, 0x06, + 0x7d, 0xfe, 0x24, 0x97, 0xdd, 0xf3, 0x3f, 0xe6, 0xb6, 0x7b, 0x96, 0x8e, 0x43, 0xd2, 0xbd, 0xfc, + 0xad, 0xda, 0x3d, 0x79, 0xb1, 0x90, 0xcb, 0x04, 0xfa, 0xf7, 0x63, 0x59, 0xff, 0xce, 0x7f, 0xaf, + 0xad, 0x7f, 0x86, 0x9c, 0x76, 0x32, 0x03, 0xfe, 0xfd, 0x58, 0x66, 0xc0, 0xf3, 0xdf, 0x6b, 0x33, + 0xa0, 0xe3, 0x04, 0xd9, 0x40, 0x44, 0x3f, 0x9a, 0xd4, 0x14, 0x09, 0x36, 0x37, 0x2a, 0x25, 0xf3, + 0xa9, 0x40, 0xca, 0x32, 0x73, 0xad, 0x23, 0xb5, 0x24, 0xc7, 0x77, 0x85, 0x2a, 0x7b, 0xbd, 0x14, + 0x5c, 0x72, 0xc3, 0xf0, 0x58, 0x40, 0xde, 0xcc, 0x8d, 0x4b, 0xe9, 0x0b, 0xc3, 0x58, 0xc3, 0x39, + 0x79, 0x9c, 0xda, 0xde, 0x28, 0xa4, 0xd8, 0x80, 0x26, 0xbf, 0xa4, 0x6c, 0xdb, 0x11, 0x89, 0xec, + 0x2c, 0x59, 0x40, 0xbe, 0x31, 0xd7, 0xe6, 0x2d, 0x3a, 0xae, 0x5e, 0x17, 0x09, 0x2a, 0xd5, 0x4b, + 0xb1, 0xa2, 0xc8, 0x1a, 0x48, 0x1e, 0xf6, 0x15, 0x37, 0x2d, 0x01, 0x1d, 0xca, 0x14, 0xbd, 0x8e, + 0x01, 0x8b, 0x51, 0xc8, 0xa9, 0x08, 0x56, 0x37, 0x92, 0x53, 0x71, 0x21, 0x31, 0xa6, 0xfd, 0x54, + 0x95, 0x57, 0x79, 0xb3, 0xaa, 0xa4, 0xe5, 0xc9, 0xe1, 0x76, 0x50, 0xed, 0x6a, 0x64, 0xb8, 0x44, + 0x85, 0x4e, 0xb5, 0xee, 0xbd, 0xa9, 0xa3, 0x97, 0xa1, 0xeb, 0xf2, 0xe4, 0xe0, 0x41, 0x8a, 0x5b, + 0x92, 0x12, 0xd1, 0x97, 0xd5, 0x89, 0x98, 0x16, 0xd0, 0x3c, 0xe5, 0xe5, 0xa8, 0x12, 0x0e, 0xfa, + 0xb7, 0x35, 0x2a, 0xf8, 0xc8, 0x59, 0x4f, 0x2d, 0x59, 0x35, 0xcd, 0x89, 0xc8, 0xf6, 0xed, 0x25, + 0xf7, 0xd2, 0x09, 0x67, 0xb3, 0x36, 0xc7, 0xd9, 0x90, 0x17, 0xce, 0x9b, 0xb3, 0x1f, 0xc9, 0x9f, + 0x1c, 0x79, 0x53, 0x6b, 0xef, 0x48, 0x0f, 0x5d, 0x00, 0x1d, 0x2c, 0xd5, 0x77, 0x0e, 0x53, 0x4b, + 0x4f, 0x9b, 0x3b, 0x1a, 0x09, 0xde, 0x1a, 0xe9, 0xc2, 0x4d, 0x43, 0xe1, 0x06, 0x37, 0x9f, 0xd5, + 0x51, 0xa7, 0x07, 0x5d, 0x86, 0x25, 0x47, 0x7a, 0xd2, 0x6f, 0x7d, 0x94, 0x3a, 0x74, 0xde, 0xbd, + 0x33, 0xd4, 0xd8, 0xc8, 0x42, 0xdf, 0x6a, 0xad, 0x23, 0x15, 0xcb, 0x96, 0xfa, 0x72, 0x0e, 0x40, + 0xbc, 0x2c, 0x20, 0x31, 0xac, 0xbc, 0x54, 0x1f, 0x09, 0x6e, 0x84, 0xcd, 0x03, 0x8c, 0x61, 0xf7, + 0x8d, 0x43, 0x74, 0x6d, 0x53, 0xe5, 0x9f, 0x7b, 0x6d, 0x1a, 0x4b, 0xd5, 0xd6, 0xb2, 0x5b, 0x23, + 0x5d, 0xa9, 0x63, 0x97, 0xa3, 0x91, 0xa0, 0x36, 0x3c, 0x94, 0xfe, 0xe0, 0x80, 0x76, 0xae, 0x27, + 0x79, 0xbd, 0x3d, 0x79, 0xfd, 0x80, 0x76, 0xf8, 0x50, 0xaa, 0x93, 0xae, 0x45, 0x8d, 0xcc, 0x46, + 0xee, 0x5e, 0xca, 0x22, 0x7e, 0xda, 0x74, 0xaf, 0x9b, 0xba, 0x73, 0x5b, 0x61, 0xa5, 0xf9, 0x40, + 0x05, 0x13, 0x37, 0x75, 0xb3, 0x87, 0x32, 0xef, 0xe6, 0xa1, 0x85, 0x8e, 0xdf, 0xb8, 0x3d, 0x4c, + 0xdd, 0xa1, 0x2f, 0x67, 0xea, 0xae, 0x7e, 0x40, 0x95, 0xcb, 0xa8, 0x7b, 0xaa, 0x5b, 0x7f, 0x49, + 0x63, 0x01, 0xfb, 0x9e, 0x64, 0x60, 0xf4, 0x1c, 0xcf, 0x43, 0xf7, 0xd0, 0x85, 0x8a, 0xc3, 0xc8, + 0x6a, 0x49, 0x90, 0xe9, 0x7a, 0x7a, 0x1e, 0x63, 0x76, 0xf9, 0x4d, 0xd6, 0xe7, 0x00, 0x5f, 0xc3, + 0x39, 0xf3, 0xb4, 0xc0, 0x1d, 0x16, 0x61, 0x51, 0xe1, 0x24, 0x6f, 0x9c, 0x16, 0xe3, 0xd0, 0x9c, + 0xfa, 0xab, 0xe8, 0xc9, 0x52, 0x40, 0xf0, 0x33, 0xb3, 0x52, 0xea, 0xca, 0x19, 0x70, 0xa8, 0x2f, + 0x4b, 0xbf, 0xd5, 0xaf, 0x75, 0x1e, 0xc4, 0x72, 0x8c, 0x84, 0x9a, 0xda, 0xd5, 0x1c, 0x4e, 0x84, + 0x3e, 0x6f, 0xdd, 0x13, 0x57, 0x1a, 0xb7, 0x67, 0x81, 0xf2, 0x6a, 0x35, 0x01, 0xd3, 0xeb, 0x17, + 0x1b, 0xc7, 0xd1, 0xaa, 0x97, 0x55, 0xb9, 0x19, 0xc5, 0xbd, 0xe3, 0xc1, 0x91, 0xf4, 0xa0, 0x03, + 0xd7, 0xa4, 0x7a, 0x2f, 0xa5, 0x2e, 0x9d, 0xb5, 0x0e, 0x19, 0x68, 0xc0, 0xcc, 0x4d, 0xfa, 0x97, + 0x3d, 0x7f, 0x2a, 0xa0, 0x45, 0xb9, 0xbf, 0x7a, 0x5b, 0xf0, 0x91, 0xe7, 0xdf, 0x2f, 0x46, 0xf3, + 0x36, 0xee, 0x0a, 0x07, 0x7e, 0xbc, 0xf2, 0xf9, 0x32, 0x57, 0x3e, 0x27, 0x72, 0x5d, 0xf9, 0x84, + 0xf0, 0x59, 0xd3, 0xee, 0xca, 0x67, 0xcd, 0x84, 0xaf, 0x7c, 0x1e, 0x73, 0xd7, 0xc8, 0xda, 0xf5, + 0x6b, 0x86, 0xfd, 0x83, 0x54, 0xe4, 0xbe, 0x08, 0x3a, 0xea, 0x74, 0x11, 0xd4, 0xa4, 0xca, 0x5b, + 0x2d, 0x17, 0x41, 0xeb, 0xbe, 0xda, 0x45, 0xd0, 0xad, 0x91, 0xb7, 0x52, 0xc7, 0xcf, 0xa4, 0x8e, + 0x76, 0x80, 0x32, 0xf2, 0xe3, 0xbd, 0xd0, 0xef, 0xc9, 0xbd, 0x50, 0xd7, 0x38, 0x3c, 0xb6, 0x89, + 0xfb, 0x71, 0x8e, 0xbb, 0x9f, 0x25, 0xe3, 0xbf, 0xfb, 0x49, 0xc4, 0x9a, 0x73, 0x5e, 0xfd, 0x9c, + 0x1c, 0xd3, 0x61, 0x3b, 0xa0, 0xca, 0x2f, 0x3a, 0x5f, 0xef, 0xac, 0xfa, 0xca, 0xd7, 0x3b, 0x64, + 0x84, 0x8e, 0xb7, 0x3b, 0x47, 0xc6, 0xe5, 0xaf, 0x4d, 0x2e, 0xcb, 0x72, 0xde, 0xe0, 0x54, 0xe4, + 0xbe, 0xc1, 0xe1, 0x52, 0x44, 0x90, 0xf1, 0xfc, 0x78, 0xa1, 0xf3, 0xe3, 0x85, 0xce, 0x38, 0x2f, + 0x74, 0x4c, 0x9a, 0xe4, 0xd4, 0x6f, 0xe0, 0xc6, 0x62, 0xda, 0x44, 0x6f, 0x2c, 0xc6, 0x75, 0xe5, + 0x30, 0xfd, 0x07, 0x7e, 0xe5, 0xf0, 0xef, 0x1c, 0xae, 0x1c, 0x66, 0x90, 0x79, 0xdf, 0x9e, 0x97, + 0x0a, 0x97, 0x72, 0x5e, 0x2a, 0x40, 0xd6, 0x9a, 0x30, 0x16, 0xd7, 0x39, 0x2e, 0x15, 0x6a, 0xc6, + 0x77, 0xa9, 0xf0, 0x8d, 0xdc, 0x28, 0x88, 0xdf, 0xdb, 0x1b, 0x85, 0x3b, 0xbe, 0x87, 0x37, 0x0a, + 0xe7, 0x40, 0x55, 0xc6, 0x15, 0x1b, 0x13, 0xfe, 0x58, 0xa2, 0x39, 0x4a, 0x86, 0x0a, 0x77, 0x47, + 0x09, 0x55, 0x56, 0xbc, 0x36, 0xd5, 0xdc, 0x40, 0xe3, 0x50, 0xca, 0x0f, 0x53, 0xeb, 0x7e, 0x33, + 0x39, 0x38, 0x44, 0x64, 0x17, 0xde, 0x5f, 0x26, 0x3c, 0x50, 0x9b, 0x0f, 0x8a, 0xff, 0x4a, 0x40, + 0x25, 0x7c, 0x31, 0xcd, 0x6c, 0xa4, 0x70, 0xee, 0xe7, 0x07, 0x04, 0x55, 0xfe, 0x03, 0xaf, 0x23, + 0x94, 0xf4, 0xa2, 0x79, 0xcc, 0x15, 0x71, 0x5a, 0x69, 0xc5, 0x30, 0x4c, 0x40, 0xeb, 0x1e, 0xa0, + 0x79, 0x98, 0xbe, 0xcc, 0x24, 0x1c, 0xc7, 0xf1, 0xbd, 0x77, 0x52, 0x7f, 0x6f, 0x2c, 0x27, 0xf5, + 0xdb, 0xe6, 0x0e, 0xa7, 0xe4, 0x76, 0xbc, 0xc3, 0xb9, 0xeb, 0x87, 0x78, 0x87, 0x53, 0xfa, 0x43, + 0xbf, 0xc3, 0x99, 0xfb, 0x83, 0xb8, 0xc3, 0xe1, 0x2e, 0x58, 0xe6, 0x7d, 0xa3, 0x17, 0x2c, 0x63, + 0x5e, 0x77, 0xcc, 0xff, 0x81, 0x5f, 0x77, 0x2c, 0xf8, 0x1e, 0x5f, 0x77, 0xfc, 0x5c, 0x95, 0x37, + 0xa3, 0x8d, 0xde, 0x9c, 0xf6, 0x47, 0x69, 0xbe, 0x76, 0xb8, 0x2b, 0xd5, 0x77, 0xde, 0x52, 0x0f, + 0x86, 0x26, 0xb3, 0x79, 0x56, 0xbf, 0xe0, 0x38, 0x97, 0x87, 0xe6, 0x3b, 0xf4, 0xfa, 0xfb, 0x73, + 0xbd, 0x01, 0x88, 0x4b, 0xf7, 0xb4, 0x7d, 0x6f, 0xaf, 0x37, 0xde, 0xcf, 0x43, 0x0b, 0x60, 0xb3, + 0x72, 0x34, 0x3f, 0xff, 0xc2, 0x7a, 0xb3, 0xf1, 0x98, 0x2a, 0x97, 0xf0, 0xe7, 0xd1, 0x29, 0xa6, + 0x28, 0x46, 0xe3, 0x7f, 0x84, 0xfb, 0x0f, 0x42, 0x76, 0x40, 0xb3, 0x3f, 0x15, 0x54, 0xf9, 0x8f, + 0x05, 0x23, 0xa4, 0xd9, 0xc7, 0x02, 0x1f, 0xd3, 0xcc, 0x01, 0x8d, 0x5f, 0x2e, 0xc0, 0x99, 0x36, + 0x70, 0x3d, 0x39, 0x74, 0x08, 0x2b, 0x4f, 0x24, 0x07, 0xae, 0xd5, 0xfb, 0x51, 0xeb, 0xef, 0xcc, + 0xbc, 0xd3, 0x9e, 0xee, 0x69, 0xd3, 0x83, 0xf3, 0x60, 0xd6, 0x7b, 0x73, 0xc0, 0x94, 0x99, 0xff, + 0x93, 0x0f, 0xe1, 0x9d, 0x6d, 0xba, 0xa7, 0xad, 0x46, 0x86, 0xab, 0x6c, 0x53, 0xf0, 0xb4, 0xa7, + 0x55, 0x79, 0x0d, 0x5a, 0xe5, 0x1d, 0x03, 0xc9, 0xd2, 0x9d, 0x0e, 0x13, 0xe4, 0xb9, 0xcb, 0xf3, + 0x5e, 0x1e, 0x5a, 0xe8, 0xd8, 0xcf, 0xed, 0x92, 0x49, 0xea, 0xcb, 0x71, 0x15, 0xa1, 0x73, 0xe0, + 0xaa, 0x7b, 0xf8, 0xc0, 0x6b, 0xdf, 0x5b, 0xc6, 0xba, 0xee, 0x42, 0x73, 0xd7, 0x28, 0x89, 0xef, + 0x82, 0xab, 0x5a, 0x2c, 0x77, 0x86, 0x24, 0xca, 0x95, 0x71, 0x65, 0xf8, 0x4c, 0x8d, 0x0c, 0x33, + 0x48, 0x0e, 0x1d, 0x61, 0x85, 0x24, 0x6d, 0x72, 0x72, 0xf8, 0x3c, 0xcb, 0xd2, 0x0b, 0xff, 0xa6, + 0x8e, 0x5f, 0x2b, 0x77, 0x6b, 0xe7, 0x0e, 0xa6, 0xdf, 0xb8, 0xc8, 0x6e, 0x27, 0xb2, 0xda, 0x71, + 0x57, 0x81, 0x6b, 0x54, 0xb9, 0x16, 0x55, 0x7b, 0x73, 0x4d, 0x5b, 0xba, 0x07, 0xa2, 0x08, 0x39, + 0x2c, 0x1b, 0x0d, 0x59, 0xf7, 0xdf, 0xf3, 0xd0, 0x3c, 0xfb, 0x4e, 0x7e, 0x7f, 0xb6, 0x0e, 0x3d, + 0xa6, 0xdd, 0xf7, 0x95, 0xc2, 0x59, 0x9e, 0x90, 0x9c, 0x2b, 0x25, 0xcd, 0x77, 0x58, 0x6f, 0xa7, + 0x00, 0x52, 0x17, 0xf3, 0xd1, 0xbc, 0xb5, 0xa1, 0xb8, 0x33, 0xdf, 0x84, 0xad, 0x7c, 0x53, 0xaf, + 0xca, 0xab, 0x79, 0xbe, 0x79, 0xd4, 0x7a, 0xc1, 0xfc, 0xe5, 0x23, 0xf0, 0x3d, 0x6f, 0x8d, 0xc0, + 0xb7, 0x52, 0x95, 0x97, 0xf3, 0x6e, 0xe9, 0xf7, 0x39, 0x7f, 0x6f, 0x0c, 0xe7, 0xf4, 0xba, 0xec, + 0x60, 0x7c, 0x95, 0xaa, 0x7c, 0xaf, 0x11, 0x84, 0xa2, 0xd4, 0xaa, 0x72, 0x39, 0xc6, 0xe5, 0xab, + 0xcb, 0x8e, 0xcb, 0x07, 0x5d, 0x31, 0xfb, 0xae, 0xb5, 0x2b, 0xc7, 0x10, 0x7d, 0x55, 0xe7, 0x04, + 0x55, 0x3e, 0x23, 0xa0, 0x93, 0x82, 0x37, 0xe7, 0x52, 0x48, 0xbf, 0x75, 0x58, 0xdb, 0x6f, 0x29, + 0x32, 0xdc, 0x3f, 0xb9, 0xd0, 0x7c, 0x87, 0xf1, 0xdd, 0x1e, 0x62, 0xe2, 0x79, 0x53, 0x98, 0xb8, 0xf1, 0x8b, 0x89, 0xf9, 0xaa, 0x5c, 0x4a, 0xc5, 0x84, 0x68, 0x0a, 0x1d, 0xc7, 0x47, 0xbe, 0xa4, - 0x99, 0x55, 0x72, 0x63, 0x68, 0xc2, 0xec, 0xf9, 0x91, 0xcb, 0xe6, 0x81, 0xea, 0x46, 0x12, 0xe6, - 0x90, 0x31, 0xe8, 0x33, 0x68, 0x92, 0xc2, 0xbb, 0x28, 0x90, 0x0c, 0xfa, 0xb4, 0x48, 0x9a, 0xcb, - 0x87, 0x32, 0xd1, 0xef, 0xbb, 0xe1, 0xf0, 0xe5, 0xa3, 0x40, 0xe6, 0x0b, 0x10, 0xd7, 0xb7, 0x70, - 0x01, 0x92, 0x37, 0xd1, 0x0b, 0x90, 0x27, 0xb9, 0x1d, 0x35, 0xdf, 0xa0, 0x0c, 0x63, 0x47, 0x9d, - 0x99, 0x63, 0x5f, 0xb4, 0xf7, 0xf5, 0x62, 0x48, 0xfb, 0x69, 0x47, 0xfb, 0xe1, 0xe8, 0x6c, 0x97, - 0x5c, 0x68, 0xfa, 0x46, 0x25, 0xd6, 0x12, 0x82, 0x3c, 0xfe, 0xc4, 0x5b, 0x73, 0x25, 0x2a, 0x8c, + 0x99, 0x55, 0x72, 0x63, 0x68, 0xc2, 0xec, 0xf9, 0xa1, 0xcb, 0xe6, 0x81, 0xea, 0x46, 0x12, 0xe6, + 0x90, 0x31, 0xe8, 0x53, 0x68, 0x92, 0xc2, 0xbb, 0x28, 0x90, 0x0c, 0xfa, 0xb4, 0x48, 0x9a, 0xcb, + 0x87, 0x32, 0xd1, 0xef, 0xbb, 0xe1, 0xf0, 0xe5, 0xa3, 0x40, 0xe6, 0x0b, 0x10, 0xd7, 0x37, 0x70, + 0x01, 0x92, 0x37, 0xd1, 0x0b, 0x90, 0xc7, 0xb9, 0x1d, 0x35, 0xdf, 0xa0, 0x0c, 0x63, 0x47, 0x9d, + 0x99, 0x63, 0x5f, 0xb4, 0xf7, 0xf5, 0x62, 0x48, 0xfb, 0x71, 0x47, 0xfb, 0xfe, 0xe8, 0x6c, 0x17, + 0x5d, 0x68, 0xfa, 0x46, 0x25, 0xd6, 0x12, 0x82, 0x3c, 0xfe, 0xc4, 0x5b, 0x73, 0x25, 0x2a, 0x8c, 0x45, 0x1a, 0x21, 0x97, 0xbe, 0xc0, 0xbd, 0xd6, 0x61, 0x85, 0x92, 0x18, 0x87, 0x16, 0x6e, 0x5c, 0xc2, 0x32, 0xea, 0xb3, 0x5a, 0x71, 0x05, 0x9a, 0x84, 0xff, 0xd6, 0x09, 0x99, 0x44, 0x55, 0xa7, 0x45, 0xd2, 0x74, 0xbe, 0xa9, 0xbb, 0xae, 0xd6, 0x47, 0x2b, 0xc4, 0x72, 0x94, 0xe7, 0x8f, 0x85, 0x29, 0x9d, 0x12, 0x62, 0xc0, 0xbf, 0xa5, 0x19, 0x26, 0x78, 0x7f, 0x2c, 0xec, 0xc3, 0xc5, 0xe2, - 0x6a, 0x92, 0x45, 0x31, 0x10, 0x0b, 0x11, 0x64, 0x1a, 0x61, 0x59, 0xef, 0xf5, 0xf2, 0xe5, 0xe6, - 0x81, 0xa6, 0xba, 0xbb, 0x33, 0xb7, 0x20, 0x7f, 0x22, 0x03, 0xa8, 0xf2, 0xaa, 0xf2, 0x83, 0xe8, - 0x7e, 0x6f, 0x36, 0x0a, 0xcc, 0x0d, 0xa9, 0xf0, 0xcd, 0xb8, 0xd0, 0x9c, 0x35, 0x4a, 0x82, 0x03, - 0xd5, 0x05, 0xc0, 0x63, 0x68, 0x72, 0xa0, 0x31, 0xd2, 0x1c, 0xd4, 0xf7, 0xe7, 0x05, 0x10, 0x59, - 0x09, 0xca, 0xa4, 0xa2, 0xe4, 0xd0, 0x11, 0x6e, 0x43, 0x9c, 0xe1, 0xf2, 0xb1, 0x2a, 0xf1, 0x71, + 0x6a, 0x92, 0x45, 0x31, 0x10, 0x0b, 0x11, 0x64, 0x1a, 0x61, 0x59, 0xef, 0xf6, 0xf2, 0xe5, 0xe6, + 0x81, 0xa6, 0xba, 0xbb, 0x33, 0x37, 0x21, 0x7f, 0x22, 0x03, 0xa8, 0xf2, 0xaa, 0xf2, 0xfd, 0xe8, + 0x5e, 0x6f, 0x36, 0x0a, 0xcc, 0x0d, 0xa9, 0xf0, 0xcd, 0xb8, 0xd0, 0x9c, 0x35, 0x4a, 0x82, 0x03, + 0xd5, 0x05, 0xc0, 0x23, 0x68, 0x72, 0xa0, 0x31, 0xd2, 0x1c, 0xd4, 0xf7, 0xe7, 0x05, 0x10, 0x59, + 0x09, 0xca, 0xa4, 0xa2, 0xe4, 0xd0, 0x11, 0x6e, 0x43, 0x9c, 0xe1, 0xf2, 0xb1, 0x2a, 0xf1, 0x51, 0x54, 0xe4, 0x0f, 0x90, 0x2b, 0x6c, 0x1d, 0x5f, 0x24, 0x8f, 0xb4, 0x51, 0x2a, 0x4d, 0x49, 0x0e, 0x1d, 0xd1, 0xf6, 0xf7, 0x65, 0x06, 0xf6, 0xd4, 0xd5, 0xfa, 0x8c, 0x72, 0x71, 0x17, 0x2c, 0x13, - 0x09, 0x2b, 0x0b, 0x68, 0x7b, 0x49, 0x95, 0x65, 0xaf, 0x5e, 0x28, 0x3d, 0xec, 0x7f, 0x25, 0xee, + 0x09, 0x2b, 0x0b, 0x68, 0x7b, 0x41, 0x95, 0x65, 0xaf, 0x5e, 0x28, 0x3d, 0xe8, 0x7f, 0x29, 0xee, 0xe6, 0x27, 0x02, 0x4e, 0x6e, 0x44, 0xed, 0x1d, 0x6d, 0xed, 0xd4, 0x5a, 0x47, 0x92, 0x83, 0x43, - 0x94, 0xc0, 0xca, 0xf5, 0x68, 0xa8, 0x5f, 0x56, 0xcf, 0x89, 0xe1, 0x4d, 0x16, 0xca, 0x7d, 0x45, - 0x46, 0x72, 0x56, 0xbd, 0xe7, 0xaa, 0xdf, 0xa8, 0xf2, 0x8b, 0xe8, 0x57, 0x5e, 0x07, 0x74, 0xb0, - 0xe8, 0x9e, 0x26, 0x2a, 0x21, 0xd1, 0x3d, 0x99, 0xaf, 0x28, 0x9b, 0xfe, 0xe7, 0x82, 0x31, 0x9f, - 0xcf, 0x05, 0xbd, 0x7f, 0xcf, 0x3f, 0x74, 0xa1, 0xbb, 0x2d, 0x7d, 0xdf, 0x19, 0x62, 0xc3, 0x67, - 0xda, 0xe1, 0x16, 0x5a, 0x82, 0xcf, 0x9b, 0x09, 0x6d, 0x7c, 0x1b, 0xdb, 0x63, 0xaa, 0xfc, 0x30, + 0x94, 0xc0, 0xca, 0xf5, 0x68, 0xa8, 0x5f, 0x54, 0xcf, 0x89, 0xe1, 0x4d, 0x16, 0xca, 0x7d, 0x45, + 0x46, 0x72, 0x56, 0xbd, 0xe7, 0xaa, 0x5f, 0xa9, 0xf2, 0xf3, 0xe8, 0x17, 0x5e, 0x07, 0x74, 0xb0, + 0xe8, 0x9e, 0x26, 0x2a, 0x21, 0xd1, 0x3d, 0x99, 0xaf, 0x28, 0x9b, 0xfe, 0x67, 0x82, 0x31, 0x9f, + 0xcf, 0x04, 0xbd, 0x7f, 0xcf, 0xbf, 0x74, 0xa1, 0x3b, 0x2d, 0x7d, 0xdf, 0x1e, 0x62, 0xc3, 0x67, + 0xda, 0xe1, 0x16, 0x5a, 0x82, 0xcf, 0x9b, 0x09, 0x6d, 0x7c, 0x1b, 0xdb, 0x23, 0xaa, 0xfc, 0x20, 0x5a, 0xee, 0x75, 0x42, 0x89, 0x54, 0xe2, 0x84, 0x6f, 0xcf, 0x7e, 0x17, 0x9a, 0xc9, 0xec, 0xa0, 0x10, 0xeb, 0x16, 0x33, 0xf8, 0x72, 0x94, 0x1f, 0x36, 0x98, 0x7b, 0xa1, 0x2a, 0xcf, 0xf3, 0x92, 0x02, 0x69, 0x16, 0xbb, 0xaf, 0x75, 0x37, 0x90, 0x8c, 0xd6, 0xc0, 0xda, 0xa4, 0x0e, 0x70, 0xd1, - 0x80, 0xb9, 0x0d, 0xd0, 0xc8, 0x70, 0x81, 0x8b, 0xa4, 0x62, 0xad, 0xf7, 0x8a, 0x76, 0xe6, 0x0c, - 0xf3, 0x68, 0x87, 0x52, 0xf1, 0x05, 0x34, 0x53, 0xbf, 0xe9, 0xa3, 0xf2, 0x9f, 0x91, 0x6a, 0xb9, + 0x80, 0xb9, 0x0d, 0xd0, 0xc8, 0x70, 0x81, 0x8b, 0xa4, 0x62, 0xad, 0xf7, 0xb2, 0x76, 0xfa, 0x34, + 0xf3, 0x68, 0x87, 0x52, 0xf1, 0x39, 0x34, 0x53, 0xbf, 0xe9, 0xa3, 0xf2, 0x9f, 0x91, 0x6a, 0xb9, 0x2a, 0x2f, 0xf6, 0x5a, 0x6b, 0xb3, 0x47, 0x00, 0x71, 0x89, 0x7d, 0x56, 0xc0, 0x2a, 0x2c, 0xf8, - 0xd0, 0x62, 0xaf, 0x75, 0x76, 0xd9, 0x5d, 0x50, 0xee, 0xfd, 0xe7, 0x02, 0x2a, 0x59, 0xa3, 0x24, - 0x4c, 0xe0, 0xdf, 0x2b, 0xff, 0x56, 0x55, 0xab, 0xf2, 0xd3, 0x68, 0xa5, 0xd7, 0x71, 0x54, 0xd2, - 0xbd, 0xb0, 0xac, 0xe6, 0xe9, 0xc4, 0x79, 0x4e, 0xf2, 0xfc, 0x53, 0x17, 0xba, 0xc7, 0xa6, 0xfd, - 0x9d, 0xc1, 0x2a, 0x9b, 0x4c, 0xac, 0x72, 0x6f, 0x36, 0xab, 0x58, 0x56, 0x76, 0x7c, 0xcc, 0x42, + 0xd0, 0x62, 0xaf, 0x75, 0x76, 0xd9, 0x5d, 0x50, 0xee, 0xfd, 0xf7, 0x02, 0x2a, 0x59, 0xa3, 0x24, + 0x4c, 0xe0, 0xdf, 0x29, 0xff, 0x56, 0x55, 0xab, 0xf2, 0x93, 0x68, 0xa5, 0xd7, 0x71, 0x54, 0xd2, + 0xdd, 0xb0, 0xac, 0xe6, 0xe9, 0xc4, 0x79, 0x4e, 0xf2, 0xfc, 0x5b, 0x17, 0xba, 0xcb, 0xa6, 0xfd, + 0xed, 0xc1, 0x2a, 0x9b, 0x4c, 0xac, 0x72, 0x77, 0x36, 0xab, 0x58, 0x56, 0x76, 0x7c, 0xcc, 0x42, 0xd3, 0x39, 0x38, 0xa3, 0x45, 0x9a, 0x9b, 0x03, 0xaf, 0x9e, 0xb4, 0x80, 0x90, 0x8f, 0x90, 0x2f, 0x61, 0x15, 0x83, 0xea, 0x85, 0xf1, 0x52, 0x7d, 0x0d, 0x42, 0xf0, 0x17, 0xd9, 0x40, 0x01, 0x91, - 0xf7, 0xa9, 0xb2, 0xdb, 0xcb, 0x15, 0x4b, 0x22, 0xdf, 0x94, 0xf2, 0x19, 0x57, 0x2f, 0x3e, 0x83, + 0xf7, 0xa8, 0xb2, 0xdb, 0xcb, 0x15, 0x4b, 0x22, 0xdf, 0x94, 0xf2, 0x19, 0x57, 0x2f, 0x3e, 0x85, 0xa6, 0xc0, 0x2f, 0x9e, 0x69, 0x48, 0x00, 0x78, 0xbe, 0x9c, 0x8d, 0x80, 0xb2, 0x09, 0x5f, 0x55, - 0x85, 0xd9, 0x1a, 0x95, 0x7a, 0xb9, 0xc9, 0x98, 0xc7, 0xeb, 0xf9, 0x6b, 0x81, 0xec, 0x67, 0x35, - 0x98, 0x92, 0x01, 0xe8, 0xfb, 0xe5, 0x07, 0xba, 0x70, 0x0e, 0x63, 0x62, 0x9b, 0x0a, 0xf9, 0x90, - 0x1b, 0x26, 0x62, 0x62, 0x85, 0x3f, 0x87, 0x3d, 0xc3, 0xdc, 0xf4, 0xce, 0x60, 0x84, 0x75, 0x26, + 0x85, 0xd9, 0x1a, 0x95, 0x7a, 0xb9, 0xc9, 0x98, 0xc7, 0xeb, 0xf9, 0x73, 0x81, 0xec, 0x67, 0x35, + 0x98, 0x92, 0x01, 0xe8, 0xbb, 0xe5, 0x07, 0xba, 0x70, 0x0e, 0x63, 0x62, 0x9b, 0x0a, 0xf9, 0x90, + 0x1b, 0x26, 0x62, 0x62, 0x85, 0x3f, 0x86, 0x3d, 0xc3, 0xdc, 0xf4, 0xf6, 0x60, 0x84, 0x75, 0x26, 0x46, 0x28, 0xb5, 0x32, 0x02, 0x5b, 0xc1, 0x09, 0x6f, 0x17, 0x76, 0xd8, 0x60, 0xdb, 0x85, 0x15, - 0x93, 0x9e, 0x3f, 0xb8, 0x50, 0xe1, 0x0b, 0x91, 0x30, 0xa8, 0x81, 0x4b, 0xd1, 0xa4, 0xdd, 0xf8, - 0x6f, 0x46, 0x03, 0x25, 0xaa, 0x3c, 0xdb, 0x4b, 0x8b, 0xa4, 0x29, 0x5a, 0xf7, 0x40, 0xfa, 0xe8, - 0x25, 0xad, 0x6b, 0x08, 0xeb, 0x70, 0x50, 0x28, 0xae, 0x40, 0xf9, 0xf8, 0x2f, 0x1e, 0x67, 0x3c, - 0xcd, 0x4f, 0xd7, 0xdb, 0xb0, 0x8d, 0x05, 0x43, 0x8b, 0x55, 0xa8, 0x10, 0xff, 0x4b, 0xb8, 0x65, - 0x7c, 0x74, 0xae, 0xc3, 0x8b, 0x4f, 0xa2, 0x22, 0xfc, 0x37, 0x30, 0x49, 0xfe, 0xb8, 0x1a, 0x1b, - 0x0d, 0xc4, 0x0d, 0xa8, 0x28, 0xde, 0xbc, 0x2d, 0xac, 0x24, 0xd6, 0x37, 0x37, 0x51, 0x3f, 0xe0, - 0x65, 0xaa, 0xbc, 0xc4, 0x6b, 0x94, 0x4a, 0xf7, 0x66, 0x06, 0x2e, 0x18, 0xc3, 0x26, 0x7f, 0xa4, - 0x7b, 0xda, 0xb4, 0xbe, 0xc3, 0xe9, 0x9b, 0x47, 0x68, 0x30, 0x58, 0x03, 0xba, 0x0a, 0x4f, 0x19, - 0xcd, 0xf5, 0xea, 0x38, 0xe4, 0xa6, 0x4c, 0x99, 0x6e, 0x68, 0x12, 0x9a, 0x41, 0x16, 0x85, 0x9e, - 0x1f, 0x08, 0xa6, 0x1f, 0xb7, 0x1a, 0x78, 0xe6, 0x66, 0x1b, 0x46, 0x93, 0x43, 0x47, 0xd8, 0x49, - 0x8f, 0x3f, 0xe2, 0x3d, 0x83, 0xa6, 0xd0, 0x1f, 0x9c, 0xb4, 0x01, 0x14, 0x70, 0xe5, 0x52, 0x31, - 0x7d, 0x31, 0xc1, 0x92, 0x05, 0x19, 0x55, 0xe2, 0x8b, 0x48, 0xa4, 0x3f, 0x6b, 0x39, 0x8d, 0x1a, - 0x16, 0x82, 0x9c, 0x65, 0x6c, 0xaa, 0x25, 0x91, 0x1e, 0x2a, 0x88, 0x4a, 0x4d, 0x89, 0xcf, 0x06, - 0x4e, 0xac, 0x43, 0xd3, 0x68, 0xe9, 0x16, 0x25, 0x16, 0x37, 0x54, 0x75, 0x72, 0xa0, 0xc8, 0xaa, - 0x62, 0x83, 0x4c, 0x77, 0x76, 0xa4, 0x7a, 0x2f, 0xfb, 0xb2, 0x6a, 0xc5, 0x67, 0x74, 0x24, 0x6d, - 0xd8, 0x48, 0xd3, 0x28, 0x78, 0xf8, 0x4c, 0x8c, 0x1b, 0x36, 0xea, 0xa3, 0x22, 0xa9, 0xc8, 0xd3, - 0xd7, 0x86, 0xd3, 0xc3, 0x67, 0x7c, 0x46, 0x35, 0x87, 0x2b, 0xa2, 0x33, 0x4f, 0xb2, 0xe2, 0x8a, - 0xa8, 0xcd, 0x6c, 0x18, 0x44, 0x59, 0xf6, 0xf1, 0x55, 0xe2, 0x41, 0x01, 0x4d, 0xa5, 0xbf, 0xe1, - 0x30, 0x4b, 0xd3, 0x1b, 0x34, 0xa8, 0x72, 0xd0, 0x6b, 0xae, 0x91, 0xe8, 0x61, 0x9d, 0x66, 0x56, - 0xf0, 0x35, 0x87, 0xb1, 0xee, 0xe2, 0xce, 0xdc, 0x3a, 0x9c, 0x39, 0xd7, 0x95, 0x1c, 0xec, 0x73, - 0x93, 0xa8, 0x5f, 0xb8, 0x88, 0x26, 0x2b, 0x1c, 0xec, 0x73, 0xd7, 0x05, 0x49, 0xac, 0xd2, 0xd1, - 0x13, 0x1f, 0xa5, 0x6f, 0xf6, 0xe3, 0x02, 0x79, 0x5b, 0x38, 0x12, 0x6b, 0xf2, 0x37, 0xba, 0x21, - 0xa1, 0xd2, 0x62, 0x9f, 0xf9, 0x1b, 0x62, 0x08, 0x15, 0x36, 0x46, 0x02, 0xe0, 0xc5, 0x0b, 0xc9, - 0x10, 0xd6, 0xa9, 0xf2, 0xb3, 0x5e, 0xbd, 0x50, 0x7a, 0x0a, 0xcb, 0x5a, 0x4e, 0xe8, 0x97, 0x35, - 0xec, 0x54, 0xe0, 0x15, 0x0c, 0x26, 0xe7, 0x33, 0x67, 0xd2, 0x43, 0x17, 0xb5, 0x8e, 0x0f, 0x35, - 0xb5, 0x4b, 0xa7, 0x53, 0x28, 0x81, 0xb1, 0x2f, 0xf6, 0xe9, 0x3d, 0x89, 0xbf, 0x44, 0xc5, 0xf4, - 0xdb, 0x6b, 0x95, 0x16, 0xa5, 0x91, 0x38, 0x0d, 0x17, 0x55, 0xaf, 0x50, 0xe5, 0x65, 0x5e, 0x53, - 0x85, 0x74, 0x2f, 0x9d, 0x37, 0xe9, 0xa7, 0x0c, 0xf8, 0xf0, 0x8b, 0xd6, 0x3d, 0x98, 0xeb, 0xa0, - 0x6c, 0xb1, 0xcf, 0xd4, 0xa0, 0xaa, 0x4c, 0x95, 0xef, 0x47, 0xf7, 0x79, 0x2d, 0x6c, 0x21, 0x4d, - 0xd7, 0x69, 0x9e, 0x32, 0xcf, 0xc9, 0x3c, 0x30, 0x7f, 0x71, 0x52, 0x8d, 0xc2, 0x7f, 0xfd, 0x8d, - 0xeb, 0xb1, 0x2c, 0xf5, 0xd6, 0xed, 0xb8, 0xd1, 0xb3, 0xa6, 0x6c, 0xbf, 0x7f, 0x86, 0xdf, 0xf2, - 0xf2, 0x18, 0x61, 0x3a, 0x6e, 0x79, 0xac, 0x39, 0x77, 0x92, 0x7b, 0x05, 0xcd, 0x8c, 0xf1, 0xaa, - 0x0a, 0x61, 0x65, 0x60, 0x94, 0x3a, 0x55, 0x5e, 0xed, 0xb5, 0xd6, 0x4a, 0xcb, 0xe4, 0xdd, 0xcd, - 0x31, 0xc5, 0x4d, 0x30, 0x91, 0x1c, 0xec, 0xe3, 0x6f, 0x2a, 0xd2, 0x3d, 0x6d, 0xb6, 0x6a, 0xbc, - 0xb5, 0x97, 0x2a, 0xdc, 0x3b, 0xaa, 0xf5, 0xe6, 0x46, 0xaa, 0x74, 0x1f, 0xb7, 0x5f, 0x00, 0x22, - 0xd8, 0xfb, 0x2b, 0x6e, 0xfb, 0x4d, 0xb9, 0xd0, 0x02, 0xa7, 0x6e, 0xee, 0x8c, 0x5d, 0x78, 0xab, - 0x69, 0x17, 0x76, 0x5b, 0x0d, 0x3e, 0x66, 0xf2, 0x74, 0x4c, 0x67, 0xc1, 0x23, 0xc7, 0xb4, 0x2f, - 0xd7, 0xaa, 0xb2, 0x8c, 0x9e, 0xf6, 0x8e, 0x81, 0x26, 0x69, 0x7e, 0x4e, 0x74, 0x7b, 0xfe, 0xaf, - 0x3c, 0x54, 0x6a, 0xde, 0xd9, 0xf1, 0x6e, 0xf3, 0x0d, 0xa8, 0x6e, 0x5f, 0xe1, 0x80, 0xf7, 0xb8, - 0x95, 0xf4, 0xc7, 0x6b, 0xbd, 0x88, 0xa3, 0x82, 0x96, 0x68, 0xa0, 0x8e, 0xa5, 0xde, 0x7b, 0x49, - 0x95, 0x5f, 0xf0, 0x42, 0x89, 0xf4, 0x3c, 0x64, 0x6b, 0x49, 0x9d, 0x39, 0x9c, 0x1c, 0xfc, 0xa0, - 0x25, 0x1a, 0xc8, 0xda, 0x70, 0x97, 0xb8, 0x33, 0x07, 0xe8, 0x9d, 0x5d, 0x39, 0xb1, 0x94, 0x13, - 0xdf, 0x16, 0xb2, 0xa2, 0x86, 0x14, 0xcb, 0xda, 0xa3, 0xa1, 0x67, 0x71, 0x27, 0xc9, 0xe3, 0x9c, - 0x60, 0x69, 0x78, 0x36, 0xab, 0xb2, 0xcf, 0x0b, 0x25, 0x52, 0x9d, 0xd1, 0x16, 0x24, 0xb6, 0xbc, - 0x45, 0xae, 0x5b, 0x2b, 0x57, 0xaf, 0x5d, 0x05, 0x15, 0x95, 0x9b, 0xd7, 0xeb, 0x25, 0xc9, 0xc1, - 0x83, 0x50, 0xb8, 0x98, 0xb9, 0x9c, 0xc0, 0xe7, 0x53, 0x9d, 0xad, 0xa9, 0xde, 0x4e, 0x1f, 0xf4, - 0xc8, 0xae, 0xc1, 0x73, 0x2c, 0x96, 0xf4, 0xa0, 0x8d, 0x26, 0xa6, 0x2b, 0x1b, 0x3c, 0x77, 0xfd, - 0x2d, 0x5c, 0xad, 0x5a, 0xfb, 0xb9, 0xd3, 0xf2, 0x8c, 0x61, 0xd6, 0x2a, 0xc9, 0x66, 0x2d, 0xa6, - 0x2e, 0x8d, 0x4f, 0xbd, 0xa5, 0x09, 0xae, 0x72, 0xe1, 0x83, 0x1d, 0x9d, 0x73, 0x20, 0xd6, 0xf3, - 0x1f, 0xf3, 0x51, 0xf1, 0x86, 0xa8, 0x42, 0x1c, 0xd3, 0xc3, 0x6b, 0x23, 0x0d, 0x62, 0x0d, 0x2a, - 0x66, 0x12, 0x92, 0x4b, 0x98, 0x4e, 0xac, 0x23, 0xa6, 0x0a, 0xa9, 0x18, 0x9c, 0xd4, 0xa8, 0x82, - 0x60, 0xaa, 0x13, 0x1f, 0xc7, 0x87, 0x3f, 0xf8, 0xad, 0x1f, 0x80, 0x08, 0x82, 0xb8, 0x62, 0xa9, - 0x10, 0x3a, 0xa8, 0xab, 0xf5, 0x71, 0xa5, 0xe2, 0x72, 0x3d, 0x59, 0x1a, 0xc7, 0x49, 0x2c, 0x59, - 0xda, 0x34, 0x96, 0x32, 0x2f, 0xd3, 0x7f, 0x45, 0xbb, 0x79, 0x4c, 0x4f, 0x8f, 0xc7, 0x2d, 0x64, - 0xbe, 0xdd, 0x42, 0x6a, 0xfd, 0xe7, 0x32, 0xfd, 0xe7, 0x52, 0x27, 0x2e, 0x68, 0xb7, 0x4e, 0x64, - 0x2f, 0xe4, 0x12, 0x34, 0x29, 0x12, 0xdd, 0x1c, 0x57, 0x62, 0x94, 0x1d, 0xe6, 0xa8, 0xf2, 0x5d, - 0x5e, 0x5a, 0x24, 0x15, 0x81, 0x16, 0x95, 0x1c, 0x1a, 0xf2, 0xd1, 0x22, 0x71, 0x25, 0x42, 0x01, - 0xc8, 0x7e, 0xcc, 0x92, 0x93, 0x17, 0xc1, 0x8a, 0x71, 0xc5, 0x52, 0x31, 0xa8, 0x33, 0x2c, 0xff, - 0xb3, 0x51, 0x23, 0xae, 0xe2, 0xb5, 0x5c, 0xd0, 0x9b, 0x1e, 0x54, 0xe5, 0x45, 0xbc, 0x96, 0x7b, - 0x37, 0x7c, 0xd4, 0x72, 0xb7, 0xc1, 0x6b, 0xbc, 0xab, 0xf8, 0xdb, 0xc9, 0x42, 0xae, 0x1b, 0xe3, - 0x76, 0xd2, 0xd2, 0x0d, 0x8d, 0xa1, 0xc5, 0xdf, 0x43, 0x72, 0xab, 0x4d, 0xb6, 0xdb, 0x22, 0x9b, - 0xd5, 0x06, 0xd5, 0x19, 0x16, 0x8b, 0x6e, 0xa2, 0xa6, 0xba, 0x2a, 0xfc, 0x61, 0xe4, 0xf1, 0x9a, - 0xe8, 0x48, 0x12, 0xe1, 0xeb, 0x80, 0x73, 0xc0, 0xbf, 0xe7, 0x5f, 0xb8, 0xd0, 0x8c, 0x4d, 0xfe, - 0xf8, 0x4e, 0x13, 0xc1, 0x79, 0xec, 0x08, 0x2e, 0x8b, 0x9e, 0x16, 0x58, 0xe9, 0xc9, 0x44, 0x34, - 0x73, 0xcc, 0x44, 0xa3, 0xd3, 0x45, 0x49, 0x16, 0x5d, 0x18, 0xab, 0x3e, 0xc7, 0xbc, 0xea, 0xfa, - 0xea, 0x2e, 0xb0, 0xae, 0xae, 0x69, 0xf9, 0xe6, 0x59, 0x96, 0x8f, 0x5f, 0x95, 0x79, 0x96, 0x55, - 0xe1, 0x91, 0x3d, 0x47, 0x4f, 0x41, 0x56, 0x04, 0xdf, 0xa4, 0x69, 0xc2, 0x4a, 0xb9, 0xcc, 0x68, - 0x24, 0xb9, 0x3a, 0x97, 0xb6, 0xcc, 0x93, 0xb5, 0x40, 0x53, 0xcc, 0xd8, 0xc1, 0x65, 0x9e, 0x7f, - 0xe3, 0x42, 0x53, 0x30, 0x5a, 0x37, 0x26, 0x94, 0x28, 0xc6, 0xe8, 0xf2, 0xac, 0x7c, 0x83, 0xe3, + 0x93, 0x9e, 0xdf, 0xb9, 0x50, 0xe1, 0x73, 0x91, 0x30, 0xa8, 0x81, 0x4b, 0xd1, 0xa4, 0xdd, 0xf8, + 0x6f, 0x46, 0x03, 0x25, 0xaa, 0x3c, 0xdb, 0x4b, 0x8b, 0xa4, 0x29, 0x5a, 0xf7, 0x40, 0xfa, 0x8d, + 0x8b, 0x5a, 0xd7, 0x10, 0xd6, 0xe1, 0xa0, 0x50, 0x5c, 0x81, 0xf2, 0xf1, 0x5f, 0x3c, 0xce, 0x78, + 0x9a, 0x9f, 0xae, 0xb7, 0x61, 0x1b, 0x0b, 0x86, 0x16, 0xab, 0x50, 0x21, 0xfe, 0x97, 0x70, 0xcb, + 0xf8, 0xe8, 0x5c, 0x87, 0x17, 0x1f, 0x47, 0x45, 0xf8, 0x6f, 0x60, 0x92, 0xfc, 0x71, 0x35, 0x36, + 0x1a, 0x88, 0x1b, 0x50, 0x51, 0xbc, 0x79, 0x5b, 0x58, 0x49, 0xac, 0x6f, 0x6e, 0xa2, 0x7e, 0xc0, + 0xcb, 0x54, 0x79, 0x89, 0xd7, 0x28, 0x95, 0xee, 0xce, 0x0c, 0x9c, 0x37, 0x86, 0x4d, 0xfe, 0x48, + 0xf7, 0xb4, 0x69, 0x7d, 0x87, 0xd3, 0x37, 0x8e, 0xd0, 0x60, 0xb0, 0x06, 0x74, 0x15, 0x9e, 0x32, + 0x9a, 0xeb, 0xd5, 0x71, 0xc8, 0x4d, 0x99, 0x32, 0xdd, 0xd0, 0x24, 0x34, 0x83, 0x2c, 0x0a, 0x3d, + 0x3f, 0x10, 0x4c, 0x3f, 0x6a, 0x35, 0xf0, 0xcc, 0xcd, 0x36, 0x8c, 0x26, 0x87, 0x8e, 0xb0, 0x93, + 0x1e, 0x7f, 0xc4, 0x7b, 0x0a, 0x4d, 0xa1, 0x3f, 0x38, 0x69, 0x03, 0x28, 0xe0, 0xca, 0xa5, 0x62, + 0xfa, 0x62, 0x82, 0x25, 0x0b, 0x32, 0xaa, 0xc4, 0xe7, 0x91, 0x48, 0x7f, 0xd6, 0x72, 0x1a, 0x35, + 0x2c, 0x04, 0x39, 0xcb, 0xd8, 0x54, 0x4b, 0x22, 0x3d, 0x54, 0x10, 0x95, 0x9a, 0x12, 0x9f, 0x0d, + 0x9c, 0x58, 0x87, 0xa6, 0xd1, 0xd2, 0x2d, 0x4a, 0x2c, 0x6e, 0xa8, 0xea, 0xe4, 0x40, 0x91, 0x55, + 0xc5, 0x06, 0x99, 0xee, 0xec, 0x48, 0xf5, 0x5e, 0xf2, 0x65, 0xd5, 0x8a, 0x4f, 0xe9, 0x48, 0xda, + 0xb0, 0x91, 0xa6, 0x51, 0xf0, 0xf0, 0x99, 0x18, 0x37, 0x6c, 0xd4, 0x47, 0x45, 0x52, 0x91, 0xa7, + 0xaf, 0x0e, 0xa7, 0x87, 0x4f, 0xfb, 0x8c, 0x6a, 0x0e, 0x57, 0x44, 0x67, 0x9e, 0x64, 0xc5, 0x15, + 0x51, 0x9b, 0xd9, 0x30, 0x88, 0xb2, 0xec, 0xe3, 0xab, 0xc4, 0x83, 0x02, 0x9a, 0x4a, 0x7f, 0xc3, + 0x61, 0x96, 0xa6, 0x37, 0x68, 0x50, 0xe5, 0xa0, 0xd7, 0x5c, 0x23, 0xd1, 0xc3, 0x3a, 0xcd, 0xac, + 0xe0, 0x6b, 0x0e, 0x63, 0xdd, 0xc5, 0x9d, 0xb9, 0x79, 0x38, 0x73, 0xb6, 0x2b, 0x39, 0xd8, 0xe7, + 0x26, 0x51, 0xbf, 0x70, 0x11, 0x4d, 0x56, 0x38, 0xd8, 0xe7, 0xae, 0x0b, 0x92, 0x58, 0xa5, 0xa3, + 0xc7, 0x3f, 0x4c, 0xdf, 0xe8, 0xc7, 0x05, 0xf2, 0xb6, 0x70, 0x24, 0xd6, 0xe4, 0x6f, 0x74, 0x43, + 0x42, 0xa5, 0xc5, 0x3e, 0xf3, 0x37, 0xc4, 0x10, 0x2a, 0x6c, 0x8c, 0x04, 0xc0, 0x8b, 0x17, 0x92, + 0x21, 0xac, 0x53, 0xe5, 0xa7, 0xbd, 0x7a, 0xa1, 0xf4, 0x04, 0x96, 0xb5, 0x9c, 0xd0, 0x2f, 0x6b, + 0xd8, 0xa9, 0xc0, 0x2b, 0x18, 0x4c, 0xce, 0xa7, 0x4f, 0xa7, 0x87, 0x2e, 0x68, 0x1d, 0x1f, 0x68, + 0x6a, 0x97, 0x4e, 0xa7, 0x50, 0x02, 0x63, 0x5f, 0xec, 0xd3, 0x7b, 0x12, 0x7f, 0x8e, 0x8a, 0xe9, + 0xb7, 0xd7, 0x2a, 0x2d, 0x4a, 0x23, 0x71, 0x1a, 0x2e, 0xaa, 0x5e, 0xa1, 0xca, 0xcb, 0xbc, 0xa6, + 0x0a, 0xe9, 0x6e, 0x3a, 0x6f, 0xd2, 0x4f, 0x19, 0xf0, 0xe1, 0xe7, 0xad, 0x7b, 0x30, 0xd7, 0x41, + 0xd9, 0x62, 0x9f, 0xa9, 0x41, 0x55, 0x99, 0x2a, 0xdf, 0x8b, 0xee, 0xf1, 0x5a, 0xd8, 0x42, 0x9a, + 0xae, 0xd3, 0x3c, 0x65, 0x9e, 0x13, 0x79, 0x60, 0xfe, 0xe2, 0xa4, 0x1a, 0x85, 0xff, 0xea, 0x1b, + 0xd7, 0x23, 0x59, 0xea, 0xad, 0xdb, 0x71, 0xa3, 0x67, 0x4d, 0xd9, 0x7e, 0xff, 0x14, 0xbf, 0xe5, + 0xe5, 0x31, 0xc2, 0x74, 0xdc, 0xf2, 0x58, 0x73, 0xee, 0x24, 0xf7, 0x12, 0x9a, 0x19, 0xe3, 0x55, + 0x15, 0xc2, 0xca, 0xc0, 0x28, 0x75, 0xaa, 0xbc, 0xda, 0x6b, 0xad, 0x95, 0x96, 0xc9, 0xbb, 0x9b, + 0x63, 0x8a, 0x9b, 0x60, 0x22, 0x39, 0xd8, 0xc7, 0xdf, 0x54, 0xa4, 0x7b, 0xda, 0x6c, 0xd5, 0x78, + 0x6b, 0x2f, 0x55, 0xb8, 0x77, 0x54, 0xeb, 0xcd, 0x8d, 0x54, 0xe9, 0x1e, 0x6e, 0xbf, 0x00, 0x44, + 0xb0, 0xf7, 0x57, 0xdc, 0xf6, 0x9b, 0x72, 0xa1, 0x05, 0x4e, 0xdd, 0xdc, 0x1e, 0xbb, 0xf0, 0x56, + 0xd3, 0x2e, 0xec, 0xb6, 0x1a, 0x7c, 0xcc, 0xe4, 0xe9, 0x98, 0xce, 0x82, 0x47, 0x8e, 0x69, 0x5f, + 0xae, 0x55, 0x65, 0x19, 0x3d, 0xe9, 0x1d, 0x03, 0x4d, 0xd2, 0xfc, 0x9c, 0xe8, 0xf6, 0xfc, 0x5f, + 0x79, 0xa8, 0xd4, 0xbc, 0xb3, 0xe3, 0xdd, 0xe6, 0x6b, 0x50, 0xdd, 0xbe, 0xc4, 0x01, 0xef, 0x51, + 0x2b, 0xe9, 0x8f, 0xd7, 0x7a, 0x11, 0x47, 0x05, 0x2d, 0xd1, 0x40, 0x1d, 0x4b, 0xbd, 0xf7, 0x82, + 0x2a, 0x3f, 0xe7, 0x85, 0x12, 0xe9, 0x59, 0xc8, 0xd6, 0x92, 0x3a, 0x7d, 0x38, 0x39, 0xf8, 0x7e, + 0x4b, 0x34, 0x90, 0xb5, 0xe1, 0x2e, 0x71, 0x67, 0x0e, 0xd0, 0x3b, 0xbb, 0x72, 0x62, 0x29, 0x27, + 0xbe, 0x2d, 0x64, 0x45, 0x0d, 0x29, 0x96, 0xb5, 0x47, 0x43, 0xcf, 0xe2, 0x4e, 0x92, 0xc7, 0x39, + 0xc1, 0xd2, 0xf0, 0x6c, 0x56, 0x65, 0x9f, 0x17, 0x4a, 0xa4, 0x3a, 0xa3, 0x2d, 0x48, 0x6c, 0x79, + 0x8b, 0x5c, 0xb7, 0x56, 0xae, 0x5e, 0xbb, 0x0a, 0x2a, 0x2a, 0x37, 0xaf, 0xd7, 0x4b, 0x92, 0x83, + 0x07, 0xa1, 0x70, 0x31, 0x73, 0x39, 0x81, 0xcf, 0xa7, 0x3a, 0x5b, 0x53, 0xbd, 0x9d, 0x3e, 0xe8, + 0x91, 0x5d, 0x83, 0xe7, 0x58, 0x2c, 0xe9, 0x7e, 0x1b, 0x4d, 0x4c, 0x57, 0x36, 0x78, 0xee, 0xfa, + 0x4b, 0xb8, 0x5a, 0xb5, 0xf6, 0x73, 0xbb, 0xe5, 0x19, 0xc3, 0xac, 0x55, 0x92, 0xcd, 0x5a, 0x4c, + 0x5d, 0x1a, 0x9f, 0x7a, 0x4b, 0x13, 0x5c, 0xe5, 0xc2, 0x07, 0x3b, 0x3a, 0xe7, 0x40, 0xac, 0xe7, + 0xbf, 0xe4, 0xa3, 0xe2, 0x0d, 0x51, 0x85, 0x38, 0xa6, 0x87, 0xd7, 0x46, 0x1a, 0xc4, 0x1a, 0x54, + 0xcc, 0x24, 0x24, 0x97, 0x30, 0x9d, 0x58, 0x47, 0x4c, 0x15, 0x52, 0x31, 0x38, 0xa9, 0x51, 0x05, + 0xc1, 0x54, 0x27, 0x3e, 0x8a, 0x0f, 0x7f, 0xf0, 0x5b, 0x3f, 0x00, 0x11, 0x04, 0x71, 0xc5, 0x52, + 0x21, 0x74, 0x50, 0x57, 0xeb, 0xe3, 0x4a, 0xc5, 0xe5, 0x7a, 0xb2, 0x34, 0x8e, 0x93, 0x58, 0xb2, + 0xb4, 0x69, 0x2c, 0x65, 0x5e, 0xa6, 0xff, 0xb2, 0x76, 0xe3, 0xa8, 0x9e, 0x1e, 0x8f, 0x5b, 0xc8, + 0x7c, 0xbb, 0x85, 0xd4, 0xfa, 0xcf, 0x66, 0xfa, 0xcf, 0xa6, 0x8e, 0x9f, 0xd7, 0x6e, 0x1e, 0xcf, + 0x5e, 0xc8, 0x25, 0x68, 0x52, 0x24, 0xba, 0x39, 0xae, 0xc4, 0x28, 0x3b, 0xcc, 0x51, 0xe5, 0x3b, + 0xbc, 0xb4, 0x48, 0x2a, 0x02, 0x2d, 0x2a, 0x39, 0x34, 0xe4, 0xa3, 0x45, 0xe2, 0x4a, 0x84, 0x02, + 0x90, 0xfd, 0x98, 0x25, 0x27, 0x2f, 0x82, 0x15, 0xe3, 0x8a, 0xa5, 0x62, 0x50, 0x67, 0x58, 0xfe, + 0x67, 0xa3, 0x46, 0x5c, 0xc5, 0x6b, 0xb9, 0xa0, 0x37, 0xdd, 0xaf, 0xca, 0x8b, 0x78, 0x2d, 0xf7, + 0x4e, 0xf8, 0xa8, 0xe5, 0x6e, 0x83, 0xd7, 0x78, 0x57, 0xf1, 0xb7, 0x93, 0x85, 0x5c, 0x37, 0xc6, + 0xed, 0xa4, 0xa5, 0x1b, 0x1a, 0x43, 0x8b, 0xbf, 0x87, 0xe4, 0x56, 0x9b, 0x6c, 0xb7, 0x45, 0x36, + 0xab, 0x0d, 0xaa, 0x33, 0x2c, 0x16, 0xdd, 0x44, 0x4d, 0x75, 0x55, 0xf8, 0xc3, 0xc8, 0xe3, 0x35, + 0xd1, 0x91, 0x24, 0xc2, 0xd7, 0x01, 0xe7, 0x80, 0x7f, 0xcf, 0x7f, 0x70, 0xa1, 0x19, 0x9b, 0xfc, + 0xf1, 0x9d, 0x26, 0x82, 0xf3, 0xd8, 0x11, 0x5c, 0x16, 0x3d, 0x2d, 0xb0, 0xd2, 0x93, 0x89, 0x68, + 0xe6, 0x98, 0x89, 0x46, 0xa7, 0x8b, 0x92, 0x2c, 0xba, 0x30, 0x56, 0x7d, 0x8e, 0x79, 0xd5, 0xf5, + 0xd5, 0x5d, 0x60, 0x5d, 0x5d, 0xd3, 0xf2, 0xcd, 0xb3, 0x2c, 0x1f, 0xbf, 0x2a, 0xf3, 0x2c, 0xab, + 0xc2, 0x23, 0x7b, 0x8e, 0x9e, 0x82, 0xac, 0x08, 0xbe, 0x49, 0xd3, 0x84, 0x95, 0x72, 0x99, 0xd1, + 0x48, 0x72, 0x75, 0x2e, 0x6d, 0x99, 0x27, 0x6b, 0x81, 0xa6, 0x98, 0xb1, 0x83, 0xcb, 0x3c, 0x7f, + 0xeb, 0x42, 0x53, 0x30, 0x5a, 0x37, 0x26, 0x94, 0x28, 0xc6, 0xe8, 0xf2, 0xac, 0x7c, 0x83, 0xe3, 0x62, 0xa1, 0x95, 0xa8, 0x30, 0x9e, 0x50, 0xa2, 0xdc, 0xf9, 0x09, 0xae, 0x3b, 0x58, 0xa1, 0x9e, 0xc8, 0x95, 0xcf, 0xb7, 0xaa, 0xd7, 0x8a, 0x55, 0xa8, 0xa0, 0x91, 0x68, 0xc4, 0x79, 0xc6, 0x25, - 0x04, 0x94, 0x48, 0x25, 0x40, 0x03, 0xe9, 0xbe, 0xce, 0xf4, 0xd0, 0xc5, 0xb2, 0xba, 0xf5, 0xab, + 0x04, 0x94, 0x48, 0x25, 0x40, 0x03, 0xe9, 0xbe, 0xce, 0xf4, 0xd0, 0x85, 0xb2, 0xba, 0xf5, 0xab, 0x37, 0x94, 0xaf, 0xf2, 0xf9, 0x36, 0xf8, 0x16, 0xfb, 0x00, 0x40, 0x5c, 0x91, 0xcd, 0xbd, 0x44, - 0x72, 0xeb, 0xdc, 0x5b, 0x6c, 0xcf, 0xb7, 0x5f, 0x8f, 0x0f, 0xc7, 0x4f, 0xb4, 0xe7, 0x26, 0x83, - 0x63, 0x02, 0x91, 0xb2, 0x75, 0xe1, 0x78, 0xc2, 0x1f, 0x06, 0xaa, 0xfc, 0xfa, 0xba, 0xc6, 0x8a, - 0x2c, 0x5d, 0x83, 0xde, 0x11, 0x81, 0xae, 0x31, 0x3d, 0xeb, 0xd0, 0xf2, 0x4d, 0xa8, 0x1b, 0xf5, + 0x72, 0xeb, 0xdc, 0x5b, 0x6c, 0xcf, 0xb7, 0x5f, 0x8d, 0x0f, 0xc7, 0x4f, 0xb4, 0x67, 0x27, 0x83, + 0x63, 0x02, 0x91, 0xb2, 0x75, 0xe1, 0x78, 0xc2, 0x1f, 0x06, 0xaa, 0xfc, 0xea, 0xba, 0xc6, 0x8a, + 0x2c, 0x5d, 0x83, 0xde, 0x11, 0x81, 0xae, 0x31, 0x3d, 0xeb, 0xd0, 0xf2, 0x75, 0xa8, 0x1b, 0xf5, 0xd4, 0x34, 0x91, 0xcf, 0x12, 0xec, 0x4b, 0x5e, 0x52, 0x20, 0x79, 0xf5, 0x7d, 0x01, 0xee, 0xe1, 0xdd, 0xfe, 0x68, 0x45, 0x43, 0xb3, 0x3f, 0xdc, 0xb0, 0x7b, 0x47, 0xa4, 0xb9, 0x62, 0x59, 0xb9, - 0xbb, 0x39, 0x5e, 0xf1, 0x8a, 0x12, 0x4f, 0x2c, 0xab, 0xf0, 0x33, 0x6f, 0x06, 0x30, 0x5b, 0xd4, + 0xbb, 0x39, 0x5e, 0xf1, 0x92, 0x12, 0x4f, 0x2c, 0xab, 0xf0, 0x33, 0x6f, 0x06, 0x30, 0x5b, 0xd4, 0x22, 0x14, 0x8e, 0x04, 0x95, 0xd5, 0xfe, 0xa6, 0x50, 0xe3, 0x2e, 0x2a, 0x41, 0x49, 0x62, 0x40, - 0xae, 0x58, 0x2a, 0x4e, 0xf5, 0x0e, 0x69, 0xa7, 0x0f, 0xa4, 0xaf, 0x0d, 0x6b, 0x1d, 0x27, 0x58, - 0x7b, 0x0e, 0x40, 0x7c, 0x00, 0xe5, 0x05, 0xa2, 0xcd, 0xf4, 0xad, 0xee, 0x2c, 0x55, 0x9e, 0xe9, - 0xc5, 0xbf, 0x25, 0x54, 0x53, 0xbf, 0xd9, 0x9d, 0x3a, 0x3b, 0x98, 0x3a, 0x76, 0xc5, 0x87, 0x0b, - 0xc4, 0x95, 0x68, 0x52, 0x93, 0xd2, 0x14, 0x89, 0xed, 0x22, 0xac, 0x37, 0xb5, 0xfa, 0x7e, 0x55, - 0xf6, 0x78, 0x69, 0x91, 0x54, 0xa2, 0xed, 0x6b, 0xd7, 0xfa, 0xde, 0xd2, 0xce, 0x5f, 0xd4, 0xae, - 0x74, 0xeb, 0xbe, 0xed, 0xee, 0x35, 0xd5, 0x3e, 0x0a, 0x21, 0x6e, 0x41, 0x05, 0xdb, 0x42, 0xbb, + 0xae, 0x58, 0x2a, 0x4e, 0xf5, 0x0e, 0x69, 0xa7, 0x0e, 0xa4, 0xaf, 0x0e, 0x6b, 0x1d, 0xc7, 0x59, + 0x7b, 0x0e, 0x40, 0xbc, 0x0f, 0xe5, 0x05, 0xa2, 0xcd, 0xf4, 0xad, 0xee, 0x2c, 0x55, 0x9e, 0xe9, + 0xc5, 0xbf, 0x25, 0x54, 0x53, 0xbf, 0xd9, 0x9d, 0x3a, 0x33, 0x98, 0x3a, 0x7a, 0xd9, 0x87, 0x0b, + 0xc4, 0x95, 0x68, 0x52, 0x93, 0xd2, 0x14, 0x89, 0xed, 0x22, 0xac, 0x37, 0xb5, 0xfa, 0x5e, 0x55, + 0xf6, 0x78, 0x69, 0x91, 0x54, 0xa2, 0xed, 0x6b, 0xd7, 0xfa, 0xde, 0xd4, 0xce, 0x5d, 0xd0, 0x2e, + 0x77, 0xeb, 0xbe, 0xed, 0xee, 0x35, 0xd5, 0x3e, 0x0a, 0x21, 0x6e, 0x41, 0x05, 0xdb, 0x42, 0xbb, 0x75, 0x81, 0x49, 0xa2, 0x75, 0x42, 0x89, 0xb4, 0x22, 0x39, 0xd8, 0x43, 0xd8, 0xa2, 0xdc, 0x0d, - 0x19, 0x7d, 0x53, 0x6f, 0x0d, 0xc0, 0xee, 0x09, 0x15, 0xe9, 0x8b, 0x7b, 0x52, 0xbd, 0x9d, 0x99, - 0xfd, 0x1f, 0x68, 0xc3, 0x43, 0x7a, 0x98, 0x02, 0x1f, 0x34, 0x16, 0x9f, 0xe7, 0x6e, 0x89, 0x8b, - 0x8c, 0x6c, 0x7c, 0xc6, 0x2d, 0xf1, 0x03, 0xec, 0x2f, 0xbd, 0x29, 0x7d, 0xe0, 0x73, 0xfc, 0x46, + 0x19, 0x7d, 0x53, 0x6f, 0x0e, 0xc0, 0xee, 0x09, 0x15, 0xe9, 0x0b, 0x7b, 0x52, 0xbd, 0x9d, 0x99, + 0xfd, 0xef, 0x6b, 0xc3, 0x43, 0x7a, 0x98, 0x02, 0x1f, 0x34, 0x16, 0x9f, 0xe5, 0x6e, 0x89, 0x8b, + 0x8c, 0x6c, 0x7c, 0xc6, 0x2d, 0xf1, 0x7d, 0xec, 0x2f, 0xbd, 0x29, 0x7d, 0xe0, 0x73, 0xec, 0x7a, 0x19, 0x89, 0xb0, 0x50, 0x19, 0x57, 0x1a, 0xb7, 0x73, 0xd1, 0x15, 0xc4, 0x43, 0x42, 0x96, 0x58, - 0x24, 0x82, 0xa1, 0xfa, 0xb7, 0xaa, 0xbc, 0x21, 0x6b, 0x1f, 0x7e, 0x5a, 0xbb, 0xf9, 0x26, 0x6b, + 0x24, 0x82, 0xa1, 0xfa, 0xd7, 0xaa, 0xbc, 0x21, 0x6b, 0x1f, 0x7e, 0x52, 0xbb, 0xf1, 0x3a, 0x6b, 0x96, 0x1c, 0x1c, 0xc2, 0x1d, 0x11, 0xe7, 0x2d, 0x1e, 0x88, 0xdf, 0xaa, 0xcb, 0x22, 0xe1, 0xc6, - 0x50, 0x58, 0xa9, 0x8c, 0x6c, 0xdf, 0x8e, 0xff, 0x5d, 0xfc, 0x65, 0xf5, 0xec, 0xd8, 0x5d, 0xbe, - 0x9f, 0xf9, 0x26, 0x41, 0xb9, 0x6f, 0x32, 0xad, 0x30, 0x8b, 0xe0, 0xaa, 0x1e, 0x41, 0x95, 0x8f, - 0x0b, 0xe8, 0x4d, 0xc1, 0x7b, 0x37, 0xe6, 0x06, 0x1b, 0x46, 0x90, 0x5e, 0x05, 0x9f, 0x02, 0x58, - 0x6c, 0xd0, 0x2f, 0xbe, 0x23, 0x8f, 0x90, 0xbf, 0x77, 0x71, 0x47, 0x62, 0xf3, 0xd0, 0xee, 0x0c, + 0x50, 0x58, 0xa9, 0x8c, 0x6c, 0xdf, 0x8e, 0xff, 0x5d, 0xfc, 0x45, 0xf5, 0xec, 0xd8, 0x1d, 0xbe, + 0x9f, 0xf8, 0x26, 0x41, 0xb9, 0x6f, 0x32, 0xad, 0x30, 0x8b, 0xe0, 0xaa, 0x1e, 0x41, 0x95, 0x8f, + 0x09, 0xe8, 0x75, 0xc1, 0x7b, 0x27, 0xe6, 0x06, 0x1b, 0x46, 0x90, 0x5e, 0x06, 0x9f, 0x02, 0x58, + 0x6c, 0xd0, 0x2f, 0xbe, 0x25, 0x8f, 0x90, 0xbf, 0x76, 0x71, 0x47, 0x62, 0xf3, 0xd0, 0x6e, 0x0f, 0xd5, 0x70, 0x83, 0x49, 0x35, 0x9c, 0x97, 0xad, 0x1a, 0xf2, 0x53, 0x1a, 0x9f, 0x7a, 0xb8, 0x5a, 0x95, 0x6b, 0x90, 0xec, 0x9d, 0x85, 0xb1, 0xb2, 0x3e, 0x12, 0x34, 0x21, 0x43, 0x2a, 0xb1, 0x2e, - 0x94, 0x93, 0xdf, 0xc7, 0xff, 0x2a, 0x44, 0xc5, 0xfc, 0xd7, 0xc5, 0x47, 0x51, 0x61, 0x98, 0xf6, - 0xc7, 0x6f, 0x2f, 0x7a, 0x21, 0x30, 0xfb, 0xc9, 0x4b, 0x54, 0x2f, 0xd4, 0xcb, 0x71, 0xc3, 0xc4, - 0xae, 0xa8, 0xc2, 0x6d, 0x30, 0xd0, 0x90, 0x15, 0x32, 0x29, 0xc1, 0xb6, 0x16, 0x56, 0x8e, 0x05, - 0x3d, 0x27, 0x62, 0xf2, 0x38, 0x41, 0xef, 0x24, 0x62, 0x4c, 0xb2, 0xe5, 0x7e, 0x90, 0x2d, 0x10, - 0x7f, 0xe1, 0x2e, 0x55, 0x9e, 0x01, 0xb2, 0xa5, 0x28, 0x10, 0x6d, 0xb6, 0x17, 0x2d, 0x05, 0xce, - 0xa2, 0xa5, 0xff, 0xc6, 0xe8, 0x7e, 0x7b, 0xd1, 0x72, 0x3f, 0xca, 0x6b, 0xd0, 0x25, 0x18, 0x7c, - 0xa5, 0x01, 0x7f, 0xa5, 0xc1, 0xf8, 0x4a, 0x43, 0xb4, 0x59, 0x8c, 0xeb, 0x2a, 0xc0, 0x64, 0x23, - 0x1d, 0x21, 0xcb, 0x42, 0xba, 0x9e, 0xce, 0x81, 0x9c, 0xbc, 0x6e, 0x8f, 0x74, 0x6d, 0x5c, 0xb5, - 0x76, 0xed, 0xed, 0x91, 0x9e, 0xcc, 0xb9, 0x4b, 0xe9, 0xf3, 0x43, 0x5a, 0xff, 0xe9, 0xe4, 0x67, - 0x07, 0xb4, 0xee, 0x81, 0xcc, 0xc7, 0x7d, 0xc9, 0x1b, 0x57, 0x70, 0xf5, 0x86, 0xb5, 0xb5, 0x5b, - 0x37, 0x6c, 0xde, 0x94, 0x0d, 0xf2, 0xe9, 0x47, 0xda, 0xd1, 0xfe, 0xf4, 0xcd, 0x36, 0x5d, 0xbf, + 0x94, 0x93, 0xdf, 0xc7, 0xdf, 0x14, 0xa1, 0x62, 0xfe, 0xeb, 0xe2, 0xc3, 0xa8, 0x30, 0x4c, 0xfb, + 0xe3, 0xb7, 0x17, 0xbd, 0x10, 0x98, 0xfd, 0xc4, 0x45, 0xaa, 0x17, 0xea, 0xe5, 0xb8, 0x61, 0x62, + 0x57, 0x54, 0xe1, 0x36, 0x18, 0x68, 0xc8, 0x0a, 0x99, 0x94, 0x60, 0x5b, 0x0b, 0x2b, 0xc7, 0x82, + 0x9e, 0x13, 0x31, 0x79, 0x9c, 0xa0, 0x77, 0x12, 0x31, 0x26, 0xd9, 0x72, 0x2f, 0xc8, 0x16, 0x88, + 0xbf, 0x70, 0x87, 0x2a, 0xcf, 0x00, 0xd9, 0x52, 0x14, 0x88, 0x36, 0xdb, 0x8b, 0x96, 0x02, 0x67, + 0xd1, 0xd2, 0x7f, 0x7d, 0x74, 0xbf, 0xbd, 0x68, 0xb9, 0x17, 0xe5, 0x35, 0xe8, 0x12, 0x0c, 0xbe, + 0xd2, 0x80, 0xbf, 0xd2, 0x60, 0x7c, 0xa5, 0x21, 0xda, 0x2c, 0xc6, 0x75, 0x15, 0x60, 0xb2, 0x91, + 0x8e, 0x90, 0x65, 0x21, 0x5d, 0x4f, 0xe7, 0x40, 0x4e, 0x5e, 0xb7, 0x46, 0xba, 0x36, 0xae, 0x5a, + 0xbb, 0xf6, 0xd6, 0x48, 0x4f, 0xe6, 0xec, 0xc5, 0xf4, 0xb9, 0x21, 0xad, 0xff, 0x54, 0xf2, 0xd3, + 0x03, 0x5a, 0xf7, 0x40, 0xe6, 0xa3, 0xbe, 0xe4, 0xf5, 0xcb, 0xb8, 0x7a, 0xc3, 0xda, 0xda, 0xad, + 0x1b, 0x36, 0x6f, 0xca, 0x06, 0xf9, 0xe4, 0x43, 0xed, 0x8d, 0xfe, 0xf4, 0x8d, 0x36, 0x5d, 0xbf, 0xa8, 0x43, 0x45, 0xcd, 0xe1, 0x50, 0xa2, 0x3e, 0x16, 0x0a, 0x28, 0x44, 0xf4, 0xb9, 0xc0, 0xa4, - 0x69, 0x94, 0x4a, 0x73, 0xa1, 0x6d, 0x72, 0xf8, 0xd3, 0xd4, 0xd9, 0x11, 0x7d, 0x82, 0xb7, 0x47, - 0x7a, 0xb4, 0xf6, 0xd7, 0x7d, 0x06, 0x9c, 0xb8, 0x02, 0x15, 0x60, 0xb1, 0x8f, 0x35, 0x98, 0x3c, + 0x69, 0x94, 0x4a, 0x73, 0xa1, 0x6d, 0x72, 0xf8, 0x93, 0xd4, 0x99, 0x11, 0x7d, 0x82, 0xb7, 0x46, + 0x7a, 0xb4, 0xf6, 0x57, 0x7d, 0x06, 0x9c, 0xb8, 0x02, 0x15, 0x60, 0xb1, 0x8f, 0x35, 0x98, 0x3c, 0x66, 0x36, 0x84, 0x12, 0x49, 0x04, 0x8b, 0x1a, 0x3e, 0x73, 0xb2, 0xbd, 0xc4, 0x07, 0x55, 0xe2, - 0xef, 0x38, 0xf9, 0x88, 0x8c, 0x33, 0xa7, 0x21, 0x1f, 0x57, 0x6b, 0x03, 0x37, 0x52, 0x87, 0x2e, - 0x18, 0xd2, 0xb1, 0xf7, 0x20, 0x96, 0xb9, 0x3d, 0x6d, 0x86, 0x93, 0x6a, 0x96, 0x54, 0x06, 0xf9, + 0x6f, 0x38, 0xf9, 0x88, 0x8c, 0x33, 0xa7, 0x21, 0x1f, 0x57, 0x6b, 0x03, 0xd7, 0x53, 0x87, 0xce, + 0x1b, 0xd2, 0xb1, 0xf7, 0x20, 0x96, 0xb9, 0x3d, 0x6d, 0x86, 0x93, 0x6a, 0x96, 0x54, 0x06, 0xf9, 0xa9, 0x7f, 0x0c, 0x5a, 0x72, 0xf2, 0xb3, 0x01, 0x4d, 0x63, 0xe2, 0xab, 0x3e, 0x12, 0x69, 0xac, - 0xab, 0x05, 0xcd, 0xa9, 0xfa, 0x69, 0x55, 0x7e, 0xd2, 0x9b, 0x55, 0x25, 0x79, 0x41, 0xae, 0x6b, - 0xea, 0x25, 0xcc, 0x15, 0x57, 0xcf, 0xd6, 0xd5, 0x96, 0xf3, 0x69, 0xdd, 0xb5, 0xae, 0x1b, 0xa3, - 0xed, 0x07, 0xe9, 0x27, 0xb2, 0xda, 0x8a, 0x67, 0x04, 0x84, 0x20, 0x5c, 0x41, 0x6d, 0x28, 0xbe, + 0xab, 0x05, 0xcd, 0xa9, 0xfa, 0x49, 0x55, 0x7e, 0xdc, 0x9b, 0x55, 0x25, 0x79, 0x41, 0xae, 0x6b, + 0xea, 0x45, 0xcc, 0x15, 0x57, 0xce, 0xd4, 0xd5, 0x96, 0xf3, 0x69, 0xdd, 0xb5, 0xae, 0xeb, 0xa3, + 0xed, 0x07, 0xe9, 0x27, 0xb2, 0xda, 0x8a, 0xa7, 0x05, 0x84, 0x20, 0x5c, 0x41, 0x6d, 0x28, 0xbe, 0x93, 0xbc, 0x25, 0xb7, 0x39, 0xdb, 0xd5, 0xfa, 0x13, 0x7e, 0x5c, 0x0f, 0xc9, 0x5f, 0xb8, 0x06, - 0xd2, 0x26, 0x9d, 0x70, 0xd3, 0xc3, 0x67, 0xd2, 0x6f, 0xbf, 0xc5, 0x66, 0x0a, 0x9f, 0xce, 0xda, + 0xd2, 0x26, 0x9d, 0x70, 0xd3, 0xc3, 0xa7, 0xd3, 0x6f, 0xbd, 0xc9, 0x66, 0x0a, 0x9f, 0xce, 0xda, 0x70, 0x96, 0xb8, 0x93, 0xc3, 0xed, 0xc9, 0xe1, 0x76, 0x3b, 0x79, 0x0f, 0xce, 0xe9, 0x5a, 0xfb, - 0xb5, 0xd4, 0xb5, 0x4b, 0x3e, 0xee, 0x0b, 0x62, 0xaf, 0x80, 0x8a, 0x82, 0xf4, 0xfb, 0xf1, 0x92, - 0xa9, 0xf6, 0x87, 0x4f, 0x7d, 0x80, 0x24, 0x06, 0xb7, 0x01, 0xcf, 0xc6, 0x97, 0x3a, 0x76, 0x25, - 0x75, 0xb0, 0xff, 0x1b, 0x1b, 0x9f, 0xf1, 0x81, 0x2a, 0xcc, 0xca, 0xa8, 0xc4, 0x5b, 0xb8, 0xde, - 0x56, 0x80, 0x78, 0xb4, 0x02, 0x74, 0xef, 0x1a, 0x25, 0xb1, 0xce, 0x4f, 0x0c, 0xbe, 0xcd, 0x0d, - 0x0d, 0x4a, 0x3c, 0xa1, 0x04, 0xd7, 0xf9, 0x03, 0x3b, 0x42, 0xdf, 0x88, 0xbd, 0xe7, 0x89, 0x2c, - 0x1d, 0xec, 0xbe, 0x5c, 0x3a, 0x58, 0xb6, 0xd1, 0xf3, 0x3d, 0xc1, 0xac, 0xf6, 0x76, 0x0b, 0xaa, - 0xdc, 0xe4, 0x2d, 0x0c, 0x34, 0xc6, 0xc1, 0x0a, 0xec, 0xa7, 0x56, 0x60, 0x50, 0x7d, 0xd7, 0x2e, - 0x5b, 0xba, 0x14, 0x38, 0x75, 0x69, 0xc5, 0xb2, 0xa5, 0x4b, 0x93, 0x83, 0x1f, 0xe8, 0x01, 0x2c, - 0xd6, 0x3e, 0x6c, 0x54, 0x3d, 0x9c, 0x55, 0xb5, 0x6c, 0x29, 0xab, 0xc3, 0x40, 0xa4, 0x98, 0xb8, - 0x6b, 0xbf, 0x91, 0xee, 0xeb, 0x5c, 0xfc, 0x65, 0xf5, 0xbc, 0x58, 0xa9, 0x2f, 0x1f, 0x03, 0xf9, - 0xf2, 0x71, 0x2f, 0xbe, 0x02, 0xd2, 0xc0, 0x57, 0xb0, 0x56, 0x22, 0xff, 0x80, 0x8a, 0x6d, 0xd2, - 0x19, 0xf3, 0x27, 0xa4, 0x33, 0x2e, 0x05, 0x13, 0x55, 0x2d, 0x55, 0xee, 0xc8, 0xd6, 0x09, 0x25, - 0xd2, 0x34, 0xd0, 0x8a, 0xd2, 0x37, 0x8f, 0xa4, 0x87, 0x7b, 0xeb, 0x6a, 0xc1, 0xbe, 0x54, 0xfb, - 0x5d, 0x69, 0x73, 0x2d, 0x4c, 0x16, 0x81, 0x36, 0x47, 0x12, 0x65, 0x51, 0x59, 0xb4, 0x29, 0x75, - 0xe8, 0x52, 0xe6, 0xe0, 0x61, 0xba, 0xa1, 0x9c, 0x6f, 0xc3, 0x94, 0xca, 0xdd, 0x60, 0xdd, 0x1e, - 0xe9, 0x82, 0xdc, 0xc8, 0xe5, 0xa3, 0x3d, 0x47, 0xb5, 0x91, 0xd6, 0x2f, 0x5a, 0xf7, 0x1a, 0xc6, - 0x34, 0xb7, 0xd6, 0x71, 0x52, 0x1b, 0xb8, 0xa1, 0x03, 0xa7, 0x4e, 0x9c, 0xc5, 0x82, 0xe7, 0xea, - 0x5e, 0x2a, 0xcd, 0x98, 0x83, 0xe5, 0xd8, 0x54, 0x29, 0x79, 0x53, 0x67, 0x6f, 0xa4, 0x0e, 0xf6, - 0x37, 0x11, 0x28, 0x30, 0xfb, 0x53, 0x13, 0x19, 0x3f, 0x3c, 0x30, 0xc4, 0xfc, 0x57, 0x17, 0xf2, - 0xe4, 0xea, 0xf1, 0xce, 0xd0, 0x63, 0x7e, 0x65, 0xd2, 0x63, 0x1e, 0x70, 0xd4, 0x63, 0x94, 0xa6, - 0x68, 0xa3, 0x3f, 0xa1, 0xd4, 0x44, 0xc2, 0xdb, 0x43, 0x0d, 0x13, 0xf2, 0x6b, 0x1d, 0x07, 0x92, - 0xa4, 0x12, 0x2b, 0x7e, 0x9d, 0xf4, 0x9b, 0x8e, 0x3c, 0x74, 0x8f, 0x45, 0x73, 0x8c, 0x7f, 0x5f, - 0x47, 0xbb, 0xad, 0xd6, 0xa3, 0x9d, 0xac, 0xca, 0x4f, 0xf1, 0x6c, 0xba, 0x8c, 0x63, 0xd3, 0x72, - 0x37, 0x90, 0x71, 0xaa, 0x6b, 0xbf, 0xd6, 0xdf, 0x83, 0x11, 0x36, 0x74, 0x24, 0xf3, 0xf1, 0x7b, - 0x5a, 0xf7, 0xa7, 0xf4, 0x55, 0x05, 0xc1, 0x25, 0xcf, 0xcc, 0x2f, 0xa2, 0x49, 0xa1, 0x28, 0x9e, - 0x2f, 0x15, 0x02, 0x35, 0xaa, 0xfc, 0xb8, 0x97, 0x16, 0x49, 0x95, 0xb8, 0xb9, 0x1e, 0x82, 0x85, - 0x67, 0xed, 0x7a, 0x3c, 0xda, 0x53, 0xad, 0xec, 0x7b, 0x94, 0x6d, 0x60, 0xd2, 0x82, 0x8f, 0xb6, - 0xd7, 0x7d, 0x4e, 0x1c, 0xf1, 0x29, 0xcd, 0xa5, 0xba, 0xfb, 0xe1, 0xb6, 0xe4, 0xe0, 0x07, 0xfa, - 0xd7, 0x28, 0x07, 0xfc, 0x7b, 0x17, 0x2a, 0xb5, 0x6b, 0x7a, 0x27, 0x7a, 0xbc, 0xdd, 0x63, 0x7b, - 0x6f, 0x82, 0xb7, 0x38, 0x70, 0x82, 0x01, 0x62, 0xa7, 0x2e, 0x08, 0x3c, 0x16, 0x4c, 0x24, 0xbf, - 0x41, 0x95, 0xd7, 0xa2, 0x67, 0xbd, 0x39, 0xb0, 0xc2, 0x30, 0x9a, 0x85, 0x4b, 0x27, 0x6a, 0xff, - 0x64, 0x32, 0x2a, 0xd2, 0x47, 0x22, 0x3e, 0x46, 0xd3, 0xd3, 0x33, 0xe2, 0x26, 0x08, 0xa2, 0x45, - 0xd2, 0x5d, 0x74, 0xa7, 0x19, 0x3a, 0x12, 0xa2, 0x1f, 0xad, 0xab, 0xa5, 0x19, 0xe8, 0x6b, 0xc5, - 0xc7, 0xd1, 0xe4, 0x50, 0x38, 0xac, 0xc4, 0xea, 0xea, 0x29, 0x6e, 0x89, 0xc5, 0x90, 0x95, 0x49, - 0x33, 0xe9, 0x58, 0xf6, 0xb5, 0xa7, 0x6f, 0x1e, 0x49, 0x0e, 0x0e, 0xd7, 0xd5, 0xfb, 0x58, 0x9d, - 0xf8, 0x22, 0x2a, 0x0e, 0x71, 0xe7, 0x09, 0x4a, 0xe5, 0x8f, 0xaa, 0xf2, 0x0a, 0xaf, 0xa9, 0x42, - 0x5a, 0x04, 0xec, 0x4b, 0x7d, 0x83, 0xfa, 0x4e, 0xa4, 0x2f, 0xbf, 0x97, 0x1c, 0xfc, 0x08, 0xef, - 0x04, 0xdd, 0x03, 0x99, 0xd7, 0x6f, 0x82, 0xb4, 0xf6, 0x99, 0xda, 0x88, 0x0f, 0xf1, 0xba, 0x3e, - 0x59, 0x34, 0xb2, 0xf3, 0x4c, 0x87, 0xf1, 0x04, 0xa2, 0xcd, 0x14, 0xbd, 0x64, 0xfb, 0x59, 0x82, - 0xf2, 0x9a, 0x14, 0xe6, 0xf1, 0x40, 0xf8, 0x13, 0xff, 0x96, 0x44, 0x7d, 0xf0, 0x5a, 0xdf, 0x5b, - 0x0c, 0xbe, 0x49, 0x69, 0x12, 0x1f, 0xe3, 0x55, 0xfc, 0x07, 0x54, 0xf9, 0x3e, 0x50, 0xf1, 0xe7, - 0x01, 0x7c, 0x03, 0xeb, 0x9c, 0x1f, 0xe1, 0x52, 0xd0, 0xfa, 0x97, 0xa1, 0xbc, 0x96, 0x68, 0x80, - 0xaa, 0xfc, 0x04, 0x55, 0xf8, 0xb7, 0x34, 0x9b, 0xc6, 0x68, 0x60, 0xf7, 0x95, 0x5b, 0xea, 0x6b, - 0xdc, 0x75, 0xb5, 0x3e, 0x5c, 0x87, 0x19, 0x95, 0xca, 0x8f, 0x42, 0xc6, 0xa8, 0xcf, 0xe8, 0xf2, - 0xe3, 0x11, 0xbe, 0x21, 0x5c, 0x61, 0xdf, 0x1e, 0xe9, 0xc2, 0xba, 0xff, 0x7b, 0x7b, 0xb5, 0x1b, - 0xb7, 0xb4, 0x4f, 0x4f, 0xdf, 0x1e, 0xe9, 0x4a, 0x7d, 0x7a, 0x55, 0xeb, 0xbd, 0x86, 0x47, 0xf3, - 0xc6, 0x59, 0xed, 0xd3, 0xd3, 0xe9, 0xbe, 0x4e, 0x5d, 0xcc, 0x3c, 0x85, 0x8a, 0xe8, 0x72, 0xb4, - 0x3c, 0x42, 0x0d, 0x16, 0x64, 0xed, 0x8d, 0x52, 0x69, 0x06, 0x7c, 0x22, 0x14, 0x6d, 0x79, 0x04, - 0x78, 0xdf, 0x67, 0x54, 0x8a, 0xab, 0x74, 0x9f, 0x18, 0xd0, 0xe6, 0x21, 0xd4, 0x2f, 0xf5, 0x89, - 0x71, 0xb3, 0xf8, 0x1a, 0xba, 0x67, 0x4c, 0xf6, 0x9a, 0x31, 0x47, 0x99, 0x95, 0xd4, 0x1a, 0x05, - 0x9a, 0x39, 0x5c, 0x24, 0x12, 0x6b, 0xd4, 0x82, 0xac, 0x2e, 0xb2, 0x3b, 0x00, 0xd3, 0xd3, 0x33, - 0x9c, 0xc7, 0x4c, 0xb1, 0x61, 0x75, 0xd4, 0x0b, 0x19, 0x7e, 0xb3, 0xfd, 0x6d, 0x0c, 0xbf, 0x99, - 0x20, 0x9a, 0x1e, 0x30, 0xee, 0x4e, 0x30, 0x4f, 0x90, 0xb0, 0x4b, 0x85, 0xd5, 0x55, 0xaa, 0xfc, - 0xa8, 0x37, 0xbb, 0x4e, 0x5a, 0x04, 0x6f, 0x18, 0xf0, 0x19, 0x64, 0xe0, 0x42, 0x72, 0xe8, 0x48, - 0xba, 0xa7, 0x0d, 0x6e, 0xe7, 0x40, 0x96, 0xd3, 0xa0, 0x8a, 0xd9, 0xcd, 0xaa, 0xb0, 0x04, 0x47, - 0x4f, 0x7a, 0xa7, 0xd0, 0x1b, 0x4e, 0xd2, 0x55, 0x05, 0x58, 0x5f, 0x29, 0x8f, 0x31, 0xba, 0xa1, - 0x3a, 0x35, 0xc7, 0xc8, 0xda, 0xd5, 0x63, 0xe9, 0xf3, 0x43, 0x9e, 0x8b, 0x2e, 0xe3, 0xb6, 0x53, - 0x06, 0x61, 0xfe, 0x7d, 0x5a, 0x20, 0xbf, 0xed, 0x6d, 0x8a, 0xf9, 0x6e, 0xe5, 0x98, 0xb3, 0x34, - 0xdb, 0x10, 0x7c, 0xa4, 0x2b, 0x7a, 0x5c, 0x18, 0xe5, 0xae, 0x08, 0x4d, 0xad, 0xee, 0x34, 0xfd, - 0x49, 0x70, 0xbc, 0x7d, 0xe7, 0xa6, 0x35, 0x91, 0xcd, 0xa4, 0x5e, 0x95, 0xd7, 0xa1, 0xe7, 0xbc, - 0xb9, 0xb0, 0xc3, 0xef, 0x26, 0x1c, 0x52, 0x9d, 0x76, 0x93, 0x23, 0x02, 0xf5, 0xe2, 0xe2, 0xba, - 0x12, 0x7f, 0x8f, 0xf2, 0x13, 0x86, 0x6d, 0x28, 0xa4, 0xca, 0xdb, 0xbd, 0xa4, 0x40, 0xfa, 0x4d, - 0x56, 0xaf, 0x65, 0xf0, 0x3a, 0x83, 0x16, 0xf5, 0xb4, 0x81, 0xaa, 0xa1, 0x47, 0xa0, 0xdd, 0xb8, - 0x49, 0x5e, 0x5f, 0x2b, 0xfb, 0x6a, 0x93, 0x83, 0x43, 0xa9, 0xb3, 0xfb, 0xb5, 0xfd, 0xfb, 0x00, - 0x1c, 0x1f, 0x88, 0x56, 0xad, 0x91, 0x6b, 0x7e, 0x95, 0x1c, 0x1c, 0x4a, 0x8e, 0x9c, 0xc5, 0x67, - 0x66, 0x52, 0xbe, 0xd8, 0x47, 0xbe, 0xe2, 0xb9, 0xe9, 0x42, 0x6e, 0x36, 0xc3, 0x6a, 0x7f, 0x38, - 0xf8, 0x4a, 0x28, 0x98, 0xd8, 0x51, 0xef, 0x0f, 0xec, 0xf4, 0x37, 0x7c, 0x65, 0xb5, 0x4e, 0xf8, - 0x5a, 0xa7, 0x45, 0xe1, 0xbb, 0x63, 0x1b, 0x2a, 0x69, 0xc6, 0x44, 0x00, 0x33, 0x00, 0xe2, 0x8f, - 0xb5, 0x5f, 0x4d, 0x0e, 0x7d, 0xa8, 0x0d, 0xbe, 0xa7, 0xf5, 0xdf, 0xd4, 0xba, 0xda, 0x3d, 0xff, - 0xc3, 0x45, 0x8e, 0xdb, 0x4e, 0xcd, 0xef, 0x0c, 0x2e, 0x0a, 0x98, 0x74, 0xb1, 0x45, 0xd9, 0x5c, - 0x94, 0x3d, 0x2f, 0x07, 0x3f, 0x16, 0x2b, 0x76, 0x80, 0xab, 0x28, 0x3f, 0xd1, 0x57, 0xb0, 0x63, - 0x63, 0xcb, 0x19, 0xdb, 0x56, 0x96, 0x52, 0x05, 0x34, 0xcb, 0x6e, 0x78, 0xe2, 0x34, 0xe4, 0x0a, - 0x05, 0xe9, 0xdd, 0xa8, 0x2b, 0x14, 0x14, 0x45, 0xfa, 0x78, 0x01, 0xee, 0x42, 0xe1, 0x6d, 0x82, - 0x1b, 0x4d, 0x09, 0x2b, 0x89, 0x57, 0x22, 0xb1, 0x9d, 0x86, 0x66, 0xe5, 0xe3, 0x8b, 0xb8, 0x1b, - 0xc8, 0x7c, 0xd3, 0x0d, 0xe4, 0x3c, 0x54, 0xb4, 0x8d, 0x7d, 0x95, 0x28, 0x44, 0x05, 0x3e, 0xa3, - 0xc0, 0xf3, 0x49, 0x3e, 0xba, 0x5b, 0x57, 0x41, 0x37, 0xc4, 0xeb, 0x9a, 0xfc, 0x0d, 0x77, 0xe2, - 0xe5, 0xd7, 0xff, 0x5f, 0xb0, 0x3c, 0xe6, 0xfb, 0x40, 0x50, 0xe5, 0xf7, 0x04, 0xce, 0x10, 0x79, - 0x52, 0x18, 0x3d, 0xd6, 0xab, 0xbd, 0xde, 0xad, 0x5f, 0xcf, 0x80, 0xea, 0x01, 0xef, 0x84, 0xaa, - 0xea, 0x37, 0x57, 0xaf, 0xad, 0xab, 0xd9, 0x5a, 0xb7, 0x4e, 0x5e, 0xb3, 0xaa, 0x4c, 0x6b, 0xbf, - 0xac, 0xb5, 0x5f, 0x05, 0xf0, 0xc5, 0xe5, 0xf5, 0xbe, 0xba, 0x2d, 0xf2, 0xa6, 0x55, 0xb4, 0x0e, - 0x0e, 0x4f, 0xac, 0x6e, 0xe3, 0xcf, 0x65, 0xdf, 0xaa, 0x5a, 0xbd, 0x19, 0x26, 0x01, 0x56, 0xb5, - 0x4e, 0xf6, 0x3d, 0xb7, 0x6a, 0x13, 0xab, 0x1a, 0xdc, 0xab, 0xf5, 0x0e, 0xb1, 0x2a, 0xb7, 0xbc, - 0x76, 0x2d, 0xb8, 0xd2, 0x40, 0x09, 0x67, 0xdc, 0xdc, 0xc9, 0x5f, 0x33, 0x17, 0x18, 0x1e, 0x8f, - 0xdc, 0xe5, 0xff, 0x4a, 0xad, 0xff, 0x86, 0x76, 0xf2, 0x92, 0x76, 0xe3, 0x9a, 0xd6, 0x7d, 0x85, - 0xdd, 0xfc, 0x97, 0xbb, 0x21, 0xa4, 0x10, 0x68, 0x2d, 0xd0, 0xad, 0xee, 0x5f, 0x40, 0x15, 0x6d, - 0x20, 0x71, 0xa3, 0x27, 0xdd, 0x8f, 0xda, 0x81, 0x02, 0xf4, 0xcb, 0x04, 0xce, 0xdd, 0x94, 0x1e, - 0xe8, 0xfe, 0xad, 0x0b, 0x95, 0x58, 0x5b, 0xdd, 0x19, 0x22, 0xe4, 0x59, 0x93, 0x08, 0xb9, 0x3b, - 0x5b, 0x84, 0xd0, 0xd9, 0x8c, 0xcf, 0x72, 0xb1, 0x45, 0x95, 0x37, 0xa2, 0xe7, 0xbd, 0x8e, 0xb8, - 0x90, 0x16, 0x59, 0x51, 0x08, 0x8b, 0x93, 0xfb, 0x34, 0xf7, 0x65, 0x01, 0x9a, 0x4c, 0xbb, 0x12, - 0x97, 0xa1, 0xc9, 0x21, 0xfc, 0x87, 0xce, 0x87, 0x77, 0x13, 0x3e, 0xa4, 0x65, 0x52, 0x11, 0xf4, - 0x87, 0x8f, 0x17, 0xac, 0x4c, 0x5c, 0x82, 0x0a, 0xfc, 0x8d, 0x21, 0x7f, 0x9c, 0xe2, 0x93, 0x38, - 0xb6, 0x43, 0x89, 0x54, 0xcc, 0x3e, 0xff, 0xa1, 0x76, 0xf8, 0xa0, 0x0f, 0x0a, 0xf1, 0x8a, 0xf9, - 0x63, 0x81, 0x1d, 0xfc, 0xe3, 0x44, 0x52, 0x20, 0x4d, 0x07, 0xe8, 0x9a, 0xfa, 0xcd, 0xa9, 0xd3, - 0xd7, 0x53, 0xa7, 0xdb, 0x7c, 0xa4, 0x58, 0xf4, 0xa1, 0xe9, 0x91, 0x78, 0x4d, 0x73, 0x3c, 0x11, - 0x69, 0x0a, 0xed, 0x86, 0xc3, 0x1e, 0x70, 0x1d, 0x79, 0x18, 0x9c, 0x5d, 0x27, 0x89, 0x5a, 0x7f, - 0x8f, 0xd6, 0x71, 0x9d, 0x1a, 0xc2, 0xe1, 0xf6, 0x28, 0x1b, 0x48, 0x7c, 0x14, 0x4d, 0x8a, 0xc4, - 0x89, 0xc6, 0x5f, 0x60, 0x1c, 0xa6, 0x68, 0x11, 0xbb, 0xbd, 0xa7, 0x34, 0x08, 0xca, 0x3e, 0xad, - 0x13, 0xeb, 0x10, 0x8a, 0x2b, 0xb1, 0x90, 0x02, 0x8d, 0x27, 0x19, 0x27, 0x0e, 0xae, 0x58, 0x2a, - 0xe1, 0x3b, 0x80, 0xab, 0x24, 0xf6, 0x28, 0xc5, 0x80, 0x12, 0xe5, 0xac, 0x3b, 0x1c, 0xd2, 0x0d, - 0xbb, 0xc3, 0x99, 0x47, 0xb9, 0x8a, 0xdc, 0xe1, 0x54, 0xb9, 0xd7, 0x6f, 0xf0, 0xad, 0x93, 0xd7, - 0x96, 0x41, 0x6c, 0x9a, 0xc5, 0xba, 0xbc, 0xfd, 0x94, 0x17, 0x45, 0x70, 0xc0, 0x83, 0xfb, 0x55, - 0x4e, 0x14, 0x75, 0xe6, 0x14, 0x45, 0xee, 0xef, 0x52, 0x16, 0x71, 0xa2, 0x27, 0x80, 0x0a, 0x29, - 0x2b, 0xc0, 0x1d, 0x90, 0x4d, 0xf8, 0x30, 0xde, 0x3b, 0xd4, 0xab, 0xca, 0x0f, 0x7a, 0xf5, 0x16, - 0xd2, 0x5c, 0x4a, 0x57, 0x66, 0xcf, 0x26, 0xca, 0x2c, 0x3a, 0x58, 0x95, 0x47, 0x95, 0x17, 0xa2, - 0xf9, 0x5e, 0x46, 0xdc, 0xe6, 0x85, 0x85, 0x2e, 0x3c, 0xeb, 0xd0, 0x14, 0xfe, 0xf1, 0x80, 0xdb, - 0xfc, 0x02, 0x00, 0x36, 0x4a, 0x93, 0x87, 0xff, 0x3c, 0xcb, 0xe3, 0x72, 0xce, 0x73, 0xc7, 0xf3, - 0xb7, 0x02, 0x9a, 0x6b, 0x78, 0xa4, 0x36, 0x87, 0x13, 0xa1, 0x26, 0xb2, 0xf1, 0xb2, 0x7d, 0xee, - 0x11, 0xeb, 0xe3, 0x04, 0xc2, 0x30, 0x9c, 0xdb, 0x56, 0xa1, 0x9d, 0x9f, 0x16, 0xb7, 0x3f, 0xba, - 0x26, 0xb4, 0x3f, 0x56, 0x3d, 0xad, 0xca, 0x4f, 0xa2, 0x2a, 0x6f, 0xae, 0x51, 0x31, 0x7d, 0x1d, - 0xdc, 0xe9, 0x53, 0x27, 0xae, 0xf3, 0x32, 0xdc, 0xf3, 0xaf, 0xf3, 0x38, 0xc7, 0x15, 0x53, 0xe3, - 0x3b, 0xed, 0xe9, 0x39, 0x26, 0xb3, 0x47, 0xb2, 0xc9, 0x2c, 0xd7, 0xd4, 0xc8, 0x75, 0xd6, 0xaa, - 0x70, 0x22, 0xb6, 0x6b, 0x5c, 0x12, 0xba, 0xf4, 0x17, 0xa8, 0x48, 0x6f, 0x21, 0xce, 0x40, 0x79, - 0x3b, 0x95, 0x5d, 0x94, 0x84, 0xf0, 0x9f, 0xe2, 0x0a, 0x54, 0xd0, 0xe2, 0x6f, 0x6c, 0x86, 0x69, - 0x4f, 0x91, 0x16, 0x58, 0x9e, 0x26, 0x35, 0x93, 0x38, 0xab, 0xf4, 0x8d, 0x86, 0x0f, 0x80, 0xab, - 0x5c, 0x8f, 0x09, 0x55, 0xbf, 0x50, 0xe5, 0x4d, 0xc8, 0xe7, 0xcd, 0xb9, 0x0e, 0xd2, 0xbd, 0x39, - 0x56, 0xd1, 0x49, 0xf6, 0x7b, 0xd1, 0x34, 0xf3, 0x57, 0xc5, 0x12, 0x34, 0xb9, 0x85, 0xbe, 0x2e, - 0x11, 0xdc, 0x79, 0x65, 0x45, 0x3e, 0xf6, 0xd3, 0xf3, 0x3f, 0x05, 0x6e, 0x1f, 0xae, 0x87, 0x8d, - 0x3d, 0x7e, 0xe7, 0x29, 0x70, 0x55, 0x8f, 0xa8, 0xf2, 0x72, 0xb4, 0xcc, 0xeb, 0x38, 0x17, 0xce, - 0x26, 0x00, 0x1a, 0x0f, 0x65, 0x84, 0x7f, 0xe3, 0xe2, 0x6c, 0xfc, 0x46, 0x9b, 0x1f, 0x85, 0x67, - 0x08, 0x3f, 0xa7, 0xf1, 0x69, 0x23, 0xeb, 0x55, 0xf9, 0x39, 0x54, 0xe7, 0x75, 0xc6, 0x08, 0x67, - 0x05, 0xe0, 0xd1, 0xe8, 0x44, 0x89, 0xeb, 0x51, 0x31, 0xdf, 0x8d, 0xd9, 0x07, 0x12, 0x23, 0x35, - 0x9f, 0xf7, 0x81, 0x74, 0xa3, 0x29, 0xf4, 0x87, 0xe1, 0x08, 0xe2, 0xe3, 0x8b, 0x3c, 0x37, 0xf2, - 0xd0, 0x2c, 0x7d, 0x6c, 0x5b, 0xa2, 0x81, 0x3b, 0x90, 0x52, 0xc5, 0x67, 0xd8, 0x9d, 0x29, 0x28, - 0x3c, 0x64, 0x17, 0xa4, 0x77, 0xa6, 0x0b, 0x98, 0x5b, 0x3f, 0xd1, 0xf8, 0xc8, 0xd1, 0x1e, 0x9c, - 0xfb, 0xe9, 0xd7, 0xe9, 0x1d, 0x6a, 0xc2, 0xee, 0x31, 0x0c, 0xe8, 0x3c, 0xab, 0x55, 0xb9, 0xc6, - 0xee, 0x31, 0xcc, 0x12, 0xf3, 0x63, 0x98, 0x2d, 0xd1, 0xc0, 0x84, 0x5f, 0xc2, 0x3c, 0xa5, 0xca, - 0x4f, 0xa0, 0xc7, 0xbd, 0xb6, 0xf8, 0x67, 0x62, 0x2a, 0x39, 0x74, 0x84, 0x46, 0xd4, 0x20, 0xc4, - 0x91, 0xee, 0x69, 0x6b, 0x89, 0x06, 0x28, 0xa7, 0xfd, 0x9d, 0x0b, 0xcd, 0xce, 0x6a, 0xfb, 0xa3, - 0x70, 0xcd, 0x67, 0xf3, 0x19, 0x1f, 0x87, 0x51, 0x4b, 0x9b, 0x3d, 0x26, 0x2c, 0x68, 0xa4, 0xcf, - 0x32, 0x39, 0x34, 0x5a, 0x79, 0x0c, 0x1f, 0x5d, 0x59, 0x4f, 0xfa, 0xd1, 0x5f, 0xe0, 0x8e, 0xfe, - 0xb3, 0xd8, 0x3b, 0x12, 0x60, 0x28, 0xfa, 0xd0, 0xa3, 0x14, 0x15, 0x86, 0xa2, 0x2d, 0x2b, 0x6a, - 0x42, 0x41, 0x1a, 0xfa, 0xc6, 0xa7, 0xff, 0xa6, 0x75, 0x8f, 0x90, 0xba, 0x7c, 0xbd, 0x8e, 0xfc, - 0x16, 0x97, 0xa3, 0x82, 0x40, 0x28, 0x18, 0x8b, 0x97, 0x14, 0x10, 0x74, 0xcc, 0xcf, 0x46, 0x87, - 0x1c, 0x8f, 0x87, 0xe2, 0x09, 0x7f, 0x38, 0x81, 0xa1, 0x7d, 0x00, 0x2b, 0x2e, 0x42, 0x53, 0xfd, - 0x8d, 0xe4, 0xa1, 0x9c, 0x52, 0x17, 0x5d, 0xdf, 0xdc, 0x04, 0x17, 0x25, 0x3e, 0x73, 0xa1, 0xe7, - 0x69, 0x34, 0xd5, 0xd4, 0x1a, 0xcf, 0x06, 0xb7, 0x67, 0xb3, 0x09, 0xd0, 0xb1, 0xe1, 0x7f, 0xc9, - 0x91, 0xc1, 0x45, 0xac, 0x11, 0xfa, 0x6f, 0xcf, 0xbe, 0x49, 0x9c, 0x31, 0x62, 0x23, 0x79, 0x73, - 0x7a, 0x27, 0x4a, 0x88, 0xd5, 0x66, 0x09, 0x41, 0xc2, 0xec, 0x52, 0x09, 0xb1, 0xc8, 0x49, 0x42, - 0xc0, 0x5b, 0x1e, 0x7a, 0x42, 0xa7, 0x72, 0x62, 0x2d, 0xbd, 0x43, 0x01, 0xd1, 0x80, 0xcf, 0xea, - 0xf4, 0x0e, 0xa5, 0xc2, 0xb1, 0x17, 0xfd, 0x3a, 0x84, 0xef, 0x0e, 0xae, 0x54, 0x56, 0xa3, 0x42, - 0x78, 0xc6, 0x5b, 0x57, 0x4b, 0xcf, 0x48, 0xa0, 0xc0, 0xb3, 0x42, 0xb6, 0x35, 0x40, 0x7f, 0x50, - 0xaa, 0x0f, 0xcc, 0xa7, 0x83, 0x89, 0xbf, 0x41, 0x53, 0x43, 0x61, 0x2c, 0xd1, 0xa9, 0x8a, 0x4e, - 0xb3, 0xd1, 0x90, 0xe1, 0x99, 0x6b, 0xf4, 0x4b, 0x95, 0x6b, 0x97, 0xb4, 0xf6, 0x0b, 0xf4, 0xb5, - 0x12, 0x17, 0xb0, 0x87, 0x62, 0xdc, 0xdc, 0xc8, 0x5e, 0x3a, 0x16, 0x4e, 0x44, 0x3a, 0xc2, 0x50, - 0xe1, 0x4b, 0xe3, 0x94, 0x8e, 0xe2, 0xb3, 0x94, 0xf1, 0x8a, 0x58, 0x64, 0xaa, 0xe5, 0x34, 0x60, - 0xc8, 0x43, 0x3c, 0xae, 0x29, 0x5a, 0x49, 0x2f, 0x5a, 0x57, 0xbb, 0x76, 0xf8, 0x43, 0x0c, 0x63, - 0x60, 0x89, 0x34, 0xa9, 0x7a, 0x46, 0x95, 0x57, 0xa2, 0x27, 0xbc, 0x22, 0x26, 0x65, 0x33, 0x15, - 0x4b, 0xf7, 0x1b, 0xe6, 0x42, 0x6e, 0x85, 0xca, 0x47, 0x5b, 0xf7, 0x8e, 0xb6, 0x1f, 0x4c, 0x0e, - 0x1e, 0xd4, 0x0e, 0x77, 0x25, 0x87, 0x8e, 0x78, 0xfe, 0x9e, 0xb7, 0xae, 0xe8, 0x5d, 0xdc, 0x19, - 0xe2, 0x76, 0xb3, 0x49, 0xdc, 0xce, 0xb1, 0x84, 0x87, 0x21, 0xb3, 0x71, 0x7c, 0x5a, 0xc8, 0xa3, - 0xc5, 0xee, 0x4d, 0xd4, 0x5d, 0x26, 0xa4, 0x9a, 0x8d, 0xb0, 0x7c, 0x5b, 0x27, 0x8d, 0xa6, 0xbb, - 0x00, 0x4d, 0x82, 0xe6, 0xe2, 0x83, 0x8c, 0x4d, 0x41, 0x9e, 0xcc, 0x54, 0xe5, 0x69, 0x8c, 0x4d, - 0xe1, 0x1f, 0xc6, 0x87, 0xcb, 0x39, 0xce, 0x71, 0x19, 0x06, 0x18, 0x83, 0x73, 0x0a, 0xe1, 0xcb, - 0x75, 0xb5, 0x1c, 0x9b, 0xac, 0x44, 0x88, 0xbe, 0x9a, 0x37, 0x5e, 0xfd, 0x83, 0x67, 0xab, 0x51, - 0x2c, 0x15, 0xf3, 0x04, 0xe5, 0xe3, 0x6a, 0xc4, 0xa7, 0x50, 0x11, 0x16, 0x8b, 0x3e, 0x7f, 0xd8, - 0xfc, 0xee, 0xc9, 0x28, 0x95, 0x66, 0x40, 0x63, 0x77, 0x5d, 0x7d, 0xcb, 0x0a, 0x77, 0x4d, 0x5d, - 0xad, 0xcf, 0x67, 0x54, 0x8a, 0xcf, 0xa2, 0xa9, 0x4c, 0xe4, 0x43, 0x1f, 0x05, 0xc6, 0x2d, 0xaa, - 0xb9, 0x86, 0xef, 0xe7, 0x11, 0xe8, 0xc7, 0x0c, 0xa0, 0x07, 0x3d, 0x98, 0x64, 0x0c, 0x03, 0xe4, - 0xd0, 0x6c, 0x83, 0xa7, 0x7b, 0x2f, 0x19, 0x9e, 0xa1, 0x20, 0x6f, 0x14, 0x74, 0xb7, 0xbf, 0xc5, - 0x1f, 0x6a, 0xf4, 0x6f, 0x6b, 0x54, 0xea, 0xea, 0xe5, 0x60, 0x30, 0xa6, 0xc4, 0xe3, 0x90, 0x02, - 0x09, 0x4b, 0x8c, 0x7c, 0xf0, 0x53, 0x75, 0x82, 0x91, 0xa6, 0x6a, 0x9d, 0xef, 0x27, 0x6f, 0x9e, - 0x74, 0xd7, 0xd5, 0xbb, 0x53, 0xc7, 0xae, 0xf8, 0x9c, 0xe0, 0x4c, 0x37, 0xc5, 0x85, 0xb6, 0x37, - 0xc5, 0xf6, 0x83, 0x34, 0x6e, 0x8a, 0x5f, 0x46, 0x2c, 0x14, 0x14, 0xe1, 0xfe, 0x31, 0xac, 0x1e, - 0x84, 0x70, 0x59, 0x03, 0x69, 0x2e, 0xed, 0x9c, 0xc8, 0xb9, 0xcc, 0x3b, 0xf4, 0x55, 0x39, 0x58, - 0x62, 0xf5, 0x08, 0x53, 0x55, 0x78, 0xe3, 0x40, 0x73, 0xbc, 0x94, 0xf0, 0xd8, 0xaa, 0x1b, 0x11, - 0x0f, 0x17, 0xd6, 0xec, 0x50, 0x02, 0x3b, 0x31, 0xc2, 0x6b, 0x22, 0xe1, 0xed, 0x8d, 0xa1, 0x40, - 0x62, 0x75, 0x2c, 0xd2, 0xb4, 0x25, 0x1a, 0xf8, 0xfa, 0x9b, 0x5f, 0x99, 0x49, 0x79, 0xa8, 0x16, - 0x55, 0x79, 0x3a, 0x7b, 0x84, 0x3a, 0x29, 0x39, 0x74, 0xa4, 0x25, 0x1a, 0x60, 0x0a, 0x85, 0x44, - 0x37, 0x6b, 0x2e, 0x40, 0x05, 0x29, 0x90, 0xee, 0x82, 0xcc, 0x2a, 0xe9, 0x9e, 0x36, 0xfc, 0x93, - 0x49, 0x3a, 0xb2, 0x99, 0x1b, 0x57, 0x66, 0xf9, 0x13, 0x77, 0xb0, 0x34, 0xed, 0xb0, 0x05, 0x13, - 0x3a, 0x2d, 0x52, 0x5d, 0x76, 0x2c, 0xbc, 0x49, 0x73, 0x60, 0x5b, 0x24, 0xe3, 0xde, 0xf7, 0x51, - 0xfa, 0x83, 0x3d, 0x30, 0x15, 0x4f, 0xca, 0x85, 0xdc, 0xce, 0x6d, 0xef, 0x0c, 0x39, 0x5b, 0x67, - 0xba, 0x4e, 0xb6, 0x1e, 0x1e, 0xe9, 0xac, 0x08, 0xd1, 0x12, 0x79, 0x05, 0xd2, 0xb6, 0x18, 0x10, - 0x41, 0x3b, 0x03, 0xd9, 0x4a, 0x03, 0xc6, 0x8f, 0x89, 0x12, 0x69, 0x01, 0x90, 0x0c, 0x8f, 0x4b, - 0x7e, 0x6c, 0x56, 0x71, 0xbb, 0x08, 0x15, 0xf3, 0x03, 0xc1, 0xba, 0x2c, 0x68, 0x9f, 0x60, 0xc6, - 0x80, 0x1f, 0x1e, 0x35, 0x8f, 0x7b, 0x59, 0xbf, 0x51, 0x09, 0x34, 0xc7, 0x42, 0x89, 0x5d, 0xdf, - 0x54, 0xfc, 0xaa, 0xaf, 0xa6, 0xfe, 0xbd, 0x6c, 0x55, 0xff, 0xaa, 0x55, 0xf9, 0x69, 0x9e, 0x38, - 0x25, 0x8e, 0x38, 0xcb, 0x46, 0x4f, 0x9d, 0xd6, 0x6e, 0xb5, 0x27, 0x47, 0xce, 0x96, 0x6b, 0xed, - 0x23, 0x5a, 0xff, 0x8d, 0xf4, 0xf9, 0xcf, 0xb4, 0xae, 0xa1, 0x74, 0x67, 0x87, 0xa6, 0x76, 0x69, - 0xfb, 0xda, 0x47, 0x5f, 0xbf, 0x94, 0xee, 0xec, 0x58, 0xcc, 0x6b, 0x89, 0x8a, 0x73, 0x48, 0x04, - 0xe2, 0x31, 0x65, 0xa3, 0xe7, 0x2c, 0x24, 0x7a, 0x4e, 0x72, 0xb0, 0x6f, 0x02, 0xc7, 0x3e, 0xdc, - 0x17, 0x92, 0xc0, 0x24, 0x60, 0x8b, 0x5a, 0x66, 0x59, 0xd1, 0xfa, 0x3b, 0xb5, 0xf6, 0x4b, 0xe9, - 0xe1, 0x36, 0x7a, 0xde, 0xfb, 0xc2, 0x85, 0x16, 0x3a, 0x2e, 0xca, 0x9d, 0xc1, 0x22, 0xf5, 0x26, - 0x55, 0x64, 0xbe, 0x35, 0x52, 0x1d, 0x37, 0xa9, 0xf1, 0x1d, 0xff, 0x78, 0xaf, 0x3d, 0x7b, 0x9c, - 0xe8, 0x7e, 0x90, 0x66, 0x74, 0x3a, 0xe9, 0x23, 0x7b, 0xf2, 0x10, 0x51, 0x69, 0x9e, 0x53, 0x76, - 0xd5, 0xfb, 0x43, 0xb1, 0x9f, 0xe8, 0xfd, 0xeb, 0xd2, 0xfb, 0x32, 0x55, 0x5e, 0x82, 0xca, 0xbd, - 0x76, 0x48, 0xd5, 0x29, 0x7d, 0x60, 0xdf, 0xa8, 0x7a, 0x41, 0x1b, 0x60, 0xce, 0xa9, 0xff, 0x9b, - 0x0b, 0xac, 0x52, 0x06, 0xf8, 0x8f, 0xe2, 0x1e, 0x93, 0x4e, 0x67, 0xe2, 0x6f, 0xca, 0xb2, 0xf1, - 0xa0, 0xeb, 0xd7, 0x80, 0xb7, 0x9c, 0xf4, 0xfc, 0x2f, 0x04, 0x34, 0x99, 0xb6, 0x17, 0xbd, 0xa8, - 0xe0, 0x39, 0x65, 0x97, 0x4e, 0xc1, 0xe4, 0xb5, 0x00, 0x94, 0x48, 0x85, 0xd0, 0x17, 0xd6, 0xb1, - 0x49, 0x81, 0xb8, 0x82, 0x34, 0xe3, 0x1e, 0x90, 0xc1, 0x3b, 0x61, 0x5a, 0x26, 0x15, 0xd3, 0x6f, - 0xc3, 0xb2, 0xb3, 0xe2, 0xec, 0x20, 0xa9, 0x79, 0x4e, 0x41, 0x52, 0xa1, 0xb5, 0x29, 0x96, 0x93, - 0x29, 0x48, 0x2a, 0x8d, 0x24, 0xc7, 0x46, 0x2e, 0x4d, 0xd7, 0x49, 0x84, 0x2a, 0x69, 0xda, 0x14, - 0x38, 0x90, 0xf1, 0x2f, 0x8a, 0x75, 0x5e, 0x3d, 0x20, 0xd8, 0xc6, 0x55, 0x20, 0x21, 0x93, 0xcc, - 0xef, 0x39, 0x37, 0xf1, 0x8f, 0x35, 0xcb, 0xb9, 0x1b, 0x3f, 0x16, 0xa3, 0xd4, 0xcd, 0x12, 0x55, - 0x84, 0xc2, 0x0d, 0x11, 0x32, 0xb6, 0x72, 0x37, 0x61, 0x6c, 0xfa, 0x4f, 0x4b, 0x34, 0x50, 0xee, - 0x0e, 0x47, 0x82, 0x0a, 0xe1, 0x82, 0x72, 0x77, 0xc2, 0x1f, 0xdf, 0xf9, 0xcd, 0xc5, 0x67, 0xa8, - 0x47, 0x45, 0x24, 0xb5, 0x1a, 0x79, 0x75, 0x9d, 0x47, 0x94, 0x74, 0x49, 0x95, 0x2b, 0xbd, 0x46, - 0xa9, 0xe4, 0x81, 0xa4, 0xc5, 0x7a, 0x26, 0xb5, 0x35, 0xeb, 0x36, 0xb9, 0xe1, 0x47, 0xaa, 0xe3, - 0xda, 0xed, 0x91, 0xae, 0xf4, 0x45, 0xd5, 0x67, 0x80, 0x8b, 0xcf, 0xa2, 0xc9, 0x4a, 0x18, 0xb2, - 0x10, 0xe7, 0x93, 0xfe, 0x20, 0xe7, 0x10, 0x2d, 0x93, 0x3c, 0x98, 0xa2, 0x4f, 0x9d, 0xc9, 0xd9, - 0x1b, 0x03, 0x16, 0x1f, 0x46, 0x05, 0x8d, 0xa1, 0xa6, 0x50, 0x82, 0x7a, 0xf5, 0x2e, 0x24, 0x77, - 0xda, 0xa4, 0x44, 0x2a, 0x4e, 0x0d, 0x74, 0x8f, 0x9e, 0xfb, 0x84, 0xa5, 0x42, 0xcd, 0xf7, 0xba, - 0xdc, 0x3f, 0xf3, 0x41, 0x9d, 0x58, 0x8e, 0xf2, 0xa3, 0x98, 0x23, 0xc1, 0xb7, 0xb7, 0x04, 0x9f, - 0xf2, 0x48, 0x81, 0x34, 0x69, 0xf4, 0xdc, 0x27, 0xe9, 0xb3, 0x7b, 0x18, 0x38, 0x29, 0x14, 0x6b, - 0xd0, 0xa4, 0x78, 0xa8, 0x29, 0xda, 0xc8, 0x92, 0xec, 0x92, 0x43, 0x0a, 0x2d, 0x92, 0x16, 0x68, - 0xdd, 0x1f, 0x80, 0xd7, 0xa6, 0x3b, 0xc2, 0x13, 0x82, 0x9b, 0x09, 0x53, 0x80, 0x13, 0x5b, 0x05, - 0x84, 0xe0, 0xe9, 0xfd, 0xfa, 0xe6, 0xc6, 0x46, 0x9a, 0x21, 0x97, 0xbc, 0x61, 0xe1, 0x8a, 0xa5, - 0x0d, 0x10, 0x58, 0x65, 0xbb, 0xbf, 0x31, 0xae, 0x94, 0x83, 0x95, 0x01, 0x6a, 0xc1, 0x13, 0x56, - 0x4f, 0x51, 0xf2, 0x84, 0x5b, 0xbb, 0xf9, 0x26, 0x4d, 0x39, 0x9b, 0x3a, 0x71, 0xbd, 0x3c, 0x39, - 0x78, 0xd0, 0x16, 0xda, 0xc7, 0x75, 0x2e, 0xbe, 0xc4, 0xdf, 0x69, 0x16, 0x19, 0xcf, 0xe3, 0xb8, - 0x3b, 0xcd, 0x4a, 0x3d, 0x1b, 0x22, 0x79, 0x1a, 0x03, 0x7d, 0xd2, 0x47, 0x4d, 0xc3, 0x1f, 0xd3, - 0xbc, 0x79, 0x10, 0x66, 0x82, 0xbc, 0x96, 0xe7, 0xaf, 0x3e, 0x5f, 0xe2, 0x2f, 0x02, 0x10, 0xd7, - 0xbd, 0xe1, 0xa5, 0x62, 0xdf, 0x3d, 0xd8, 0x95, 0xed, 0xbb, 0x37, 0x6e, 0x12, 0x56, 0xe9, 0xd7, - 0xf0, 0x53, 0x38, 0x27, 0x64, 0x7a, 0x0d, 0xef, 0x36, 0x77, 0x0c, 0xa1, 0x0b, 0xe0, 0x52, 0x3e, - 0xdd, 0xf7, 0xf6, 0x68, 0x6b, 0xa7, 0x7e, 0x15, 0xff, 0x1c, 0x17, 0x7c, 0xa1, 0x98, 0xc5, 0xcf, - 0x2f, 0xf7, 0xea, 0x85, 0x0e, 0x5d, 0x11, 0xee, 0xa4, 0x5d, 0x19, 0xd1, 0x1a, 0x1e, 0x41, 0xae, - 0x16, 0x89, 0xfa, 0x10, 0x13, 0x0f, 0x71, 0x57, 0x8b, 0x24, 0xcd, 0x87, 0x93, 0x1f, 0x1c, 0xf8, - 0x5a, 0x24, 0xe2, 0x35, 0x8c, 0x45, 0x25, 0x8d, 0xf0, 0xe6, 0x6a, 0x91, 0xc4, 0x5a, 0xfd, 0x59, - 0xc6, 0x34, 0x23, 0x2e, 0x2c, 0x7b, 0x96, 0xb1, 0xd0, 0xf4, 0xe8, 0x02, 0x0a, 0x01, 0x53, 0x30, - 0x16, 0xf6, 0xfe, 0x42, 0xdc, 0xa4, 0xc7, 0x7d, 0x98, 0xce, 0xde, 0xf7, 0x3f, 0xae, 0xc7, 0x7d, - 0xb0, 0x45, 0x35, 0x9d, 0x8c, 0x2d, 0xaa, 0x59, 0x60, 0x88, 0x97, 0x01, 0x41, 0x44, 0xec, 0xce, - 0x20, 0xfd, 0xd6, 0x92, 0x00, 0xcb, 0xac, 0x50, 0x7a, 0xd8, 0xb9, 0x67, 0x90, 0xc5, 0xf6, 0xfd, - 0xeb, 0x1d, 0x88, 0x8d, 0x59, 0x31, 0x2e, 0x66, 0x92, 0xaf, 0xfc, 0x5c, 0x95, 0x57, 0x65, 0x05, - 0x21, 0xb1, 0xfd, 0x12, 0x1f, 0x98, 0xc4, 0xfe, 0x4b, 0xe6, 0x68, 0x25, 0xf4, 0x5e, 0xdd, 0x51, - 0x54, 0x33, 0x5b, 0x13, 0x1f, 0x0a, 0x02, 0xe2, 0x0f, 0x41, 0xda, 0x2b, 0xcf, 0xa8, 0x0b, 0x2c, - 0xd0, 0x5c, 0xc8, 0x0d, 0x5d, 0xcc, 0xaf, 0xce, 0x0a, 0xbd, 0x41, 0x02, 0x93, 0xb3, 0x25, 0xb8, - 0x77, 0xfc, 0x48, 0xf7, 0x59, 0xa2, 0x71, 0x10, 0x73, 0xa3, 0x11, 0x8d, 0xe3, 0x41, 0xbe, 0x2f, - 0x88, 0xc9, 0xe1, 0x80, 0x66, 0x3d, 0x44, 0x07, 0x13, 0x72, 0x79, 0xe3, 0x12, 0x72, 0xba, 0x24, - 0xcd, 0x9f, 0x88, 0x24, 0xad, 0x5a, 0xa7, 0xca, 0xcf, 0xa2, 0x9f, 0x7b, 0x9d, 0x10, 0x24, 0x2d, - 0xa2, 0xbe, 0x95, 0xdc, 0xb8, 0xad, 0x28, 0xfe, 0x5c, 0xa0, 0x78, 0xf0, 0x1c, 0xa7, 0x57, 0xb7, - 0x59, 0x0b, 0x75, 0x67, 0xe8, 0x5e, 0x2f, 0x98, 0x4e, 0xdf, 0x15, 0x76, 0x0e, 0x0c, 0xb6, 0xf3, - 0xaa, 0xf5, 0x27, 0xfc, 0xa6, 0xe3, 0x38, 0x7d, 0x34, 0x48, 0x9e, 0xe0, 0x82, 0x2e, 0xe6, 0xe9, - 0x13, 0xd0, 0x1c, 0x86, 0x63, 0x9f, 0x12, 0x88, 0xc4, 0x82, 0x3a, 0x0d, 0x6e, 0xca, 0xa2, 0xc1, - 0x6f, 0x44, 0x0c, 0xe8, 0x71, 0x69, 0xed, 0x3f, 0xaa, 0xfb, 0xcc, 0x92, 0x9e, 0xe8, 0xe3, 0x06, - 0x9e, 0x69, 0x0e, 0x71, 0x4c, 0xa3, 0x37, 0xbd, 0xd3, 0x02, 0x34, 0xe3, 0x65, 0x7c, 0x30, 0x7b, - 0x19, 0x6d, 0x66, 0x34, 0x9e, 0x05, 0xec, 0x75, 0xa1, 0xbb, 0x1d, 0x9a, 0x8a, 0x31, 0x7d, 0x6b, - 0x13, 0x8c, 0x2c, 0x4e, 0x6c, 0x6b, 0x5b, 0x47, 0x79, 0x07, 0x82, 0xea, 0x40, 0x94, 0xb6, 0x57, - 0xfc, 0xa1, 0x44, 0x28, 0xdc, 0x50, 0xee, 0x6e, 0x8c, 0xf8, 0x83, 0xe4, 0x8f, 0x78, 0x73, 0x20, - 0xa0, 0xc4, 0xe3, 0xe5, 0xee, 0x1d, 0xfe, 0xc6, 0xed, 0x1b, 0xd9, 0x8f, 0xed, 0xfe, 0x50, 0xa3, - 0x12, 0x2c, 0x77, 0xb3, 0x64, 0xcd, 0x8a, 0xe1, 0x92, 0xd6, 0x25, 0xa0, 0x7c, 0x2c, 0x2a, 0x4a, - 0x5c, 0xe4, 0xa4, 0xb0, 0xc0, 0x79, 0x9a, 0x98, 0xa5, 0xab, 0x7f, 0xa9, 0xca, 0x9b, 0xbd, 0xa4, - 0xc1, 0x37, 0x3d, 0x20, 0xd2, 0xa9, 0xe7, 0x0f, 0x2e, 0x34, 0xcd, 0xfc, 0x49, 0xf1, 0x21, 0xde, - 0xe5, 0x99, 0xa2, 0x97, 0x5c, 0xbf, 0x14, 0xf3, 0x9b, 0x0d, 0xbd, 0x10, 0x7d, 0x5a, 0x47, 0x61, - 0x9e, 0x11, 0x1c, 0x8b, 0xa1, 0xb0, 0xd4, 0x24, 0x36, 0x61, 0xc4, 0xda, 0xe1, 0xae, 0xe4, 0xe0, - 0x1b, 0x06, 0x3e, 0x6a, 0x78, 0x3d, 0x17, 0x2f, 0x7d, 0x1e, 0xbc, 0x4f, 0xe6, 0xf4, 0xdc, 0xd9, - 0xf4, 0xbb, 0x9c, 0xb6, 0x9b, 0xea, 0xb8, 0xc6, 0xab, 0xb6, 0x2b, 0x0d, 0xd5, 0xb6, 0x80, 0x74, - 0x41, 0xde, 0x6b, 0xe8, 0xaa, 0xed, 0x6c, 0xc6, 0x78, 0x86, 0x82, 0x8b, 0x3b, 0xd0, 0xb5, 0x59, - 0x96, 0x27, 0x66, 0x12, 0x59, 0x12, 0x4f, 0xee, 0x25, 0x21, 0x44, 0x37, 0xae, 0xfe, 0x81, 0x00, - 0x6f, 0x0a, 0x48, 0xb4, 0xf6, 0x20, 0x3e, 0x84, 0xf2, 0x1a, 0x23, 0x0d, 0x7c, 0x9c, 0x6f, 0xfc, - 0x5b, 0x9a, 0xae, 0xdd, 0x7c, 0x53, 0xeb, 0x3c, 0x98, 0x39, 0x87, 0x4f, 0xee, 0x5a, 0xff, 0x0d, - 0x1f, 0x2e, 0x15, 0x1f, 0x45, 0x45, 0x89, 0x50, 0x93, 0x12, 0x4f, 0xf8, 0x9b, 0xa2, 0x64, 0x5d, - 0xf2, 0xa0, 0x89, 0x51, 0x2a, 0x15, 0x71, 0x88, 0xd1, 0x4b, 0x45, 0xd9, 0xfc, 0x6e, 0x9e, 0x68, - 0xd0, 0x34, 0x5c, 0xd4, 0x42, 0x6b, 0xb8, 0x28, 0xf7, 0x2f, 0x64, 0xdf, 0xfa, 0x72, 0xb7, 0x29, - 0x6a, 0x94, 0x67, 0x40, 0x80, 0x98, 0x2f, 0x8e, 0x22, 0x54, 0x5c, 0x81, 0x0a, 0x88, 0x61, 0x81, - 0x0a, 0x16, 0x08, 0x56, 0x41, 0x4a, 0xcc, 0x81, 0x9e, 0x58, 0x74, 0x44, 0x52, 0x25, 0xfe, 0x12, - 0x4d, 0x06, 0xc6, 0x8f, 0x53, 0x56, 0xb0, 0xe0, 0x9d, 0xff, 0x62, 0xad, 0x92, 0xf0, 0x87, 0x1a, - 0xe9, 0x49, 0x94, 0xb6, 0xcb, 0xe2, 0x77, 0x56, 0xec, 0xd9, 0x5b, 0x80, 0x44, 0x6b, 0xdb, 0x6f, - 0x26, 0xe2, 0x5e, 0x95, 0xcd, 0x89, 0x8e, 0x0c, 0x8a, 0x3f, 0xd1, 0x15, 0x41, 0x07, 0xee, 0xac, - 0x23, 0xdd, 0xca, 0xac, 0x90, 0x7b, 0xf0, 0x0e, 0x9f, 0x6e, 0x18, 0x25, 0x40, 0x43, 0x6e, 0x9b, - 0x67, 0x7c, 0x54, 0x57, 0xf9, 0x6a, 0xe1, 0xbb, 0xc6, 0x13, 0x76, 0x2f, 0xd3, 0xda, 0x3e, 0xd1, - 0xb0, 0x7b, 0xdd, 0x47, 0xd2, 0x47, 0xcf, 0xd8, 0x84, 0xdd, 0xdb, 0x82, 0xf2, 0xf1, 0x70, 0xc9, - 0x89, 0x6d, 0x8a, 0x34, 0xcb, 0x8e, 0x95, 0x40, 0xeb, 0x26, 0x60, 0xd2, 0xbd, 0x74, 0x23, 0x1b, - 0x78, 0x2f, 0x3d, 0xbc, 0xcf, 0xfa, 0xae, 0x93, 0x3c, 0x42, 0xc4, 0x80, 0x24, 0xaa, 0x0d, 0x3b, - 0x3e, 0x14, 0xf2, 0x51, 0x6d, 0xd8, 0xf1, 0xa1, 0x98, 0x3f, 0x30, 0x70, 0x47, 0x85, 0x65, 0xe6, - 0x60, 0x70, 0x74, 0x23, 0xa2, 0x02, 0xaa, 0x98, 0x3f, 0xb0, 0x70, 0x22, 0xc9, 0xac, 0x27, 0xa3, - 0xaf, 0x10, 0xac, 0xcf, 0x73, 0x94, 0x5e, 0x1b, 0x9b, 0x95, 0xb3, 0x3b, 0xf1, 0x75, 0x5c, 0xb9, - 0x9d, 0x42, 0x65, 0x37, 0xad, 0x71, 0xea, 0x53, 0xf3, 0x72, 0xb5, 0xff, 0x8a, 0xc2, 0xe4, 0x17, - 0xd9, 0xc2, 0xe4, 0x5e, 0x3b, 0xca, 0xa3, 0x1f, 0x9c, 0x88, 0x2c, 0xb9, 0xe6, 0x42, 0x33, 0x2d, - 0x4d, 0xc5, 0x8a, 0x2c, 0xd5, 0x6f, 0xb6, 0x2a, 0x8b, 0x3a, 0x27, 0x17, 0xb2, 0xc8, 0x7f, 0x3a, - 0xe7, 0x3e, 0x6a, 0x39, 0x65, 0x00, 0xf1, 0xea, 0xa7, 0x8c, 0x62, 0x87, 0x68, 0x7f, 0x5f, 0x5f, - 0x7c, 0x7f, 0xbb, 0x41, 0xff, 0x1c, 0xa4, 0x80, 0xe7, 0xef, 0xf2, 0xd0, 0x3d, 0x35, 0x8d, 0x8a, - 0x3f, 0x5c, 0xbb, 0xed, 0xe7, 0xa1, 0x78, 0x22, 0x12, 0xdb, 0x85, 0xd7, 0x96, 0x29, 0xce, 0x6d, - 0x02, 0x2a, 0xc4, 0xc4, 0xc0, 0x49, 0xe1, 0x1d, 0xaa, 0xbc, 0xd6, 0xab, 0x17, 0x4a, 0xcf, 0xd0, - 0x30, 0x38, 0x34, 0x83, 0x50, 0xfa, 0xed, 0x7e, 0xad, 0xf3, 0x60, 0x72, 0xb8, 0x1d, 0x42, 0x1f, - 0x61, 0xac, 0x96, 0xf3, 0x46, 0x9f, 0x74, 0x5f, 0x67, 0xe6, 0xdc, 0x25, 0xbe, 0x0d, 0xa4, 0x15, - 0xca, 0x07, 0x93, 0x9c, 0x0e, 0xda, 0x18, 0x69, 0xf0, 0xe9, 0x1f, 0x11, 0x57, 0xf2, 0x9a, 0x87, - 0x8b, 0x58, 0xc4, 0x08, 0x8f, 0x73, 0x9a, 0xc7, 0xf4, 0x1c, 0x3a, 0xc7, 0xa3, 0x86, 0xce, 0x01, - 0xe6, 0x39, 0x82, 0x1f, 0x5d, 0x27, 0x98, 0xee, 0xa4, 0x6d, 0x54, 0x0d, 0x0a, 0xaa, 0xfc, 0xb1, - 0x80, 0xae, 0x0a, 0x5e, 0x67, 0x1c, 0x49, 0x6f, 0x0a, 0x10, 0xd3, 0x24, 0x75, 0xea, 0x5c, 0x72, - 0xf8, 0x3a, 0xa4, 0xc2, 0x85, 0x09, 0x6a, 0x43, 0x6f, 0xc2, 0x1f, 0xe5, 0x6e, 0x1a, 0x5b, 0x9d, - 0xa4, 0x6a, 0x85, 0xb7, 0x46, 0xf4, 0x73, 0xfd, 0x9f, 0xa4, 0x7b, 0xda, 0xe0, 0x74, 0x50, 0xee, - 0x86, 0xc6, 0x99, 0xae, 0xd7, 0xb5, 0xb7, 0x3f, 0x4e, 0x0e, 0x1e, 0xd4, 0xda, 0xf7, 0x64, 0xfa, - 0x07, 0x21, 0xd5, 0xf9, 0x32, 0xed, 0xc6, 0xc7, 0x5f, 0xb4, 0xee, 0x4d, 0x0e, 0x1e, 0xd5, 0x2b, - 0xe8, 0xa7, 0x7a, 0x5b, 0x33, 0xb7, 0x8e, 0x2c, 0xc7, 0x3d, 0xf6, 0x76, 0xe0, 0xa3, 0x0a, 0xf9, - 0xa2, 0x67, 0x58, 0x40, 0xa5, 0x76, 0x63, 0xbe, 0x23, 0xc4, 0x9a, 0xe7, 0x8c, 0x0b, 0x4d, 0x35, - 0x5d, 0x14, 0x89, 0xcf, 0xa1, 0xe9, 0x71, 0xbe, 0x40, 0x67, 0x68, 0x12, 0x93, 0x33, 0xbb, 0x4e, - 0x9a, 0xa2, 0x5f, 0x24, 0xd5, 0xd5, 0xfa, 0xb2, 0x6b, 0xc5, 0xcd, 0x68, 0xa6, 0xa9, 0x88, 0x63, - 0x77, 0xa2, 0x15, 0x5b, 0x6b, 0xa5, 0xe9, 0xc6, 0xcd, 0x14, 0xbd, 0x44, 0xb1, 0xc0, 0x88, 0x35, - 0x76, 0x76, 0x75, 0x32, 0x3e, 0x93, 0x5d, 0xdd, 0xe8, 0xca, 0x2e, 0xf3, 0x18, 0x56, 0x35, 0x90, - 0xdb, 0x6b, 0x9e, 0x3e, 0xd7, 0x86, 0x9a, 0xd6, 0x8f, 0x09, 0xe8, 0xae, 0xf5, 0x91, 0xa0, 0xa2, - 0x6b, 0x4f, 0x34, 0xf2, 0xff, 0x13, 0x28, 0x1f, 0x9f, 0x20, 0xc8, 0x4d, 0xb1, 0xcd, 0xd1, 0xcc, - 0xa6, 0x09, 0x71, 0xbc, 0x27, 0x8d, 0x44, 0x19, 0x4d, 0xa6, 0x87, 0x12, 0x2a, 0x9b, 0xc7, 0xdd, - 0x9e, 0xb5, 0xf3, 0x6c, 0x40, 0x77, 0x3b, 0xc0, 0x88, 0xa5, 0x10, 0x27, 0x8f, 0x7b, 0x8d, 0xa2, - 0xff, 0xe6, 0xc3, 0xd2, 0xba, 0x4c, 0x61, 0x69, 0x3d, 0xff, 0xa1, 0x00, 0xcd, 0xa8, 0x8d, 0xf9, - 0x43, 0x24, 0x72, 0x00, 0x93, 0x4b, 0xaf, 0xa1, 0x42, 0x1a, 0x7b, 0x81, 0xde, 0x89, 0x57, 0x6f, - 0x55, 0xe5, 0x5f, 0x7b, 0xf5, 0x42, 0xa9, 0x9e, 0x8f, 0xb7, 0x51, 0x57, 0x6f, 0x84, 0x5e, 0x54, - 0xbb, 0x68, 0x0d, 0x78, 0xa3, 0x81, 0xc7, 0xd4, 0x50, 0xd7, 0x68, 0x6b, 0x67, 0x72, 0xb0, 0xf5, - 0xf6, 0x48, 0x17, 0x24, 0xce, 0xb7, 0xc2, 0xf8, 0xf4, 0xbe, 0xc5, 0x2d, 0xd6, 0x9c, 0x8c, 0x8f, - 0x91, 0xec, 0x20, 0x86, 0x91, 0xf8, 0xde, 0x68, 0x24, 0x98, 0xb9, 0xb5, 0x27, 0x7d, 0x71, 0x38, - 0x2b, 0xa0, 0x85, 0x0e, 0x42, 0x2e, 0x20, 0xdd, 0x02, 0x6f, 0x1d, 0x8e, 0xa1, 0x02, 0x8c, 0x0f, - 0x7c, 0x3e, 0xc3, 0x33, 0xfa, 0xb5, 0x2a, 0xff, 0xca, 0x0b, 0x25, 0xfa, 0x74, 0xb8, 0x01, 0x99, - 0x26, 0x63, 0x9a, 0xe6, 0xb8, 0xa6, 0x03, 0x1d, 0x8b, 0xb3, 0x50, 0xc1, 0x76, 0x92, 0x72, 0x1c, - 0xef, 0x38, 0x85, 0x3e, 0xf8, 0x21, 0x2e, 0x41, 0x62, 0x43, 0xcc, 0x1f, 0x50, 0xea, 0x95, 0x58, - 0x28, 0x12, 0xdc, 0xa8, 0x04, 0x22, 0xe1, 0x60, 0x9c, 0xbe, 0x82, 0xb5, 0xa9, 0x11, 0x97, 0xa2, - 0xbb, 0x42, 0x0d, 0xe1, 0x48, 0x4c, 0x91, 0x1b, 0x1b, 0x6b, 0xfd, 0x4a, 0x53, 0x24, 0xbc, 0x51, - 0x49, 0xc4, 0xc9, 0x66, 0x54, 0xe8, 0xb3, 0xab, 0xc2, 0xeb, 0x8d, 0x8f, 0x3e, 0x91, 0x66, 0x70, - 0x6b, 0x9a, 0xea, 0x63, 0x3f, 0xc5, 0x32, 0x34, 0x3d, 0x48, 0xf2, 0x7a, 0xaf, 0x8d, 0x04, 0xfc, - 0x8d, 0x58, 0x68, 0xc1, 0x4d, 0x80, 0x2f, 0xbb, 0x18, 0xd3, 0x53, 0x5c, 0x69, 0x54, 0x02, 0x89, - 0x08, 0x8d, 0x31, 0xea, 0xd3, 0x7f, 0x13, 0xa7, 0x7a, 0x3c, 0x3e, 0x5a, 0x8d, 0xa8, 0x53, 0xbd, - 0x51, 0x44, 0xbe, 0x13, 0x8a, 0xfb, 0xb7, 0x35, 0x2a, 0xab, 0x5a, 0x42, 0x01, 0xc2, 0xb0, 0x53, - 0xe8, 0x77, 0xcc, 0xc5, 0xe2, 0xcf, 0xd1, 0xc2, 0xf8, 0xce, 0x50, 0xf4, 0x17, 0xfe, 0x50, 0x62, - 0x75, 0x24, 0x06, 0x49, 0xc7, 0x37, 0xc1, 0x68, 0x19, 0x6a, 0x8a, 0xc9, 0x1c, 0xc6, 0x02, 0x13, - 0xe7, 0xa0, 0x49, 0xc1, 0xd8, 0x2e, 0x5f, 0x73, 0x18, 0x0c, 0xe2, 0x3e, 0xfa, 0xcb, 0xd3, 0xe6, - 0x42, 0x33, 0x39, 0x1a, 0xbf, 0xd3, 0xdc, 0x04, 0xb0, 0xea, 0x79, 0xdf, 0x38, 0x24, 0xc5, 0x58, - 0x1a, 0x67, 0xa7, 0x0b, 0x4d, 0xc3, 0xcd, 0x8c, 0x3c, 0x94, 0xe2, 0x53, 0xd9, 0x32, 0x03, 0x52, - 0x68, 0xe8, 0x85, 0x52, 0x31, 0x4f, 0xdb, 0x8c, 0xa9, 0x0c, 0xb9, 0xf2, 0x0a, 0x9a, 0xc2, 0x67, - 0xcf, 0x04, 0xa9, 0x56, 0x69, 0x37, 0x56, 0xe3, 0xa3, 0x4b, 0xb8, 0x3c, 0x98, 0xf0, 0x62, 0x0a, - 0xee, 0x46, 0xf9, 0x44, 0x9a, 0x34, 0x24, 0x4e, 0xea, 0xda, 0xa5, 0xcc, 0xc5, 0x77, 0xd9, 0xdd, - 0x28, 0x07, 0x50, 0xfa, 0x14, 0x9a, 0x91, 0xdd, 0x8d, 0xcd, 0x33, 0xaa, 0x59, 0xfc, 0x33, 0xaa, - 0x22, 0xee, 0x99, 0x94, 0xe7, 0x1f, 0x08, 0x68, 0x1e, 0x24, 0x4a, 0x35, 0x0f, 0x4e, 0xb7, 0x69, - 0x6e, 0xb4, 0x3e, 0xbf, 0x7b, 0x58, 0x95, 0x1f, 0xe2, 0xa5, 0xd0, 0x02, 0x9a, 0xd7, 0x78, 0xfc, - 0x22, 0x68, 0x3d, 0x13, 0x41, 0x0e, 0x26, 0x2f, 0xf3, 0x58, 0xe8, 0x03, 0x59, 0x10, 0x51, 0xc5, - 0x7c, 0x98, 0x0d, 0x2a, 0x5e, 0x3c, 0x7f, 0x70, 0xa1, 0xf9, 0x0e, 0xb3, 0xf8, 0x23, 0x25, 0x72, - 0x76, 0x1d, 0x90, 0x1b, 0x2d, 0xd2, 0x1c, 0x7e, 0xe9, 0x0c, 0xba, 0xb2, 0x7a, 0x0e, 0xa4, 0x04, - 0x54, 0x84, 0x3b, 0x59, 0xeb, 0xdf, 0xa6, 0x34, 0x7e, 0x6d, 0x76, 0xf9, 0x0d, 0x9a, 0xd4, 0x88, - 0x3b, 0x62, 0x04, 0x70, 0xbf, 0xdd, 0x84, 0xc9, 0xa7, 0x96, 0x90, 0xff, 0x53, 0xfe, 0x80, 0x37, - 0xc7, 0xd0, 0x52, 0x67, 0x8d, 0xb3, 0xfb, 0xd3, 0x7d, 0x9f, 0xb1, 0x2b, 0x5e, 0xa8, 0x2b, 0x7d, - 0x1c, 0x4d, 0xe1, 0xda, 0x4d, 0x88, 0x21, 0x6e, 0x08, 0xe8, 0x6e, 0x03, 0x67, 0xd0, 0x0b, 0xe3, - 0x85, 0x3a, 0x46, 0xb6, 0x82, 0x7d, 0xa8, 0x31, 0xbd, 0xc5, 0x98, 0x14, 0x6b, 0x66, 0x2b, 0xd7, - 0x37, 0xc3, 0x56, 0x9e, 0xbf, 0x75, 0xa1, 0x12, 0xeb, 0xd8, 0xff, 0x58, 0x39, 0xa0, 0x46, 0x95, - 0x9f, 0x41, 0x4f, 0x79, 0x1d, 0x31, 0x22, 0xcd, 0xe4, 0x11, 0x4c, 0x28, 0xc7, 0x4a, 0xf7, 0x6f, - 0x53, 0xba, 0xdf, 0xe4, 0x0f, 0x85, 0x13, 0x5f, 0x9b, 0xee, 0xd7, 0xa3, 0x49, 0x09, 0xdc, 0x11, - 0xa3, 0xfb, 0xd9, 0x56, 0x9b, 0x44, 0x28, 0x9c, 0xa0, 0x74, 0x0e, 0x90, 0x3a, 0x9d, 0x5f, 0x3d, - 0xa7, 0x07, 0xac, 0xf2, 0xd1, 0xba, 0x2c, 0x62, 0x25, 0x8d, 0x27, 0x44, 0xac, 0xf0, 0xb9, 0xef, - 0x87, 0x58, 0xff, 0x99, 0x89, 0x58, 0xd9, 0xd8, 0xff, 0x58, 0x89, 0x95, 0xe6, 0x66, 0x72, 0xc4, - 0x88, 0x24, 0xf2, 0x08, 0x86, 0xe5, 0xb7, 0x52, 0xeb, 0xd3, 0x68, 0xea, 0xcf, 0x15, 0x7f, 0x63, - 0x62, 0x07, 0x25, 0x02, 0x96, 0xa5, 0xd6, 0x5c, 0x2a, 0x95, 0x68, 0x7b, 0x2e, 0x68, 0x43, 0x9f, - 0xa6, 0xde, 0x6d, 0x4d, 0x9d, 0xb9, 0x90, 0x3a, 0x74, 0x41, 0xeb, 0x7e, 0x97, 0xe6, 0xf9, 0xd9, - 0xe7, 0x42, 0xd3, 0x18, 0xec, 0xf7, 0xb0, 0x14, 0xab, 0x51, 0x91, 0xfe, 0x92, 0x80, 0x9e, 0x6b, - 0x49, 0xc8, 0x0a, 0xa3, 0x54, 0x2a, 0xe1, 0x17, 0xa4, 0x2c, 0x11, 0x6b, 0x56, 0x2a, 0x89, 0x8f, - 0xce, 0x62, 0x9f, 0x01, 0xc4, 0xde, 0xf8, 0x64, 0x4d, 0xc5, 0x76, 0xde, 0x0e, 0x9e, 0x72, 0x07, - 0x05, 0xb8, 0xfe, 0x66, 0x29, 0x5c, 0x37, 0x06, 0x76, 0x28, 0x4d, 0xba, 0xbd, 0x6a, 0x49, 0xb6, - 0xff, 0x27, 0xf1, 0x9e, 0xd3, 0xfd, 0x3f, 0x27, 0x25, 0x87, 0x8e, 0x90, 0x80, 0x1f, 0x2c, 0xa2, - 0x00, 0x1d, 0x8f, 0x73, 0x8f, 0xd2, 0x02, 0xfa, 0x12, 0x1d, 0xe2, 0x39, 0x5f, 0x3a, 0x67, 0x84, - 0x4f, 0x85, 0x85, 0xb9, 0x6c, 0x4e, 0x1f, 0xfc, 0xb5, 0x86, 0x93, 0xe3, 0x3e, 0xcf, 0x64, 0xbe, - 0x86, 0xf7, 0x52, 0xcb, 0x55, 0x79, 0x29, 0x5a, 0xe2, 0x75, 0xfc, 0x3a, 0x73, 0x5b, 0xe4, 0x87, - 0xee, 0xf9, 0xb3, 0x3c, 0x54, 0xfa, 0x7c, 0xb3, 0x12, 0xdb, 0x55, 0xaf, 0xc4, 0x9a, 0xaa, 0x77, - 0xc9, 0xe4, 0x84, 0x53, 0x57, 0xeb, 0x53, 0x7e, 0x47, 0x8e, 0x54, 0x8f, 0x21, 0x44, 0xdd, 0x89, - 0xb6, 0xb2, 0xd8, 0x4a, 0xd4, 0x0b, 0xce, 0x28, 0x96, 0x0a, 0xad, 0x69, 0x73, 0x82, 0xb8, 0x25, - 0x65, 0x36, 0xdc, 0x92, 0xf7, 0x9f, 0x33, 0x8a, 0xed, 0xe2, 0x41, 0x04, 0xc5, 0x65, 0x74, 0xd2, - 0xdc, 0x63, 0x1f, 0x98, 0xb4, 0xa8, 0x1d, 0xb9, 0x89, 0x67, 0xfc, 0xfe, 0xd0, 0xe8, 0x89, 0x8f, - 0x4d, 0x57, 0x99, 0x4f, 0xa1, 0x29, 0x09, 0x1a, 0x2f, 0x17, 0x7f, 0x2d, 0xdf, 0x68, 0xc9, 0x97, - 0x4b, 0x53, 0x52, 0x97, 0xce, 0xa5, 0x4e, 0xdd, 0x1a, 0x7d, 0x7b, 0x5f, 0x5d, 0xad, 0x0f, 0xb1, - 0x9a, 0xba, 0xa0, 0xf8, 0x04, 0x42, 0xd4, 0xc3, 0x16, 0x37, 0x2f, 0x30, 0x1c, 0x7e, 0xb9, 0x62, - 0xf2, 0x8a, 0x02, 0x82, 0x8b, 0xf1, 0xaf, 0x28, 0x70, 0xe3, 0x42, 0x30, 0x53, 0x46, 0x62, 0xd4, - 0xdc, 0x4a, 0x3c, 0x41, 0xf4, 0x42, 0xee, 0xaa, 0x86, 0x85, 0x3b, 0xd3, 0xeb, 0x58, 0x3c, 0xb2, - 0x1c, 0x6b, 0x20, 0x2d, 0x80, 0x8c, 0xfc, 0x40, 0x5f, 0xe9, 0x9e, 0xb6, 0xe4, 0xe0, 0x1b, 0xc9, - 0xc1, 0x03, 0xa9, 0xe3, 0x34, 0x13, 0x84, 0xe7, 0xa8, 0xcb, 0x69, 0x09, 0x09, 0xcd, 0x3d, 0x8e, - 0x0a, 0xfd, 0xb4, 0x88, 0x2e, 0x20, 0x41, 0x8c, 0x5e, 0x28, 0x4d, 0x83, 0xfe, 0xd9, 0x6f, 0x9f, - 0x5e, 0x23, 0xee, 0x40, 0x85, 0x51, 0x25, 0xd6, 0xb4, 0x35, 0x90, 0x78, 0x95, 0xc6, 0x75, 0xf0, - 0x66, 0x4b, 0x50, 0xe7, 0x71, 0xd3, 0xe4, 0x38, 0xac, 0x03, 0x49, 0xe4, 0xa7, 0xc1, 0x6c, 0xf5, - 0xb8, 0xb6, 0x26, 0xf1, 0x6a, 0xd5, 0xf3, 0xaa, 0xbc, 0x1e, 0xad, 0xf5, 0xe6, 0x98, 0x07, 0xf3, - 0x9e, 0x85, 0x58, 0x76, 0x7c, 0x5f, 0x9f, 0x0b, 0xfa, 0x88, 0x3f, 0x17, 0xf4, 0xef, 0x79, 0x8e, - 0x08, 0xa8, 0x00, 0xf7, 0x14, 0x17, 0x1f, 0x41, 0x05, 0xb8, 0x94, 0x6d, 0xb0, 0x96, 0x90, 0x81, - 0x04, 0x0a, 0xfe, 0x4f, 0xd4, 0x50, 0x1f, 0x80, 0x97, 0xd6, 0x23, 0x64, 0x14, 0xda, 0xe8, 0xa6, - 0xe5, 0xe6, 0x98, 0x17, 0x73, 0x96, 0x34, 0x44, 0x22, 0x0d, 0x8d, 0xca, 0x92, 0x68, 0x2c, 0x92, - 0x88, 0x6c, 0x6b, 0xde, 0xbe, 0x64, 0x0b, 0xae, 0xe5, 0x75, 0xd6, 0x23, 0x02, 0x9a, 0x6b, 0x3b, - 0xc5, 0xaf, 0x28, 0xc2, 0xab, 0xe9, 0xf6, 0x06, 0x03, 0x98, 0x6d, 0x3b, 0x31, 0x9b, 0x0d, 0x8d, - 0x7f, 0xb5, 0xe2, 0x51, 0x5d, 0x08, 0xd5, 0x44, 0x9a, 0x9a, 0x22, 0x61, 0x3c, 0x8c, 0x1f, 0xfa, - 0x86, 0x5e, 0x6b, 0xda, 0xd0, 0xef, 0xb6, 0xa0, 0x7c, 0x63, 0x22, 0xd6, 0x1c, 0x48, 0x8c, 0xb5, - 0x89, 0xb3, 0x94, 0xd7, 0xc6, 0xbc, 0xa5, 0xe2, 0xd1, 0xd6, 0x9e, 0xf4, 0x51, 0xea, 0x90, 0xed, - 0x79, 0xd7, 0x85, 0xa6, 0x41, 0x25, 0xdd, 0x09, 0x7e, 0xf0, 0x88, 0x59, 0x63, 0x42, 0x4c, 0xa9, - 0x05, 0x31, 0x78, 0x1e, 0x84, 0x1e, 0xc7, 0xc2, 0xcd, 0x62, 0x55, 0x7e, 0x00, 0x2d, 0xf2, 0x66, - 0x4d, 0x5f, 0x12, 0x01, 0x3f, 0xbc, 0xdb, 0xba, 0x67, 0x2d, 0x22, 0x8f, 0x73, 0xab, 0x9f, 0xa3, - 0xe9, 0xf5, 0x40, 0x95, 0xa1, 0x31, 0x48, 0x6c, 0xaa, 0x58, 0x42, 0xf5, 0xe4, 0xd0, 0x11, 0x08, - 0xc9, 0x6b, 0xda, 0x39, 0x4f, 0xe6, 0xd3, 0xc8, 0x08, 0x35, 0x9b, 0x22, 0xd1, 0x48, 0x63, 0xa4, - 0x61, 0x17, 0x13, 0x61, 0x37, 0x05, 0xab, 0x6d, 0xe3, 0xb4, 0xa0, 0xca, 0xad, 0x02, 0xaf, 0xd9, - 0xc6, 0xd9, 0x66, 0x52, 0x0e, 0x0e, 0x5c, 0xa9, 0x03, 0x9d, 0xda, 0xa1, 0x61, 0x9a, 0x12, 0x73, - 0xe0, 0x86, 0x36, 0x74, 0x94, 0x08, 0xcf, 0x1e, 0xed, 0x8d, 0x73, 0xa9, 0x03, 0x6f, 0xa6, 0x3a, - 0x8f, 0x7c, 0xd1, 0xba, 0x17, 0x5c, 0x82, 0x53, 0x27, 0xce, 0xa6, 0x8e, 0x75, 0xb0, 0xe6, 0xa9, - 0x13, 0xd7, 0x93, 0x23, 0x3d, 0xb8, 0x75, 0xf7, 0x71, 0x70, 0xcd, 0x22, 0x29, 0x8c, 0x6c, 0xbb, - 0xf8, 0xb2, 0xfa, 0xee, 0xd8, 0xec, 0x19, 0x42, 0x49, 0x50, 0x9a, 0xfe, 0x9b, 0x17, 0x97, 0x56, - 0x3c, 0xee, 0xaf, 0xd8, 0x2d, 0x57, 0xbc, 0x50, 0xf1, 0xd2, 0x43, 0x8b, 0x78, 0x2b, 0x0a, 0x16, - 0x45, 0x90, 0x55, 0x09, 0x28, 0xe1, 0x35, 0x55, 0x7e, 0x95, 0x65, 0x55, 0x8a, 0x04, 0x9a, 0x82, - 0xdb, 0x58, 0x66, 0xa5, 0xb2, 0xd4, 0x99, 0xc3, 0xc9, 0xa1, 0xb7, 0xc1, 0x61, 0x39, 0x39, 0x78, - 0x00, 0x12, 0x42, 0xb0, 0x6c, 0x3e, 0xd7, 0x93, 0xc3, 0xc7, 0x19, 0x64, 0xba, 0xa7, 0x0d, 0x46, - 0xa0, 0x67, 0x96, 0xa4, 0xe2, 0xb1, 0xa7, 0x2d, 0xf5, 0xd6, 0x00, 0x9d, 0x34, 0x89, 0x21, 0x05, - 0x2d, 0xb4, 0x23, 0x6f, 0x01, 0x3c, 0x4b, 0xc8, 0xb4, 0x03, 0x4d, 0xd9, 0x1e, 0x6a, 0x24, 0xcf, - 0x31, 0x13, 0x0a, 0x3c, 0x57, 0xb4, 0x23, 0x9b, 0xea, 0x48, 0xa4, 0x11, 0xc8, 0x86, 0x3c, 0x73, - 0xe7, 0xdb, 0x48, 0x25, 0xe0, 0xb5, 0xab, 0x5d, 0xed, 0xce, 0x1c, 0xbd, 0x49, 0x76, 0xe5, 0x8f, - 0x52, 0xbd, 0x43, 0xa9, 0xab, 0x67, 0x7d, 0x3c, 0x58, 0x55, 0xb5, 0x2a, 0x3f, 0x8d, 0x56, 0x7a, - 0xed, 0xd7, 0x56, 0xf7, 0x76, 0x24, 0xa3, 0x4c, 0x0e, 0x0e, 0xe3, 0x1e, 0x2e, 0x9d, 0xd3, 0x4e, - 0x9d, 0x80, 0xe1, 0x52, 0xda, 0x78, 0xbf, 0x00, 0xcd, 0x5b, 0xa3, 0x24, 0xaa, 0x77, 0x6e, 0x8c, - 0x44, 0xe3, 0x2c, 0x34, 0x3e, 0xd0, 0x26, 0xdb, 0xe5, 0xd0, 0xb6, 0xe6, 0x78, 0x28, 0xac, 0xc4, - 0xe3, 0x3a, 0x89, 0x80, 0xba, 0x61, 0x14, 0x4b, 0x85, 0x0c, 0x7b, 0x3e, 0xae, 0x54, 0xfc, 0x0d, - 0xb7, 0x7f, 0xbb, 0x8c, 0x27, 0x3b, 0xc6, 0xfe, 0xbd, 0x3c, 0x33, 0x70, 0x01, 0xb6, 0x1d, 0xad, - 0xf7, 0x12, 0x38, 0xf9, 0xb0, 0xe1, 0x1e, 0x48, 0xf5, 0x76, 0xc2, 0x5e, 0x84, 0x11, 0x4f, 0xb4, - 0x0b, 0x76, 0x3d, 0xc0, 0x9a, 0x8b, 0xbd, 0x02, 0x9a, 0xc6, 0x74, 0x8d, 0x8d, 0x44, 0x2d, 0xa3, - 0xaa, 0x4d, 0x42, 0x95, 0x7f, 0xe9, 0xcd, 0xaa, 0x92, 0x56, 0x43, 0x2f, 0xa9, 0x53, 0x17, 0x52, - 0x43, 0x87, 0xcb, 0xdd, 0x6c, 0x9c, 0xa9, 0x8e, 0xe3, 0x99, 0xd6, 0xf6, 0x00, 0xe1, 0x49, 0xc8, - 0x74, 0x01, 0x4a, 0x57, 0xea, 0x93, 0x3d, 0xe9, 0x4b, 0x07, 0x52, 0x1d, 0xc7, 0xf1, 0x5a, 0x90, - 0x10, 0x67, 0x50, 0x02, 0xb7, 0xa8, 0x85, 0xac, 0xb9, 0x6f, 0x12, 0x34, 0xf5, 0xfd, 0xcc, 0x97, - 0xf5, 0x41, 0xf1, 0xbf, 0x08, 0xa8, 0x20, 0x1e, 0x88, 0xe8, 0xa1, 0xe7, 0xfe, 0xb5, 0xa0, 0xca, - 0x23, 0x82, 0x17, 0xca, 0xa4, 0x8f, 0x84, 0x6d, 0x3b, 0xb7, 0x6e, 0x0b, 0xed, 0xde, 0x1a, 0x0a, - 0xba, 0x53, 0xef, 0xb6, 0xa6, 0x3f, 0xc6, 0x14, 0x96, 0xbc, 0xd9, 0x8b, 0x45, 0xc1, 0x99, 0x33, - 0x4b, 0x0c, 0xcf, 0x6f, 0x4c, 0xc6, 0x18, 0xb0, 0x3c, 0xd5, 0x77, 0x3e, 0x75, 0xe2, 0xba, 0x0e, - 0x9b, 0x7a, 0x6b, 0x20, 0x3d, 0x7c, 0x04, 0xa2, 0xb3, 0xba, 0x6b, 0xd6, 0xd5, 0x56, 0xbb, 0x01, - 0x77, 0xee, 0xba, 0x5a, 0x77, 0x72, 0x70, 0xc8, 0x6d, 0x74, 0xaf, 0xe7, 0x5f, 0x2c, 0xc7, 0x38, - 0x6e, 0x1d, 0xc1, 0xb5, 0x54, 0x9f, 0x74, 0xa7, 0x4e, 0x5c, 0xd7, 0x3a, 0x4e, 0x42, 0xa7, 0x00, - 0x94, 0xa3, 0x3d, 0x61, 0x4a, 0x5f, 0x21, 0x1b, 0x91, 0x6f, 0x32, 0xed, 0xc5, 0xf7, 0x33, 0x1f, - 0xcc, 0xaa, 0xea, 0x45, 0x55, 0xfe, 0x25, 0xda, 0xe2, 0xcd, 0x49, 0x52, 0xba, 0x93, 0x33, 0xb7, - 0xaa, 0x40, 0x8d, 0x20, 0xad, 0x3f, 0x17, 0x38, 0x22, 0xfa, 0x5c, 0xd0, 0xd7, 0xdb, 0x73, 0xc3, - 0x85, 0xe6, 0x3b, 0x74, 0xfc, 0x3d, 0x9c, 0xd4, 0x58, 0x1c, 0x81, 0x3c, 0xfb, 0xe0, 0x48, 0x6c, - 0x7c, 0xe4, 0x7d, 0x2b, 0x1f, 0x2a, 0xd9, 0x34, 0x6d, 0x8b, 0xd6, 0x50, 0xb5, 0x59, 0x95, 0x7d, - 0xa8, 0xde, 0x9b, 0x7b, 0xa2, 0xb6, 0x28, 0x24, 0x7d, 0x31, 0x14, 0xda, 0x58, 0x2f, 0x8b, 0xf9, - 0x21, 0x89, 0x1e, 0x54, 0xcc, 0xe8, 0x95, 0xbb, 0x27, 0x34, 0x95, 0x89, 0x0b, 0x90, 0xa1, 0xcb, - 0xeb, 0xa9, 0x2f, 0x8d, 0x12, 0x5c, 0xcf, 0xc9, 0x06, 0xe2, 0xdb, 0x6d, 0x12, 0x00, 0x1e, 0x54, - 0xcc, 0x7e, 0x19, 0xaf, 0xe9, 0x7c, 0xa6, 0x32, 0xb1, 0x04, 0x4d, 0x26, 0x4e, 0x12, 0x11, 0x96, - 0x0d, 0x93, 0xfd, 0x14, 0xe7, 0xa0, 0x49, 0x4a, 0x30, 0xa4, 0x2b, 0xff, 0x3e, 0xfa, 0xcb, 0x1c, - 0xe4, 0x69, 0x72, 0x56, 0xa2, 0x4b, 0x4f, 0xd2, 0x4e, 0xa0, 0xf1, 0xd1, 0xf4, 0xbe, 0x86, 0x40, - 0x7b, 0xdc, 0x8a, 0x0f, 0xda, 0xd4, 0x28, 0x96, 0x0a, 0x61, 0x51, 0x4c, 0x07, 0x21, 0xb3, 0x2c, - 0xcc, 0xfb, 0x6e, 0x64, 0x61, 0xfe, 0x0f, 0x52, 0x16, 0x16, 0xfc, 0x24, 0x0b, 0xf9, 0x28, 0x8a, - 0x66, 0x46, 0x26, 0x4a, 0xd1, 0xb8, 0x64, 0xe1, 0xbf, 0xb0, 0x93, 0x85, 0xdf, 0x5b, 0x84, 0xc5, - 0xdf, 0xea, 0xb2, 0x50, 0xb0, 0x75, 0x16, 0xa6, 0xe3, 0x03, 0x4f, 0x31, 0x22, 0x11, 0xc9, 0xbb, - 0x3d, 0x90, 0x88, 0x0f, 0xc2, 0xe4, 0xa1, 0xcf, 0x74, 0x4f, 0x9b, 0xd6, 0x7e, 0x49, 0xbb, 0xda, - 0x4a, 0x71, 0x61, 0x15, 0x90, 0x14, 0xad, 0xb9, 0x67, 0xcf, 0xb4, 0x1f, 0x8a, 0x57, 0x4b, 0x8f, - 0x4e, 0x62, 0xb2, 0x09, 0x89, 0xd6, 0xc1, 0x8a, 0x6e, 0xc3, 0x0a, 0xb2, 0x39, 0xd6, 0xc8, 0x02, - 0x7c, 0x72, 0x45, 0xe2, 0xc3, 0x68, 0x12, 0x39, 0x8c, 0x32, 0xb3, 0xf6, 0x7c, 0x9b, 0x70, 0x07, - 0x24, 0xee, 0x14, 0x9c, 0x5c, 0x29, 0xb0, 0x67, 0x2b, 0x9a, 0x6a, 0xaa, 0xb0, 0x39, 0x0b, 0xdb, - 0x05, 0xdb, 0x9e, 0x85, 0x0a, 0x42, 0xe1, 0xa0, 0xf2, 0x2a, 0x15, 0xb9, 0xf0, 0x03, 0x43, 0x06, - 0x95, 0x78, 0x80, 0x4a, 0x59, 0xf2, 0xb7, 0x27, 0x23, 0x10, 0x32, 0xa9, 0x0b, 0x87, 0x95, 0x18, - 0x9b, 0x18, 0xf9, 0x52, 0xfc, 0xeb, 0x06, 0x17, 0x7d, 0xd4, 0xa2, 0xdc, 0x81, 0xff, 0x9e, 0x2e, - 0xd0, 0x8a, 0x69, 0xe0, 0x54, 0x22, 0xd3, 0x38, 0xc3, 0x0c, 0x8d, 0x48, 0x9c, 0x7b, 0x58, 0xd2, - 0x52, 0xba, 0x7e, 0x24, 0xfc, 0x7e, 0xe6, 0xd6, 0xe1, 0xf4, 0xf0, 0xc7, 0xc4, 0xf7, 0xa2, 0x3f, - 0x35, 0xf8, 0x51, 0xea, 0xcc, 0x9b, 0x8c, 0x5f, 0xde, 0x1a, 0xdd, 0xdf, 0x4d, 0x35, 0xd9, 0x7f, - 0xec, 0x42, 0x0b, 0x9c, 0xfa, 0xfc, 0x1e, 0x58, 0x62, 0x8b, 0x49, 0x3d, 0x98, 0xef, 0xc4, 0x12, - 0x70, 0x04, 0xb0, 0xd1, 0x0f, 0x60, 0x6a, 0x56, 0xf2, 0x57, 0x54, 0x79, 0x1b, 0x7a, 0xd9, 0x3b, - 0xc6, 0x54, 0xa5, 0x8a, 0xf1, 0xe3, 0x4f, 0x6b, 0x1d, 0xb1, 0x32, 0xc2, 0x2e, 0x34, 0xd5, 0xd4, - 0xb3, 0x6d, 0xe4, 0x37, 0x46, 0x71, 0x2e, 0x83, 0xe2, 0x30, 0x6d, 0xc6, 0x94, 0xed, 0x0a, 0x0b, - 0xfa, 0x06, 0x3f, 0x70, 0x69, 0x22, 0xe6, 0x0f, 0xb3, 0xd8, 0xef, 0xf0, 0xc3, 0xb8, 0x83, 0x2c, - 0xe0, 0xee, 0x20, 0x3d, 0x7f, 0x5b, 0x80, 0xe6, 0xd4, 0x2a, 0xdb, 0x9a, 0x1b, 0x28, 0x7b, 0x93, - 0x77, 0x02, 0x40, 0xac, 0xcf, 0xd8, 0xec, 0xdd, 0x6e, 0xc7, 0xbd, 0x9b, 0x19, 0x05, 0xf9, 0x2d, - 0xfc, 0x19, 0x9b, 0x2d, 0xdc, 0xed, 0xb8, 0x85, 0xeb, 0x3d, 0x70, 0x3b, 0xf9, 0x16, 0xcb, 0x4e, - 0x5e, 0xa5, 0xca, 0x4b, 0x39, 0xc2, 0x5f, 0xa4, 0x6f, 0xd7, 0xa9, 0xce, 0x8b, 0x99, 0x73, 0x5d, - 0x99, 0x81, 0x0b, 0xd0, 0x5f, 0xba, 0xa7, 0x2d, 0x96, 0x78, 0x15, 0x18, 0xc2, 0x62, 0xb0, 0xfc, - 0xa1, 0xef, 0xe0, 0x1d, 0x02, 0x2a, 0x0c, 0x50, 0x59, 0x45, 0x63, 0xf3, 0xad, 0xb0, 0x24, 0x72, - 0xb4, 0x5d, 0x35, 0x5d, 0xf6, 0xc1, 0x15, 0x36, 0x3c, 0x26, 0x64, 0x5d, 0x49, 0x0f, 0xf2, 0x24, - 0x4a, 0x5d, 0xcf, 0x8d, 0x3d, 0x80, 0xd0, 0x27, 0x91, 0xdb, 0x3e, 0xbd, 0x49, 0xe9, 0x13, 0x86, - 0xd4, 0x9c, 0xf0, 0xed, 0x76, 0x55, 0x5c, 0x95, 0xa3, 0x28, 0xec, 0x75, 0xa0, 0x30, 0x69, 0x51, - 0xe6, 0xca, 0xeb, 0x99, 0x81, 0x63, 0xd6, 0x41, 0x99, 0xdf, 0x08, 0x9a, 0x76, 0x65, 0x8e, 0x3a, - 0xb8, 0x2d, 0xfa, 0x73, 0x41, 0x1f, 0xb1, 0xe7, 0x9f, 0xba, 0xd0, 0xdd, 0x96, 0x0f, 0x7e, 0x0f, - 0x42, 0x69, 0x87, 0x69, 0x9f, 0xbe, 0x6f, 0x8c, 0xf5, 0x23, 0x1b, 0x35, 0x79, 0x91, 0x0c, 0xa2, - 0xc9, 0x19, 0x37, 0xdc, 0x9e, 0x4a, 0xc5, 0xd4, 0x6f, 0x54, 0xf9, 0x45, 0xf4, 0x2b, 0xaf, 0xd3, - 0xac, 0xbf, 0xb6, 0x7c, 0x7a, 0x1a, 0xdd, 0x65, 0x33, 0x5a, 0xb1, 0x8c, 0x3e, 0xb5, 0x10, 0x9c, - 0x9f, 0x5a, 0x80, 0x07, 0xb4, 0xe7, 0xf6, 0x14, 0x34, 0x9d, 0x98, 0xd0, 0xd6, 0x45, 0x82, 0xcd, - 0x8d, 0xca, 0xea, 0x46, 0x7f, 0x83, 0xb8, 0x39, 0xfb, 0x16, 0xe9, 0x09, 0x55, 0x7e, 0xcc, 0xb8, - 0x45, 0xaa, 0xa8, 0xae, 0xd9, 0x08, 0x49, 0x0d, 0xf4, 0x74, 0xb3, 0xc9, 0xa1, 0x23, 0x7a, 0xd6, - 0x98, 0xcc, 0x81, 0xab, 0xa9, 0xe3, 0xfb, 0xf5, 0x6c, 0x61, 0xc6, 0x65, 0x93, 0xdf, 0x88, 0x8e, - 0x0c, 0x2b, 0xb6, 0x46, 0x95, 0x6b, 0xbd, 0xac, 0x4c, 0x7a, 0x5c, 0xef, 0x04, 0x5e, 0x65, 0x97, - 0x69, 0xef, 0xed, 0xdd, 0xf4, 0xdc, 0xaa, 0x2a, 0xf7, 0xb2, 0x25, 0xd2, 0xd2, 0x25, 0x8f, 0x94, - 0x2f, 0x5b, 0xb2, 0xec, 0xb1, 0x25, 0x2b, 0xf0, 0x3f, 0x2b, 0x96, 0x2c, 0xaf, 0x48, 0xec, 0x7c, - 0x2c, 0x8e, 0xff, 0x7e, 0x64, 0xc9, 0xf2, 0xc5, 0x7a, 0x98, 0x65, 0xb1, 0x5d, 0x40, 0x85, 0x4d, - 0x64, 0x22, 0xfa, 0x4b, 0x1a, 0x92, 0xfe, 0x46, 0x2f, 0x94, 0x5e, 0x48, 0x0f, 0xb7, 0x25, 0x87, - 0xaf, 0xc3, 0xed, 0x4e, 0xd9, 0x73, 0xcd, 0xdb, 0x14, 0xb9, 0xbe, 0x6e, 0xa3, 0x12, 0x6b, 0x51, - 0x62, 0xb7, 0x47, 0xba, 0xf0, 0xef, 0x9a, 0x48, 0x38, 0x11, 0x8b, 0x34, 0x36, 0x92, 0x82, 0x55, - 0x89, 0x40, 0x90, 0x96, 0x6f, 0x0c, 0xec, 0x50, 0x70, 0x27, 0xb8, 0x78, 0x67, 0xf3, 0x36, 0xa5, - 0x51, 0x49, 0x7c, 0xd1, 0xba, 0x27, 0x06, 0xc1, 0xa4, 0xd3, 0x7d, 0x9d, 0x8b, 0x7d, 0xfa, 0x57, - 0xc4, 0x15, 0xa8, 0x70, 0x7b, 0xa3, 0xbf, 0x81, 0x8b, 0x9d, 0x42, 0x94, 0x09, 0xbd, 0x50, 0x2a, - 0x02, 0x0e, 0xd2, 0x0e, 0x1f, 0xf4, 0xe9, 0x85, 0x58, 0x97, 0xc0, 0x7f, 0xd7, 0xe2, 0xbd, 0x84, - 0x0b, 0xb4, 0xa5, 0x17, 0x4a, 0xc5, 0xd0, 0x8a, 0x7a, 0xf1, 0xea, 0xe5, 0xe2, 0x6a, 0x54, 0x1c, - 0x54, 0xb6, 0xfb, 0x9b, 0x1b, 0x41, 0x7d, 0xa2, 0xb7, 0x44, 0x1e, 0x55, 0x5e, 0xe8, 0x35, 0x55, - 0x48, 0xd3, 0xa1, 0x03, 0x38, 0x48, 0x68, 0xad, 0x23, 0x3e, 0x53, 0xb5, 0x58, 0x85, 0x26, 0x29, - 0x61, 0x72, 0xe5, 0x0a, 0x51, 0x15, 0x48, 0x0f, 0xb4, 0x48, 0x9a, 0x4d, 0xad, 0x71, 0x87, 0x49, - 0xb2, 0xdf, 0x81, 0x0b, 0x54, 0x1e, 0xd1, 0x6a, 0xf1, 0x51, 0xe3, 0x00, 0x5b, 0x68, 0xdc, 0x02, - 0xb1, 0x32, 0x69, 0x3a, 0x8b, 0xa8, 0xfd, 0xb6, 0x36, 0x3c, 0x94, 0x69, 0x6d, 0x37, 0xce, 0xb7, - 0x8f, 0xa2, 0xc9, 0xcd, 0xe4, 0xae, 0x9b, 0x25, 0x6e, 0x87, 0x86, 0xb4, 0x8c, 0x35, 0xa4, 0x97, - 0xde, 0xb8, 0x21, 0xad, 0x11, 0xab, 0x50, 0x11, 0xe9, 0x83, 0xf8, 0xd9, 0x23, 0xe3, 0x4e, 0xcd, - 0x28, 0x95, 0x8a, 0xe1, 0x7b, 0xf4, 0x19, 0x82, 0x51, 0x21, 0xae, 0x44, 0x08, 0xba, 0x21, 0x8d, - 0xa7, 0x70, 0x8f, 0x18, 0x8c, 0x62, 0xa9, 0x18, 0x3e, 0xca, 0x1e, 0x31, 0x18, 0x35, 0x62, 0x02, - 0x56, 0x8a, 0x8b, 0x58, 0x40, 0x1e, 0x63, 0xea, 0x85, 0x52, 0x5d, 0xea, 0xec, 0xfe, 0xcc, 0xc0, - 0x3e, 0xc0, 0x11, 0x4d, 0xb6, 0x14, 0x0a, 0x27, 0x96, 0x4b, 0x95, 0xdb, 0x22, 0x91, 0xc6, 0xca, - 0x78, 0x22, 0x16, 0x0a, 0x37, 0x54, 0x06, 0x9b, 0xc1, 0x33, 0xa0, 0xb2, 0xc9, 0x1f, 0xa5, 0x65, - 0xf1, 0x74, 0x5f, 0xa7, 0x76, 0x66, 0x28, 0x7d, 0xae, 0x15, 0x5a, 0x2d, 0xf6, 0xe9, 0x9d, 0x8a, - 0x3e, 0x34, 0x15, 0xff, 0x4d, 0xd6, 0x8a, 0x44, 0x2a, 0x98, 0x4a, 0xfc, 0x76, 0xc9, 0x9b, 0x29, - 0x73, 0x8d, 0x54, 0x42, 0xe9, 0x8b, 0x84, 0x2e, 0xc1, 0x1b, 0x49, 0xeb, 0x08, 0x3d, 0x2b, 0x9b, - 0x01, 0xc5, 0x5f, 0x61, 0x3d, 0xa5, 0x41, 0x79, 0x95, 0x44, 0x3d, 0x98, 0x22, 0x95, 0x66, 0x8b, - 0x0a, 0xb2, 0x63, 0xf8, 0x30, 0x04, 0x78, 0xaa, 0x03, 0xb4, 0x34, 0x97, 0x52, 0x62, 0x6f, 0x67, - 0xea, 0x58, 0x47, 0xaa, 0xf5, 0x62, 0xea, 0xec, 0xb9, 0xd1, 0x0f, 0xba, 0x32, 0x17, 0xdb, 0xb4, - 0x8e, 0x93, 0x3e, 0x80, 0x11, 0x23, 0xa8, 0x20, 0x46, 0x62, 0x1a, 0x4e, 0xb7, 0x0f, 0xd7, 0xb7, - 0xbe, 0xb9, 0x69, 0x9b, 0x02, 0xb1, 0x0b, 0xe1, 0x81, 0x34, 0x80, 0x4b, 0x4b, 0x33, 0x07, 0x28, - 0x71, 0x25, 0x07, 0x87, 0xf0, 0x24, 0x5a, 0x47, 0x0c, 0xe1, 0x02, 0x59, 0xb6, 0xe1, 0x08, 0x43, - 0x9e, 0x2d, 0x60, 0x2a, 0x86, 0x86, 0xe2, 0x17, 0x82, 0x39, 0xfb, 0x0e, 0x84, 0x4a, 0xf8, 0x33, - 0x38, 0x63, 0xf3, 0x35, 0xd2, 0x65, 0x41, 0xbb, 0xf9, 0x26, 0xe3, 0xd6, 0x95, 0x94, 0x87, 0x49, - 0x8a, 0x64, 0x4c, 0xd8, 0x24, 0x31, 0x7e, 0xfa, 0xe8, 0x99, 0xd4, 0xb1, 0x8e, 0x2f, 0x5a, 0xf7, - 0x52, 0xad, 0xbf, 0x5e, 0x1f, 0x03, 0xd7, 0x51, 0x95, 0x3b, 0x14, 0x6d, 0x59, 0x51, 0x19, 0x8a, - 0xb6, 0x3c, 0x52, 0x19, 0x6c, 0xf6, 0x37, 0xba, 0x61, 0x7c, 0x20, 0xc0, 0x74, 0xe9, 0xc8, 0xa7, - 0xd5, 0xc2, 0x1d, 0x92, 0x58, 0x12, 0x20, 0x20, 0x5f, 0x2c, 0x7f, 0x09, 0x62, 0x4a, 0xe8, 0xc9, - 0x6f, 0xa1, 0x07, 0xfd, 0x41, 0x0b, 0xee, 0xdf, 0x94, 0x40, 0x88, 0x05, 0xd5, 0xcb, 0x96, 0xda, - 0xd2, 0x03, 0x90, 0xba, 0x2e, 0xdd, 0x7f, 0x2e, 0x7d, 0x78, 0x1f, 0xc4, 0x28, 0x25, 0x92, 0x17, - 0x0f, 0x00, 0x64, 0x1e, 0x3c, 0x03, 0xff, 0xc2, 0x05, 0xc4, 0xcb, 0x5c, 0xe4, 0x75, 0x41, 0x45, - 0x5d, 0xe4, 0x75, 0x71, 0x54, 0xca, 0x89, 0x23, 0x97, 0x51, 0x47, 0x24, 0x8e, 0x27, 0x4b, 0xe2, - 0x80, 0x96, 0x6b, 0x96, 0x26, 0x92, 0x2e, 0x4d, 0xf2, 0xc7, 0x32, 0xfe, 0xeb, 0x52, 0xa4, 0x94, - 0x63, 0xac, 0x02, 0xe3, 0x9b, 0x84, 0xfc, 0x17, 0x65, 0x93, 0xff, 0x24, 0x12, 0x9c, 0x2e, 0x8b, - 0xa0, 0x97, 0x32, 0x82, 0x9e, 0x3c, 0x16, 0x41, 0x33, 0x3a, 0x5d, 0xc6, 0xe8, 0xb4, 0x70, 0x4c, - 0x3a, 0x65, 0x94, 0x96, 0x95, 0xe6, 0xa9, 0xc8, 0x92, 0xe6, 0xc9, 0x53, 0x8b, 0x90, 0xf1, 0x25, - 0x71, 0x1e, 0x2a, 0x6a, 0xf1, 0x37, 0x86, 0x82, 0x44, 0x3c, 0x02, 0x9e, 0x8d, 0x82, 0x1c, 0x6f, - 0x11, 0x96, 0xa1, 0x29, 0xdc, 0xd7, 0xb1, 0x82, 0xd7, 0x14, 0x0a, 0x93, 0x0e, 0x0a, 0x7c, 0xf8, - 0x4f, 0x52, 0xe2, 0x7f, 0x95, 0x46, 0x68, 0xc6, 0x7f, 0x7a, 0x52, 0xf9, 0x68, 0x5e, 0x0d, 0x79, - 0x6e, 0x95, 0x45, 0x20, 0xec, 0xf0, 0x70, 0xe7, 0xee, 0xee, 0x7b, 0xad, 0xbb, 0xfb, 0x76, 0xf2, - 0x0a, 0x43, 0xdf, 0xdd, 0xeb, 0xbf, 0xc9, 0xdd, 0x1d, 0x72, 0x7b, 0xd3, 0xf3, 0x89, 0xbe, 0xb5, - 0x6f, 0x05, 0x0a, 0xa5, 0x09, 0x7c, 0x6d, 0x43, 0x95, 0x33, 0xee, 0xaa, 0x5e, 0x4c, 0x3c, 0x14, - 0x18, 0xb8, 0x24, 0xf2, 0x7c, 0x08, 0xe2, 0xf8, 0xcb, 0xea, 0x02, 0x55, 0x70, 0x15, 0x0a, 0x3e, - 0x1d, 0x4a, 0x7c, 0x86, 0x3b, 0x58, 0x71, 0xd1, 0x60, 0x8d, 0x83, 0xd5, 0x6c, 0x73, 0x37, 0x6c, - 0x43, 0x35, 0x4c, 0x0b, 0x41, 0x55, 0xf6, 0xa3, 0xad, 0xde, 0x9c, 0x64, 0x20, 0xcd, 0x86, 0x96, - 0x78, 0x59, 0xb8, 0xee, 0x3e, 0x17, 0xd8, 0x82, 0x7e, 0x2e, 0x30, 0xbc, 0x7f, 0x2e, 0xe8, 0xb3, - 0xe7, 0x4d, 0x6f, 0x9a, 0x80, 0xe6, 0x3b, 0x7c, 0xe1, 0xbb, 0x57, 0xe9, 0x59, 0x6c, 0xcc, 0xdc, - 0x23, 0x92, 0xee, 0xb5, 0x9d, 0x74, 0xee, 0xd8, 0x98, 0xff, 0x2e, 0x9f, 0x39, 0xc6, 0xff, 0xe8, - 0x18, 0xea, 0x35, 0x0b, 0x3f, 0x6d, 0xfd, 0x96, 0xf9, 0xe9, 0x87, 0xcb, 0x48, 0x86, 0x82, 0x69, - 0x65, 0xa4, 0x5c, 0xcb, 0x2f, 0xcd, 0x86, 0x96, 0x5f, 0x9d, 0x91, 0xfe, 0x20, 0xb0, 0x37, 0x0b, - 0x3f, 0x04, 0x46, 0xf2, 0xa9, 0xf2, 0x06, 0xb4, 0xce, 0x9b, 0x7b, 0x44, 0xd2, 0x5c, 0xdb, 0x49, - 0x3b, 0xf9, 0x50, 0xfe, 0x93, 0x7c, 0x34, 0x0f, 0xde, 0x27, 0xfd, 0xc4, 0x42, 0xdf, 0x24, 0x0b, - 0x6d, 0x40, 0xc5, 0x4c, 0x5b, 0xd3, 0xd9, 0x88, 0x3e, 0x05, 0x37, 0x55, 0x48, 0x25, 0x26, 0x86, - 0xe1, 0x9f, 0xe5, 0x99, 0xe0, 0x26, 0xbc, 0xf7, 0x9c, 0x1d, 0x3d, 0x79, 0xde, 0x9e, 0x65, 0x72, - 0x2d, 0x37, 0xde, 0x7b, 0x70, 0xcb, 0xaf, 0xc7, 0x32, 0x0e, 0x5f, 0xf8, 0x1e, 0x59, 0x26, 0xe7, - 0x88, 0xa4, 0xb9, 0xb6, 0x93, 0x76, 0x62, 0x99, 0xbf, 0xca, 0xe7, 0x32, 0xf1, 0xff, 0xc4, 0x30, - 0x3f, 0x5e, 0x86, 0xd9, 0xa6, 0xca, 0x5b, 0xd1, 0x4b, 0xde, 0x1c, 0x8b, 0x2d, 0xcd, 0xd6, 0xbd, - 0xda, 0xbe, 0x22, 0xbb, 0x0c, 0xb8, 0xb8, 0xcc, 0x7a, 0xdf, 0x2f, 0xb3, 0x88, 0x3e, 0xd3, 0x85, - 0xd0, 0x42, 0xdb, 0x34, 0x3f, 0xc6, 0x10, 0xcd, 0x51, 0x71, 0x39, 0x67, 0x42, 0xdb, 0xbc, 0xda, - 0x39, 0xe6, 0xc8, 0xb9, 0x06, 0x8e, 0x87, 0xfd, 0xfe, 0xe0, 0x22, 0xee, 0x13, 0xab, 0x5e, 0x4d, - 0x28, 0xb1, 0xb0, 0xbf, 0x71, 0x7d, 0x24, 0xa8, 0x6c, 0x24, 0x2f, 0xe6, 0x19, 0x03, 0xbe, 0x84, - 0xa6, 0x84, 0x23, 0x41, 0xc5, 0x1c, 0x1a, 0xe0, 0x6b, 0x31, 0x21, 0xdf, 0x9f, 0xb8, 0xc2, 0x72, - 0xad, 0x58, 0x62, 0xeb, 0xf3, 0x9d, 0x1c, 0x1a, 0xe2, 0xee, 0x4e, 0x5e, 0x40, 0x85, 0xa1, 0x30, - 0x8c, 0x98, 0x3a, 0x76, 0x3e, 0xa5, 0xca, 0x4f, 0x78, 0xf5, 0x42, 0xa9, 0x92, 0x06, 0x16, 0x26, - 0xcf, 0xb7, 0x53, 0x1d, 0xc7, 0xb5, 0xf3, 0xc7, 0xd3, 0x37, 0x8f, 0x64, 0xda, 0x7a, 0x52, 0xbd, - 0x97, 0x99, 0x9f, 0x1f, 0x5f, 0xe6, 0xd3, 0x9b, 0xb2, 0x9c, 0x65, 0x39, 0xb1, 0xc2, 0x90, 0x9c, - 0xbe, 0x7c, 0x39, 0x39, 0xd8, 0x99, 0x3a, 0x7e, 0x03, 0x7a, 0x61, 0xf4, 0xca, 0xcf, 0xd0, 0xf3, - 0x37, 0x79, 0xe4, 0x4a, 0xd6, 0xae, 0xaf, 0x3b, 0xe3, 0xe9, 0xcf, 0x0a, 0xce, 0x21, 0x96, 0xa5, - 0xdb, 0x20, 0x74, 0x3a, 0x7b, 0x9b, 0x3f, 0xae, 0x3c, 0xb2, 0x22, 0x3d, 0x72, 0x3c, 0x7d, 0x16, - 0x2f, 0x3a, 0x45, 0x25, 0xa9, 0xc4, 0x67, 0xd8, 0xe9, 0xaf, 0x28, 0xdb, 0xb6, 0xf2, 0x8f, 0x84, - 0x0b, 0xec, 0x33, 0xcd, 0xff, 0x42, 0xd9, 0xc6, 0xbd, 0xd4, 0xdc, 0x22, 0x41, 0xfc, 0xed, 0xec, - 0xd6, 0xd2, 0xbd, 0xd4, 0x63, 0xdd, 0x9c, 0x10, 0x0c, 0xac, 0x56, 0x70, 0xff, 0xe6, 0x9b, 0xf6, - 0x8a, 0xa9, 0x2b, 0x7d, 0xc3, 0xca, 0x89, 0x7f, 0x87, 0xc5, 0x74, 0xe2, 0x98, 0x76, 0x01, 0x15, - 0xad, 0xf3, 0x47, 0xc1, 0x3f, 0x5a, 0x5c, 0xa9, 0x3b, 0x02, 0x08, 0xf6, 0xef, 0x3a, 0x75, 0x50, - 0x70, 0x62, 0xa7, 0x8e, 0xf1, 0xb4, 0x51, 0xe9, 0xe3, 0x68, 0x0a, 0x57, 0x3c, 0xa1, 0x67, 0x9b, - 0x7f, 0x95, 0x07, 0x8e, 0x4f, 0xfe, 0x44, 0x60, 0x07, 0x24, 0xae, 0xdd, 0xa8, 0x24, 0x12, 0xa1, - 0xb0, 0xbe, 0x75, 0xfa, 0x51, 0x11, 0x71, 0x4c, 0xe1, 0x42, 0xcc, 0xd4, 0xa8, 0xf2, 0x33, 0x5e, - 0xa3, 0x54, 0x5a, 0x0e, 0x4f, 0x58, 0xc0, 0xc0, 0x48, 0xad, 0xb7, 0xdb, 0x42, 0xbb, 0x2b, 0xb7, - 0x85, 0x76, 0x6f, 0x8d, 0x2b, 0x89, 0xc5, 0x96, 0xb0, 0x33, 0xdb, 0x42, 0xbb, 0x7d, 0x46, 0x7b, - 0xf1, 0x65, 0x34, 0x99, 0xfc, 0xd0, 0xf3, 0x79, 0x90, 0x8c, 0x48, 0xac, 0x4c, 0x7a, 0x8c, 0xef, - 0xbe, 0xae, 0xb6, 0x8c, 0x5d, 0xd4, 0x56, 0xc2, 0x1f, 0xe4, 0xf9, 0x88, 0xfd, 0x37, 0x58, 0x17, - 0xe2, 0x3b, 0x02, 0x42, 0x20, 0xe9, 0xc9, 0x3e, 0x06, 0x01, 0x1c, 0xf6, 0x08, 0xaa, 0xfc, 0xa7, - 0x5e, 0xae, 0x5c, 0x8a, 0x1a, 0x7f, 0xc3, 0x62, 0x8e, 0xb6, 0x1f, 0x4c, 0xdf, 0xec, 0xc7, 0x54, - 0x42, 0x5c, 0xa8, 0xb4, 0x53, 0x27, 0xf4, 0xe0, 0x0e, 0xc9, 0xc1, 0x83, 0xc9, 0x91, 0xb3, 0x60, - 0x7e, 0xa4, 0xb7, 0x52, 0x24, 0xf5, 0x35, 0x80, 0x95, 0x65, 0x8d, 0xc6, 0x1d, 0x8a, 0x6e, 0x65, - 0xc1, 0x0f, 0xb6, 0xee, 0x88, 0xc4, 0x13, 0x5b, 0x1b, 0x43, 0xf1, 0xc4, 0x62, 0x1f, 0xf7, 0x75, - 0xf6, 0xd8, 0x29, 0xe7, 0x72, 0xb0, 0x38, 0xfc, 0xfa, 0xc0, 0x20, 0xb6, 0x1d, 0x75, 0x66, 0x18, - 0xa1, 0xee, 0x3d, 0x36, 0xad, 0xbf, 0xa2, 0x90, 0x58, 0xc1, 0x47, 0x1c, 0xc1, 0x9c, 0x0e, 0x31, - 0x8f, 0x68, 0x99, 0x54, 0x4c, 0x53, 0x61, 0x75, 0x1c, 0xd6, 0xde, 0x38, 0xa3, 0x07, 0x19, 0x11, - 0x1f, 0x45, 0x85, 0x4a, 0x2c, 0x16, 0x89, 0xad, 0x8b, 0x37, 0xf0, 0x49, 0xc6, 0xf4, 0x42, 0xa9, - 0xd8, 0x24, 0x56, 0xf4, 0x72, 0xf1, 0x11, 0x54, 0x14, 0x83, 0x89, 0xd6, 0x05, 0xf9, 0x9b, 0x20, - 0xa3, 0x54, 0x2a, 0x84, 0xb9, 0xd6, 0xd5, 0xfa, 0x8c, 0x42, 0xfd, 0x19, 0x42, 0xc1, 0x44, 0x9f, - 0x21, 0x98, 0x9e, 0x5e, 0xd4, 0xa0, 0xa2, 0x8d, 0x84, 0x60, 0xc2, 0xdb, 0x23, 0xe2, 0x3c, 0x0b, - 0xdd, 0xf3, 0x24, 0x5b, 0x92, 0x45, 0xb2, 0x3a, 0xa9, 0x79, 0xde, 0xcb, 0x47, 0xf7, 0xe0, 0x35, - 0x08, 0xed, 0x66, 0xae, 0xd5, 0x3f, 0x8f, 0x18, 0x7e, 0xd1, 0x3f, 0x0a, 0x6e, 0x0a, 0xa1, 0x42, - 0x7f, 0x63, 0x23, 0x41, 0x15, 0x95, 0xff, 0x24, 0x97, 0xbb, 0x5e, 0x28, 0x3d, 0x45, 0x33, 0x07, - 0x71, 0x6c, 0x61, 0x9a, 0x14, 0x73, 0x96, 0x27, 0xd8, 0x6f, 0xbb, 0x3d, 0xd2, 0xa5, 0xbb, 0xea, - 0x91, 0x27, 0x89, 0x3e, 0xbd, 0x27, 0xf1, 0xb8, 0x40, 0x11, 0xc6, 0xd9, 0x3d, 0x2c, 0x2f, 0x72, - 0xf5, 0x45, 0xab, 0x7e, 0x49, 0x95, 0x5f, 0xf0, 0x1a, 0x0d, 0xa4, 0x75, 0x99, 0xf7, 0xf6, 0xd0, - 0x51, 0x70, 0x1f, 0xc4, 0x9b, 0x0c, 0x37, 0x9c, 0xd4, 0xb1, 0x2b, 0xe9, 0xe1, 0xb6, 0x32, 0xeb, - 0x8c, 0x8d, 0xf0, 0xb2, 0xe0, 0xda, 0xef, 0x33, 0x7a, 0xfe, 0x66, 0x98, 0xb5, 0xd4, 0x8e, 0x50, - 0x7e, 0xdc, 0x9c, 0xba, 0xc6, 0xc4, 0xa9, 0x13, 0x7b, 0x17, 0x63, 0x62, 0xd6, 0xd5, 0xa8, 0x10, - 0x6f, 0xc2, 0x2c, 0xd2, 0x4c, 0x64, 0x1b, 0x3c, 0x74, 0x64, 0xd7, 0x32, 0xec, 0xb7, 0xb8, 0x00, - 0xa1, 0x10, 0xf1, 0xa7, 0x08, 0x30, 0x8e, 0xc8, 0xf7, 0x71, 0x25, 0x9e, 0x7f, 0x35, 0x09, 0xdd, - 0xbd, 0x46, 0x49, 0xb0, 0x35, 0xc0, 0x7d, 0xc6, 0x7f, 0x54, 0xdc, 0xba, 0x15, 0xde, 0xde, 0xeb, - 0x1b, 0x9f, 0x8d, 0xe1, 0x90, 0x21, 0x92, 0x1a, 0x0e, 0x19, 0xb8, 0x24, 0xd2, 0x47, 0x1f, 0xf0, - 0x38, 0x9d, 0xb0, 0x89, 0x61, 0x38, 0x64, 0x50, 0x78, 0x73, 0x9d, 0x1a, 0x57, 0xfc, 0xb1, 0xc0, - 0x0e, 0x7c, 0xd2, 0x54, 0xc2, 0x09, 0x4a, 0x0f, 0x7f, 0xa2, 0xca, 0xbb, 0xbc, 0xe6, 0x1a, 0x69, - 0x47, 0xea, 0xd2, 0xb9, 0xf4, 0xb5, 0x37, 0x52, 0x87, 0x7b, 0xd3, 0x1f, 0xbf, 0x03, 0xec, 0x70, - 0x7b, 0xa4, 0x83, 0x46, 0x5f, 0x3b, 0xdc, 0x95, 0x3a, 0x71, 0x5d, 0x1b, 0xb8, 0x01, 0xcf, 0x4e, - 0xea, 0xea, 0x2b, 0xe1, 0x0f, 0xed, 0xf0, 0xc1, 0x4a, 0x3e, 0x9d, 0x7a, 0xa5, 0xf1, 0x5e, 0x89, - 0x9c, 0x34, 0x33, 0xb7, 0xde, 0xce, 0x9c, 0xeb, 0xe2, 0x3b, 0xbe, 0x3d, 0xd2, 0xe9, 0x33, 0x7f, - 0x58, 0xec, 0x12, 0x50, 0x81, 0xbf, 0x31, 0xd4, 0xa2, 0x50, 0xca, 0x9b, 0x6b, 0xa1, 0xbc, 0xba, - 0x70, 0x62, 0xb9, 0x04, 0xa4, 0xf7, 0x2b, 0x55, 0xde, 0xe2, 0x05, 0x70, 0x69, 0x1d, 0x84, 0xcc, - 0x87, 0xe8, 0x71, 0xb7, 0x47, 0x7a, 0x48, 0xe9, 0xed, 0x91, 0x9e, 0xa5, 0xc9, 0xc1, 0x21, 0xb9, - 0x41, 0x09, 0x27, 0xb4, 0x91, 0xbd, 0xda, 0xe0, 0xe0, 0xed, 0x91, 0xae, 0x65, 0xac, 0x04, 0x72, - 0xe7, 0xeb, 0x3a, 0x82, 0xd6, 0x71, 0x32, 0x39, 0x78, 0x90, 0x46, 0xde, 0x87, 0x5e, 0xc5, 0x35, - 0xa8, 0x80, 0xc4, 0xbf, 0x23, 0xbe, 0x07, 0xf9, 0xd5, 0xcb, 0x54, 0x79, 0x89, 0x17, 0x4a, 0xa4, - 0xfb, 0xe1, 0xc4, 0x96, 0xf9, 0xe4, 0x53, 0xed, 0xe2, 0x81, 0xe4, 0x4d, 0x2c, 0x3a, 0xf4, 0xae, - 0x74, 0x39, 0xb9, 0xd4, 0x07, 0xd0, 0xe2, 0x4b, 0xa8, 0x30, 0xea, 0x6f, 0x50, 0x36, 0x86, 0x76, - 0x83, 0x17, 0x42, 0x41, 0xb5, 0xac, 0xca, 0x4f, 0x79, 0xf5, 0x42, 0x49, 0x82, 0x97, 0x53, 0xd0, - 0x29, 0x84, 0x7a, 0xbc, 0x3d, 0xd2, 0x95, 0xea, 0x6d, 0xd5, 0xce, 0x5f, 0x7c, 0x78, 0xe9, 0x52, - 0x6b, 0xd7, 0xd2, 0x52, 0x9f, 0xde, 0xba, 0x0a, 0x1f, 0xd1, 0xd0, 0x23, 0x5e, 0x27, 0x0e, 0xd1, - 0xb3, 0x6b, 0x82, 0x74, 0xed, 0x69, 0xa3, 0x2b, 0x06, 0x19, 0x68, 0xfe, 0xc2, 0x45, 0xde, 0x5e, - 0x67, 0x35, 0xfc, 0x71, 0xcb, 0xb7, 0xe7, 0x4d, 0xf2, 0x6d, 0x51, 0x36, 0xa7, 0x65, 0xa3, 0xc3, - 0x21, 0xd0, 0xa7, 0x49, 0xd2, 0x75, 0x09, 0x68, 0x96, 0x5d, 0x3b, 0xac, 0xd5, 0x03, 0x11, 0x41, - 0xce, 0x6a, 0x4a, 0x11, 0xa5, 0x1c, 0x45, 0xd0, 0x54, 0xb4, 0xec, 0x37, 0x71, 0xa8, 0x8c, 0x24, - 0xe8, 0x71, 0x37, 0xdf, 0x07, 0x3f, 0xc4, 0xf2, 0xdc, 0xa9, 0x84, 0xf1, 0xb6, 0x44, 0x82, 0x13, - 0xc2, 0x70, 0xfe, 0x46, 0x40, 0x85, 0xac, 0x48, 0x9c, 0x83, 0x26, 0x61, 0x6d, 0x96, 0xca, 0xdd, - 0x7c, 0x1f, 0xfd, 0x25, 0x4e, 0x43, 0xae, 0x50, 0x94, 0xaa, 0x46, 0xae, 0x50, 0x54, 0x14, 0x51, - 0x7e, 0x28, 0xda, 0xf2, 0x08, 0xbd, 0xf8, 0x26, 0x7f, 0xe3, 0x81, 0x62, 0x68, 0xee, 0x8d, 0x87, - 0xfe, 0x1b, 0x0f, 0xd4, 0xe0, 0xd6, 0xa9, 0x8c, 0x6b, 0xe6, 0xa0, 0x49, 0x11, 0x78, 0x13, 0x42, - 0xdf, 0x76, 0xc0, 0x2f, 0xf1, 0x09, 0x54, 0x44, 0xac, 0x08, 0x72, 0x4c, 0xf1, 0xd3, 0x8b, 0xec, - 0xf9, 0x76, 0xb3, 0xa8, 0x61, 0x40, 0x3e, 0x03, 0xde, 0xb3, 0x1c, 0x4d, 0x35, 0xd5, 0x91, 0xb1, - 0xc3, 0x7c, 0xa6, 0xfa, 0x5c, 0xa1, 0xa0, 0x9d, 0x2f, 0xb5, 0xe7, 0x8b, 0x49, 0xc4, 0x6d, 0x98, - 0xdf, 0xb9, 0xeb, 0x82, 0xf1, 0x9f, 0x36, 0x8f, 0x9f, 0x36, 0x8f, 0x3b, 0x69, 0xf3, 0xf8, 0xa5, - 0x65, 0xf3, 0x20, 0x8e, 0x45, 0xc6, 0xe6, 0x51, 0x61, 0xbb, 0x79, 0xf0, 0xdd, 0x51, 0x00, 0xa2, - 0xe3, 0x73, 0xfb, 0x06, 0x0d, 0xcb, 0x32, 0x06, 0x8f, 0x48, 0xf3, 0x6d, 0xb7, 0x8f, 0xba, 0x5a, - 0xba, 0x81, 0x7c, 0xee, 0x42, 0x0b, 0x1d, 0x7b, 0xf8, 0x71, 0xef, 0x23, 0xbf, 0x34, 0xed, 0x23, - 0x0f, 0xe5, 0xd8, 0x47, 0x78, 0xac, 0x8c, 0x67, 0x3b, 0xe9, 0x11, 0xd0, 0xdc, 0x1c, 0xcd, 0xbf, - 0xb1, 0x5d, 0x65, 0xb9, 0x69, 0x57, 0x59, 0x68, 0x27, 0x8f, 0xeb, 0x6a, 0xe3, 0x4c, 0x7a, 0xd0, - 0xc1, 0x6d, 0x44, 0xd3, 0xb3, 0x2a, 0x1c, 0xb7, 0x98, 0x32, 0x94, 0xdf, 0xa4, 0xe8, 0xc1, 0x16, - 0x2c, 0x4e, 0xbb, 0xeb, 0x14, 0xdc, 0x29, 0x86, 0xf0, 0xfc, 0x1a, 0xe5, 0xe3, 0x5f, 0xe2, 0x7c, - 0x84, 0x88, 0x5c, 0xdb, 0x9a, 0xb0, 0x3d, 0xd3, 0xdf, 0x83, 0x0a, 0xa1, 0x3a, 0x94, 0x7d, 0xa8, - 0x17, 0x4b, 0x51, 0x91, 0xfe, 0x98, 0x8b, 0xee, 0x61, 0x93, 0xb7, 0xed, 0xac, 0x0e, 0xed, 0xae, - 0x0b, 0x7a, 0x5a, 0xf3, 0xd0, 0x9c, 0x35, 0x4a, 0x02, 0x0f, 0x3b, 0x0e, 0xaf, 0x7f, 0x7e, 0x5c, - 0x5b, 0xc0, 0xaf, 0x60, 0x9b, 0xe6, 0xb6, 0x80, 0xb1, 0xd6, 0x12, 0xfc, 0x4a, 0xf5, 0x56, 0xd2, - 0x54, 0x58, 0xb1, 0x38, 0x7b, 0x7e, 0xc8, 0x2a, 0x58, 0x7a, 0x3e, 0x07, 0xf4, 0x49, 0x0f, 0x42, - 0xe0, 0x66, 0x26, 0x14, 0xe2, 0xf4, 0x24, 0xdf, 0x3b, 0xa4, 0x9d, 0xbc, 0x94, 0x19, 0x78, 0x2f, - 0xf5, 0x7a, 0x3b, 0x0d, 0xb9, 0x72, 0xcb, 0x45, 0xce, 0x70, 0xe6, 0x3e, 0x7e, 0xdc, 0xf2, 0x61, - 0x9d, 0x2e, 0x1f, 0x6c, 0x63, 0xa8, 0x30, 0x05, 0xed, 0x17, 0xa1, 0xc4, 0x0e, 0x4c, 0xfb, 0x63, - 0x09, 0x85, 0xff, 0x57, 0x40, 0x33, 0xb2, 0xdb, 0xfc, 0x08, 0x94, 0x3b, 0x5d, 0x48, 0x14, 0x8e, - 0x29, 0x24, 0x86, 0xf2, 0xc9, 0x61, 0x85, 0xd8, 0x92, 0x48, 0x77, 0x3b, 0x94, 0xc0, 0xce, 0x1f, - 0x15, 0x23, 0x6f, 0xd6, 0x53, 0xb6, 0x81, 0xfd, 0x7b, 0xa5, 0x2a, 0x57, 0xe9, 0x29, 0xdb, 0x96, - 0xd6, 0xd5, 0xb7, 0xac, 0x00, 0x2d, 0x4d, 0x8f, 0x86, 0x3e, 0x70, 0x43, 0x57, 0x96, 0x78, 0x35, - 0x49, 0xeb, 0xba, 0x31, 0xda, 0x7e, 0x50, 0xcf, 0xe1, 0xf6, 0x22, 0x2a, 0xc4, 0x2b, 0xce, 0x5d, - 0x10, 0x93, 0x9c, 0x79, 0x7a, 0x21, 0xe9, 0xfa, 0x91, 0x09, 0x75, 0xad, 0xb7, 0x15, 0x1b, 0xd0, - 0xe4, 0x9d, 0xca, 0x2e, 0xd2, 0x77, 0x01, 0xe9, 0x9b, 0x58, 0x1a, 0x59, 0x99, 0xf4, 0xb4, 0xd6, - 0x7e, 0x6d, 0xf4, 0x68, 0xbf, 0xd6, 0x77, 0x82, 0xf5, 0x9f, 0xb9, 0xf8, 0x6e, 0xea, 0xf4, 0x61, - 0x6d, 0xff, 0x90, 0x71, 0x18, 0x3d, 0x7c, 0xb0, 0x12, 0x08, 0x37, 0xdd, 0xd7, 0xa9, 0xc3, 0xb3, - 0x1b, 0x2d, 0xda, 0x53, 0x15, 0x56, 0x7c, 0xd0, 0xa3, 0x5e, 0x47, 0x12, 0x90, 0xe6, 0x42, 0xe2, - 0x29, 0xfb, 0x93, 0xee, 0x0d, 0x17, 0x31, 0xfa, 0x66, 0xb7, 0xfc, 0x71, 0x8b, 0xa0, 0x55, 0x26, - 0x11, 0xe4, 0x78, 0x6c, 0x1c, 0x4b, 0xf4, 0xfc, 0x95, 0x80, 0x8a, 0xd7, 0x47, 0x12, 0xa1, 0xed, - 0xbb, 0x6a, 0x22, 0xe1, 0xed, 0xa1, 0x06, 0x71, 0x2d, 0x9a, 0x14, 0x27, 0xfe, 0x0b, 0x94, 0xd3, - 0x56, 0xa8, 0xf2, 0x32, 0x2f, 0x2d, 0x92, 0x1e, 0x04, 0x57, 0xed, 0xd1, 0xd6, 0x9e, 0xf4, 0x99, - 0x0b, 0xa0, 0xd2, 0x43, 0x9a, 0x42, 0x28, 0x4f, 0xf7, 0xb4, 0x01, 0xa0, 0x8f, 0x36, 0x10, 0x1f, - 0x42, 0x93, 0xf0, 0x67, 0x98, 0xed, 0xaf, 0xfa, 0x2e, 0x55, 0x9e, 0xe1, 0xa5, 0x45, 0x12, 0xfd, - 0xd7, 0x47, 0xff, 0x15, 0x9f, 0x46, 0x53, 0xfc, 0x04, 0x9b, 0x9b, 0x22, 0x3b, 0x95, 0x30, 0x1f, - 0xf2, 0x8c, 0x2f, 0x97, 0xf8, 0x1f, 0x3e, 0xfe, 0x87, 0xe7, 0xa0, 0x0b, 0x21, 0x98, 0x0c, 0xd1, - 0x5d, 0x56, 0xea, 0x3e, 0xdd, 0x02, 0x59, 0x48, 0xc8, 0x53, 0x43, 0x5f, 0x88, 0x94, 0xd0, 0x24, - 0x1c, 0xf0, 0x4e, 0x64, 0xa4, 0x55, 0x3b, 0x3c, 0x00, 0xd3, 0xd2, 0xdd, 0xbb, 0x9f, 0x44, 0x05, - 0x89, 0x50, 0xa2, 0x91, 0x5d, 0xd0, 0x92, 0xfc, 0x8c, 0x50, 0x22, 0x95, 0x02, 0x28, 0xf9, 0xa1, - 0x1d, 0xbc, 0x96, 0x1c, 0x3a, 0xa0, 0x3b, 0x81, 0xf8, 0x00, 0x44, 0xdc, 0x23, 0xa0, 0xc9, 0x01, - 0x7a, 0xa8, 0xca, 0x33, 0x72, 0xb7, 0xb2, 0x32, 0xe9, 0x57, 0xd0, 0x05, 0x1c, 0xa4, 0xe0, 0xe9, - 0x54, 0xb9, 0x1b, 0xb6, 0x5c, 0xb8, 0x23, 0x1d, 0xed, 0x6d, 0x4d, 0x5d, 0xdd, 0x0b, 0x4f, 0xab, - 0x00, 0xbd, 0x00, 0xfb, 0x45, 0xeb, 0x5e, 0xdd, 0xff, 0x1e, 0x1f, 0x07, 0x08, 0xfe, 0xe9, 0x71, - 0xe0, 0xd2, 0xb9, 0x74, 0x67, 0x87, 0x8f, 0x7d, 0xc3, 0xd3, 0x3f, 0x0d, 0x4d, 0x03, 0x7c, 0xb0, - 0x77, 0xa1, 0xe2, 0xf3, 0x68, 0x46, 0xd8, 0x54, 0xa2, 0xfb, 0x03, 0x10, 0xec, 0x58, 0x2a, 0xa5, - 0x69, 0x30, 0x4e, 0xe8, 0xba, 0xae, 0xd6, 0x67, 0x81, 0xd0, 0x43, 0xd4, 0xb9, 0x2c, 0x21, 0xea, - 0xf8, 0xa6, 0xa6, 0x10, 0x75, 0xbf, 0xe5, 0xc3, 0x41, 0x00, 0x76, 0xd6, 0xaa, 0x72, 0x1d, 0x9f, - 0xea, 0xf3, 0x49, 0xbe, 0x71, 0xaa, 0xb3, 0x15, 0xe2, 0xf7, 0xe8, 0x4f, 0xf9, 0x6f, 0x8f, 0x74, - 0x65, 0x06, 0x2e, 0xc0, 0xdf, 0xc9, 0xc1, 0xa1, 0xcc, 0x9b, 0xa7, 0x46, 0x3f, 0x1a, 0xd4, 0x6b, - 0xf9, 0xbc, 0x9f, 0xe7, 0x04, 0x84, 0xe8, 0x98, 0x77, 0xe9, 0x71, 0x5d, 0x5a, 0x05, 0x55, 0xfe, - 0xbd, 0x97, 0x2b, 0x97, 0x22, 0x94, 0xa8, 0xed, 0x53, 0x75, 0x6c, 0xdb, 0xb9, 0xb5, 0x29, 0x12, - 0x0e, 0x25, 0x22, 0xb1, 0xad, 0x4a, 0x8b, 0x12, 0x4e, 0x7c, 0xd1, 0xca, 0x17, 0x35, 0x29, 0x89, - 0x58, 0x28, 0x10, 0x5f, 0xe2, 0x4e, 0xf5, 0x7e, 0x90, 0x3a, 0x75, 0x41, 0xbb, 0xb2, 0x0f, 0x5a, - 0xc5, 0x12, 0xaf, 0x7e, 0xd1, 0xba, 0x47, 0x69, 0xf2, 0x87, 0x1a, 0xbf, 0x68, 0xdd, 0xd3, 0x12, - 0x09, 0x05, 0x94, 0x74, 0x5f, 0x67, 0xea, 0xf8, 0x0d, 0x6d, 0xa4, 0xdb, 0xc7, 0x7d, 0x5c, 0x7c, - 0x94, 0x3e, 0xca, 0x05, 0xaf, 0x1c, 0xfa, 0xb2, 0x58, 0x89, 0x07, 0xa4, 0x12, 0x1d, 0x0b, 0xa9, - 0x53, 0xb7, 0x4c, 0xb9, 0x86, 0xe1, 0xe5, 0xee, 0xa3, 0x3a, 0x89, 0x93, 0x70, 0xf2, 0x34, 0x06, - 0x2b, 0x25, 0x71, 0x31, 0x07, 0x71, 0x1f, 0x12, 0xd0, 0xa4, 0x00, 0xe1, 0x78, 0xba, 0xab, 0xcf, - 0xb3, 0x5a, 0x16, 0x0c, 0xa9, 0x00, 0x2f, 0x86, 0x68, 0x03, 0xe9, 0x39, 0x9e, 0xff, 0xe1, 0x7a, - 0x45, 0x27, 0x44, 0x5d, 0x10, 0xd0, 0x81, 0x93, 0xb9, 0x42, 0xe4, 0x26, 0x80, 0xd4, 0x01, 0xa0, - 0x33, 0x1f, 0xed, 0x54, 0xdc, 0x81, 0xa6, 0x06, 0xa8, 0x3b, 0x34, 0x19, 0x06, 0x55, 0x1a, 0x4a, - 0xed, 0x87, 0x45, 0x44, 0x1b, 0xe1, 0x48, 0x73, 0x2b, 0x49, 0x04, 0xa7, 0x69, 0xf0, 0x28, 0xa0, - 0x73, 0x36, 0x83, 0xe0, 0x2f, 0x05, 0xa9, 0xf3, 0x1b, 0x7c, 0xa9, 0x68, 0x9c, 0x5f, 0x32, 0xb5, - 0xc2, 0x5f, 0x3a, 0x3b, 0x7a, 0xf2, 0xbc, 0xf9, 0x4b, 0x26, 0x10, 0xf1, 0x77, 0x68, 0x3a, 0x7c, - 0x7a, 0x3d, 0xf3, 0x25, 0x21, 0x4f, 0xbf, 0x72, 0x7f, 0x8b, 0x38, 0x78, 0x65, 0xb7, 0x93, 0x66, - 0xb3, 0x78, 0xba, 0x67, 0x53, 0xc7, 0xaf, 0x68, 0xef, 0x9c, 0xa6, 0x1f, 0xcc, 0x86, 0xc3, 0x9f, - 0x84, 0x31, 0x18, 0x9f, 0x9c, 0x32, 0xce, 0x4f, 0x66, 0xb5, 0xe3, 0x3e, 0x49, 0x67, 0x4a, 0x3f, - 0x99, 0x05, 0x87, 0x3f, 0xd9, 0xac, 0xc7, 0x7f, 0x85, 0x4f, 0x16, 0x8f, 0xf3, 0x93, 0x59, 0xed, - 0xf8, 0x59, 0x12, 0x97, 0x5d, 0xf6, 0xc9, 0x2c, 0x38, 0xf1, 0xf7, 0x68, 0x26, 0x49, 0x56, 0xbd, - 0x31, 0xe0, 0x6f, 0x54, 0x36, 0x34, 0x27, 0x70, 0x0d, 0xc9, 0x1a, 0x90, 0xfb, 0xa3, 0xcb, 0x55, - 0x79, 0xa9, 0xd7, 0xda, 0x52, 0x9a, 0x6b, 0x7c, 0xb6, 0xf3, 0x7d, 0xad, 0xff, 0x06, 0xfc, 0xa4, - 0x1f, 0xb7, 0xc2, 0x8b, 0xaf, 0xa1, 0x19, 0x46, 0x61, 0x1d, 0xc9, 0x4b, 0xe0, 0xf4, 0x24, 0x6d, - 0x42, 0x5f, 0x4f, 0x8f, 0x58, 0xbe, 0x6e, 0xf9, 0x90, 0xd8, 0x2a, 0x60, 0x8d, 0x21, 0xa0, 0x84, - 0x5a, 0x94, 0x58, 0x9c, 0x66, 0xee, 0xdd, 0xa6, 0xca, 0x5b, 0xbd, 0x46, 0xa9, 0xe4, 0xa3, 0xdc, - 0x77, 0xe8, 0x42, 0xea, 0xe8, 0xf5, 0x4c, 0x6b, 0x7b, 0xb9, 0xd6, 0x3d, 0x90, 0xea, 0xda, 0xaf, - 0xf5, 0xf7, 0xdc, 0x1e, 0x79, 0x3b, 0x73, 0xe0, 0x42, 0xea, 0xc4, 0x59, 0xf8, 0x59, 0xee, 0xd6, - 0xba, 0x07, 0xe8, 0x16, 0x42, 0x08, 0xb9, 0x92, 0x5b, 0x74, 0xf2, 0x1a, 0x51, 0xf7, 0x34, 0x37, - 0xba, 0xe7, 0xe3, 0xff, 0xcc, 0x30, 0xc7, 0xff, 0x29, 0x31, 0xde, 0x47, 0xce, 0x84, 0x1a, 0xf6, - 0x00, 0x72, 0x81, 0x29, 0x13, 0x93, 0x08, 0x71, 0x89, 0xb8, 0x84, 0x6b, 0x0b, 0x4c, 0x8f, 0x1c, - 0xef, 0x82, 0x7a, 0xa3, 0xa4, 0x2a, 0xa0, 0xca, 0x2f, 0xa3, 0xdf, 0x78, 0xb3, 0xf6, 0x33, 0x69, - 0x2d, 0xbf, 0x4d, 0x94, 0xbb, 0x93, 0x83, 0xc3, 0x99, 0xf7, 0xf6, 0xc0, 0xe3, 0x32, 0x6d, 0xe0, - 0x06, 0xec, 0xa4, 0xa0, 0xe3, 0x02, 0x60, 0x19, 0x4c, 0xf3, 0x8b, 0xd6, 0x3d, 0x06, 0xd6, 0xfb, - 0x3a, 0x41, 0x17, 0x58, 0xec, 0xf9, 0xbb, 0xa9, 0x68, 0x6e, 0x0d, 0xe5, 0x28, 0xfe, 0x33, 0xec, - 0x24, 0xb2, 0x9d, 0xdf, 0xb7, 0x04, 0x96, 0x76, 0xd8, 0xcb, 0xef, 0x5b, 0xf3, 0x4d, 0x12, 0x9b, - 0x85, 0x94, 0x66, 0x41, 0x61, 0xbf, 0xac, 0x2e, 0x89, 0xcd, 0x99, 0x21, 0x94, 0xb4, 0xce, 0xb0, - 0x89, 0x91, 0x67, 0xec, 0x59, 0x8f, 0x99, 0xb6, 0xd4, 0x45, 0x76, 0x5b, 0x6a, 0xea, 0xd4, 0x2d, - 0x2e, 0x5e, 0xf7, 0x0c, 0x81, 0xee, 0xac, 0x6c, 0x27, 0xc9, 0x9b, 0xe8, 0x4e, 0xf2, 0xd7, 0x76, - 0xdb, 0xe4, 0x87, 0xdf, 0xfb, 0x36, 0xf9, 0x65, 0x75, 0x59, 0xec, 0x01, 0xdf, 0x8c, 0xec, 0x8e, - 0x7d, 0xa2, 0xb5, 0x5f, 0xd3, 0x8e, 0xba, 0x51, 0xdf, 0x18, 0x0b, 0xc6, 0x0c, 0xe6, 0x37, 0xee, - 0x4d, 0xd3, 0xb2, 0x47, 0x4d, 0xfa, 0xce, 0xf6, 0xa8, 0xc9, 0xdf, 0xe1, 0x1e, 0x55, 0xf8, 0xdd, - 0xef, 0x51, 0x45, 0xdf, 0xfd, 0x1e, 0x85, 0xbe, 0x8f, 0x3d, 0x6a, 0xca, 0xf7, 0xba, 0x47, 0x15, - 0x7f, 0x57, 0x7b, 0x14, 0xa7, 0x5d, 0x4e, 0xfd, 0x41, 0x68, 0x97, 0xe6, 0x4d, 0x73, 0xda, 0xf7, - 0xbc, 0x69, 0x4e, 0x37, 0x6d, 0x9a, 0x55, 0x2f, 0xab, 0xf2, 0x4b, 0xe8, 0x45, 0x6f, 0xae, 0x9d, - 0x47, 0x97, 0x19, 0x9c, 0x10, 0xff, 0x5c, 0x30, 0x76, 0x8c, 0xcf, 0x05, 0x22, 0xfe, 0x3f, 0x17, - 0x38, 0x19, 0xf8, 0xb9, 0xc0, 0xbe, 0xe0, 0x19, 0x74, 0xb1, 0x77, 0xb6, 0xd9, 0xbd, 0xdf, 0x19, - 0xee, 0xcb, 0xbb, 0xac, 0x7e, 0xc8, 0xf9, 0xe3, 0xf4, 0x43, 0x26, 0x19, 0xf5, 0x2d, 0x7e, 0xc8, - 0x25, 0x56, 0x3f, 0x64, 0x7b, 0xf7, 0x63, 0xcf, 0x1b, 0x2e, 0x34, 0xb7, 0x96, 0x4a, 0x13, 0x3b, - 0x95, 0xa0, 0xc6, 0xaa, 0x12, 0x40, 0xde, 0x67, 0x43, 0x25, 0x98, 0x9d, 0xa5, 0x06, 0x50, 0x84, - 0x70, 0xfb, 0xbd, 0xdd, 0xa9, 0xdc, 0xf5, 0xb5, 0x4e, 0xe5, 0x55, 0x1b, 0x55, 0xb9, 0x1e, 0xad, - 0xf7, 0xe6, 0x1a, 0xbb, 0xbe, 0x3d, 0x70, 0x7d, 0x99, 0x89, 0x6a, 0x5a, 0x38, 0x12, 0x54, 0x8c, - 0x4e, 0x09, 0x1d, 0xd9, 0x77, 0xf8, 0x13, 0x1d, 0x8d, 0x41, 0x47, 0x7f, 0xef, 0x82, 0xd4, 0x0c, - 0xf6, 0x54, 0xf4, 0x88, 0x95, 0x8a, 0xc0, 0x0a, 0x68, 0x50, 0x91, 0x4d, 0x62, 0x81, 0x6f, 0x85, - 0x70, 0xfa, 0x05, 0x55, 0xfe, 0x40, 0x40, 0x17, 0x05, 0xaf, 0xf3, 0x78, 0xa5, 0x3f, 0xa5, 0xbe, - 0x95, 0x9c, 0x38, 0x02, 0x23, 0xe5, 0xed, 0x91, 0x2e, 0xed, 0xbd, 0xbd, 0xa9, 0xd3, 0xbd, 0xda, - 0xb9, 0x0f, 0xb5, 0x7d, 0x27, 0x93, 0x43, 0xfb, 0x30, 0x4a, 0xce, 0xee, 0x87, 0x38, 0x15, 0xb8, - 0xb6, 0xe3, 0x24, 0x49, 0x13, 0xd9, 0x01, 0xe5, 0x34, 0x60, 0x0a, 0xe9, 0xcd, 0x68, 0xdb, 0x7e, - 0x09, 0xec, 0x5b, 0xe4, 0xfe, 0x7d, 0x88, 0x85, 0x7c, 0xbe, 0x34, 0xba, 0xbf, 0x9b, 0x05, 0x01, - 0xe4, 0xa2, 0x87, 0xfe, 0xef, 0x2e, 0x78, 0x7d, 0x76, 0x67, 0x92, 0xe4, 0xf3, 0xa6, 0x8b, 0xda, - 0x05, 0xf6, 0xfb, 0x24, 0x9b, 0x94, 0xe9, 0x85, 0x91, 0xe9, 0x28, 0x00, 0x97, 0x7b, 0xf0, 0xc2, - 0x68, 0xad, 0x2a, 0xd7, 0xa1, 0x35, 0xde, 0x1c, 0x48, 0x61, 0xf9, 0x03, 0x4c, 0xeb, 0xe7, 0xf4, - 0xba, 0xa8, 0x80, 0xb8, 0x01, 0xd4, 0xc7, 0x22, 0x2d, 0xa1, 0xa0, 0x12, 0x63, 0xd9, 0x34, 0x36, - 0xe3, 0x4a, 0x46, 0xbe, 0xbf, 0x23, 0x99, 0x31, 0x48, 0xbd, 0x4e, 0xbf, 0xcf, 0xab, 0xf2, 0x7a, - 0x2f, 0x57, 0x2c, 0x3d, 0x43, 0x73, 0x6d, 0x5c, 0x3d, 0xcb, 0x0a, 0x6f, 0x8f, 0x74, 0xc1, 0x01, - 0x82, 0xba, 0xe9, 0xef, 0x6a, 0x0e, 0x27, 0x42, 0x95, 0x71, 0xa5, 0x71, 0x7b, 0x65, 0x20, 0x56, - 0xb9, 0x2d, 0x10, 0xdf, 0xca, 0x52, 0x51, 0x6f, 0x8d, 0x46, 0x22, 0x8d, 0x3e, 0xae, 0x37, 0xb1, - 0x0a, 0xa3, 0xba, 0xc1, 0x78, 0xfc, 0x07, 0xe1, 0x7f, 0xa0, 0x48, 0x9a, 0x9d, 0xea, 0x1d, 0xd2, - 0x4e, 0x1f, 0xc0, 0x6c, 0xd9, 0x7b, 0x29, 0xdd, 0xd3, 0xa6, 0xf5, 0x5e, 0xd1, 0xce, 0x9c, 0xf1, - 0xd1, 0x6a, 0x71, 0x25, 0x2a, 0x66, 0x3e, 0xa8, 0xe4, 0xb0, 0x93, 0x67, 0x44, 0x85, 0x35, 0x55, - 0x48, 0x93, 0xa0, 0x1f, 0x9f, 0xa9, 0x54, 0x7c, 0x5d, 0x40, 0x05, 0x24, 0x16, 0x0e, 0x15, 0x1e, - 0xf3, 0x2c, 0x67, 0x8b, 0xcd, 0x9c, 0x47, 0xca, 0x06, 0x55, 0xae, 0xf1, 0x02, 0xbc, 0x54, 0x05, - 0x81, 0xc1, 0xd3, 0x87, 0xf6, 0x97, 0xbb, 0x75, 0x6c, 0xe8, 0x65, 0xda, 0x95, 0xee, 0xe4, 0xd0, - 0xa1, 0x74, 0x5f, 0x67, 0x72, 0xe8, 0x10, 0x81, 0xd7, 0x5d, 0xa5, 0x53, 0x57, 0xcf, 0x7e, 0x59, - 0x3d, 0xc9, 0x9b, 0x5f, 0x12, 0x2c, 0xfb, 0x99, 0x0f, 0xfa, 0x12, 0x4f, 0x0a, 0x7c, 0xda, 0x99, - 0x82, 0x71, 0x8c, 0x04, 0xfc, 0xb3, 0x8d, 0xa4, 0x34, 0xeb, 0xe0, 0xcb, 0xc9, 0xc1, 0x0f, 0x52, - 0xc7, 0xae, 0x70, 0x03, 0xd2, 0xba, 0x07, 0xd2, 0x47, 0x31, 0xda, 0x28, 0x16, 0x8f, 0x5d, 0xc1, - 0xab, 0xc4, 0x0d, 0x4e, 0xef, 0x82, 0x1f, 0x20, 0x9f, 0xc9, 0x06, 0x9f, 0x1b, 0x2f, 0x0a, 0xe8, - 0xbc, 0xe0, 0x1d, 0x8b, 0x74, 0xa4, 0x66, 0x53, 0x1e, 0x96, 0xab, 0x67, 0x21, 0xb2, 0x3c, 0x7c, - 0x99, 0x44, 0x94, 0x05, 0xbd, 0x8f, 0x44, 0x86, 0x7d, 0xc0, 0xcd, 0xee, 0xa4, 0x89, 0x39, 0x1c, - 0xe2, 0x15, 0x11, 0xe7, 0x1c, 0x6d, 0xff, 0x50, 0xfa, 0xf2, 0x7b, 0xda, 0xe1, 0x0e, 0x70, 0xf6, - 0xe1, 0xc7, 0x65, 0x84, 0xaa, 0xe7, 0xba, 0x32, 0x09, 0x90, 0xbd, 0x79, 0xc8, 0xed, 0x3c, 0xcc, - 0x3b, 0x31, 0xd5, 0xb9, 0xe3, 0x1b, 0x0c, 0x48, 0x59, 0x4f, 0xe4, 0xc7, 0xbd, 0x14, 0xc7, 0xcc, - 0xcd, 0x9e, 0x46, 0x2e, 0x26, 0x48, 0x4a, 0xbd, 0xde, 0xae, 0xed, 0xfb, 0x84, 0x8a, 0x13, 0xfa, - 0x4a, 0x7a, 0x4c, 0x14, 0x49, 0x5e, 0x53, 0x36, 0xa0, 0xab, 0x67, 0x6d, 0x3b, 0x75, 0x12, 0x33, - 0xff, 0x30, 0x1f, 0x15, 0x57, 0xb3, 0x00, 0x7d, 0xf4, 0x09, 0x88, 0x9e, 0x40, 0x87, 0xb9, 0x8b, - 0x18, 0x19, 0x75, 0xdc, 0x68, 0x0a, 0xfd, 0x61, 0xa4, 0x27, 0xf6, 0xf1, 0x45, 0x1c, 0x44, 0x0d, - 0x5e, 0xb7, 0x3c, 0x13, 0x04, 0x2e, 0x12, 0x3d, 0xa8, 0x98, 0xfe, 0xdc, 0x1c, 0xc7, 0xc7, 0x02, - 0x1a, 0xea, 0x9a, 0x2f, 0x13, 0x67, 0x41, 0xb2, 0x82, 0x20, 0x0b, 0x77, 0x49, 0x7e, 0x60, 0x5d, - 0x7e, 0x5b, 0x68, 0x37, 0x77, 0x5d, 0xce, 0x7e, 0x8a, 0xa5, 0xa8, 0x70, 0x5b, 0x68, 0x37, 0xf4, - 0x07, 0x71, 0xae, 0xf5, 0xdf, 0x78, 0x46, 0x7a, 0x62, 0x1f, 0x88, 0x3b, 0xc6, 0x67, 0xfa, 0x71, - 0xa3, 0x29, 0xf4, 0x07, 0xe9, 0x97, 0x86, 0xe9, 0xe1, 0x8a, 0xc4, 0x45, 0x68, 0x2a, 0xfd, 0xe9, - 0x03, 0xc9, 0x07, 0x89, 0x5b, 0xcd, 0x85, 0x78, 0x56, 0xb4, 0x00, 0x46, 0x31, 0x05, 0x66, 0xc5, - 0x97, 0xe1, 0xf1, 0x93, 0x33, 0x5b, 0x5d, 0x10, 0x22, 0x82, 0xf9, 0xd8, 0x4f, 0x3c, 0xc6, 0x06, - 0x3d, 0xe9, 0xf3, 0x54, 0x18, 0xa3, 0x5e, 0x80, 0xfb, 0x36, 0x09, 0xce, 0x69, 0xd0, 0xb7, 0x49, - 0x3a, 0xce, 0x42, 0x05, 0xbb, 0x23, 0x61, 0x85, 0x9a, 0x26, 0x7d, 0xf0, 0x83, 0x98, 0xff, 0x22, - 0xe1, 0x78, 0x73, 0x13, 0x99, 0xfc, 0x0c, 0x6a, 0xfe, 0xd3, 0x4b, 0xc4, 0x39, 0x68, 0x12, 0x16, - 0xf1, 0x75, 0x41, 0x6a, 0x37, 0xa4, 0xbf, 0x70, 0x3b, 0xf2, 0x79, 0x98, 0x0b, 0x35, 0x1b, 0x1a, - 0x25, 0xe2, 0x0c, 0x94, 0xd7, 0x1c, 0x6b, 0xa4, 0xf6, 0x42, 0xfc, 0xa7, 0x74, 0xf5, 0xb4, 0x0b, - 0x4d, 0xa3, 0xd6, 0x8d, 0x75, 0xb0, 0x8b, 0x8a, 0x7f, 0x2d, 0xa0, 0xa9, 0x35, 0x26, 0x03, 0x8b, - 0x45, 0xe1, 0x33, 0x55, 0xfb, 0x94, 0xdf, 0x95, 0xde, 0x3b, 0x06, 0x44, 0x3c, 0xea, 0x69, 0x51, - 0xe5, 0xf5, 0xe2, 0x54, 0x38, 0x99, 0xd1, 0xf2, 0xd2, 0x95, 0xa6, 0x9f, 0xb7, 0x47, 0xba, 0xe0, - 0x88, 0x08, 0x06, 0x33, 0xad, 0x7d, 0x04, 0x1f, 0x9e, 0xf7, 0x1c, 0x1d, 0xdd, 0xfb, 0x1e, 0x4d, - 0x4b, 0xa1, 0x76, 0xa5, 0x0f, 0x5c, 0x4e, 0x7f, 0x78, 0x00, 0x7e, 0xee, 0xfd, 0xe7, 0xc9, 0x37, - 0x5d, 0x0b, 0x3d, 0xa5, 0x95, 0xe6, 0x6f, 0x57, 0xb6, 0x2c, 0x63, 0x25, 0x55, 0x82, 0x57, 0x6c, - 0x75, 0xa1, 0x39, 0x3e, 0x25, 0x11, 0xdb, 0x65, 0x1a, 0xd2, 0x26, 0x7f, 0x7c, 0xa7, 0x68, 0x79, - 0xbb, 0x68, 0x85, 0xc3, 0x93, 0x7b, 0x60, 0x3c, 0x60, 0xf1, 0xa8, 0xe7, 0xb8, 0xa0, 0xca, 0xbf, - 0x16, 0xef, 0x19, 0xdd, 0x7f, 0x30, 0x33, 0x70, 0xcc, 0x34, 0x33, 0x88, 0x22, 0x59, 0xfa, 0xf4, - 0xa8, 0xda, 0x81, 0x25, 0x2c, 0x67, 0xd1, 0xd2, 0xce, 0x5f, 0xcd, 0x7c, 0x7c, 0x01, 0xd2, 0x76, - 0xe0, 0xf9, 0xef, 0x3f, 0x98, 0x3a, 0x7e, 0x25, 0x39, 0x78, 0x40, 0xeb, 0x3e, 0xc2, 0x83, 0x41, - 0x07, 0x64, 0xc2, 0xcb, 0x3c, 0xe5, 0xce, 0x13, 0xae, 0x7c, 0x4d, 0x0f, 0x60, 0xfc, 0xfb, 0xca, - 0x18, 0x1e, 0x26, 0x46, 0xc1, 0x5f, 0x09, 0x68, 0x16, 0xb9, 0xe7, 0x27, 0x8e, 0x27, 0xf4, 0xa1, - 0x3d, 0x3e, 0xe9, 0x5b, 0xbc, 0x53, 0x8c, 0x3a, 0x3c, 0xf1, 0x05, 0xb9, 0xaa, 0xe3, 0x51, 0x4f, - 0x5c, 0x95, 0xab, 0xc5, 0x7b, 0x76, 0xea, 0x85, 0xb0, 0x17, 0xa6, 0x5a, 0x2f, 0xa6, 0xde, 0x6d, - 0x4d, 0x7d, 0x72, 0xa0, 0xf4, 0x7e, 0xa3, 0x2a, 0x73, 0xeb, 0x74, 0xea, 0xd0, 0x05, 0x3a, 0x67, - 0x33, 0x18, 0x99, 0x55, 0x59, 0xe9, 0x7d, 0xb6, 0xb3, 0x8a, 0x34, 0x07, 0x2b, 0x8d, 0x5e, 0xf0, - 0x64, 0xf6, 0xba, 0xd0, 0x5c, 0xbb, 0xc9, 0xd4, 0x44, 0xc2, 0x61, 0x25, 0x90, 0x10, 0x17, 0x39, - 0x0f, 0x9a, 0x82, 0xe0, 0xa9, 0xdd, 0x3f, 0x0e, 0xa8, 0x78, 0xd4, 0x73, 0x4c, 0x50, 0xe5, 0x67, - 0x45, 0x37, 0x37, 0xc5, 0x7d, 0xed, 0x95, 0xf4, 0x1d, 0x75, 0xff, 0xad, 0xd1, 0x13, 0xfd, 0xe9, - 0x37, 0xae, 0xa7, 0x5a, 0xf7, 0x94, 0x3e, 0xc0, 0xcd, 0x94, 0x94, 0xd3, 0x99, 0xea, 0xd0, 0x00, - 0x47, 0xa6, 0x5a, 0x2d, 0x3e, 0xe3, 0x34, 0xd5, 0x38, 0x5e, 0x3f, 0xf2, 0xc6, 0xfc, 0xf7, 0x0c, - 0x24, 0x6e, 0x5a, 0xd2, 0x00, 0x9d, 0xe4, 0x7f, 0x14, 0xd0, 0xd4, 0xba, 0xa6, 0x68, 0x24, 0x96, - 0x70, 0xe4, 0x51, 0x53, 0xb5, 0x2d, 0x8f, 0x66, 0x41, 0xc4, 0xa3, 0x9e, 0x37, 0x05, 0x55, 0x0e, - 0x8a, 0xf7, 0x68, 0x03, 0x23, 0x5a, 0x3b, 0x0d, 0xd6, 0x6f, 0xa6, 0xe0, 0x35, 0x7c, 0x15, 0xcc, - 0xb1, 0x8c, 0xfa, 0xc9, 0x9c, 0xef, 0x49, 0x0e, 0x1d, 0x61, 0x39, 0x73, 0x30, 0x90, 0xf6, 0xc6, - 0x99, 0xcc, 0xeb, 0x37, 0xab, 0xdc, 0x2c, 0xb8, 0x36, 0xb7, 0x8e, 0x8b, 0x09, 0x22, 0x1e, 0xf0, - 0xdc, 0x9b, 0x83, 0x92, 0x43, 0x64, 0x74, 0x78, 0xc5, 0xf7, 0xb9, 0xd0, 0x54, 0x16, 0xb4, 0xc6, - 0x61, 0xb2, 0xa6, 0x6a, 0xdb, 0xc9, 0x66, 0x41, 0xc4, 0xa3, 0x9e, 0x01, 0x41, 0x95, 0x5f, 0x13, - 0xa7, 0x82, 0xfd, 0x89, 0x49, 0xa4, 0xdf, 0x9a, 0x7e, 0x82, 0xae, 0x01, 0xd7, 0xe7, 0x90, 0x4c, - 0x30, 0x39, 0xdc, 0x0e, 0x17, 0x26, 0x34, 0x4c, 0x0e, 0x03, 0x20, 0x8e, 0xc6, 0x3d, 0x99, 0x8b, - 0xef, 0x69, 0xdd, 0x47, 0x92, 0xc3, 0xc3, 0xc9, 0x9b, 0xc7, 0xa8, 0x28, 0x23, 0x41, 0xfb, 0xb0, - 0x8a, 0xb5, 0xff, 0x03, 0xed, 0x8d, 0x4b, 0x5a, 0xd7, 0x71, 0xed, 0x8d, 0x4b, 0xc9, 0x9b, 0xbd, - 0x5f, 0xb4, 0xee, 0x25, 0x38, 0x78, 0xa8, 0xf4, 0x81, 0xf1, 0x71, 0x33, 0x46, 0x44, 0x97, 0x0b, - 0xcd, 0x94, 0x83, 0x41, 0xe2, 0x00, 0xbb, 0x29, 0xc2, 0x90, 0x61, 0xf1, 0x71, 0x64, 0x20, 0x54, - 0x6b, 0x2c, 0x75, 0x3b, 0x03, 0x80, 0x32, 0xe2, 0xb9, 0x26, 0xa8, 0xf2, 0x6e, 0x51, 0x4c, 0x0e, - 0xbe, 0x91, 0x3a, 0x7d, 0x1d, 0x06, 0x0e, 0x56, 0xba, 0xd2, 0x20, 0x58, 0xf1, 0xea, 0xea, 0xf1, - 0xf1, 0x63, 0xf8, 0x24, 0x5d, 0xdf, 0x77, 0x4e, 0x6b, 0x6f, 0x9c, 0x05, 0x88, 0xb2, 0xe4, 0xd0, - 0x91, 0x9a, 0x2d, 0xeb, 0x68, 0x4e, 0x51, 0xb5, 0xab, 0xae, 0xb6, 0xc6, 0x78, 0x57, 0x4e, 0x0a, - 0x17, 0x93, 0xe4, 0xf1, 0x14, 0x37, 0xe9, 0xb7, 0x07, 0xb5, 0xf6, 0x6b, 0x3a, 0x32, 0x20, 0x48, - 0x33, 0xc1, 0xc4, 0x52, 0xcf, 0x43, 0xe3, 0x94, 0x6b, 0xe1, 0x48, 0x50, 0xc1, 0xe8, 0xf8, 0x3f, - 0x04, 0x34, 0xa7, 0x56, 0xb7, 0x5d, 0xc7, 0x57, 0xc7, 0x22, 0x4d, 0x0c, 0x27, 0x1e, 0x6b, 0xe4, - 0x5f, 0x1d, 0x8e, 0xa1, 0xe5, 0xbe, 0x9c, 0x30, 0x14, 0x33, 0xfb, 0x05, 0x55, 0x7e, 0x1e, 0x63, - 0xe6, 0x40, 0x36, 0x66, 0x9e, 0x60, 0x98, 0xc1, 0xe7, 0xa5, 0x53, 0xad, 0x60, 0xea, 0x05, 0x08, - 0x3c, 0x40, 0xe6, 0x3f, 0x96, 0x1c, 0x3a, 0x82, 0xb7, 0x2d, 0x33, 0x4a, 0xc8, 0x84, 0x2b, 0xbc, - 0x13, 0x99, 0xb0, 0x38, 0xe8, 0x42, 0x73, 0xc9, 0xfb, 0x4d, 0x87, 0x29, 0x2f, 0xc9, 0x9e, 0x0e, - 0x07, 0x4c, 0x61, 0x4c, 0xd3, 0xaf, 0x1c, 0x37, 0x3c, 0x45, 0xc5, 0xa7, 0x82, 0x2a, 0xbf, 0x22, - 0x96, 0xa4, 0x3a, 0x6f, 0x8c, 0xee, 0xef, 0xb6, 0x41, 0xc8, 0x8b, 0x4e, 0x35, 0x65, 0x5a, 0x57, - 0x7b, 0xea, 0xc0, 0x65, 0x1a, 0xb8, 0xa0, 0xf3, 0x00, 0xe6, 0x00, 0xc8, 0x44, 0x78, 0xfa, 0x3a, - 0x40, 0x7c, 0xd1, 0xba, 0xa7, 0x46, 0xd6, 0xff, 0xcc, 0x42, 0x56, 0xba, 0xaf, 0x13, 0xe4, 0xc5, - 0xa3, 0xde, 0x87, 0x9d, 0x11, 0x16, 0xb7, 0x60, 0x2c, 0x5e, 0x59, 0x51, 0xb9, 0x0d, 0xcf, 0x49, - 0xfc, 0x3f, 0x05, 0x74, 0xd7, 0x1a, 0x85, 0x49, 0xba, 0xf8, 0x3a, 0x25, 0xe1, 0x27, 0x3e, 0x4f, - 0x5e, 0x1b, 0x5f, 0xf5, 0x6c, 0x20, 0x86, 0xae, 0x87, 0xc6, 0x05, 0x4b, 0x51, 0xf5, 0x27, 0xaa, - 0xbc, 0x56, 0x5c, 0x44, 0x4d, 0x31, 0xe7, 0x7b, 0xb4, 0xe3, 0xa7, 0xa8, 0x34, 0xe8, 0x69, 0xd3, - 0xda, 0x5f, 0xe7, 0xe3, 0x9c, 0x94, 0x1a, 0x50, 0xc9, 0xc1, 0x0f, 0x9c, 0xa0, 0xc8, 0xf4, 0x1f, - 0xf4, 0x78, 0x72, 0x4d, 0xbf, 0xa2, 0xb2, 0x49, 0x49, 0xf8, 0x31, 0x5f, 0x1c, 0x73, 0x41, 0x76, - 0x35, 0xb2, 0x7c, 0x75, 0x61, 0x46, 0x20, 0x8b, 0xb3, 0x67, 0x60, 0x85, 0x61, 0x93, 0xf5, 0x8e, - 0x07, 0x94, 0xce, 0xf5, 0xa2, 0xa0, 0xca, 0xbf, 0x13, 0x3d, 0x30, 0x0d, 0x26, 0x37, 0x07, 0x0f, - 0xd0, 0xb7, 0xd4, 0x5c, 0xaa, 0xe1, 0xd2, 0xe7, 0xa8, 0x1d, 0x05, 0x34, 0x1a, 0x3b, 0x10, 0xdd, - 0xa8, 0x95, 0x3a, 0x73, 0x18, 0x0e, 0xa7, 0xba, 0xeb, 0x96, 0xd6, 0x71, 0x52, 0xbb, 0x75, 0x33, - 0x7d, 0xec, 0x42, 0x66, 0xe0, 0x82, 0xd6, 0x3a, 0x02, 0x1c, 0x24, 0x4e, 0x88, 0x83, 0xde, 0x77, - 0xa1, 0x59, 0x78, 0x22, 0xeb, 0xfc, 0x04, 0x63, 0x06, 0x66, 0x1e, 0xb2, 0x9b, 0x6e, 0x36, 0x14, - 0xc3, 0x4d, 0xf9, 0xf8, 0x80, 0x29, 0x76, 0x3e, 0x11, 0x54, 0xf9, 0xf7, 0x62, 0x99, 0x3d, 0x76, - 0x9a, 0x48, 0x2b, 0x13, 0x8e, 0x9e, 0xb7, 0xc5, 0x91, 0x15, 0x70, 0x82, 0x98, 0xaa, 0x14, 0x2b, - 0xc6, 0x89, 0x29, 0xf8, 0x94, 0xf8, 0xa1, 0x80, 0xa6, 0x9a, 0x64, 0x81, 0x75, 0xcf, 0x35, 0x55, - 0xdb, 0xee, 0xb9, 0x59, 0x10, 0xf1, 0xa8, 0x67, 0xb3, 0x2a, 0x2f, 0xc2, 0x87, 0x80, 0xb3, 0xa3, - 0x27, 0xcf, 0xb3, 0x2d, 0xf7, 0x2e, 0xf8, 0x99, 0xee, 0xbc, 0xa1, 0xf5, 0xf7, 0xd0, 0x42, 0xd0, - 0x09, 0xbd, 0xe3, 0xdc, 0x1b, 0xc5, 0x6b, 0x02, 0x42, 0x06, 0x3f, 0x5a, 0xd5, 0x5a, 0xa3, 0xce, - 0x56, 0xad, 0xe5, 0xab, 0xe3, 0x51, 0xcf, 0x76, 0x55, 0x7e, 0x58, 0x9c, 0x6a, 0x5a, 0x32, 0xc6, - 0xa6, 0x20, 0xf3, 0x6b, 0xd8, 0x97, 0xf5, 0x70, 0x2c, 0x1c, 0x9b, 0x96, 0x89, 0xe3, 0x1d, 0xf5, - 0x7e, 0xca, 0xa7, 0xf5, 0xf4, 0x98, 0x4d, 0x47, 0x7f, 0xbf, 0x1d, 0x81, 0x99, 0x61, 0x6c, 0x4f, - 0x25, 0x76, 0x60, 0xf1, 0xa8, 0xe7, 0x9c, 0xa0, 0xca, 0xdb, 0xc5, 0xfb, 0xe9, 0xf8, 0xcf, 0x1c, - 0xc6, 0x62, 0x86, 0x7a, 0x02, 0x1e, 0x48, 0xf7, 0xb4, 0x51, 0x50, 0x4a, 0x7e, 0x2b, 0x29, 0xf9, - 0x71, 0x00, 0x74, 0xcb, 0x27, 0xf5, 0x30, 0xcd, 0xec, 0xf8, 0x03, 0xcc, 0xd6, 0x0e, 0x52, 0x5a, - 0x12, 0x97, 0xda, 0xcc, 0x9f, 0xda, 0x09, 0xe2, 0x95, 0xaf, 0xe9, 0xa6, 0x24, 0x43, 0xc5, 0x15, - 0xdf, 0x75, 0xa1, 0x29, 0x10, 0xe2, 0x09, 0x50, 0xb0, 0xc0, 0x6e, 0x6e, 0xdc, 0xdc, 0x17, 0xe6, - 0xac, 0x8f, 0x47, 0x3d, 0x9f, 0x0b, 0xaa, 0x7c, 0x59, 0x10, 0xef, 0x32, 0x2d, 0x22, 0x9d, 0xe3, - 0x51, 0x01, 0x0c, 0x63, 0x14, 0x23, 0x84, 0x79, 0xc0, 0x63, 0xda, 0x04, 0xc7, 0x73, 0xd8, 0xe8, - 0xb9, 0x1b, 0x00, 0x07, 0x09, 0x95, 0xb2, 0xf8, 0x2c, 0xd5, 0x77, 0x1e, 0x6a, 0xbf, 0x68, 0xdd, - 0x4b, 0x9b, 0x40, 0x7c, 0x15, 0x52, 0x38, 0xfa, 0xfa, 0x4d, 0xbe, 0x09, 0x9f, 0x72, 0x11, 0xc0, - 0xb8, 0xc3, 0xec, 0x3c, 0x31, 0xc7, 0x61, 0x56, 0xfc, 0x57, 0x02, 0x9a, 0x49, 0x26, 0x4a, 0x52, - 0x58, 0x30, 0x5c, 0x2d, 0xb2, 0xc5, 0x05, 0x0f, 0x62, 0x7b, 0xde, 0xb1, 0x81, 0x82, 0x43, 0xfa, - 0xb3, 0xe2, 0x3d, 0xec, 0x0e, 0xe1, 0xb2, 0xd6, 0x7e, 0xd5, 0x8c, 0xbb, 0x0a, 0xbe, 0x8a, 0x9d, - 0xe6, 0xde, 0xe0, 0x7f, 0xc2, 0xed, 0x0e, 0xdc, 0xeb, 0x90, 0x39, 0xdd, 0x27, 0xda, 0x69, 0xf9, - 0xf1, 0x1d, 0xfe, 0x98, 0x12, 0xd4, 0x09, 0xe0, 0x7f, 0x09, 0x48, 0x94, 0x83, 0xc1, 0x8d, 0xcd, - 0xdb, 0xc2, 0x4a, 0xc2, 0x50, 0x6d, 0xef, 0xb7, 0xd1, 0x5c, 0xb3, 0x60, 0x6c, 0x59, 0xc1, 0x0e, - 0x2c, 0x1e, 0xf5, 0xbc, 0x25, 0xa8, 0xf2, 0x8b, 0x62, 0x09, 0x1d, 0xe8, 0xa7, 0xc3, 0xda, 0x1b, - 0x67, 0xb5, 0xbe, 0xc3, 0xf8, 0x2c, 0x47, 0xac, 0x70, 0xa5, 0x4f, 0x3b, 0xd5, 0x94, 0xbb, 0x33, - 0xed, 0x9f, 0x65, 0xfa, 0x07, 0x92, 0x43, 0x47, 0xb6, 0xd4, 0xd7, 0x54, 0xd4, 0xac, 0xaf, 0x4b, - 0x5d, 0x3a, 0xa7, 0x8d, 0x10, 0x5d, 0x87, 0x03, 0x26, 0xf3, 0x5d, 0xe1, 0xa9, 0x1c, 0xaf, 0x96, - 0x12, 0x27, 0x63, 0x8c, 0xe3, 0x3d, 0xfb, 0x2f, 0x5d, 0x68, 0xde, 0xc6, 0x57, 0x42, 0x89, 0xc0, - 0x0e, 0x3a, 0xe0, 0xcd, 0xe1, 0xa0, 0x12, 0x6b, 0xf4, 0xef, 0x5a, 0x0f, 0xa1, 0xa7, 0x45, 0x8b, - 0xba, 0x96, 0x0b, 0x1a, 0x23, 0x65, 0xe9, 0xc4, 0x1a, 0xc4, 0xa3, 0x9e, 0x3f, 0x27, 0xa7, 0x80, - 0xb9, 0x5a, 0xc7, 0xfe, 0xd4, 0xc1, 0x77, 0x74, 0x55, 0x04, 0x62, 0x9c, 0xc3, 0x7c, 0x4b, 0x5f, - 0x84, 0x4a, 0xb0, 0x29, 0xeb, 0xe7, 0xbd, 0x2c, 0x28, 0x7a, 0x41, 0xd1, 0x4c, 0x3f, 0xe1, 0xe6, - 0xeb, 0xca, 0x74, 0x44, 0x02, 0x54, 0x4b, 0x34, 0x50, 0x11, 0x08, 0x87, 0x74, 0x1d, 0xef, 0x29, - 0xcf, 0xe3, 0xe3, 0xd6, 0xf1, 0x60, 0xe8, 0xf1, 0x4a, 0xf6, 0x21, 0x8c, 0xc7, 0xbf, 0x15, 0xd0, - 0x2c, 0xb0, 0xcc, 0x6c, 0x09, 0xc5, 0x12, 0xcd, 0xfe, 0x46, 0x46, 0x4a, 0x0f, 0xda, 0x5b, 0xa8, - 0xcc, 0x50, 0x18, 0x6f, 0x65, 0xe3, 0x03, 0x8c, 0x47, 0x3d, 0x8a, 0x2a, 0x3f, 0x29, 0x52, 0x5f, - 0x83, 0xcc, 0xc9, 0x9e, 0xd4, 0x81, 0x33, 0x80, 0x8e, 0xd2, 0x07, 0xac, 0x65, 0xe5, 0xc9, 0xcf, - 0x4e, 0xa5, 0x3a, 0xdf, 0x4a, 0x0e, 0x1d, 0xda, 0x11, 0x89, 0x27, 0x38, 0x96, 0x77, 0x7b, 0xe6, - 0xda, 0x4c, 0xb8, 0x85, 0x33, 0x60, 0xfd, 0xa5, 0x80, 0x66, 0xc1, 0x4e, 0x3a, 0xd6, 0x94, 0xec, - 0xa0, 0x6c, 0xa7, 0x64, 0x0f, 0x18, 0x8f, 0x7a, 0x5e, 0x50, 0xe5, 0x32, 0x91, 0xde, 0x74, 0x9b, - 0xa6, 0x64, 0x53, 0x46, 0x86, 0xbf, 0xd8, 0xfb, 0x60, 0x8e, 0xe1, 0x9b, 0xb6, 0xbb, 0x7f, 0x2b, - 0xa0, 0x7b, 0xe0, 0x14, 0x6e, 0xfe, 0xf0, 0xf3, 0xcd, 0x91, 0x84, 0x5f, 0x2c, 0xb7, 0x3f, 0xb0, - 0xdb, 0x80, 0xe2, 0x19, 0x55, 0x4c, 0x00, 0x3a, 0x1e, 0xf5, 0x04, 0xf0, 0xb4, 0x68, 0xd2, 0x87, - 0xd1, 0xf6, 0x83, 0xa3, 0xef, 0x9c, 0x2a, 0x2d, 0xa1, 0x7e, 0x27, 0xdc, 0x84, 0xa0, 0x06, 0x36, - 0xb1, 0xd2, 0x8a, 0x71, 0x4e, 0xab, 0xf2, 0x77, 0xf8, 0x2b, 0x78, 0x9d, 0x2e, 0x09, 0x68, 0xf2, - 0x1a, 0x05, 0x1c, 0x8a, 0xec, 0x54, 0x0c, 0x5c, 0xc1, 0x94, 0xc8, 0x85, 0x8e, 0xf5, 0x54, 0x6f, - 0xfc, 0xb5, 0x2a, 0x2f, 0x15, 0x11, 0x48, 0x5b, 0x5c, 0x51, 0xea, 0xe1, 0x15, 0x10, 0x92, 0x18, - 0xab, 0xae, 0x3e, 0xdd, 0xd3, 0x06, 0x3a, 0x21, 0xa7, 0x7e, 0xd8, 0x8b, 0x5b, 0xac, 0xff, 0x56, - 0xbe, 0x16, 0x82, 0x66, 0xbf, 0x17, 0xff, 0x8b, 0x80, 0xa6, 0xd0, 0x2f, 0x42, 0xae, 0x4c, 0x87, - 0xe1, 0x70, 0x89, 0xfc, 0xac, 0xc7, 0x65, 0x13, 0x0c, 0x1d, 0x36, 0x96, 0xb0, 0x0d, 0xe2, 0x1c, - 0x63, 0xdc, 0xfc, 0xe3, 0xc7, 0xd2, 0x75, 0xb9, 0xe6, 0xc0, 0x43, 0x96, 0x67, 0xb9, 0xa6, 0xa6, - 0x0e, 0x5d, 0xd0, 0x3a, 0x0f, 0xa6, 0x3f, 0x1c, 0x00, 0x47, 0x27, 0xe8, 0x26, 0x87, 0xb6, 0x65, - 0x9e, 0x6e, 0x65, 0x08, 0xcf, 0xf1, 0x92, 0x80, 0xa6, 0xf9, 0x94, 0x40, 0x24, 0x16, 0xd4, 0xa7, - 0x6d, 0x63, 0xff, 0xe5, 0xeb, 0xd9, 0xcc, 0x4b, 0xad, 0xb9, 0xee, 0x58, 0xf2, 0x6f, 0xcf, 0x46, - 0x55, 0x5e, 0x22, 0x96, 0x68, 0x37, 0x8f, 0x69, 0xed, 0x17, 0xac, 0xf3, 0x28, 0x15, 0xf9, 0x1a, - 0x38, 0xd1, 0xc1, 0x46, 0xef, 0xb9, 0xdb, 0x61, 0xd8, 0x98, 0x92, 0xfe, 0x6f, 0x01, 0xa1, 0xcd, - 0xba, 0x87, 0x9c, 0xe8, 0x60, 0xcb, 0xe2, 0xe9, 0xc9, 0x93, 0x0b, 0x84, 0xae, 0xcd, 0x59, 0x62, - 0xef, 0x9a, 0x01, 0x74, 0x8f, 0x3f, 0x45, 0xc7, 0xd8, 0x90, 0x5d, 0xf2, 0x6d, 0xda, 0xbb, 0xe6, - 0x95, 0xe6, 0x9a, 0xf8, 0xbf, 0x76, 0xa1, 0xbb, 0x4c, 0x86, 0x3a, 0x08, 0xf7, 0x69, 0x3d, 0xa8, - 0xdb, 0x00, 0x39, 0x1e, 0xd4, 0x6d, 0x61, 0x29, 0x4e, 0x46, 0x41, 0x4f, 0x5c, 0x42, 0x45, 0x03, - 0x99, 0x02, 0x9c, 0x80, 0x34, 0xb5, 0x0b, 0x8f, 0x0a, 0xcf, 0xe4, 0xe6, 0xe5, 0xf4, 0xc5, 0x61, - 0x08, 0x96, 0x47, 0x51, 0xb6, 0x7b, 0x62, 0xf0, 0xe5, 0xee, 0xe4, 0xe0, 0x50, 0x72, 0x68, 0x1f, - 0xdc, 0x68, 0x68, 0x7d, 0x6f, 0x8d, 0xee, 0xef, 0x36, 0x9c, 0xf5, 0x46, 0x7a, 0xb4, 0xc3, 0x5d, - 0xa9, 0xbe, 0x0b, 0xd0, 0xa7, 0xbf, 0x39, 0x11, 0x89, 0x07, 0xfc, 0x8d, 0xa1, 0x70, 0xc3, 0x86, - 0x68, 0x22, 0x14, 0x09, 0xeb, 0xf1, 0xfc, 0x38, 0x26, 0x5f, 0x5e, 0xba, 0x64, 0xbc, 0xbb, 0x24, - 0x44, 0xed, 0xc3, 0xc8, 0xfd, 0x4f, 0x02, 0x12, 0x89, 0xe1, 0x1c, 0xe8, 0x9b, 0xed, 0x22, 0xd6, - 0xab, 0x1b, 0x06, 0x13, 0x77, 0xa4, 0x2e, 0x1e, 0x84, 0x62, 0xb2, 0x5b, 0x50, 0xe5, 0x97, 0xc5, - 0xfb, 0xe1, 0x82, 0xda, 0xa0, 0x25, 0xea, 0x20, 0xdc, 0xf7, 0x96, 0xd6, 0x7b, 0x69, 0x5b, 0x80, - 0x26, 0x5a, 0x2f, 0x7d, 0x34, 0xf5, 0x6e, 0x2b, 0x66, 0x62, 0x60, 0x0b, 0x3b, 0x90, 0xf2, 0xd1, - 0xb7, 0x3e, 0x4a, 0xf5, 0xbd, 0x93, 0x19, 0x18, 0xd0, 0xde, 0x3e, 0x9d, 0x3a, 0x7a, 0x9d, 0xb3, - 0x9b, 0xd9, 0x9b, 0x8d, 0x09, 0xcb, 0x1b, 0x97, 0xea, 0x82, 0x57, 0x1c, 0x14, 0x10, 0xaa, 0x89, - 0xc4, 0x82, 0x91, 0xb0, 0x3d, 0x17, 0x19, 0x75, 0xce, 0xf3, 0xe4, 0x40, 0xe8, 0x3c, 0x03, 0xaa, - 0xfc, 0xa8, 0x48, 0xdd, 0x5a, 0xb1, 0x1a, 0xd4, 0x3d, 0x90, 0xb9, 0xf2, 0xba, 0x36, 0xf4, 0x5e, - 0xaa, 0x75, 0x4f, 0xe9, 0x02, 0x2a, 0x01, 0xfa, 0x3f, 0xa3, 0xde, 0x95, 0xac, 0x92, 0xb3, 0xfe, - 0xdf, 0x57, 0xba, 0xc0, 0x69, 0xf4, 0x01, 0xf2, 0x35, 0x3c, 0xf4, 0x21, 0x01, 0x15, 0x6f, 0x0e, - 0x73, 0x83, 0xb7, 0x08, 0x5f, 0xbe, 0x96, 0x0d, 0x7f, 0x51, 0x6e, 0x20, 0x3a, 0x81, 0xad, 0xaa, - 0xbc, 0x4c, 0x14, 0xa9, 0x2d, 0x81, 0x1f, 0xfd, 0x5c, 0x7e, 0xf4, 0x76, 0x43, 0xbf, 0xbf, 0xd4, - 0xed, 0x34, 0xf4, 0xe6, 0xb0, 0x69, 0xf0, 0x45, 0xb5, 0x31, 0x7f, 0x08, 0x46, 0x6e, 0x35, 0x1b, - 0xb0, 0x2a, 0x36, 0xec, 0x7b, 0x73, 0x40, 0xd0, 0x31, 0xef, 0x50, 0xe5, 0x95, 0xa2, 0x17, 0xc6, - 0x17, 0x8d, 0x04, 0x33, 0xb7, 0xf6, 0xa4, 0x2f, 0x0e, 0x97, 0x6b, 0x57, 0xf6, 0xb1, 0x75, 0x78, - 0x23, 0xdd, 0xd3, 0xe6, 0xae, 0x8f, 0x04, 0xdd, 0xa3, 0xef, 0x5f, 0x1d, 0x6d, 0x3d, 0x5c, 0x3a, - 0x3d, 0x0b, 0x96, 0x8c, 0xdf, 0xe3, 0x99, 0xef, 0x34, 0xfe, 0x20, 0xfe, 0x24, 0x1e, 0xfc, 0xb0, - 0x80, 0x66, 0x18, 0xb2, 0x73, 0xad, 0x7f, 0x9b, 0xd2, 0x18, 0xb7, 0x2a, 0x5a, 0xd9, 0x10, 0x6c, - 0x2a, 0x65, 0x63, 0x03, 0xd2, 0x19, 0x6d, 0x22, 0x8a, 0x16, 0xd5, 0x41, 0x80, 0x0d, 0xce, 0xee, - 0x4f, 0xf7, 0x7d, 0x56, 0x6a, 0x53, 0x36, 0x16, 0xdd, 0x34, 0x92, 0xae, 0xf1, 0xe8, 0xff, 0xa9, - 0x80, 0x66, 0x1b, 0x9f, 0xe4, 0x3c, 0xea, 0x9c, 0xd4, 0xab, 0x2c, 0x30, 0x36, 0x8f, 0x8a, 0x71, - 0x42, 0xd3, 0xc9, 0xfc, 0xca, 0x3a, 0x99, 0x6b, 0x97, 0x32, 0x17, 0xdf, 0x2d, 0xb5, 0x29, 0xcb, - 0x71, 0xdb, 0x07, 0x2c, 0xcc, 0x45, 0xb3, 0xb5, 0xac, 0xc7, 0x26, 0x7f, 0x28, 0x9c, 0xc8, 0xb9, - 0x1e, 0x00, 0x31, 0x8e, 0xf5, 0x60, 0x80, 0xce, 0xeb, 0x71, 0xf5, 0x5c, 0x7a, 0xef, 0x8d, 0x52, - 0x9b, 0xb2, 0xb1, 0xd6, 0x23, 0x41, 0xba, 0xc6, 0xa3, 0xff, 0x9f, 0x10, 0x0f, 0x8b, 0x8a, 0xda, - 0x9a, 0x98, 0x12, 0x54, 0xc2, 0x89, 0x90, 0xbf, 0xd1, 0x3a, 0x03, 0x3b, 0x28, 0x5b, 0xd5, 0xdd, - 0x1e, 0x30, 0x1e, 0xf5, 0x1c, 0x11, 0x54, 0x79, 0x8b, 0x38, 0xdf, 0x64, 0xf1, 0x30, 0x40, 0x40, - 0x2b, 0x29, 0x7d, 0x98, 0x9a, 0x3e, 0xba, 0x0f, 0x27, 0x3f, 0x7b, 0x3b, 0xdd, 0xd3, 0x06, 0xd1, - 0xd7, 0x9f, 0x53, 0x76, 0xe5, 0x6c, 0x96, 0xc3, 0xae, 0x43, 0x4b, 0x02, 0x7a, 0x8b, 0xca, 0xd7, - 0xe2, 0xac, 0xcf, 0xdf, 0x8b, 0xff, 0x59, 0x40, 0x77, 0x9b, 0xb6, 0x5f, 0x0e, 0x05, 0xb9, 0xf7, - 0x74, 0x33, 0x16, 0x1e, 0x1a, 0x37, 0x6c, 0x3c, 0xea, 0xf9, 0x13, 0x55, 0x7e, 0x4a, 0x9c, 0x6f, - 0xba, 0xc7, 0xb3, 0xe0, 0x61, 0x3e, 0xe8, 0xa0, 0x0e, 0x40, 0x64, 0xbe, 0x0f, 0x97, 0x4e, 0x78, - 0xbe, 0x78, 0xc9, 0xff, 0x83, 0x80, 0xee, 0x36, 0xd9, 0x3d, 0x73, 0x4d, 0xd9, 0x01, 0xd0, 0x76, - 0xca, 0x8e, 0xb0, 0xf1, 0xa8, 0xa7, 0x49, 0x95, 0x25, 0xf1, 0x6e, 0x93, 0x59, 0xd5, 0x80, 0x28, - 0x75, 0xaa, 0x80, 0x65, 0xf5, 0x4e, 0x7c, 0x59, 0xff, 0x93, 0x80, 0x66, 0x73, 0x16, 0x37, 0x6e, - 0x86, 0x65, 0x39, 0x0c, 0x73, 0xe6, 0xf9, 0x2d, 0x1e, 0x27, 0x64, 0x3c, 0xea, 0xf9, 0xff, 0xa9, - 0x72, 0xbd, 0x23, 0x61, 0x53, 0xc3, 0x54, 0xa5, 0xd5, 0xa6, 0x97, 0xb3, 0x01, 0x68, 0x12, 0xe2, - 0xa2, 0xf1, 0xcc, 0x5d, 0xfc, 0x1b, 0x01, 0xcd, 0xae, 0x0b, 0x87, 0x12, 0xab, 0x95, 0xa0, 0x02, - 0x79, 0xfd, 0x98, 0xf2, 0x64, 0x99, 0xaf, 0x2d, 0x98, 0xed, 0x7c, 0x1d, 0x20, 0xe3, 0x51, 0xbc, - 0x43, 0x2f, 0x15, 0xe7, 0x68, 0x1d, 0xa7, 0xb4, 0x8b, 0x07, 0xb4, 0xae, 0xe3, 0xe0, 0x01, 0xc3, - 0x0c, 0xd1, 0x0e, 0xe5, 0x39, 0x34, 0xa3, 0x50, 0x38, 0x94, 0xd8, 0xae, 0xdb, 0xda, 0x88, 0x9a, - 0x2d, 0xa0, 0xbb, 0xe4, 0x60, 0x90, 0x7e, 0x5d, 0x09, 0xb2, 0xd9, 0xd8, 0xd9, 0xd1, 0xb2, 0x81, - 0xf0, 0x5c, 0x1e, 0x1c, 0x17, 0x5c, 0x3c, 0xea, 0x89, 0x11, 0x56, 0xd4, 0xae, 0xec, 0x63, 0x56, - 0xc4, 0x37, 0xce, 0xe2, 0xd3, 0x90, 0x69, 0x42, 0xb9, 0xab, 0xe1, 0x92, 0xdc, 0x63, 0x77, 0xc8, - 0xf3, 0x07, 0x83, 0xdb, 0xd9, 0x47, 0xb9, 0xc9, 0x5d, 0x16, 0xd0, 0x14, 0x2e, 0x57, 0x94, 0xf5, - 0x6c, 0xcb, 0x55, 0x3a, 0x9e, 0x6d, 0x4d, 0x30, 0xc6, 0x16, 0xb1, 0x44, 0x9c, 0xae, 0xe7, 0x99, - 0x02, 0x47, 0xe0, 0xd2, 0xb9, 0x59, 0x05, 0x34, 0x4b, 0x9f, 0xa1, 0xab, 0xcf, 0xf7, 0x94, 0x38, - 0xb9, 0x7b, 0xe0, 0xe1, 0x5e, 0x11, 0xd0, 0x14, 0x2e, 0x23, 0x8f, 0xe8, 0x71, 0x12, 0x75, 0xb9, - 0x86, 0x6b, 0x82, 0xa1, 0xc3, 0xfd, 0x25, 0xde, 0xd1, 0xa6, 0xeb, 0xd9, 0x7c, 0xe8, 0x70, 0x67, - 0x67, 0x15, 0xf0, 0xf7, 0x8b, 0xa5, 0x1e, 0x47, 0x17, 0x1c, 0xdd, 0x2d, 0x05, 0x0f, 0xf9, 0x53, - 0x01, 0x4d, 0xe1, 0x32, 0xa2, 0x38, 0x5d, 0xb6, 0xe7, 0x1e, 0xb2, 0x09, 0xc6, 0x50, 0x4d, 0x25, - 0x71, 0x26, 0x93, 0x56, 0x91, 0xe6, 0x20, 0x1d, 0xf4, 0x7c, 0xfe, 0x86, 0x28, 0x60, 0x54, 0x70, - 0x83, 0x5f, 0xe4, 0x1d, 0xc7, 0xe0, 0xc5, 0x0f, 0x04, 0x54, 0x48, 0x36, 0x50, 0x3c, 0xec, 0x85, - 0xb6, 0x5b, 0x2b, 0x37, 0x66, 0xb7, 0x33, 0x00, 0x1d, 0xf0, 0x8b, 0x98, 0x24, 0xa6, 0x30, 0x41, - 0x13, 0x69, 0x0e, 0x96, 0x2e, 0xe4, 0x4d, 0x1c, 0xf4, 0xbb, 0xd6, 0xc1, 0x8a, 0xe3, 0x19, 0xec, - 0x19, 0x17, 0x2a, 0xd2, 0xf3, 0x5e, 0x58, 0xf5, 0x68, 0xbd, 0xca, 0x51, 0x8f, 0xe6, 0x20, 0xe8, - 0x78, 0xff, 0x5a, 0x50, 0xe5, 0x4b, 0x82, 0x38, 0x93, 0x1b, 0x31, 0x95, 0x9f, 0x6a, 0x8e, 0x4b, - 0x11, 0x1d, 0xea, 0xfb, 0xb8, 0x12, 0x29, 0x15, 0x1d, 0xd9, 0x07, 0x9f, 0xf0, 0xa6, 0x71, 0x9c, - 0xba, 0xa5, 0xbe, 0xc6, 0x6a, 0xd2, 0x31, 0xd7, 0x33, 0x5c, 0x3d, 0x30, 0x16, 0x18, 0x45, 0xd8, - 0x2f, 0xf0, 0x02, 0x8b, 0x3a, 0x8b, 0x6f, 0xa9, 0xaf, 0xa1, 0x16, 0x80, 0x12, 0xbe, 0xcc, 0xc2, - 0xf3, 0xf6, 0x46, 0x5d, 0x32, 0xe8, 0x96, 0x68, 0x00, 0xf3, 0xd0, 0x67, 0x02, 0x9a, 0xc6, 0x71, - 0xad, 0xed, 0xd0, 0xcd, 0xf5, 0x8e, 0x43, 0xcf, 0x06, 0xa3, 0x43, 0x7f, 0x49, 0x95, 0x3d, 0xcc, - 0xe6, 0x99, 0x1c, 0x3a, 0xd2, 0x12, 0x0d, 0x30, 0x5d, 0x16, 0x7e, 0x71, 0xc3, 0xb5, 0xb7, 0x76, - 0xb2, 0xe1, 0x72, 0x3e, 0x69, 0xaf, 0xb5, 0x44, 0x03, 0x54, 0x08, 0xfc, 0x8d, 0x80, 0xa6, 0x71, - 0x3c, 0x6c, 0x3b, 0x01, 0x73, 0xbd, 0xe3, 0x04, 0xb2, 0xc1, 0xe8, 0x04, 0x1a, 0x55, 0x79, 0x85, - 0x38, 0x9b, 0x93, 0x06, 0x6e, 0x7d, 0xd4, 0xa5, 0x73, 0x2d, 0x12, 0xc1, 0x6d, 0x9e, 0x52, 0xa5, - 0x77, 0x62, 0x53, 0x12, 0xaf, 0xb9, 0x50, 0xb1, 0xce, 0x30, 0x78, 0x36, 0xf7, 0x39, 0xb2, 0x13, - 0x37, 0x97, 0x45, 0xb9, 0x81, 0xe8, 0x4c, 0xfe, 0x5e, 0x50, 0xe5, 0x2b, 0x82, 0x38, 0x9b, 0x63, - 0x3b, 0xf7, 0x96, 0xfa, 0x1a, 0xca, 0x7a, 0xc7, 0x73, 0xb3, 0x9e, 0x01, 0xf9, 0x7d, 0xb0, 0xdf, - 0x7c, 0x31, 0x17, 0x25, 0x8b, 0x5f, 0x08, 0x68, 0x06, 0x27, 0x66, 0x1a, 0xc8, 0x59, 0xf3, 0xc1, - 0x1c, 0x82, 0xa8, 0x81, 0x3f, 0x66, 0x96, 0x8d, 0x0d, 0x68, 0x38, 0xd4, 0xd4, 0x89, 0x25, 0x3c, - 0xfe, 0xe0, 0x75, 0x8a, 0x7e, 0x2d, 0x49, 0x30, 0x48, 0x17, 0x55, 0x0f, 0xe6, 0xaf, 0x5d, 0x3d, - 0xcd, 0x12, 0xe5, 0xc2, 0xa3, 0x16, 0x8e, 0x40, 0xbc, 0x62, 0x99, 0xd3, 0xc4, 0xa0, 0x6b, 0x4e, - 0x12, 0xff, 0x39, 0xb8, 0x17, 0x6c, 0xa9, 0xaf, 0xa9, 0x09, 0x05, 0x6d, 0x2c, 0x66, 0x46, 0x9d, - 0xa3, 0x25, 0x89, 0x07, 0x31, 0xe8, 0xfb, 0x69, 0x71, 0x16, 0xcc, 0xa9, 0x25, 0x1a, 0x70, 0x07, - 0x42, 0x41, 0x76, 0xcd, 0x4a, 0xc3, 0x09, 0x12, 0xd2, 0xe4, 0x67, 0xd3, 0x12, 0x0d, 0xa4, 0x7b, - 0xda, 0x30, 0xe0, 0x98, 0xbb, 0x49, 0x4b, 0x34, 0x80, 0xe1, 0x74, 0xfa, 0xfe, 0x27, 0x02, 0x9a, - 0x5e, 0x93, 0xf5, 0xb6, 0xdc, 0x41, 0x0a, 0xea, 0x00, 0x6c, 0x36, 0x0f, 0x8e, 0x09, 0x47, 0xa7, - 0xf4, 0x5b, 0x55, 0x7e, 0x86, 0xa9, 0x48, 0xd4, 0x79, 0x6b, 0xb8, 0xad, 0xb4, 0x22, 0xab, 0x00, - 0xee, 0x54, 0x6f, 0x8f, 0x74, 0x51, 0xfb, 0xfe, 0xc8, 0x8d, 0x54, 0xeb, 0xc5, 0xe4, 0xc8, 0x60, - 0x7a, 0xe4, 0x7d, 0x66, 0x26, 0xbe, 0xd7, 0x33, 0xcf, 0xe1, 0x74, 0x4d, 0xdc, 0xd9, 0xb1, 0x00, - 0xfa, 0x0b, 0x01, 0x4d, 0xdf, 0x9c, 0xf5, 0x8c, 0xfc, 0x01, 0xe7, 0xf3, 0x7e, 0xee, 0x09, 0x59, - 0xe0, 0xe8, 0x84, 0x5e, 0xe6, 0x94, 0x28, 0xbd, 0x96, 0x29, 0x51, 0x7a, 0x01, 0x2f, 0x77, 0x4a, - 0xbd, 0xb9, 0x06, 0x5e, 0xf9, 0x1a, 0x97, 0x29, 0x89, 0xc8, 0xd1, 0xbf, 0x70, 0xa1, 0xe9, 0xb5, - 0x59, 0x0f, 0xf0, 0x1f, 0x70, 0xf6, 0x4c, 0xcc, 0x3d, 0x0d, 0x0b, 0x1c, 0x9d, 0xc6, 0x1f, 0x04, - 0x55, 0x7e, 0x5f, 0xc0, 0x2b, 0x83, 0xa5, 0xa6, 0x31, 0x91, 0x63, 0x02, 0x2f, 0x47, 0xf5, 0x72, - 0x2c, 0x35, 0x6e, 0xbe, 0xa9, 0xff, 0x4c, 0xf5, 0x76, 0xa6, 0x8f, 0x9d, 0xd4, 0xfa, 0xde, 0x4a, - 0xf7, 0xb4, 0xe1, 0xc2, 0xd4, 0x89, 0xeb, 0x70, 0x03, 0xa0, 0xb5, 0xef, 0xc9, 0xf4, 0x0f, 0xa6, - 0xdf, 0xfe, 0x38, 0x75, 0xe8, 0x02, 0x74, 0xa4, 0xcb, 0x9b, 0xcc, 0x7b, 0x7b, 0xa0, 0x24, 0xd5, - 0xdb, 0xb9, 0x9e, 0xda, 0xc5, 0xd9, 0xfa, 0x93, 0xfb, 0x85, 0x4f, 0xa9, 0x9d, 0x71, 0x64, 0x48, - 0xeb, 0xb8, 0x4e, 0x41, 0x99, 0xc8, 0x22, 0x98, 0x2c, 0xf7, 0x4e, 0x00, 0x93, 0xe2, 0x9f, 0x09, - 0xa8, 0x98, 0x5e, 0x48, 0x01, 0x0e, 0x9d, 0xae, 0xab, 0x4c, 0x08, 0x5c, 0x94, 0x1b, 0x88, 0x62, - 0x4f, 0xc1, 0xe7, 0xb1, 0xe9, 0xc6, 0x9d, 0x16, 0xe0, 0x6e, 0x3e, 0xaf, 0xe9, 0xad, 0x37, 0xc6, - 0xc2, 0x11, 0x43, 0xb9, 0x38, 0x91, 0x29, 0xfc, 0x27, 0x01, 0xdc, 0xd3, 0x38, 0xe7, 0x4b, 0x98, - 0xca, 0x43, 0x39, 0x8e, 0xca, 0x96, 0x29, 0x95, 0x8f, 0x0f, 0x98, 0x4e, 0x6d, 0xb7, 0x2a, 0xaf, - 0x14, 0x17, 0xf0, 0x3e, 0x67, 0x74, 0x8d, 0x09, 0x18, 0x95, 0x46, 0x34, 0x5d, 0x14, 0xef, 0xd2, - 0x49, 0x5e, 0xef, 0xeb, 0xe7, 0xe8, 0x15, 0xa2, 0x34, 0x11, 0xc7, 0x4c, 0x32, 0xf9, 0xb8, 0xf8, - 0xa9, 0x0b, 0x4d, 0x65, 0x7e, 0x85, 0x30, 0xd1, 0x45, 0x4e, 0x6e, 0x87, 0xa6, 0x19, 0xde, 0x3f, - 0x06, 0x14, 0x9d, 0xda, 0xbf, 0x32, 0x6d, 0xba, 0xd9, 0x73, 0x72, 0xde, 0x74, 0xb3, 0x20, 0xbf, - 0x8f, 0x4d, 0x77, 0x81, 0x98, 0x53, 0xfa, 0x89, 0xff, 0x55, 0x40, 0x33, 0xd6, 0x45, 0x5a, 0x14, - 0xea, 0x08, 0x0e, 0xc8, 0xb3, 0x08, 0x83, 0x6c, 0x08, 0xc7, 0x5d, 0xd7, 0x0a, 0x48, 0x51, 0xd8, - 0x25, 0xa8, 0xf2, 0x06, 0x76, 0xd9, 0x91, 0xbe, 0x38, 0x6c, 0xdc, 0x64, 0x5e, 0x3d, 0x5b, 0xfa, - 0x88, 0x76, 0x65, 0x1f, 0xf5, 0x00, 0xfa, 0xf4, 0x23, 0x2c, 0x22, 0x74, 0x0e, 0xe7, 0x00, 0xb1, - 0xb4, 0x27, 0x01, 0x85, 0xd2, 0x43, 0xd7, 0xd2, 0xfd, 0xe7, 0x18, 0x6f, 0xdb, 0xfb, 0xc8, 0x38, - 0x30, 0x86, 0x7e, 0x3b, 0x78, 0xc4, 0x85, 0x66, 0xf9, 0x94, 0x26, 0x36, 0xda, 0xd5, 0xb1, 0x48, - 0x93, 0x03, 0x83, 0xd8, 0x41, 0x39, 0x32, 0x88, 0x3d, 0x30, 0x45, 0xc1, 0x29, 0x72, 0xad, 0x35, - 0x5b, 0x9f, 0x4d, 0xfa, 0xe2, 0xf0, 0xe8, 0x49, 0xe6, 0xf1, 0xbc, 0xc6, 0xec, 0x02, 0x9e, 0x1c, - 0x3e, 0xa4, 0xc3, 0x25, 0x07, 0xfb, 0x00, 0x94, 0x84, 0xe3, 0xd8, 0x97, 0x7a, 0x6b, 0x20, 0x33, - 0x40, 0x71, 0x92, 0x1c, 0x3e, 0x98, 0x6e, 0xbb, 0xae, 0xf5, 0x5e, 0x62, 0x4e, 0x9e, 0x7d, 0x80, - 0x13, 0xef, 0x57, 0xc1, 0xc9, 0x97, 0x79, 0x68, 0x66, 0x4d, 0xa3, 0xe2, 0x0f, 0x53, 0xef, 0x5c, - 0x40, 0x88, 0xd5, 0x87, 0x25, 0x1b, 0x84, 0x61, 0x63, 0xf1, 0x38, 0x20, 0xd9, 0x0d, 0x5f, 0x9e, - 0x2a, 0xff, 0xb5, 0x4b, 0x9c, 0xcb, 0x5f, 0xc8, 0xd1, 0x99, 0xb2, 0xa5, 0x2f, 0xbd, 0xec, 0x1a, - 0x27, 0x4a, 0x6e, 0x9c, 0x49, 0x0e, 0x1f, 0xd2, 0x11, 0xa0, 0x97, 0x6b, 0x37, 0xae, 0xa7, 0x06, - 0xdb, 0xd3, 0x87, 0xf7, 0x81, 0x8e, 0xc0, 0x7f, 0xea, 0x8b, 0xd6, 0xbd, 0xc6, 0xad, 0xf4, 0xe0, - 0x90, 0x36, 0xb2, 0x37, 0xd5, 0x47, 0x7f, 0xe2, 0x86, 0x37, 0xdf, 0xd4, 0x6b, 0x21, 0x2e, 0x3d, - 0xcd, 0x29, 0x09, 0x7b, 0xd5, 0x70, 0x7b, 0xe6, 0xf5, 0x9b, 0xe9, 0x73, 0xfd, 0x98, 0xe7, 0x48, - 0xff, 0xf0, 0x9e, 0x05, 0x20, 0x41, 0x3d, 0x81, 0x2d, 0x2d, 0xf3, 0xfa, 0xcd, 0xe4, 0xad, 0x53, - 0x99, 0x01, 0x16, 0xf1, 0x8a, 0x00, 0x6b, 0x9f, 0x7e, 0x94, 0x1e, 0xee, 0xd6, 0xfa, 0xbb, 0x52, - 0x1d, 0x87, 0x75, 0x79, 0x00, 0x91, 0x54, 0xa0, 0xcf, 0xcc, 0xad, 0xb7, 0xb5, 0xa1, 0xf7, 0x6e, - 0x8f, 0x74, 0xd1, 0xf0, 0x2a, 0xad, 0x3d, 0x99, 0x5b, 0xfb, 0xe9, 0xd3, 0xd3, 0x9e, 0xb6, 0x4d, - 0xfe, 0xf8, 0x4e, 0xe0, 0x82, 0xcc, 0xc0, 0x7b, 0xe9, 0xe1, 0x7d, 0xc0, 0xf5, 0x8c, 0x17, 0x1e, - 0xf7, 0xae, 0x98, 0xc0, 0xba, 0x93, 0x32, 0xb6, 0xf8, 0x97, 0xf3, 0xd1, 0x5d, 0x96, 0xf5, 0xda, - 0x22, 0x59, 0xed, 0xcc, 0x36, 0x40, 0x8e, 0xd7, 0xe5, 0xb6, 0xb0, 0x94, 0x04, 0x86, 0xf3, 0x54, - 0xf9, 0xbf, 0xbb, 0xc4, 0x67, 0x73, 0x90, 0x80, 0x1e, 0x7e, 0xe6, 0x77, 0xcd, 0x4a, 0x6c, 0x17, - 0xcd, 0xc0, 0x4d, 0x68, 0x02, 0x70, 0x03, 0x18, 0xfd, 0x89, 0x62, 0xbe, 0x06, 0xc5, 0x3c, 0x62, - 0x43, 0x31, 0xd2, 0xd8, 0x14, 0x23, 0xfe, 0x4b, 0x7a, 0x58, 0x33, 0x89, 0x8a, 0x71, 0xe9, 0x49, - 0x65, 0x39, 0xde, 0x03, 0x98, 0x85, 0x44, 0x5c, 0x95, 0x1f, 0x17, 0x67, 0xc0, 0x78, 0xf1, 0x47, - 0xe9, 0x76, 0x4b, 0xdd, 0x8f, 0xb5, 0xab, 0xa7, 0x93, 0x43, 0x87, 0x74, 0x49, 0x88, 0xe5, 0x29, - 0xa8, 0x1b, 0x9c, 0x32, 0xb1, 0x4c, 0x9c, 0xa8, 0x1c, 0x14, 0xff, 0xbd, 0x60, 0x7a, 0xf0, 0xc0, - 0xd8, 0x60, 0xf1, 0x58, 0xa3, 0x36, 0xb8, 0xc0, 0x3b, 0x1e, 0xd0, 0x6f, 0x75, 0x8a, 0xd2, 0x18, - 0x53, 0xcc, 0x43, 0x73, 0xe0, 0x90, 0x42, 0xca, 0x6b, 0x95, 0x78, 0x28, 0xa6, 0x10, 0x4f, 0x25, - 0xd1, 0xe1, 0xb2, 0x36, 0x1b, 0x8e, 0x4d, 0x75, 0xc9, 0x78, 0xc1, 0xe9, 0x74, 0x53, 0x2e, 0x55, - 0x3e, 0xe7, 0x12, 0xef, 0x86, 0x33, 0x0f, 0x07, 0x41, 0x4d, 0x31, 0xed, 0xae, 0xec, 0xd3, 0xd0, - 0x60, 0x9f, 0x05, 0x8a, 0xba, 0x14, 0x81, 0xf9, 0x69, 0xa4, 0x47, 0x1b, 0x18, 0xc9, 0xec, 0xff, - 0x58, 0x6f, 0x41, 0xa9, 0x5f, 0x0f, 0x42, 0x30, 0x72, 0x4c, 0x6b, 0xbf, 0x40, 0x83, 0xe7, 0x13, - 0x2e, 0xd0, 0xef, 0x3c, 0xb4, 0x1b, 0xd7, 0xe1, 0x92, 0x80, 0x45, 0x26, 0x34, 0x38, 0x1c, 0xce, - 0x13, 0xe9, 0x9e, 0xb6, 0xa0, 0xf1, 0x71, 0xad, 0xfb, 0x83, 0xcc, 0xeb, 0x37, 0x53, 0x03, 0x47, - 0xb5, 0x9b, 0x6f, 0x6a, 0x9d, 0x07, 0x33, 0x17, 0x89, 0x2b, 0xcd, 0xf9, 0x8b, 0x3a, 0xe7, 0xa6, - 0x06, 0x8e, 0x26, 0x6f, 0x1c, 0xd0, 0x3a, 0x0f, 0x6a, 0x57, 0xba, 0x6f, 0x8f, 0xbc, 0x6d, 0x9c, - 0x5d, 0xf6, 0x77, 0x6b, 0x57, 0xba, 0xf9, 0x25, 0x84, 0xb6, 0x99, 0x81, 0x4f, 0x41, 0xba, 0x59, - 0xa4, 0x24, 0x59, 0xd8, 0x27, 0x3c, 0x8f, 0x4c, 0x80, 0x76, 0xe9, 0x40, 0x99, 0x34, 0x1f, 0x72, - 0xd9, 0x2d, 0x31, 0x49, 0x5b, 0x31, 0x8e, 0x25, 0xc6, 0x70, 0x13, 0x58, 0x62, 0x00, 0xa7, 0x4b, - 0xfc, 0x67, 0x82, 0x2a, 0xff, 0x49, 0xd6, 0x0a, 0x63, 0x00, 0xba, 0xc2, 0x7e, 0xeb, 0x02, 0x73, - 0x5e, 0x4a, 0x00, 0x94, 0xee, 0x69, 0xe3, 0x1a, 0xea, 0xfe, 0x6e, 0x04, 0xd1, 0xc3, 0x58, 0xec, - 0xbf, 0x35, 0x90, 0xbc, 0xd5, 0x9f, 0xea, 0x7b, 0x97, 0x3e, 0x6b, 0x1a, 0x3c, 0x98, 0x1c, 0x6c, - 0xcd, 0xec, 0xff, 0x18, 0xe2, 0x1c, 0x7c, 0x75, 0xe4, 0xc5, 0x43, 0xbb, 0x09, 0xf2, 0x3e, 0x76, - 0x31, 0xcf, 0x07, 0x02, 0xb1, 0x2e, 0x14, 0x5e, 0xe7, 0x7f, 0x95, 0xe0, 0xae, 0x3c, 0x07, 0x32, - 0x0c, 0xb0, 0x31, 0x3c, 0x1f, 0x2c, 0xd0, 0x14, 0x73, 0x37, 0x89, 0x4f, 0xdd, 0x5c, 0x40, 0x50, - 0x53, 0x28, 0x8c, 0x2b, 0x2b, 0x9b, 0x00, 0x88, 0x62, 0xef, 0xd7, 0xe3, 0xc3, 0x1e, 0xa4, 0x39, - 0xc3, 0xff, 0xbf, 0xd2, 0x3d, 0x7a, 0xf2, 0xf0, 0xe8, 0x3b, 0xa7, 0x78, 0xdc, 0x69, 0x07, 0xbb, - 0x33, 0x57, 0x5e, 0xd7, 0xce, 0xf7, 0xe8, 0x38, 0x00, 0x6e, 0x01, 0x0d, 0xc2, 0x33, 0x11, 0x0d, - 0x62, 0x5b, 0xa4, 0x39, 0xac, 0xa3, 0xad, 0xc3, 0x4c, 0x73, 0x72, 0x7c, 0x53, 0xa8, 0x49, 0xf1, - 0xf9, 0xc3, 0x0d, 0xb9, 0x69, 0x8e, 0x83, 0x1b, 0x0f, 0xcd, 0x99, 0xc0, 0x29, 0xe6, 0x0e, 0x09, - 0xf0, 0x46, 0xce, 0xe4, 0x5d, 0x71, 0x56, 0xeb, 0xef, 0x49, 0x9d, 0xb8, 0x9e, 0xea, 0x7c, 0x1f, - 0x9e, 0x53, 0xa6, 0xfb, 0x8e, 0xa7, 0x8f, 0x5d, 0x28, 0x1d, 0x17, 0xd4, 0x57, 0x40, 0x45, 0x22, - 0xd4, 0xa4, 0xc4, 0xf0, 0xa8, 0x88, 0xa7, 0x89, 0x8b, 0xe4, 0xc9, 0xb2, 0xa6, 0x4d, 0xae, 0xde, - 0xc5, 0x72, 0x77, 0x97, 0xdb, 0xec, 0x95, 0x8e, 0x29, 0xb3, 0xad, 0xa4, 0x94, 0x33, 0x29, 0xb3, - 0x67, 0x58, 0x50, 0xe5, 0x3f, 0x15, 0x2b, 0x68, 0x84, 0x17, 0x4e, 0xf2, 0x64, 0x3d, 0x87, 0x84, - 0x47, 0xba, 0x90, 0xb2, 0xb9, 0x74, 0x9d, 0xe1, 0x6f, 0x07, 0xa6, 0x1a, 0x62, 0x26, 0x4c, 0x0e, - 0x1d, 0xb1, 0xb6, 0x63, 0xb9, 0xc0, 0xb3, 0x1e, 0xef, 0x24, 0x94, 0x70, 0x40, 0x09, 0x83, 0xd5, - 0x35, 0xc7, 0x61, 0xde, 0x38, 0xb7, 0x67, 0xe1, 0x30, 0x4e, 0x66, 0x21, 0x1e, 0x76, 0xa1, 0x79, - 0x9b, 0x62, 0xfe, 0x70, 0x5c, 0xa7, 0xf3, 0x4d, 0x91, 0xf5, 0x5c, 0x3c, 0x34, 0x71, 0x79, 0x36, - 0x36, 0x72, 0x41, 0x33, 0x14, 0xae, 0x98, 0x58, 0x23, 0x8a, 0xc9, 0x36, 0x41, 0x95, 0x57, 0x8b, - 0x0b, 0x74, 0x72, 0xc9, 0xdc, 0xbc, 0x4c, 0xde, 0x2c, 0x50, 0x0b, 0x24, 0xbd, 0x54, 0x5c, 0x94, - 0xa3, 0x3e, 0xdd, 0xd9, 0xc1, 0x79, 0xbe, 0x3c, 0xec, 0x59, 0x3e, 0x11, 0xa2, 0x62, 0x33, 0x3e, - 0xe6, 0x42, 0x25, 0xab, 0x48, 0x2c, 0x54, 0x7d, 0xc0, 0x72, 0x73, 0x22, 0x42, 0x42, 0x3f, 0x5a, - 0x9f, 0x73, 0x38, 0x41, 0x32, 0x54, 0x2c, 0x1d, 0x7f, 0x03, 0x8a, 0x86, 0x63, 0xc0, 0x61, 0x10, - 0x9c, 0xd5, 0x98, 0x2c, 0x10, 0x03, 0xf1, 0xce, 0xd5, 0x39, 0xa8, 0xd4, 0x04, 0x45, 0x37, 0x3c, - 0x02, 0x02, 0x66, 0x59, 0x78, 0xca, 0x4f, 0x90, 0xf1, 0x8c, 0xe7, 0x89, 0x09, 0x20, 0x83, 0x49, - 0x3a, 0xa5, 0x12, 0xa2, 0xc2, 0x62, 0x46, 0x3b, 0xe9, 0x42, 0xf7, 0xd4, 0x86, 0xe2, 0x0e, 0x88, - 0xb1, 0xcc, 0xd3, 0x11, 0x94, 0x61, 0x66, 0xd9, 0x04, 0x5a, 0x50, 0xd4, 0x1c, 0xa7, 0xa8, 0x69, - 0xbf, 0x36, 0x7a, 0xa2, 0x6f, 0x4c, 0xd4, 0x70, 0x50, 0x39, 0x51, 0x23, 0x7b, 0x9e, 0xfc, 0x4a, - 0xa8, 0x09, 0xc2, 0x78, 0x31, 0x6e, 0xde, 0x85, 0x3c, 0x94, 0xb6, 0xa1, 0x83, 0xac, 0x34, 0x33, - 0x46, 0xb8, 0x28, 0x2b, 0xcd, 0x8c, 0x15, 0x95, 0xc8, 0xf3, 0x2e, 0x31, 0x77, 0x94, 0xf0, 0x61, - 0xa6, 0xf8, 0x78, 0x44, 0xa5, 0xf4, 0x36, 0x82, 0x85, 0x16, 0x03, 0x71, 0x03, 0x77, 0x2b, 0x34, - 0xfe, 0x55, 0xc7, 0xf1, 0x4c, 0x6b, 0xbb, 0xae, 0xca, 0x41, 0x63, 0x3d, 0xb6, 0x11, 0xb7, 0xdb, - 0x57, 0x89, 0x8f, 0xd9, 0x3f, 0x13, 0x24, 0x1d, 0xc3, 0x3b, 0x41, 0x1a, 0xbe, 0xec, 0xf7, 0x95, - 0x7a, 0x64, 0xb3, 0x66, 0x82, 0x88, 0x7e, 0x01, 0x21, 0xb8, 0x82, 0x20, 0x61, 0x5c, 0x1c, 0x82, - 0xcf, 0xe0, 0x3a, 0x67, 0xcf, 0x5e, 0x0e, 0xc4, 0xf0, 0x62, 0x5c, 0x21, 0x16, 0xd3, 0x7b, 0x5d, - 0x08, 0x77, 0xb1, 0x88, 0xc6, 0x60, 0x39, 0x76, 0x2b, 0x75, 0xe2, 0xfa, 0xe8, 0x89, 0x8f, 0x33, - 0xb7, 0x0e, 0x67, 0xce, 0x75, 0xa5, 0x7b, 0xda, 0xb4, 0xc3, 0x87, 0xb4, 0xee, 0x2b, 0x5c, 0x54, - 0x16, 0x7b, 0x87, 0xfe, 0x84, 0x3f, 0xbe, 0x13, 0x2f, 0xeb, 0xeb, 0x2e, 0x54, 0x44, 0x82, 0xc6, - 0x90, 0xf1, 0xba, 0x6d, 0xe3, 0xc9, 0xf0, 0xc3, 0xbd, 0x37, 0x07, 0x04, 0x1d, 0xed, 0x15, 0xa2, - 0xb3, 0xcd, 0xa0, 0xc1, 0x66, 0x48, 0x14, 0x19, 0x5c, 0x5f, 0xba, 0x83, 0xc6, 0x98, 0x21, 0x25, - 0x18, 0xf1, 0x64, 0x8c, 0xe5, 0x6e, 0x1a, 0xd7, 0x9b, 0x80, 0x43, 0x04, 0xef, 0x25, 0x6e, 0xf8, - 0x95, 0x1c, 0x6e, 0x1f, 0x3d, 0x79, 0x38, 0x39, 0x74, 0x08, 0xda, 0x40, 0x83, 0xe4, 0xe0, 0xd1, - 0xe4, 0xf0, 0x21, 0x50, 0x9b, 0xa1, 0x3c, 0x9e, 0x50, 0xa2, 0x58, 0x4a, 0x5c, 0x3c, 0x90, 0xfa, - 0xff, 0xb8, 0xbb, 0xba, 0xd8, 0x28, 0xae, 0x7b, 0x7f, 0x67, 0xa3, 0x1b, 0x45, 0x23, 0xdd, 0xc0, - 0x3d, 0x84, 0x00, 0x93, 0x5c, 0xe3, 0xec, 0xbd, 0x97, 0x0f, 0x07, 0x58, 0x20, 0x84, 0x70, 0x51, - 0xb8, 0xc9, 0x18, 0x27, 0xc6, 0x31, 0x49, 0x1c, 0xcc, 0xe5, 0xa6, 0xbc, 0xad, 0x77, 0x27, 0xf6, - 0xc6, 0xf6, 0xce, 0x76, 0x67, 0x6c, 0xea, 0x58, 0xae, 0x42, 0xc1, 0x10, 0x63, 0x3e, 0xd7, 0x10, - 0x4a, 0x4a, 0x12, 0x5c, 0xc5, 0xc1, 0x25, 0x89, 0x21, 0x09, 0x81, 0xcd, 0x52, 0xa0, 0x79, 0xe8, - 0x43, 0xd4, 0x28, 0x55, 0x2a, 0x35, 0x52, 0xdb, 0x87, 0xaa, 0xed, 0xce, 0x7a, 0xdd, 0x87, 0xf4, - 0x21, 0xaa, 0x54, 0x45, 0x4d, 0x55, 0xcd, 0xf9, 0x9f, 0x33, 0x73, 0x66, 0xe7, 0x9c, 0x99, 0x5d, - 0x83, 0x42, 0xd5, 0x17, 0xbc, 0xcc, 0xf9, 0xcd, 0xee, 0xf9, 0xfd, 0xe6, 0x7c, 0xcd, 0x39, 0xff, - 0x8f, 0x91, 0xb3, 0xe5, 0xf1, 0x83, 0x01, 0xe1, 0x2b, 0x6c, 0xda, 0xb1, 0x41, 0xfb, 0x5f, 0x4f, - 0x18, 0x9a, 0x7c, 0x44, 0xbe, 0xa3, 0xbd, 0x3b, 0x95, 0xc1, 0x22, 0xf8, 0xac, 0x2f, 0x68, 0x89, - 0xd0, 0xfa, 0xc2, 0x05, 0x10, 0x09, 0xca, 0x52, 0x4e, 0xbd, 0x28, 0xa1, 0xbb, 0xcb, 0x97, 0xdf, - 0x2f, 0x5f, 0xdf, 0xcf, 0xd6, 0x15, 0x2b, 0x71, 0x4a, 0x0a, 0x94, 0x02, 0xee, 0xa2, 0x52, 0xb0, - 0xff, 0xb3, 0xe7, 0x46, 0xfc, 0x81, 0xfd, 0x4a, 0x56, 0x96, 0x62, 0x7e, 0xb4, 0x98, 0x7f, 0xb1, - 0xf4, 0xce, 0x04, 0xab, 0xc7, 0x8a, 0x7a, 0x02, 0xf9, 0x70, 0x74, 0xe6, 0xe4, 0xc5, 0xd2, 0xe9, - 0x91, 0xe9, 0x1f, 0xe4, 0x8b, 0x85, 0x5c, 0xf1, 0xda, 0xab, 0xe5, 0x0f, 0x5e, 0x2e, 0xe6, 0x0f, - 0x59, 0x57, 0x0a, 0xe5, 0xa9, 0x29, 0xf8, 0x1d, 0x38, 0x81, 0x54, 0xfe, 0x3b, 0x54, 0x3b, 0xa3, - 0x3b, 0x85, 0x0f, 0xbb, 0xc6, 0x1d, 0x8f, 0x10, 0x7e, 0x8b, 0x77, 0xcb, 0x42, 0x3c, 0x42, 0x3c, - 0x02, 0x6e, 0xcd, 0xa9, 0x75, 0x48, 0x86, 0xc5, 0x15, 0x96, 0x6c, 0xae, 0xfb, 0x99, 0x39, 0xc6, - 0xe0, 0xdb, 0x7d, 0x7b, 0x2a, 0x6a, 0xd7, 0xf1, 0x35, 0x49, 0x96, 0xe1, 0x00, 0x8a, 0x5f, 0x47, - 0xb7, 0x4c, 0x58, 0x47, 0x16, 0x42, 0xea, 0xd8, 0x82, 0xeb, 0x08, 0x07, 0x44, 0x50, 0x47, 0xf6, - 0xc8, 0xca, 0xbe, 0x02, 0xb6, 0xdd, 0x0d, 0xa1, 0x75, 0x44, 0xaf, 0x82, 0x83, 0x16, 0xae, 0x1d, - 0xcf, 0x41, 0x8b, 0xad, 0xda, 0x62, 0x61, 0x39, 0xa9, 0xd7, 0x33, 0x39, 0x75, 0x09, 0x75, 0xd0, - 0xc2, 0xf5, 0x5a, 0xc8, 0x9e, 0x07, 0x6d, 0xc7, 0x3f, 0xc9, 0x68, 0x18, 0x45, 0xe1, 0xf5, 0x3b, - 0x15, 0x91, 0xef, 0xd8, 0x9a, 0x32, 0x4c, 0x7e, 0xff, 0xa0, 0x25, 0xc2, 0xfe, 0xe1, 0x02, 0x48, - 0x15, 0x3f, 0x96, 0x72, 0xea, 0x9b, 0x12, 0xdd, 0xaa, 0xb0, 0x8b, 0xc8, 0x56, 0xc5, 0x31, 0xe1, - 0xe1, 0x87, 0x0b, 0xba, 0x15, 0xe7, 0x1e, 0x8b, 0x90, 0x68, 0x10, 0xb5, 0xd7, 0x97, 0x0b, 0x60, - 0xcc, 0xa6, 0xb3, 0xb9, 0xe3, 0x20, 0xe3, 0x8f, 0x7c, 0x22, 0x00, 0x0a, 0x23, 0x9f, 0x08, 0xf1, - 0x44, 0xc8, 0x31, 0x29, 0xa7, 0xc6, 0x51, 0x9d, 0x27, 0xa4, 0x97, 0x0f, 0xad, 0x3c, 0x12, 0x5c, - 0xee, 0x9c, 0x77, 0x93, 0x1f, 0x5f, 0xe9, 0x2c, 0x00, 0xb2, 0xe0, 0x0b, 0x04, 0xfe, 0x94, 0x51, - 0x9e, 0x49, 0x2a, 0xf3, 0xc2, 0xa8, 0xe3, 0x2f, 0xb3, 0xfb, 0x5b, 0x31, 0x42, 0x8d, 0xab, 0xab, - 0x90, 0x44, 0x00, 0x14, 0x4a, 0x22, 0xc4, 0x13, 0x49, 0xa6, 0xc1, 0x92, 0x6c, 0x83, 0xc7, 0x82, - 0xda, 0x07, 0x5f, 0x51, 0xef, 0xd9, 0x80, 0xc5, 0x41, 0x69, 0xe1, 0x0e, 0xa5, 0xc7, 0x77, 0xa7, - 0x51, 0xa1, 0x56, 0x31, 0xff, 0x62, 0x31, 0x7f, 0x4e, 0xf4, 0xd5, 0x10, 0xa9, 0x12, 0x30, 0xd0, - 0x84, 0x6c, 0x81, 0x2f, 0xfe, 0xd0, 0xfa, 0xf1, 0x09, 0xe8, 0x76, 0xc5, 0x7c, 0xc1, 0x39, 0x77, - 0x0c, 0x30, 0xe8, 0xf6, 0x49, 0x5b, 0x19, 0x74, 0xe9, 0xd7, 0xb7, 0xc9, 0xf7, 0x12, 0x35, 0x0c, - 0xf8, 0xe9, 0x26, 0xad, 0x3f, 0x95, 0xd0, 0xe8, 0x42, 0xca, 0xff, 0x66, 0x13, 0x84, 0x16, 0xbe, - 0xd9, 0x04, 0xdf, 0x44, 0x54, 0xff, 0x34, 0x92, 0x53, 0xbf, 0x92, 0xd0, 0x60, 0xb0, 0x76, 0xce, - 0xa2, 0xcb, 0x59, 0x86, 0x39, 0x5b, 0x09, 0x56, 0xe1, 0x38, 0x34, 0xc2, 0xf2, 0xfe, 0x73, 0xd3, - 0x67, 0x8e, 0x17, 0x0b, 0xc7, 0x8a, 0xd7, 0xae, 0x17, 0x0b, 0x87, 0x8b, 0x85, 0xb3, 0xd6, 0xd8, - 0xee, 0xf2, 0xd4, 0x05, 0xeb, 0xfa, 0x3e, 0xfb, 0x05, 0xf3, 0xed, 0x71, 0x08, 0xf1, 0xe5, 0xff, - 0x2a, 0xe5, 0x56, 0xfe, 0x38, 0x7e, 0x8e, 0x4f, 0x28, 0x8f, 0xd5, 0xfa, 0x1c, 0x79, 0xeb, 0x4a, - 0xfc, 0x70, 0xf7, 0x47, 0xa8, 0xb5, 0x7e, 0x15, 0x7d, 0x48, 0x00, 0x14, 0xf6, 0x21, 0x21, 0x9e, - 0x3c, 0xcd, 0x03, 0xf8, 0x78, 0xb5, 0xce, 0x63, 0x9d, 0xef, 0x1f, 0x56, 0x56, 0x12, 0xe3, 0x08, - 0x38, 0x43, 0xa1, 0x67, 0xf4, 0x22, 0x78, 0x80, 0x4d, 0x7f, 0xa0, 0x42, 0xb6, 0x12, 0x77, 0x35, - 0x6b, 0xa6, 0x5f, 0x06, 0x5e, 0xe0, 0x23, 0xa1, 0x06, 0x2b, 0xaa, 0x03, 0x33, 0xe3, 0xea, 0xb3, - 0xd4, 0xfc, 0x40, 0x28, 0xc0, 0x7a, 0x76, 0x62, 0x75, 0x03, 0x0e, 0x88, 0x35, 0x60, 0x2d, 0x1b, - 0x51, 0xed, 0x4a, 0xfc, 0x39, 0x02, 0xde, 0x0d, 0x7e, 0x29, 0xb8, 0xb6, 0x15, 0x42, 0x2d, 0x56, - 0x56, 0x89, 0x26, 0x62, 0xfc, 0x4d, 0xca, 0xa9, 0x9f, 0x4a, 0x34, 0x6a, 0x94, 0x70, 0xd8, 0x83, - 0x19, 0x7c, 0x22, 0x2c, 0x86, 0x89, 0xe0, 0xc6, 0x5b, 0x31, 0xab, 0xf3, 0xbd, 0x2c, 0x7c, 0xcf, - 0x00, 0x1d, 0xe0, 0xcd, 0x67, 0xed, 0x66, 0xdc, 0xec, 0x33, 0xaa, 0x98, 0xcf, 0x00, 0x58, 0xfd, - 0x7c, 0x46, 0xf1, 0x44, 0xfd, 0x43, 0x52, 0x4e, 0xdd, 0x82, 0xa2, 0xb0, 0x0d, 0x12, 0x83, 0x57, - 0x7e, 0x62, 0xdd, 0x80, 0xcd, 0xd3, 0xdc, 0xfd, 0x80, 0x2a, 0x30, 0x98, 0xf6, 0xc3, 0xca, 0x43, - 0x35, 0x0f, 0x53, 0x06, 0xae, 0x94, 0x3d, 0x30, 0x1d, 0x88, 0xc8, 0xf3, 0xdb, 0x07, 0xd2, 0x89, - 0x2a, 0x1a, 0x21, 0x17, 0x26, 0x6c, 0x84, 0x02, 0x34, 0xd3, 0x23, 0xdb, 0xd0, 0x92, 0xcd, 0x2a, - 0xe1, 0x35, 0xf5, 0xda, 0xcc, 0xa9, 0x61, 0x38, 0xc4, 0x05, 0x27, 0xe5, 0xf2, 0xfe, 0xf7, 0xa7, - 0xa7, 0xc6, 0x4b, 0x87, 0xcf, 0x4e, 0xbf, 0x75, 0x5e, 0xa9, 0x12, 0x07, 0xef, 0xfb, 0xca, 0x83, - 0xb5, 0xcb, 0x31, 0x90, 0xc6, 0xc6, 0xd2, 0x5f, 0x4a, 0x32, 0x72, 0x4d, 0x0e, 0x9d, 0x2d, 0xc5, - 0xe5, 0x62, 0xb3, 0xc4, 0xca, 0x8d, 0xc4, 0x86, 0x6a, 0xa0, 0x44, 0x83, 0x61, 0x29, 0xa7, 0x36, - 0xa2, 0x85, 0x6c, 0xf8, 0x55, 0x76, 0x63, 0x90, 0x46, 0xf7, 0xf0, 0x97, 0x2c, 0x83, 0x40, 0x48, - 0x10, 0x24, 0x1a, 0xc2, 0x99, 0x6c, 0x8c, 0x3e, 0x58, 0x6d, 0x30, 0xa4, 0xb4, 0x9e, 0xd4, 0xe8, - 0xde, 0x21, 0x6e, 0x02, 0x7f, 0x95, 0x64, 0xc4, 0xf8, 0x2b, 0x0a, 0x59, 0xfb, 0x31, 0x42, 0xd6, - 0x3c, 0x28, 0xb3, 0x1f, 0xbf, 0x11, 0xd5, 0x11, 0xc7, 0x76, 0x4c, 0x84, 0xe5, 0x46, 0xcd, 0xde, - 0x3d, 0x3b, 0xf1, 0x4c, 0x09, 0x66, 0xdb, 0xaa, 0x3c, 0x3e, 0x2b, 0xb6, 0xb0, 0x33, 0xe6, 0xa6, - 0x55, 0x18, 0xa2, 0x0f, 0xdd, 0xb5, 0x67, 0x14, 0xd3, 0xf7, 0x63, 0x84, 0xf4, 0x79, 0x50, 0xe6, - 0xa1, 0xaf, 0xb3, 0x1f, 0xfa, 0x19, 0xc7, 0xbc, 0x87, 0x75, 0xdb, 0x50, 0x16, 0xb2, 0x6f, 0x9d, - 0x2c, 0x7d, 0x4c, 0x7c, 0x4b, 0xc3, 0x4d, 0x22, 0x8e, 0xbe, 0x8a, 0xb8, 0x67, 0xf4, 0x0e, 0xe7, - 0xa5, 0xa2, 0xd3, 0xe9, 0x4a, 0xc6, 0xcb, 0xc2, 0x81, 0x84, 0x6f, 0x2e, 0x92, 0x53, 0x3f, 0x73, - 0x66, 0x1b, 0x36, 0xde, 0x17, 0x4b, 0x8e, 0xcc, 0x36, 0x93, 0xc2, 0xd9, 0x86, 0x55, 0xea, 0x1b, - 0x9b, 0x61, 0x9c, 0xda, 0xb2, 0x01, 0x04, 0x99, 0xa7, 0xf1, 0x10, 0x9a, 0x5d, 0xa7, 0xb3, 0x7b, - 0xdc, 0x1c, 0x62, 0xfe, 0xe0, 0x68, 0xbf, 0x44, 0x60, 0x1f, 0x51, 0x29, 0xfd, 0xd2, 0x50, 0x1c, - 0x51, 0xfe, 0x24, 0x3e, 0x9d, 0x68, 0xf0, 0x0b, 0x6f, 0x0d, 0x5f, 0x2e, 0x5e, 0x1d, 0xf3, 0x9f, - 0x41, 0x28, 0x0b, 0xd9, 0x33, 0x21, 0xdf, 0xe9, 0xc4, 0x16, 0x74, 0xb3, 0xda, 0xde, 0x17, 0x4e, - 0xec, 0xa4, 0x8a, 0x3c, 0xb8, 0xf7, 0x8b, 0x46, 0x4f, 0x4e, 0xb6, 0x13, 0xff, 0x12, 0x30, 0x28, - 0x97, 0x52, 0x74, 0x30, 0xa7, 0xae, 0x47, 0x95, 0xf9, 0x9a, 0xec, 0x51, 0xb6, 0xde, 0x7f, 0x8d, - 0x33, 0xbe, 0x3e, 0x1c, 0x7d, 0xa8, 0x7a, 0xf2, 0x76, 0x05, 0x3c, 0x23, 0xec, 0xd7, 0x4e, 0x64, - 0xa5, 0x30, 0xc2, 0x01, 0x89, 0x81, 0xfc, 0x84, 0x83, 0x92, 0xfe, 0x44, 0x47, 0xd8, 0x81, 0x86, - 0x4d, 0x29, 0xc2, 0x1b, 0x68, 0x58, 0xf6, 0x98, 0xef, 0xd6, 0x86, 0x27, 0x66, 0xc9, 0xd7, 0x7e, - 0xdc, 0xde, 0xe4, 0x35, 0x43, 0xe8, 0x7b, 0xb7, 0x51, 0xbb, 0x19, 0x0f, 0x7b, 0x81, 0xdd, 0x0c, - 0x8f, 0x7b, 0x43, 0x35, 0x50, 0xc2, 0xfc, 0xf8, 0x3f, 0xf1, 0x90, 0xf3, 0x3f, 0x68, 0xb6, 0xed, - 0x10, 0xfd, 0xd2, 0x59, 0xdc, 0xe0, 0x33, 0x58, 0x35, 0x91, 0xd0, 0xfb, 0xd2, 0xa6, 0x68, 0x71, - 0xc3, 0x62, 0x42, 0x16, 0x37, 0x5e, 0xa8, 0x1b, 0x49, 0x63, 0x15, 0x9a, 0xef, 0x38, 0xaf, 0x95, - 0x2f, 0xbe, 0x69, 0x1d, 0xb9, 0x4c, 0x9a, 0x1e, 0xff, 0x72, 0x60, 0xd0, 0xf9, 0x8a, 0x98, 0xe5, - 0x71, 0xf8, 0x35, 0xdc, 0xb9, 0x7e, 0xe3, 0x2c, 0x5f, 0x82, 0x79, 0xf9, 0x31, 0x21, 0xcb, 0x17, - 0x2e, 0xaf, 0xb4, 0xd7, 0xdb, 0x15, 0x08, 0x30, 0xde, 0xae, 0x3e, 0x46, 0x9b, 0x94, 0x0d, 0xb5, - 0x30, 0x8a, 0x0d, 0x92, 0x4f, 0x64, 0x75, 0x72, 0x3c, 0x22, 0xcf, 0x7b, 0x32, 0xd5, 0x99, 0xad, - 0xa4, 0xe7, 0xab, 0x33, 0x07, 0x24, 0x34, 0xbd, 0xe4, 0x62, 0x99, 0x93, 0xb9, 0x14, 0x9a, 0x03, - 0xe1, 0x4c, 0x5c, 0x86, 0x3b, 0xe0, 0x82, 0x75, 0xe0, 0x8c, 0x75, 0x7e, 0x5f, 0x05, 0x4f, 0x1a, - 0x99, 0xfd, 0xd0, 0x89, 0x62, 0xfe, 0x1c, 0x14, 0x00, 0xfa, 0x0f, 0x2f, 0xee, 0xb6, 0xde, 0x78, - 0x05, 0xae, 0xd8, 0x9f, 0x87, 0x27, 0x67, 0xf6, 0x4c, 0xb2, 0x00, 0x18, 0x5c, 0xd7, 0x28, 0x35, - 0x3f, 0xf4, 0x3f, 0x3a, 0x8b, 0xb6, 0xe0, 0x87, 0xee, 0xc7, 0x84, 0x2c, 0xda, 0xb8, 0x9a, 0x0c, - 0xd9, 0x4b, 0xd6, 0x85, 0xac, 0x87, 0xa0, 0xa7, 0x3d, 0xd7, 0xf9, 0x9d, 0x04, 0x7d, 0xcd, 0x60, - 0x63, 0xc3, 0xac, 0x9b, 0x01, 0xfa, 0x3c, 0xc2, 0x38, 0xbf, 0x51, 0xaa, 0x62, 0xe7, 0xb7, 0x0a, - 0xa2, 0xcb, 0xc2, 0x81, 0x84, 0xe6, 0x17, 0x52, 0x4e, 0xbd, 0x24, 0x79, 0xdd, 0xdf, 0x80, 0x08, - 0x19, 0x2c, 0x4f, 0x85, 0x78, 0x10, 0xb2, 0xe0, 0x6f, 0x6c, 0x07, 0x00, 0x7e, 0x14, 0x8b, 0xbc, - 0x0a, 0xd5, 0xd4, 0x90, 0xd0, 0x97, 0x11, 0xf9, 0xee, 0x4a, 0x35, 0xb6, 0xeb, 0x6d, 0x5a, 0xb6, - 0x57, 0xe4, 0x0b, 0xe3, 0xe2, 0x6c, 0x54, 0x88, 0x2f, 0x4c, 0x25, 0x98, 0xc8, 0xfc, 0xb5, 0x94, - 0x53, 0x3f, 0x97, 0xd0, 0x06, 0x91, 0xcc, 0xde, 0x84, 0xc9, 0x10, 0xe1, 0x94, 0xec, 0x4c, 0xe2, - 0x3b, 0xfe, 0xe1, 0x1f, 0x03, 0xdf, 0x97, 0xd3, 0x51, 0xdd, 0x92, 0x64, 0xb4, 0x43, 0xcb, 0xa6, - 0x9e, 0x1b, 0x08, 0xee, 0xbb, 0x7e, 0x8c, 0xb0, 0xef, 0xf2, 0xa0, 0x44, 0xed, 0xef, 0xe0, 0x65, - 0x10, 0xc4, 0x01, 0x73, 0xc6, 0x2d, 0x27, 0x33, 0x88, 0x22, 0x2c, 0x09, 0x30, 0x15, 0x14, 0xf7, - 0x5a, 0x4f, 0x5c, 0xb0, 0x12, 0xac, 0xf2, 0xdb, 0xb5, 0x6c, 0x7f, 0x2a, 0xa1, 0x6d, 0xd3, 0x7b, - 0x34, 0x83, 0xbb, 0xca, 0x67, 0x01, 0x41, 0xab, 0x7c, 0x2f, 0x8e, 0xd0, 0xdb, 0x8d, 0x57, 0xf9, - 0xf7, 0xc1, 0x93, 0x88, 0xef, 0x32, 0xa0, 0x05, 0x18, 0x00, 0xad, 0xcf, 0xea, 0x3d, 0xd4, 0x6c, - 0x38, 0x1c, 0x12, 0x18, 0x7d, 0xa7, 0x82, 0x31, 0xb9, 0x3b, 0x8b, 0x49, 0xfd, 0x4e, 0x92, 0xff, - 0xbd, 0x59, 0x33, 0xa9, 0xa5, 0x47, 0x33, 0xb8, 0x5d, 0xf1, 0x22, 0x0a, 0x79, 0x21, 0x42, 0xdf, - 0x10, 0x0e, 0x92, 0xd0, 0xdd, 0x65, 0x8f, 0xc4, 0xf7, 0x00, 0x15, 0x6a, 0xac, 0x51, 0x0f, 0xf6, - 0x62, 0xd4, 0x89, 0x2c, 0xa0, 0x30, 0xd0, 0x89, 0xac, 0x82, 0x21, 0xfd, 0x02, 0xe2, 0x44, 0xf6, - 0x09, 0x3c, 0x4c, 0x8f, 0xff, 0xf1, 0x12, 0x71, 0xdc, 0x06, 0x8f, 0xfb, 0xf1, 0xd2, 0x50, 0x9c, - 0xbb, 0x68, 0x5a, 0x8b, 0x16, 0x00, 0x01, 0x5c, 0x11, 0xb0, 0x78, 0x21, 0xcc, 0x44, 0x05, 0x81, - 0x21, 0xea, 0x7d, 0xac, 0xa0, 0xea, 0x65, 0x9a, 0xa9, 0xc0, 0xa9, 0xc5, 0x4e, 0x9c, 0x11, 0xaa, - 0x21, 0xb8, 0xaa, 0x18, 0x14, 0x9c, 0xa9, 0xa0, 0x12, 0xeb, 0x76, 0xc3, 0x26, 0x54, 0xef, 0x67, - 0x80, 0xbb, 0x9b, 0x75, 0xb0, 0x40, 0x38, 0x86, 0x22, 0xc0, 0x1a, 0x04, 0x2d, 0xaf, 0x86, 0x2c, - 0x24, 0xb9, 0xfa, 0x42, 0x62, 0x06, 0x79, 0xa8, 0x1a, 0x8d, 0x43, 0xb3, 0x32, 0xc4, 0x2f, 0xbc, - 0x22, 0x22, 0xff, 0xaa, 0x6a, 0xe1, 0x84, 0x73, 0x1f, 0x04, 0x88, 0xaa, 0x64, 0xc4, 0x06, 0x3a, - 0x57, 0x82, 0x8b, 0x6b, 0x99, 0xd5, 0x9c, 0x18, 0xd7, 0x9f, 0x49, 0xe0, 0xef, 0x08, 0xe1, 0x01, - 0x32, 0x09, 0x03, 0x05, 0x44, 0x0f, 0xc8, 0x24, 0x8c, 0x40, 0x7f, 0x47, 0x06, 0xe5, 0xba, 0x25, - 0x3c, 0x8a, 0xea, 0x60, 0xab, 0xa0, 0x58, 0x38, 0xc6, 0x9a, 0x66, 0xf5, 0x67, 0x12, 0x84, 0x56, - 0x48, 0x79, 0x98, 0x67, 0x3c, 0xcb, 0xab, 0xdf, 0x66, 0xf0, 0xb5, 0x24, 0x2f, 0x84, 0x64, 0x4c, - 0xa9, 0x64, 0x76, 0xb3, 0x9e, 0x7e, 0xae, 0x27, 0x95, 0x30, 0x1f, 0xcf, 0xea, 0xbd, 0x3b, 0x32, - 0x09, 0xbf, 0xbd, 0x9a, 0x08, 0x29, 0xb4, 0x57, 0x13, 0xdf, 0x40, 0x48, 0x7f, 0x37, 0xa7, 0xae, - 0x47, 0x8b, 0x48, 0x40, 0x8b, 0xfc, 0x28, 0x76, 0xa1, 0xdf, 0xf7, 0xde, 0xf4, 0xb9, 0xdd, 0x24, - 0x03, 0x95, 0xb8, 0x08, 0x53, 0x7d, 0x04, 0x6d, 0xaa, 0x96, 0x2a, 0x38, 0xd2, 0x27, 0x87, 0x62, - 0xf6, 0x17, 0x25, 0x48, 0x75, 0xd0, 0x6f, 0xd9, 0xf8, 0x07, 0x10, 0x72, 0x3c, 0x28, 0xfe, 0x01, - 0x41, 0x84, 0x2f, 0x01, 0x1d, 0xa0, 0xdb, 0x4d, 0x1b, 0xa9, 0x2b, 0xab, 0xfd, 0xb4, 0x70, 0xb8, - 0x71, 0xf2, 0x4c, 0x97, 0x07, 0x06, 0x0b, 0x00, 0x28, 0xb3, 0xe2, 0xad, 0x72, 0x44, 0x22, 0xb1, - 0xc9, 0xd1, 0xb4, 0x24, 0x2f, 0x70, 0xab, 0xa5, 0x25, 0xfa, 0xb2, 0x29, 0x73, 0x80, 0x4c, 0x25, - 0xe2, 0x8e, 0xe7, 0x05, 0x0a, 0x4f, 0x65, 0x84, 0x78, 0x42, 0xbb, 0x1b, 0xbf, 0xad, 0x12, 0xc7, - 0x9a, 0xa9, 0x11, 0x6b, 0x78, 0x72, 0xfa, 0xca, 0x5e, 0x42, 0x9b, 0x7f, 0xb9, 0x96, 0xa9, 0xc4, - 0x20, 0x3f, 0x4a, 0xa6, 0x92, 0x9f, 0x48, 0x10, 0x01, 0xa4, 0x55, 0x1b, 0xc8, 0xc4, 0x53, 0x59, - 0x83, 0x1f, 0x01, 0xa4, 0x55, 0x1b, 0x68, 0xb3, 0x4b, 0x03, 0x23, 0x80, 0xb8, 0x20, 0xd7, 0x85, - 0xdc, 0x25, 0x72, 0x7e, 0xdf, 0x4c, 0x6e, 0x02, 0xe7, 0x81, 0xf3, 0x10, 0xf1, 0x5e, 0xae, 0x65, - 0x88, 0xe9, 0xa6, 0x35, 0xfe, 0x13, 0x3b, 0xa6, 0xb6, 0x30, 0x89, 0x06, 0x0d, 0x24, 0x5e, 0x0b, - 0xb3, 0xb8, 0xc0, 0xb3, 0x4b, 0x0e, 0xda, 0x6d, 0x9e, 0x0f, 0x53, 0x3b, 0x23, 0x1c, 0x21, 0x00, - 0xdb, 0x82, 0x2a, 0xcb, 0xa0, 0x65, 0x42, 0xd6, 0x51, 0x36, 0x28, 0x9b, 0x8b, 0x61, 0xc8, 0x3e, - 0x80, 0xd6, 0x54, 0x43, 0x96, 0xe6, 0x4f, 0x34, 0x31, 0xad, 0x89, 0x88, 0xac, 0x34, 0x6b, 0x24, - 0xff, 0x4a, 0x7b, 0x5f, 0x67, 0xa7, 0x66, 0x98, 0x5a, 0xf2, 0xc9, 0x78, 0xa2, 0x2b, 0x65, 0x4f, - 0x32, 0x6b, 0x38, 0x73, 0xa1, 0x00, 0x4b, 0xa9, 0xaf, 0xad, 0xe5, 0x16, 0xc2, 0xff, 0x75, 0xe9, - 0x66, 0x08, 0xb0, 0x13, 0x3d, 0x5b, 0xc3, 0x5a, 0x21, 0x36, 0x08, 0x1f, 0x9c, 0x19, 0xa6, 0x47, - 0xeb, 0xd7, 0x7a, 0x8c, 0xd8, 0x20, 0xfe, 0x5b, 0xa9, 0xd3, 0xcf, 0x69, 0xee, 0x08, 0xfb, 0x5b, - 0x48, 0x96, 0x10, 0x03, 0x89, 0x07, 0x20, 0x0a, 0x11, 0xae, 0x05, 0x39, 0x48, 0x4f, 0x5b, 0x77, - 0x26, 0x1a, 0xd8, 0x3a, 0xa3, 0x6d, 0x9d, 0x7b, 0xb9, 0x96, 0xb6, 0x4e, 0xf7, 0xd4, 0xd0, 0x5f, - 0xd8, 0xa1, 0xf7, 0x69, 0xa3, 0xa5, 0x37, 0xde, 0xa9, 0x05, 0x0c, 0xbd, 0x04, 0x11, 0x3e, 0xf4, - 0x3a, 0x40, 0x42, 0xe7, 0xa8, 0x94, 0x53, 0x77, 0xd2, 0xfc, 0x46, 0xf8, 0xb9, 0x61, 0xdb, 0x50, - 0x88, 0x44, 0x3e, 0x73, 0xe2, 0xb4, 0xb5, 0xe7, 0x08, 0x21, 0xb7, 0x2e, 0xf0, 0x69, 0x0b, 0xee, - 0xaa, 0x65, 0x4c, 0xd6, 0x8d, 0x14, 0x66, 0x39, 0x43, 0xfc, 0x1d, 0x3d, 0x1d, 0xd2, 0x40, 0xcb, - 0x43, 0x3b, 0xad, 0x11, 0xb8, 0x6f, 0x5b, 0x09, 0x75, 0x63, 0xef, 0x34, 0xb1, 0x6d, 0x9b, 0xb0, - 0x5d, 0x2d, 0x62, 0x6b, 0x1d, 0xdd, 0x5b, 0xcc, 0x9f, 0x03, 0x1f, 0x14, 0x36, 0x65, 0x51, 0x60, - 0x22, 0x22, 0x41, 0x27, 0x37, 0xd0, 0xef, 0x99, 0x15, 0x31, 0xdd, 0x0a, 0x18, 0xc8, 0x68, 0xe2, - 0x15, 0x31, 0x03, 0x0a, 0x5d, 0x11, 0x7b, 0xb0, 0x84, 0x6e, 0x36, 0xa7, 0x6e, 0xa0, 0x43, 0xb5, - 0xf3, 0xfa, 0x09, 0x19, 0x49, 0x95, 0xc5, 0xc0, 0x59, 0x6d, 0x6d, 0x6f, 0xe5, 0x02, 0x02, 0x1c, - 0x58, 0x45, 0x2f, 0xa7, 0x76, 0xf7, 0xb4, 0x1f, 0xe8, 0x22, 0x5a, 0xa7, 0xc6, 0x78, 0x3a, 0xb9, - 0x2b, 0x95, 0x34, 0xbb, 0xda, 0xe2, 0x89, 0xee, 0x78, 0xa7, 0x66, 0xa0, 0xd5, 0xa2, 0xea, 0xfb, - 0xa0, 0x42, 0x97, 0x88, 0x80, 0x3b, 0x08, 0xed, 0x4e, 0x78, 0x1f, 0xa7, 0xac, 0xac, 0xe1, 0x77, - 0x8b, 0x85, 0xb7, 0xac, 0xfc, 0x9b, 0xd6, 0xd4, 0x55, 0xeb, 0xe0, 0xb0, 0x22, 0x2c, 0xa9, 0x65, - 0xc9, 0xd8, 0xb1, 0x2b, 0x83, 0x0f, 0xd9, 0xee, 0x72, 0x17, 0xe8, 0x7d, 0x69, 0x33, 0xd5, 0x0b, - 0xd1, 0xf8, 0xc5, 0x5b, 0x3b, 0x0c, 0x2a, 0x7c, 0x6b, 0xc7, 0x03, 0x26, 0xe4, 0x5e, 0x92, 0x72, - 0xea, 0x53, 0xe8, 0x5e, 0xb7, 0x0d, 0xdb, 0x4d, 0x13, 0xdb, 0xf2, 0x97, 0x4e, 0x5e, 0x22, 0xed, - 0x79, 0x55, 0x50, 0xef, 0xf5, 0xe3, 0x6b, 0x79, 0xd4, 0x59, 0xa8, 0x12, 0x4e, 0x43, 0xf0, 0x31, - 0x19, 0x88, 0x9f, 0xce, 0x90, 0xc8, 0x9f, 0x5b, 0xf5, 0x4e, 0xc1, 0x40, 0xec, 0x81, 0x04, 0x0e, - 0xc4, 0x15, 0x48, 0x37, 0x9c, 0xa2, 0xf3, 0x48, 0x61, 0xf8, 0x29, 0x9d, 0x9c, 0xb0, 0xae, 0x9f, - 0x24, 0x84, 0x85, 0x25, 0x01, 0x06, 0xcb, 0x3a, 0xfd, 0xa1, 0x1e, 0xbb, 0xd6, 0x9f, 0x91, 0x21, - 0x78, 0x7b, 0xdc, 0xe8, 0x6e, 0x37, 0xb5, 0x0c, 0xa6, 0xb2, 0x54, 0x64, 0x97, 0x4c, 0x11, 0x81, - 0x43, 0xb0, 0x17, 0xc8, 0x86, 0x95, 0x22, 0x66, 0x62, 0xd4, 0x0d, 0x7f, 0x62, 0xe6, 0xdc, 0x1b, - 0x1e, 0x3a, 0x21, 0xe5, 0x10, 0x56, 0x0a, 0x2d, 0x16, 0x18, 0x18, 0x1b, 0xa6, 0x96, 0xc1, 0x9c, - 0x3e, 0x92, 0xe4, 0x39, 0xae, 0x25, 0x75, 0x42, 0xcf, 0x26, 0x39, 0x1b, 0x0a, 0x15, 0x00, 0xe1, - 0x86, 0x82, 0x0f, 0xe7, 0xc6, 0xe6, 0x73, 0x3b, 0x1b, 0xae, 0x70, 0x79, 0xea, 0x82, 0x75, 0xf5, - 0x84, 0xf7, 0xc9, 0xf8, 0x4b, 0x20, 0xb8, 0x20, 0xaa, 0x13, 0x90, 0xc8, 0x92, 0xfa, 0xee, 0x89, - 0xc8, 0x08, 0x3b, 0x28, 0x37, 0x75, 0x6c, 0x49, 0x19, 0xa6, 0x9e, 0x1d, 0xc0, 0xe9, 0x0e, 0xf9, - 0xb1, 0x3e, 0x3c, 0x18, 0xf1, 0x91, 0x12, 0x07, 0xca, 0xf8, 0x99, 0x69, 0xe8, 0x7e, 0x12, 0xf8, - 0xe0, 0xf0, 0x3e, 0xeb, 0xc8, 0x7b, 0x50, 0xf3, 0x18, 0x34, 0x2d, 0x20, 0x00, 0xcf, 0x02, 0x3e, - 0x2b, 0xeb, 0xc9, 0x46, 0x29, 0x76, 0xaa, 0x81, 0xbe, 0x56, 0x0f, 0x9e, 0x43, 0xf5, 0xa5, 0xc3, - 0x39, 0xab, 0x70, 0x04, 0x76, 0xee, 0xe1, 0xcb, 0xd2, 0xa5, 0x57, 0xc7, 0x99, 0xd4, 0x19, 0x4b, - 0x1b, 0x78, 0x6e, 0x13, 0xc9, 0x8e, 0x64, 0xdc, 0x8c, 0x1b, 0xb1, 0x41, 0xfb, 0x8f, 0x3d, 0x9e, - 0x0f, 0xa1, 0x9f, 0x91, 0x59, 0x92, 0x6e, 0x59, 0xb5, 0x27, 0xba, 0xb4, 0xde, 0x38, 0x7f, 0x96, - 0xf4, 0x62, 0xa8, 0x0a, 0x75, 0xfc, 0xc4, 0x1f, 0xe4, 0x86, 0x8c, 0xdd, 0x2e, 0x9d, 0xc7, 0x48, - 0x76, 0x82, 0x27, 0xc7, 0x9d, 0x35, 0x9d, 0x22, 0x2c, 0x09, 0x98, 0xf3, 0xe9, 0xf6, 0x96, 0x81, - 0x2b, 0xc2, 0xc4, 0xa0, 0xfb, 0xc4, 0xbb, 0x99, 0x47, 0xc8, 0x04, 0x6d, 0xe6, 0x79, 0xb9, 0x04, - 0x25, 0x31, 0xf9, 0xb6, 0x80, 0x07, 0xb5, 0x3f, 0x10, 0x95, 0x04, 0xbc, 0x6c, 0x89, 0x78, 0xc4, - 0x06, 0xd3, 0xf1, 0x5e, 0x6d, 0x08, 0xbd, 0x1c, 0x91, 0xe7, 0x3d, 0xd3, 0xa7, 0x65, 0x07, 0xda, - 0xb4, 0x6c, 0x6f, 0xe3, 0x80, 0x9a, 0xb0, 0x07, 0x95, 0x96, 0x26, 0xff, 0xb4, 0xce, 0x01, 0x09, - 0xa7, 0x75, 0x2e, 0x96, 0xb4, 0xd2, 0x09, 0x29, 0xa7, 0xf6, 0xa0, 0x75, 0xa5, 0x33, 0xe3, 0x33, - 0xe7, 0x0e, 0x82, 0x7d, 0x31, 0x6c, 0xe1, 0xaf, 0xb0, 0xae, 0x8e, 0x95, 0x4e, 0x9e, 0x81, 0xff, - 0x94, 0x4e, 0x5e, 0xa2, 0x51, 0x40, 0xc8, 0x95, 0xff, 0xdb, 0xb6, 0x55, 0x99, 0xd5, 0x5d, 0x01, - 0x49, 0x6d, 0x33, 0x5a, 0xb6, 0xd7, 0x88, 0xc5, 0x71, 0x15, 0xf1, 0x91, 0x12, 0xd4, 0x75, 0x88, - 0x86, 0x2f, 0xb6, 0x1b, 0x58, 0x63, 0xab, 0x20, 0xb8, 0x2e, 0x53, 0x58, 0x6d, 0x3b, 0xfd, 0x16, - 0xf3, 0xf6, 0x69, 0xcf, 0xe0, 0x07, 0x0b, 0xee, 0xee, 0x25, 0xff, 0x72, 0xc0, 0x14, 0x90, 0xd6, - 0x93, 0x5a, 0x6f, 0x3c, 0x4d, 0x42, 0xb0, 0xfe, 0x42, 0x92, 0xef, 0xc4, 0x53, 0xef, 0xe6, 0xed, - 0x7a, 0x46, 0xef, 0xd1, 0x3b, 0x07, 0xf8, 0xf9, 0x0b, 0xdd, 0xf2, 0x6a, 0x1a, 0xe4, 0x10, 0x3b, - 0xe0, 0x63, 0xcf, 0xc1, 0x62, 0xfe, 0x4a, 0xe9, 0x74, 0x01, 0x12, 0xa1, 0x94, 0x46, 0xc7, 0x4a, - 0x23, 0xc7, 0x94, 0x90, 0xf2, 0xf0, 0xc8, 0x64, 0xde, 0xcc, 0xda, 0x89, 0x98, 0x49, 0x19, 0x4c, - 0x46, 0xe4, 0xf9, 0xcd, 0x9a, 0xd9, 0xd8, 0xdd, 0xae, 0x67, 0x0c, 0x6a, 0xc7, 0x60, 0xb3, 0xe0, - 0x7a, 0x80, 0xfb, 0x61, 0x41, 0x1e, 0xe0, 0x3c, 0x34, 0x69, 0xa2, 0xef, 0x4a, 0x39, 0xb5, 0x17, - 0x2d, 0x25, 0xd3, 0xf2, 0x99, 0xfd, 0xd6, 0xfe, 0x7d, 0xe5, 0xeb, 0x47, 0xa7, 0xaf, 0x5c, 0x84, - 0xe1, 0x14, 0x12, 0xc1, 0x38, 0x56, 0x0f, 0x4a, 0x23, 0x00, 0x49, 0xab, 0x3c, 0x3d, 0x02, 0x2d, - 0xcf, 0xf1, 0xb5, 0x2c, 0xe6, 0x47, 0x43, 0xbf, 0x03, 0x0e, 0x53, 0x10, 0x2f, 0xe5, 0x5a, 0x47, - 0xb7, 0xa1, 0x67, 0x8c, 0x58, 0x47, 0x9f, 0x61, 0xbf, 0xe9, 0x1a, 0xb1, 0x41, 0xfa, 0x89, 0xf5, - 0x71, 0x36, 0xd0, 0x07, 0x3c, 0xa9, 0xf0, 0x72, 0x2e, 0x5c, 0x2a, 0x76, 0x3d, 0xb7, 0xb2, 0x4a, - 0x34, 0x91, 0xea, 0xda, 0xad, 0x91, 0x8a, 0x6f, 0x6b, 0x55, 0x9d, 0x54, 0xb1, 0x41, 0x93, 0x31, - 0xbd, 0x39, 0x1b, 0x91, 0xef, 0x6e, 0xd6, 0x4c, 0x9c, 0x04, 0x8b, 0x32, 0xdc, 0x11, 0xef, 0xe9, - 0xd3, 0x0c, 0xc4, 0x93, 0x82, 0x83, 0x13, 0xee, 0x7e, 0x8b, 0xe0, 0x44, 0xba, 0x77, 0x70, 0x96, - 0x3f, 0x62, 0x85, 0xd3, 0xb8, 0xb9, 0xdd, 0xfa, 0xf0, 0x7d, 0xeb, 0xc8, 0x05, 0x6b, 0xdf, 0x30, - 0x44, 0x4f, 0x21, 0x9c, 0x8f, 0x7c, 0x7f, 0x66, 0xff, 0x11, 0x65, 0x5b, 0x35, 0xa8, 0x15, 0xe4, - 0x40, 0x34, 0xff, 0x5e, 0xe9, 0xf5, 0x31, 0x90, 0xd8, 0x46, 0xf8, 0x04, 0x05, 0xf3, 0xe0, 0x80, - 0xf7, 0x05, 0xa2, 0x23, 0x95, 0xa9, 0x1f, 0xe4, 0xf8, 0xa9, 0x24, 0xcf, 0x69, 0xd2, 0x3a, 0xfa, - 0x3a, 0x49, 0x73, 0x88, 0x1b, 0xdd, 0xbc, 0x00, 0x99, 0x1e, 0x40, 0x40, 0x80, 0xcc, 0x0a, 0x1c, - 0x11, 0x25, 0x8e, 0x67, 0xc0, 0xf2, 0x85, 0x3d, 0xe5, 0xf3, 0x27, 0xfc, 0x35, 0x57, 0x84, 0x25, - 0x10, 0x80, 0x35, 0xba, 0x58, 0xcc, 0x26, 0x69, 0xff, 0xa2, 0x3d, 0xb0, 0x8f, 0x91, 0x9e, 0x12, - 0x37, 0x13, 0x5d, 0x9b, 0xfb, 0x0c, 0x53, 0xef, 0x6d, 0xd7, 0x4c, 0x33, 0x95, 0xee, 0xe4, 0xf7, - 0x14, 0x1f, 0x2c, 0xb0, 0xa7, 0x70, 0xd0, 0x84, 0xd9, 0x69, 0x09, 0x9f, 0xf0, 0xc0, 0xbe, 0x4b, - 0x4b, 0x9b, 0xfd, 0x6e, 0x33, 0xfa, 0x23, 0xeb, 0xd4, 0x24, 0xf8, 0x9c, 0xcd, 0x8c, 0x93, 0xdc, - 0x71, 0x4a, 0x28, 0x02, 0x53, 0x7d, 0x3a, 0xca, 0xb3, 0x3f, 0xdb, 0xa5, 0x75, 0xc4, 0x12, 0xec, - 0xaf, 0x1b, 0x31, 0x23, 0xa1, 0x67, 0xb4, 0xd8, 0x20, 0xfe, 0x83, 0x97, 0x63, 0xe4, 0x73, 0x4b, - 0x72, 0x08, 0x92, 0x72, 0x37, 0x6b, 0x38, 0xb7, 0xff, 0xf9, 0x88, 0x8c, 0x6c, 0x02, 0xa9, 0x17, - 0xe8, 0xfc, 0xb0, 0x45, 0x37, 0x38, 0x87, 0xce, 0x7e, 0x8c, 0x70, 0xa9, 0xca, 0x83, 0x12, 0x31, - 0x3e, 0x92, 0x72, 0x6a, 0x1a, 0x3d, 0x48, 0x36, 0xa1, 0x70, 0xdf, 0xb7, 0x9b, 0x2a, 0x9e, 0x2f, - 0x4a, 0x67, 0x8e, 0xf9, 0x82, 0x63, 0x10, 0x08, 0x36, 0x38, 0x54, 0x66, 0x77, 0x1b, 0xb8, 0x2c, - 0x45, 0x1f, 0x13, 0xc8, 0x16, 0xa4, 0x13, 0x9d, 0x8f, 0x62, 0x5d, 0xba, 0x61, 0x6e, 0xd6, 0xfb, - 0xd2, 0x26, 0x09, 0x11, 0x30, 0xb7, 0x59, 0x33, 0x29, 0x3f, 0x1c, 0x83, 0x88, 0x9b, 0x4f, 0xc6, - 0x83, 0x10, 0xbe, 0x74, 0xf9, 0x81, 0x4c, 0x3c, 0x92, 0xe7, 0x10, 0x22, 0x27, 0x0a, 0x98, 0x2b, - 0x4c, 0xb2, 0x4a, 0x1b, 0x7b, 0x0d, 0x0f, 0xa2, 0xf6, 0xe5, 0x40, 0x15, 0xa8, 0x85, 0xeb, 0xa5, - 0xe2, 0x15, 0x12, 0x47, 0x14, 0x96, 0xfb, 0x30, 0x61, 0x83, 0x69, 0x63, 0xb4, 0xf9, 0x46, 0x35, - 0x32, 0x20, 0xef, 0x3b, 0x8e, 0xaf, 0x1e, 0x91, 0x17, 0x30, 0xd4, 0xec, 0x56, 0xd0, 0x92, 0x34, - 0x40, 0xac, 0x55, 0x01, 0x1a, 0xb0, 0x40, 0xe1, 0xb1, 0x85, 0x10, 0xcf, 0x34, 0xb3, 0xe7, 0xd1, - 0x5d, 0x7e, 0xe9, 0x5a, 0x9a, 0x94, 0x6d, 0x5c, 0xf1, 0x5a, 0x9a, 0x6e, 0x54, 0xbe, 0xa7, 0xa2, - 0x2d, 0x37, 0x2a, 0x5f, 0x2a, 0xc9, 0x08, 0x38, 0x1c, 0xc1, 0x07, 0xeb, 0x36, 0x3f, 0xa3, 0x49, - 0x33, 0xe3, 0xa9, 0x1e, 0xfe, 0xc1, 0x3a, 0x0b, 0x08, 0x3a, 0x58, 0xf7, 0xe2, 0x98, 0x94, 0x84, - 0xdb, 0x10, 0x89, 0x76, 0x4d, 0x95, 0x30, 0x88, 0x42, 0x10, 0xff, 0x8b, 0xcd, 0xa6, 0x58, 0x2d, - 0x10, 0x0b, 0xf2, 0x58, 0xf4, 0xd1, 0x59, 0x08, 0x02, 0xcd, 0x28, 0x09, 0xf5, 0x24, 0xf1, 0x99, - 0xed, 0xf7, 0xae, 0x76, 0x1b, 0x60, 0x73, 0xc0, 0x47, 0x92, 0xdc, 0xf7, 0x2e, 0x2f, 0x24, 0xc8, - 0x88, 0xa2, 0x12, 0x49, 0xd4, 0xf8, 0x95, 0x94, 0x53, 0x0f, 0x49, 0x68, 0x2d, 0xb0, 0x6c, 0x69, - 0x8b, 0xb5, 0xb4, 0xf5, 0xaf, 0x8f, 0x01, 0x5b, 0xeb, 0xe8, 0xa1, 0xe9, 0x77, 0x46, 0x80, 0x1e, - 0x1d, 0x87, 0xf0, 0x75, 0x58, 0xe0, 0xfc, 0x3f, 0x91, 0x02, 0xa7, 0xf7, 0x76, 0x16, 0x35, 0xf5, - 0x64, 0xc1, 0x33, 0x32, 0x6a, 0x1d, 0x98, 0x2c, 0x5f, 0x1b, 0xb3, 0x86, 0x27, 0xa6, 0x5f, 0xd9, - 0x5b, 0xdd, 0x17, 0x33, 0x4a, 0x36, 0x46, 0x37, 0xcd, 0x52, 0xc9, 0x58, 0xc2, 0x26, 0x68, 0xcb, - 0xb8, 0x37, 0x22, 0xcf, 0x67, 0xcc, 0x52, 0x21, 0x0d, 0xe3, 0xe3, 0x3d, 0x71, 0xce, 0xec, 0xc7, - 0x85, 0x09, 0x67, 0x3f, 0x01, 0x9a, 0x71, 0xeb, 0x52, 0xd1, 0x7c, 0xc8, 0xc2, 0x59, 0x2c, 0x1c, - 0x9b, 0xbe, 0xb2, 0xb7, 0x78, 0xe5, 0x12, 0xac, 0x44, 0x94, 0x65, 0xce, 0x65, 0x9a, 0xa8, 0x03, - 0xbb, 0x18, 0x4e, 0x8f, 0xbc, 0x54, 0x3a, 0xfd, 0x36, 0x74, 0x2d, 0x66, 0xcd, 0xb2, 0x39, 0xfa, - 0xbf, 0x55, 0x9d, 0x15, 0x6b, 0x59, 0x03, 0x5e, 0xeb, 0xc8, 0x27, 0x9a, 0x82, 0x11, 0xb7, 0xa6, - 0x51, 0x27, 0x4c, 0x59, 0xa8, 0x0c, 0x5c, 0x58, 0x48, 0x98, 0x32, 0x91, 0x0c, 0xc7, 0xa5, 0x9c, - 0xba, 0x09, 0xb9, 0xd6, 0xb0, 0x1e, 0x19, 0xfe, 0xcb, 0x4d, 0x09, 0xc3, 0xf0, 0x9f, 0x7e, 0x65, - 0x2f, 0x8b, 0x82, 0x31, 0x46, 0x69, 0xb9, 0x31, 0x09, 0x62, 0x83, 0xf0, 0x81, 0xbc, 0xeb, 0xbe, - 0x14, 0x91, 0xe7, 0x33, 0xe6, 0x9d, 0x41, 0x6a, 0x70, 0x61, 0x42, 0x35, 0x04, 0x68, 0xa2, 0xc6, - 0x31, 0x50, 0x03, 0xf6, 0x98, 0x7c, 0x6a, 0x38, 0x97, 0xc3, 0xd4, 0x68, 0x6d, 0xb8, 0x79, 0x6a, - 0xd8, 0xc3, 0xed, 0x3c, 0x67, 0x0b, 0x9b, 0x11, 0x42, 0x7c, 0x50, 0xe3, 0x97, 0xe1, 0xfe, 0xaa, - 0xb0, 0x4c, 0x93, 0x78, 0x94, 0xd9, 0x14, 0xf0, 0x88, 0xb0, 0x54, 0x64, 0xc8, 0x58, 0x01, 0x04, - 0x1d, 0xd0, 0x4d, 0xd4, 0x61, 0x5c, 0x92, 0x6f, 0xdf, 0xa2, 0xc5, 0x7b, 0xcc, 0x2e, 0xf4, 0x1f, - 0x95, 0x74, 0xe0, 0xba, 0x70, 0xd3, 0x83, 0x16, 0xbb, 0xf9, 0x8f, 0xd6, 0xa1, 0x85, 0xa5, 0xd3, - 0x87, 0xec, 0x57, 0x8f, 0xdd, 0x13, 0x56, 0xe1, 0x32, 0x98, 0x14, 0x42, 0x38, 0x02, 0x45, 0x58, - 0x82, 0x39, 0xdd, 0x83, 0x16, 0x71, 0x38, 0x75, 0xe1, 0x5f, 0x68, 0x3c, 0x2a, 0xe5, 0xd4, 0x83, - 0x12, 0xaa, 0x97, 0x17, 0x10, 0xcb, 0xa2, 0xfa, 0x27, 0x01, 0x53, 0xaf, 0xb6, 0xb5, 0xd4, 0x37, - 0xe9, 0x89, 0xb5, 0xff, 0xba, 0x7a, 0xd5, 0x9a, 0x55, 0xab, 0xa3, 0x72, 0xac, 0x23, 0x61, 0xc4, - 0x33, 0xa9, 0x58, 0xff, 0xba, 0x06, 0x29, 0xb2, 0x76, 0x6e, 0x3c, 0x93, 0xe9, 0x49, 0x25, 0xf0, - 0xfe, 0x79, 0xec, 0x79, 0x43, 0x4f, 0x6f, 0xf4, 0x5d, 0xd9, 0xf9, 0x9f, 0xf2, 0x7d, 0xb2, 0xac, - 0x66, 0x52, 0xad, 0xda, 0x80, 0xda, 0x67, 0x76, 0xa1, 0x79, 0x77, 0x44, 0x94, 0x7f, 0xb3, 0x3f, - 0xe9, 0xd9, 0xd4, 0x0b, 0x18, 0x57, 0x1f, 0xe9, 0x98, 0x2b, 0xdf, 0xe9, 0x01, 0xfd, 0x4b, 0xc7, - 0xed, 0x99, 0xac, 0x6e, 0xea, 0x0f, 0xfc, 0x3d, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x15, 0xd9, 0xd5, - 0xf3, 0x87, 0x04, 0x00, + 0xd5, 0xd4, 0xd5, 0x8b, 0x3e, 0xee, 0x0b, 0x62, 0xaf, 0x80, 0x8a, 0x82, 0xf4, 0xfb, 0xf1, 0x92, + 0xa9, 0xf6, 0x87, 0x4f, 0x7d, 0x80, 0x24, 0x06, 0xb7, 0x01, 0xcf, 0xc6, 0x97, 0x3a, 0x7a, 0x39, + 0x75, 0xb0, 0xff, 0x6b, 0x1b, 0x9f, 0xf1, 0x01, 0xf1, 0x39, 0x34, 0xcd, 0xdf, 0xe2, 0x0f, 0x35, + 0xfa, 0xb7, 0x35, 0x2a, 0xcf, 0x36, 0x47, 0x12, 0x7e, 0xf2, 0x4c, 0x7d, 0x6a, 0xb5, 0xa4, 0xca, + 0x95, 0xde, 0xac, 0x2a, 0x69, 0x7e, 0x66, 0xe0, 0x3c, 0x15, 0x13, 0xec, 0x16, 0xe2, 0x37, 0xb8, + 0x02, 0x38, 0xd3, 0x97, 0x05, 0x5e, 0x85, 0xc5, 0x04, 0x2a, 0xf1, 0x16, 0xae, 0xb7, 0x15, 0x4e, + 0x1e, 0xad, 0x00, 0xdd, 0xbd, 0x46, 0x49, 0xac, 0xf3, 0x13, 0x63, 0x72, 0x73, 0x43, 0x83, 0x12, + 0x4f, 0x28, 0xc1, 0x75, 0xfe, 0xc0, 0x8e, 0xd0, 0xd7, 0x62, 0x4b, 0x7a, 0x2c, 0x4b, 0xbf, 0xbb, + 0x27, 0x97, 0x7e, 0x97, 0x6d, 0x50, 0x7d, 0x57, 0x30, 0xab, 0xd4, 0xdd, 0x82, 0x2a, 0x37, 0x79, + 0x0b, 0x03, 0x8d, 0x71, 0xb0, 0x30, 0xfb, 0xa9, 0x85, 0x19, 0xd4, 0xea, 0xb5, 0xcb, 0x96, 0x2e, + 0x05, 0x29, 0xb0, 0xb4, 0x62, 0xd9, 0xd2, 0xa5, 0xc9, 0xc1, 0xf7, 0xf5, 0xe0, 0x18, 0x6b, 0x1f, + 0x34, 0xaa, 0x1e, 0xcc, 0xaa, 0x5a, 0xb6, 0x94, 0xd5, 0x61, 0x20, 0x52, 0x4c, 0x5c, 0xc1, 0x5f, + 0x4b, 0xf7, 0x75, 0x2e, 0xfe, 0xa2, 0x7a, 0x5e, 0xac, 0xd4, 0x97, 0x8f, 0x81, 0x7c, 0xf9, 0xb8, + 0x17, 0x5f, 0x01, 0x69, 0xe0, 0x2b, 0x58, 0x2b, 0x91, 0x7f, 0x40, 0x7d, 0x37, 0xe9, 0xa3, 0xf9, + 0x13, 0xd2, 0x47, 0x97, 0x82, 0xf9, 0xab, 0x96, 0x2a, 0x8e, 0x64, 0x5b, 0x86, 0x12, 0x69, 0x1a, + 0x68, 0x5c, 0xe9, 0x1b, 0x47, 0xd2, 0xc3, 0xbd, 0x75, 0xb5, 0x60, 0xbb, 0xaa, 0xfd, 0xb6, 0x34, + 0xc5, 0x16, 0x26, 0xe7, 0x40, 0x53, 0x24, 0x49, 0xb8, 0xa8, 0x9c, 0xdb, 0x94, 0x3a, 0x74, 0x31, + 0x73, 0xf0, 0x30, 0xa5, 0xc2, 0x73, 0x6d, 0x98, 0x0b, 0xb8, 0xdb, 0xb1, 0x5b, 0x23, 0x5d, 0x90, + 0x77, 0xb9, 0x7c, 0xb4, 0xe7, 0x0d, 0x6d, 0xa4, 0xf5, 0xf3, 0xd6, 0xbd, 0x86, 0xa1, 0xce, 0xad, + 0x75, 0x9c, 0xd0, 0x06, 0xae, 0xeb, 0xc0, 0xa9, 0xe3, 0x67, 0xb0, 0x50, 0xbb, 0xb2, 0x97, 0x4a, + 0x4a, 0xe6, 0xbc, 0x39, 0x36, 0x55, 0x4a, 0xde, 0xd4, 0x99, 0xeb, 0xa9, 0x83, 0xfd, 0x4d, 0x04, + 0x0a, 0xae, 0x14, 0xa8, 0xf9, 0x8d, 0x1f, 0x1e, 0x18, 0x79, 0xfe, 0x9b, 0x0b, 0x79, 0x72, 0xf5, + 0x78, 0x7b, 0xe8, 0x48, 0xbf, 0x30, 0xe9, 0x48, 0xf7, 0x39, 0xea, 0x48, 0x4a, 0x53, 0xb4, 0xd1, + 0x9f, 0x50, 0x6a, 0x22, 0xe1, 0xed, 0xa1, 0x86, 0x09, 0xf9, 0xcc, 0x8e, 0x03, 0x49, 0x52, 0x89, + 0x15, 0xbf, 0x4e, 0xba, 0x53, 0x47, 0x1e, 0xba, 0xcb, 0xa2, 0x95, 0xc6, 0xbf, 0xab, 0x63, 0xe3, + 0x56, 0xeb, 0xb1, 0x51, 0x56, 0xe5, 0x27, 0x78, 0x36, 0x5d, 0xc6, 0xb1, 0x69, 0xb9, 0x1b, 0xc8, + 0x38, 0xd5, 0xb5, 0x5f, 0xeb, 0xef, 0xc1, 0x08, 0x1b, 0x3a, 0x92, 0xf9, 0xe8, 0x5d, 0xad, 0xfb, + 0x13, 0xfa, 0x62, 0x83, 0xe0, 0x92, 0x67, 0xe6, 0xe7, 0xd1, 0xa4, 0x50, 0x14, 0xcf, 0x97, 0x0a, + 0x81, 0x1a, 0x55, 0x7e, 0xd4, 0x4b, 0x8b, 0xa4, 0x4a, 0xdc, 0x5c, 0x0f, 0xef, 0xc2, 0xb3, 0x76, + 0x3d, 0x1e, 0xed, 0xc9, 0x56, 0xf6, 0x3d, 0xca, 0x36, 0x30, 0x69, 0xc1, 0x47, 0xdb, 0xeb, 0xfe, + 0x2c, 0x8e, 0xf8, 0x94, 0xe6, 0xd2, 0x73, 0xc1, 0xe1, 0xb6, 0xe4, 0xe0, 0xfb, 0xfa, 0xd7, 0x28, + 0x07, 0xfc, 0x83, 0x0b, 0x95, 0xda, 0x35, 0xbd, 0x1d, 0xbd, 0xe9, 0xee, 0xb2, 0xbd, 0x93, 0xc1, + 0x5b, 0x1c, 0x38, 0xd8, 0x00, 0xb1, 0x53, 0xf7, 0x06, 0x1e, 0x0b, 0x26, 0x92, 0xdf, 0xa0, 0xca, + 0x6b, 0xd1, 0xd3, 0xde, 0x1c, 0x58, 0x61, 0x18, 0xcd, 0xc2, 0xa5, 0x13, 0xb5, 0x7f, 0x3c, 0x19, + 0x15, 0xe9, 0x23, 0x11, 0x1f, 0xa1, 0xa9, 0xef, 0x19, 0x71, 0x13, 0x04, 0xd1, 0x22, 0xe9, 0x0e, + 0xba, 0xd3, 0x0c, 0x1d, 0x09, 0xd1, 0x8f, 0xd6, 0xd5, 0xd2, 0xec, 0xf6, 0xb5, 0xe2, 0xa3, 0x68, + 0x72, 0x28, 0x1c, 0x56, 0x62, 0x75, 0xf5, 0x14, 0xb7, 0xc4, 0x1a, 0xc9, 0xca, 0xa4, 0x99, 0x74, + 0x2c, 0xfb, 0xda, 0xd3, 0x37, 0x8e, 0x24, 0x07, 0x87, 0xeb, 0xea, 0x7d, 0xac, 0x4e, 0x7c, 0x1e, + 0x15, 0x87, 0xb8, 0xb3, 0x0a, 0xa5, 0xf2, 0x87, 0x55, 0x79, 0x85, 0xd7, 0x54, 0x21, 0x2d, 0x02, + 0xf6, 0xa5, 0x7e, 0x47, 0x7d, 0xc7, 0xd3, 0x97, 0xde, 0x4d, 0x0e, 0x7e, 0x88, 0x77, 0x82, 0xee, + 0x81, 0xcc, 0xab, 0x37, 0x40, 0x5a, 0xfb, 0x4c, 0x6d, 0xc4, 0x07, 0xf8, 0x73, 0x04, 0x59, 0x34, + 0xb2, 0xf3, 0x4c, 0x87, 0xf1, 0x04, 0xa2, 0xcd, 0x14, 0xbd, 0x64, 0xfb, 0x59, 0x82, 0xf2, 0x9a, + 0x14, 0xe6, 0x4d, 0x41, 0xf8, 0x13, 0xff, 0x96, 0x44, 0x7d, 0xf0, 0x5a, 0xdf, 0x9b, 0x0c, 0xbe, + 0x49, 0x69, 0x12, 0x1f, 0xe1, 0x8f, 0x0f, 0xf7, 0xa9, 0xf2, 0x3d, 0x70, 0x7c, 0x98, 0x07, 0xf0, + 0x0d, 0xac, 0x73, 0x7e, 0x84, 0x4b, 0xe1, 0x44, 0xb1, 0x0c, 0xe5, 0xb5, 0x44, 0x03, 0xf4, 0x38, + 0x41, 0x50, 0x85, 0x7f, 0x4b, 0xb3, 0x69, 0xfc, 0x07, 0x76, 0x17, 0xba, 0xa5, 0xbe, 0xc6, 0x5d, + 0x57, 0xeb, 0xc3, 0x75, 0x98, 0x51, 0xa9, 0xfc, 0x28, 0x64, 0x8c, 0xfa, 0x94, 0x2e, 0x3f, 0x1e, + 0xe2, 0x1b, 0xc2, 0xf5, 0xf8, 0xad, 0x91, 0x2e, 0x7c, 0xae, 0x78, 0x77, 0xaf, 0x76, 0xfd, 0xa6, + 0xf6, 0xc9, 0xa9, 0x5b, 0x23, 0x5d, 0xa9, 0x4f, 0xae, 0x68, 0xbd, 0x57, 0xf1, 0x68, 0x5e, 0x3b, + 0xa3, 0x7d, 0x72, 0x2a, 0xdd, 0xd7, 0xa9, 0x8b, 0x99, 0x27, 0x50, 0x11, 0x5d, 0x8e, 0x96, 0x87, + 0xa8, 0x31, 0x84, 0xac, 0xbd, 0x51, 0x2a, 0xcd, 0x80, 0x4f, 0x84, 0xa2, 0x2d, 0x0f, 0x01, 0xef, + 0xfb, 0x8c, 0x4a, 0x71, 0x95, 0xee, 0x6f, 0x03, 0x27, 0x05, 0x08, 0x23, 0x4c, 0xfd, 0x6d, 0xdc, + 0x2c, 0x76, 0x87, 0xee, 0x75, 0x93, 0xbd, 0x66, 0xcc, 0x09, 0x67, 0x25, 0xb5, 0x74, 0x81, 0xd6, + 0x0f, 0x97, 0x94, 0xc4, 0xd2, 0xb5, 0x20, 0xab, 0x8b, 0xec, 0x0e, 0xc0, 0xac, 0xf5, 0x14, 0xe7, + 0x8d, 0x53, 0x6c, 0x58, 0x34, 0xf5, 0x42, 0x86, 0xdf, 0x6c, 0x5f, 0x1e, 0xc3, 0x27, 0x27, 0x88, + 0xa6, 0x07, 0x8c, 0x7b, 0x19, 0xcc, 0x13, 0x24, 0xa4, 0x53, 0x61, 0x75, 0x95, 0x2a, 0x3f, 0xec, + 0xcd, 0xae, 0x93, 0x16, 0xc1, 0xfb, 0x08, 0x7c, 0xbe, 0x19, 0x38, 0x9f, 0x1c, 0x3a, 0x92, 0xee, + 0x69, 0x83, 0x9b, 0x3f, 0x90, 0xe5, 0x34, 0x60, 0x63, 0x76, 0xb3, 0x2a, 0x2c, 0xc1, 0xd1, 0xe3, + 0xde, 0x29, 0xf4, 0xf6, 0x94, 0x74, 0x55, 0x01, 0x96, 0x5d, 0xca, 0x63, 0x8c, 0x6e, 0xa8, 0xbe, + 0xce, 0x31, 0xb2, 0x76, 0xe5, 0x68, 0xfa, 0xdc, 0x90, 0xe7, 0x82, 0xcb, 0xb8, 0x49, 0x95, 0x41, + 0x98, 0x7f, 0x97, 0xd6, 0xcd, 0x6f, 0x7a, 0x9b, 0x62, 0x7e, 0x61, 0x39, 0xe6, 0x2c, 0xcd, 0x36, + 0x04, 0x1f, 0xe9, 0x8a, 0x1e, 0x17, 0x46, 0xb9, 0xeb, 0x47, 0x53, 0xab, 0xdb, 0x4d, 0x7f, 0x12, + 0x1c, 0x6f, 0xf6, 0xb9, 0x69, 0x4d, 0x64, 0x33, 0xa9, 0x57, 0xe5, 0x75, 0xe8, 0x19, 0x6f, 0x2e, + 0xec, 0xf0, 0xbb, 0x09, 0x87, 0x54, 0xa7, 0xdd, 0xe4, 0x88, 0x40, 0x3d, 0xc4, 0xb8, 0xae, 0xc4, + 0xdf, 0xa2, 0xfc, 0x84, 0x61, 0x77, 0x0a, 0xa9, 0xf2, 0x76, 0x2f, 0x29, 0x90, 0x7e, 0x95, 0xd5, + 0x6b, 0x19, 0xbc, 0xfc, 0xa0, 0x45, 0x3d, 0x6d, 0xa0, 0x6a, 0xe8, 0xd1, 0x6d, 0x37, 0x6e, 0x92, + 0xd7, 0xd7, 0xca, 0xbe, 0xda, 0xe4, 0xe0, 0x50, 0xea, 0xcc, 0x7e, 0x6d, 0xff, 0x3e, 0x00, 0xc7, + 0x07, 0xa2, 0x55, 0x6b, 0xe4, 0x9a, 0x5f, 0x24, 0x07, 0x87, 0x92, 0x23, 0x67, 0xf0, 0x79, 0x9c, + 0x94, 0x2f, 0xf6, 0x91, 0xaf, 0x78, 0x6e, 0xb8, 0x90, 0x9b, 0xcd, 0xb0, 0xda, 0x1f, 0x0e, 0xbe, + 0x14, 0x0a, 0x26, 0x76, 0xd4, 0xfb, 0x03, 0x3b, 0xfd, 0x0d, 0x5f, 0x5a, 0xad, 0x13, 0xbe, 0xd2, + 0x69, 0x51, 0xf8, 0xf6, 0xd8, 0x86, 0x4a, 0x9a, 0x31, 0x11, 0xc0, 0x8c, 0x8b, 0xf8, 0x63, 0xed, + 0x57, 0x92, 0x43, 0x1f, 0x68, 0x83, 0xef, 0x6a, 0xfd, 0x37, 0xb4, 0xae, 0x76, 0xcf, 0xff, 0x74, + 0x91, 0xe3, 0xb6, 0x53, 0xf3, 0xdb, 0x83, 0x8b, 0x02, 0x26, 0x5d, 0x6c, 0x51, 0x36, 0x17, 0x65, + 0xcf, 0xcb, 0xc1, 0x47, 0xc6, 0x8a, 0x1d, 0xe0, 0x2a, 0xca, 0x4f, 0xf4, 0x85, 0xed, 0xd8, 0xd8, + 0x72, 0xc6, 0xb6, 0x95, 0xa5, 0x54, 0x01, 0xcd, 0xb2, 0x1b, 0x9e, 0x38, 0x0d, 0xb9, 0x42, 0x41, + 0x7a, 0xef, 0xea, 0x0a, 0x05, 0x45, 0x91, 0x3e, 0x8c, 0x80, 0x7b, 0x56, 0x78, 0xf7, 0xe0, 0x46, + 0x53, 0xc2, 0x4a, 0xe2, 0xa5, 0x48, 0x6c, 0xa7, 0xa1, 0x59, 0xf9, 0xf8, 0x22, 0xee, 0x76, 0x33, + 0xdf, 0x74, 0xbb, 0x39, 0x0f, 0x15, 0x6d, 0x63, 0x5f, 0x25, 0x0a, 0x51, 0x81, 0xcf, 0x28, 0xf0, + 0x7c, 0x9c, 0x8f, 0xee, 0xd4, 0x55, 0xd0, 0x0d, 0xf1, 0xba, 0x26, 0x7f, 0xc3, 0xed, 0x78, 0xb1, + 0xf6, 0xff, 0x17, 0x2c, 0x0f, 0x05, 0xdf, 0x17, 0x54, 0xf9, 0x5d, 0x81, 0x33, 0x72, 0x9e, 0x10, + 0x46, 0x8f, 0xf6, 0x6a, 0xaf, 0x76, 0xeb, 0x57, 0x3f, 0xa0, 0x7a, 0xc0, 0x1b, 0xa4, 0xaa, 0xfa, + 0xcd, 0xd5, 0x6b, 0xeb, 0x6a, 0xb6, 0xd6, 0xad, 0x93, 0xd7, 0xac, 0x2a, 0xd3, 0xda, 0x2f, 0x69, + 0xed, 0x57, 0x00, 0x7c, 0x71, 0x79, 0xbd, 0xaf, 0x6e, 0x8b, 0xbc, 0x69, 0x15, 0xad, 0x83, 0xc3, + 0x13, 0xab, 0xdb, 0xf8, 0x53, 0xd9, 0xb7, 0xaa, 0x56, 0x6f, 0x86, 0x49, 0x80, 0x55, 0xad, 0x93, + 0x7d, 0xcf, 0xac, 0xda, 0xc4, 0xaa, 0x06, 0xf7, 0x6a, 0xbd, 0x43, 0xac, 0xca, 0x2d, 0xaf, 0x5d, + 0x0b, 0x6e, 0x3a, 0x50, 0xc2, 0x19, 0x4e, 0x77, 0xf2, 0x57, 0xd8, 0x05, 0x86, 0x37, 0x25, 0xe7, + 0x58, 0xb0, 0x52, 0xeb, 0xbf, 0xae, 0x9d, 0xb8, 0xa8, 0x5d, 0xbf, 0xaa, 0x75, 0x5f, 0x66, 0x5e, + 0x05, 0xe5, 0x6e, 0x08, 0x57, 0x04, 0x5a, 0x0b, 0x74, 0xab, 0xfb, 0x2e, 0x50, 0x45, 0x1b, 0x48, + 0xdc, 0xe8, 0x49, 0xf7, 0xd1, 0x76, 0xa0, 0x00, 0xfd, 0xa2, 0x82, 0x73, 0x65, 0xa5, 0x07, 0xba, + 0xbf, 0x73, 0xa1, 0x12, 0x6b, 0xab, 0xdb, 0x43, 0x84, 0x3c, 0x6d, 0x12, 0x21, 0x77, 0x66, 0x8b, + 0x10, 0x3a, 0x9b, 0xf1, 0x59, 0x2e, 0xb6, 0xa8, 0xf2, 0x46, 0xf4, 0xac, 0xd7, 0x11, 0x17, 0xd2, + 0x22, 0x2b, 0x0a, 0x61, 0x71, 0x72, 0x9f, 0xe6, 0xbe, 0x28, 0x40, 0x93, 0x69, 0x57, 0xe2, 0x32, + 0x34, 0x39, 0x84, 0xff, 0xd0, 0xf9, 0xf0, 0x4e, 0xc2, 0x87, 0xb4, 0x4c, 0x2a, 0x82, 0xfe, 0xf0, + 0xf1, 0x82, 0x95, 0x89, 0x4b, 0x50, 0x81, 0xbf, 0x31, 0xe4, 0x8f, 0x53, 0x7c, 0x12, 0xa7, 0x79, + 0x28, 0x91, 0x8a, 0xd9, 0xe7, 0x3f, 0xd0, 0x0e, 0x1f, 0xf4, 0x41, 0x21, 0x5e, 0x31, 0x7f, 0x2c, + 0xb0, 0x83, 0x7f, 0xf8, 0x48, 0x0a, 0xa4, 0xe9, 0x00, 0x5d, 0x53, 0xbf, 0x39, 0x75, 0xea, 0x5a, + 0xea, 0x54, 0x9b, 0x8f, 0x14, 0x8b, 0x3e, 0x34, 0x3d, 0x12, 0xaf, 0x69, 0x8e, 0x27, 0x22, 0x4d, + 0xa1, 0xdd, 0x70, 0xd8, 0x03, 0xae, 0x23, 0x8f, 0x8e, 0xb3, 0xeb, 0x24, 0x51, 0xeb, 0xef, 0xd1, + 0x3a, 0xae, 0x51, 0x23, 0x3b, 0xdc, 0x4c, 0x65, 0x03, 0x89, 0x0f, 0xa3, 0x49, 0x91, 0x38, 0xd1, + 0xf8, 0x0b, 0x8c, 0xc3, 0x14, 0x2d, 0x62, 0x9e, 0x01, 0x94, 0x06, 0x41, 0xd9, 0xa7, 0x75, 0x62, + 0x1d, 0x42, 0x71, 0x25, 0x16, 0x52, 0xa0, 0xf1, 0x24, 0xe3, 0xc4, 0xc1, 0x15, 0x4b, 0x25, 0x7c, + 0x07, 0x70, 0x4d, 0xc5, 0x1e, 0xbc, 0x18, 0x50, 0xa2, 0x9c, 0x75, 0x3f, 0x44, 0xba, 0x61, 0xf7, + 0x43, 0xf3, 0x28, 0x57, 0x91, 0xfb, 0xa1, 0x2a, 0xf7, 0xfa, 0x0d, 0xbe, 0x75, 0xf2, 0xda, 0x32, + 0x88, 0x7b, 0xb3, 0x58, 0x97, 0xb7, 0x9f, 0xf0, 0xa2, 0x08, 0x0e, 0x78, 0x70, 0x77, 0xcb, 0x89, + 0xa2, 0xce, 0x9c, 0xa2, 0xc8, 0xfd, 0x6d, 0xca, 0x22, 0x4e, 0xf4, 0x04, 0x50, 0x21, 0x65, 0x05, + 0xb8, 0x5f, 0xb2, 0x09, 0x4d, 0xc6, 0x7b, 0x9e, 0x7a, 0x55, 0xf9, 0x7e, 0xaf, 0xde, 0x42, 0x9a, + 0x4b, 0xe9, 0xca, 0xec, 0x35, 0x45, 0x99, 0x45, 0x07, 0xab, 0xf2, 0xa8, 0xf2, 0x42, 0x34, 0xdf, + 0xcb, 0x88, 0xdb, 0xbc, 0xb0, 0xd0, 0x85, 0x67, 0x1d, 0x9a, 0xc2, 0x3f, 0x4c, 0x70, 0x9b, 0x5f, + 0x17, 0xc0, 0x46, 0x69, 0x7a, 0x3d, 0x30, 0xcf, 0xf2, 0x70, 0x9d, 0xf3, 0x0a, 0xf2, 0xfc, 0xa5, + 0x80, 0xe6, 0x1a, 0xde, 0xae, 0xcd, 0xe1, 0x44, 0xa8, 0x89, 0x6c, 0xbc, 0x6c, 0x9f, 0x7b, 0xc8, + 0xfa, 0xf0, 0x81, 0x30, 0x0c, 0xe7, 0x12, 0x56, 0x68, 0xe7, 0x03, 0xc6, 0xed, 0x8f, 0xae, 0x09, + 0xed, 0x8f, 0x55, 0x4f, 0xaa, 0xf2, 0xe3, 0xa8, 0xca, 0x9b, 0x6b, 0x54, 0x4c, 0x5f, 0x07, 0x57, + 0xfd, 0xd4, 0xf1, 0x6b, 0xbc, 0x0c, 0xf7, 0xfc, 0x4d, 0x1e, 0xe7, 0x14, 0x63, 0x6a, 0x7c, 0xbb, + 0x3d, 0x6b, 0xc7, 0x64, 0xf6, 0x50, 0x36, 0x99, 0xe5, 0x9a, 0x1a, 0xb9, 0x2a, 0x5b, 0x15, 0x4e, + 0xc4, 0x76, 0x8d, 0x4b, 0x42, 0x97, 0xfe, 0x0c, 0x15, 0xe9, 0x2d, 0xc4, 0x19, 0x28, 0x6f, 0xa7, + 0xb2, 0x8b, 0x92, 0x10, 0xfe, 0x53, 0x5c, 0x81, 0x0a, 0x5a, 0xfc, 0x8d, 0xcd, 0x30, 0xed, 0x29, + 0xd2, 0x02, 0xcb, 0xb3, 0xa7, 0x66, 0x12, 0xc3, 0x95, 0xbe, 0xff, 0xf0, 0x01, 0x70, 0x95, 0xeb, + 0x11, 0xa1, 0xea, 0x67, 0xaa, 0xbc, 0x09, 0xf9, 0xbc, 0x39, 0xd7, 0x41, 0xba, 0x3b, 0xc7, 0x2a, + 0x3a, 0xc9, 0x7e, 0x2f, 0x9a, 0x66, 0xfe, 0xaa, 0x58, 0x82, 0x26, 0xb7, 0xd0, 0x97, 0x2b, 0x82, + 0x3b, 0xaf, 0xac, 0xc8, 0xc7, 0x7e, 0x7a, 0xfe, 0x59, 0xe0, 0xf6, 0xe1, 0x7a, 0xd8, 0xd8, 0xe3, + 0xb7, 0x9f, 0x02, 0x57, 0xf5, 0x90, 0x2a, 0x2f, 0x47, 0xcb, 0xbc, 0x8e, 0x73, 0xe1, 0x6c, 0x02, + 0xa0, 0xf1, 0x50, 0x46, 0xf8, 0x5b, 0x17, 0x67, 0xe3, 0x37, 0xda, 0xfc, 0x20, 0xbc, 0x4e, 0xf8, + 0x39, 0x8d, 0x4f, 0x1b, 0x59, 0xaf, 0xca, 0xcf, 0xa0, 0x3a, 0xaf, 0x33, 0x46, 0x38, 0x2b, 0x00, + 0x8f, 0x46, 0x27, 0x4a, 0x5c, 0x8f, 0x8a, 0xf9, 0x6e, 0xcc, 0xfe, 0x95, 0x18, 0xa9, 0xf9, 0xbc, + 0x7f, 0xa5, 0x1b, 0x4d, 0xa1, 0x3f, 0x0c, 0x27, 0x13, 0x1f, 0x5f, 0xe4, 0xb9, 0x9e, 0x87, 0x66, + 0xe9, 0x63, 0xdb, 0x12, 0x0d, 0xdc, 0x86, 0x94, 0x2a, 0x3e, 0xc5, 0xee, 0x4c, 0x41, 0xe1, 0x21, + 0xbb, 0x20, 0xbd, 0x33, 0x5d, 0xc0, 0x9e, 0x0c, 0x10, 0x8d, 0x8f, 0x1c, 0xed, 0xe1, 0xe1, 0x00, + 0xfd, 0x3a, 0xbd, 0x43, 0x4d, 0xd8, 0x3d, 0xb4, 0x01, 0x9d, 0x67, 0xb5, 0x2a, 0xd7, 0xd8, 0x3d, + 0xb4, 0x59, 0x62, 0x7e, 0x68, 0xb3, 0x25, 0x1a, 0x98, 0xf0, 0x2b, 0x9b, 0x27, 0x54, 0xf9, 0x31, + 0xf4, 0xa8, 0xd7, 0x16, 0xff, 0x4c, 0x4c, 0x25, 0x87, 0x8e, 0xd0, 0x68, 0x1d, 0x84, 0x38, 0xd2, + 0x3d, 0x6d, 0x2d, 0xd1, 0x00, 0xe5, 0xb4, 0xbf, 0x72, 0xa1, 0xd9, 0x59, 0x6d, 0x7f, 0x10, 0x6e, + 0xff, 0x6c, 0x3e, 0xe3, 0xe3, 0x30, 0x6a, 0x69, 0xb3, 0xc7, 0x84, 0x05, 0x8d, 0xf4, 0xc9, 0x27, + 0x87, 0x46, 0x2b, 0x8f, 0xe1, 0xa3, 0x2b, 0xeb, 0x49, 0x3f, 0xfa, 0x0b, 0xdc, 0xd1, 0x7f, 0x16, + 0x7b, 0xa3, 0x02, 0x0c, 0x45, 0x1f, 0x91, 0x94, 0xa2, 0xc2, 0x50, 0xb4, 0x65, 0x45, 0x4d, 0x28, + 0x48, 0xc3, 0xea, 0xf8, 0xf4, 0xdf, 0xb4, 0xee, 0x21, 0x52, 0x97, 0xaf, 0xd7, 0x91, 0xdf, 0xe2, + 0x72, 0x54, 0x10, 0x08, 0x05, 0x63, 0xf1, 0x92, 0x02, 0x82, 0x8e, 0xf9, 0xd9, 0xe8, 0x90, 0xe3, + 0xf1, 0x50, 0x3c, 0xe1, 0x0f, 0x27, 0x30, 0xb4, 0x0f, 0x60, 0xc5, 0x45, 0x68, 0xaa, 0xbf, 0x91, + 0x3c, 0xc2, 0x53, 0xea, 0xa2, 0xeb, 0x9b, 0x9b, 0xe0, 0xa2, 0xc4, 0x67, 0x2e, 0xf4, 0x3c, 0x89, + 0xa6, 0x9a, 0x5a, 0xe3, 0xd9, 0xe0, 0xf6, 0x6c, 0x36, 0x01, 0x3a, 0x36, 0xfc, 0x2f, 0x39, 0x32, + 0xb8, 0x88, 0x35, 0x42, 0xff, 0xed, 0xd9, 0x37, 0x89, 0x33, 0x46, 0x6c, 0x24, 0xef, 0x59, 0x6f, + 0x47, 0x09, 0xb1, 0xda, 0x2c, 0x21, 0x48, 0x08, 0x5f, 0x2a, 0x21, 0x16, 0x39, 0x49, 0x08, 0x78, + 0x27, 0x44, 0x4f, 0xe8, 0x54, 0x4e, 0xac, 0xa5, 0x77, 0x28, 0x20, 0x1a, 0xf0, 0x59, 0x9d, 0xde, + 0xa1, 0x54, 0x38, 0xf6, 0xa2, 0x5f, 0x87, 0xf0, 0xdd, 0xc1, 0x95, 0xca, 0x6a, 0x54, 0x08, 0x4f, + 0x84, 0xeb, 0x6a, 0xe9, 0x19, 0x09, 0x14, 0x78, 0x56, 0xc8, 0xb6, 0x06, 0xe8, 0x0f, 0x4a, 0xf5, + 0x81, 0xf9, 0x74, 0x30, 0xf1, 0x57, 0x68, 0x6a, 0x28, 0x8c, 0x25, 0x3a, 0x55, 0xd1, 0x69, 0xa6, + 0x1b, 0x32, 0x3c, 0x73, 0x8d, 0x7e, 0xa9, 0x72, 0xf5, 0xa2, 0xd6, 0x7e, 0x9e, 0xbe, 0x84, 0xe2, + 0x82, 0x01, 0x51, 0x8c, 0x9b, 0x1b, 0xd9, 0x4b, 0xc7, 0xc2, 0x89, 0x48, 0x47, 0x18, 0x2a, 0x7c, + 0x69, 0x9c, 0xd2, 0x51, 0x7c, 0x9a, 0x32, 0x5e, 0x11, 0x8b, 0x7a, 0xb5, 0x9c, 0x06, 0x23, 0x79, + 0x80, 0xc7, 0x35, 0x45, 0x2b, 0xe9, 0x45, 0xeb, 0x6a, 0xd7, 0x0e, 0x7f, 0x80, 0x61, 0x0c, 0x2c, + 0x91, 0x26, 0x55, 0x4f, 0xa9, 0xf2, 0x4a, 0xf4, 0x98, 0x57, 0xc4, 0xa4, 0x6c, 0xa6, 0x62, 0xe9, + 0x5e, 0xc3, 0x5c, 0xc8, 0xad, 0x50, 0xf9, 0x68, 0xeb, 0xde, 0xd1, 0xf6, 0x83, 0xc9, 0xc1, 0x83, + 0xda, 0xe1, 0xae, 0xe4, 0xd0, 0x11, 0xcf, 0x5f, 0xf3, 0xd6, 0x15, 0xbd, 0x8b, 0xdb, 0x43, 0xdc, + 0x6e, 0x36, 0x89, 0xdb, 0x39, 0x96, 0xd0, 0x33, 0x64, 0x36, 0x8e, 0xcf, 0x16, 0x79, 0xb4, 0xd8, + 0xbd, 0xb7, 0xba, 0xc3, 0x84, 0x54, 0xb3, 0x11, 0x96, 0x6f, 0xeb, 0xa4, 0xd1, 0x74, 0x17, 0xa0, + 0x49, 0xd0, 0x5c, 0xbc, 0x9f, 0xb1, 0x29, 0xc8, 0x93, 0x99, 0xaa, 0x3c, 0x8d, 0xb1, 0x29, 0xfc, + 0xc3, 0xf8, 0x70, 0x39, 0xc7, 0x39, 0x2e, 0xc3, 0x00, 0x63, 0x70, 0x4e, 0x21, 0x7c, 0xb9, 0xae, + 0x96, 0x63, 0x93, 0x95, 0x08, 0xd1, 0x17, 0xf9, 0x46, 0x44, 0x01, 0xf0, 0x9a, 0x35, 0x8a, 0xa5, + 0x62, 0x9e, 0xa0, 0x7c, 0x5c, 0x8d, 0xf8, 0x04, 0x2a, 0xc2, 0x62, 0xd1, 0xe7, 0x0f, 0x9b, 0xdf, + 0x54, 0x19, 0xa5, 0xd2, 0x0c, 0x68, 0xec, 0xae, 0xab, 0x6f, 0x59, 0xe1, 0xae, 0xa9, 0xab, 0xf5, + 0xf9, 0x8c, 0x4a, 0xf1, 0x69, 0x34, 0x95, 0x89, 0x7c, 0xe8, 0xa3, 0xc0, 0xb8, 0x45, 0x35, 0xd7, + 0xf0, 0xfd, 0x3c, 0x04, 0xfd, 0x98, 0x01, 0xf4, 0x80, 0x0a, 0x93, 0x8c, 0x61, 0x80, 0x1c, 0x9a, + 0x6d, 0xf0, 0x74, 0xef, 0x45, 0xc3, 0xeb, 0x14, 0xe4, 0x8d, 0x82, 0xee, 0xd4, 0xbd, 0x01, 0xeb, + 0xea, 0xe5, 0x60, 0x30, 0xa6, 0xc4, 0xe3, 0x90, 0x5e, 0x09, 0x4b, 0x8c, 0x7c, 0xf0, 0x81, 0x75, + 0x82, 0x91, 0xa6, 0x6a, 0x9d, 0xef, 0x25, 0x6f, 0x9c, 0x70, 0xd7, 0xd5, 0xbb, 0x53, 0x47, 0x2f, + 0xfb, 0x9c, 0xe0, 0x4c, 0x37, 0xc5, 0x85, 0xb6, 0x37, 0xc5, 0xf6, 0x83, 0x34, 0x6e, 0x8a, 0x5f, + 0x44, 0x2c, 0xcc, 0x14, 0xe1, 0xfe, 0x31, 0xac, 0x1e, 0x84, 0x70, 0x59, 0x03, 0x69, 0x2e, 0xed, + 0x9c, 0xc8, 0xb9, 0xcc, 0xdb, 0xf4, 0xc5, 0x3a, 0x58, 0x62, 0xf5, 0xe8, 0x55, 0x55, 0x78, 0xe3, + 0x40, 0x73, 0xbc, 0x94, 0xf0, 0xd8, 0xaa, 0x1b, 0xd1, 0x14, 0x17, 0xd6, 0xec, 0x50, 0x02, 0x3b, + 0x31, 0xc2, 0x6b, 0x22, 0xe1, 0xed, 0x8d, 0xa1, 0x40, 0x62, 0x75, 0x2c, 0xd2, 0xb4, 0x25, 0x1a, + 0xf8, 0xea, 0x9b, 0x5f, 0x99, 0x49, 0x79, 0xa8, 0x16, 0x55, 0x79, 0x3a, 0x7b, 0xe0, 0x3a, 0x29, + 0x39, 0x74, 0xa4, 0x25, 0x1a, 0x60, 0x0a, 0x85, 0x44, 0x37, 0x6b, 0x2e, 0xf8, 0x05, 0x29, 0x90, + 0xee, 0x80, 0xac, 0x2d, 0xe9, 0x9e, 0x36, 0xfc, 0x93, 0x49, 0x3a, 0xb2, 0x99, 0x1b, 0x57, 0x66, + 0xf9, 0x13, 0x77, 0xb0, 0x34, 0xed, 0xb0, 0x05, 0x13, 0x3a, 0x2d, 0x52, 0x5d, 0x76, 0x2c, 0xbc, + 0x49, 0x73, 0x60, 0x5b, 0x24, 0xe3, 0xde, 0xf7, 0x61, 0xfa, 0xfd, 0x3d, 0x30, 0x15, 0x4f, 0xca, + 0x85, 0xdc, 0xce, 0x6d, 0x6f, 0x0f, 0x39, 0x5b, 0x67, 0xba, 0x4e, 0xb6, 0x1e, 0x1e, 0xe9, 0xac, + 0x08, 0xd1, 0x12, 0x79, 0x05, 0xd2, 0xb6, 0x18, 0x10, 0x41, 0x3b, 0x03, 0xd9, 0x4a, 0x83, 0xd1, + 0x8f, 0x89, 0x12, 0x69, 0x01, 0x90, 0x0c, 0x8f, 0x4b, 0x7e, 0x6c, 0x56, 0x71, 0xbb, 0x08, 0x15, + 0xf3, 0x03, 0xc1, 0xba, 0x2c, 0x68, 0x9f, 0x60, 0xc6, 0x80, 0x1f, 0x1e, 0x35, 0x8f, 0x7b, 0xb5, + 0xbf, 0x51, 0x09, 0x34, 0xc7, 0x42, 0x89, 0x5d, 0x5f, 0x57, 0x6c, 0xac, 0x2f, 0xa7, 0xfe, 0xbd, + 0x68, 0x55, 0xff, 0xaa, 0x55, 0xf9, 0x49, 0x9e, 0x38, 0x25, 0x8e, 0x38, 0xcb, 0x46, 0x4f, 0x9e, + 0xd2, 0x6e, 0xb6, 0x27, 0x47, 0xce, 0x94, 0x6b, 0xed, 0x23, 0x5a, 0xff, 0xf5, 0xf4, 0xb9, 0x4f, + 0xb5, 0xae, 0xa1, 0x74, 0x67, 0x87, 0xa6, 0x76, 0x69, 0xfb, 0xda, 0x47, 0x5f, 0xbd, 0x98, 0xee, + 0xec, 0x58, 0xcc, 0x6b, 0x89, 0x8a, 0x73, 0xb8, 0x05, 0xe2, 0x31, 0x65, 0xa3, 0xe7, 0x2c, 0x24, + 0x7a, 0x4e, 0x72, 0xb0, 0x6f, 0x02, 0xc7, 0x3e, 0xdc, 0x17, 0x92, 0xc0, 0x24, 0x60, 0x8b, 0x5a, + 0x66, 0x59, 0xd1, 0xfa, 0x3b, 0xb5, 0xf6, 0x8b, 0xe9, 0xe1, 0x36, 0x7a, 0xde, 0xfb, 0xdc, 0x85, + 0x16, 0x3a, 0x2e, 0xca, 0xed, 0xc1, 0x22, 0xf5, 0x26, 0x55, 0x64, 0xbe, 0x35, 0x0a, 0x1e, 0x37, + 0xa9, 0xf1, 0x1d, 0xff, 0x78, 0xaf, 0x3d, 0x7b, 0x9c, 0xe8, 0x7e, 0x90, 0x66, 0x74, 0x3a, 0xe9, + 0x23, 0x7b, 0xf2, 0x10, 0x51, 0x69, 0x9e, 0x51, 0x76, 0xd5, 0xfb, 0x43, 0xb1, 0x1f, 0xe9, 0xfd, + 0xab, 0xd2, 0xfb, 0x32, 0x55, 0x5e, 0x82, 0xca, 0xbd, 0x76, 0x48, 0xd5, 0x29, 0x7d, 0x60, 0xdf, + 0xa8, 0x7a, 0x5e, 0x1b, 0x60, 0xce, 0xa9, 0xff, 0x9b, 0x0b, 0xac, 0x52, 0x06, 0xf8, 0x0f, 0xe2, + 0x1e, 0x93, 0x4e, 0x67, 0xe2, 0xef, 0xd5, 0xb2, 0xf1, 0xa0, 0xeb, 0xd7, 0x80, 0xb7, 0x9c, 0xf4, + 0xfc, 0x1f, 0x04, 0x34, 0x99, 0xb6, 0x17, 0xbd, 0xa8, 0xe0, 0x19, 0x65, 0x97, 0x4e, 0xc1, 0xe4, + 0xb5, 0x00, 0x94, 0x48, 0x85, 0xd0, 0x17, 0xd6, 0xb1, 0x49, 0x81, 0xb8, 0x82, 0x34, 0xe3, 0x1e, + 0xa7, 0xc1, 0x1b, 0x64, 0x5a, 0x26, 0x15, 0xd3, 0x6f, 0xc3, 0xb2, 0xb3, 0xe2, 0xec, 0x00, 0xac, + 0x79, 0x4e, 0x01, 0x58, 0xa1, 0xb5, 0x29, 0x4e, 0x94, 0x29, 0x00, 0x2b, 0x8d, 0x52, 0xc7, 0x46, + 0x2e, 0x4d, 0xd7, 0x49, 0x84, 0x2a, 0x69, 0xda, 0x14, 0x38, 0x90, 0xf1, 0xaf, 0x95, 0x75, 0x5e, + 0x3d, 0x20, 0xd8, 0xc6, 0x6c, 0x20, 0xe1, 0x98, 0xcc, 0x6f, 0x45, 0x37, 0xf1, 0x0f, 0x41, 0xcb, + 0xb9, 0x1b, 0x3f, 0x16, 0xff, 0xd4, 0xcd, 0x92, 0x60, 0x84, 0xc2, 0x0d, 0x11, 0x32, 0xb6, 0x72, + 0x37, 0x61, 0x6c, 0xfa, 0x4f, 0x4b, 0x34, 0x50, 0xee, 0x0e, 0x47, 0x82, 0x0a, 0xe1, 0x82, 0x72, + 0x77, 0xc2, 0x1f, 0xdf, 0xf9, 0xf5, 0xc5, 0x7e, 0xa8, 0x47, 0x45, 0x24, 0x6d, 0x1b, 0x79, 0xd1, + 0x9d, 0x47, 0x94, 0x74, 0xf2, 0x0a, 0xc8, 0x28, 0x95, 0x3c, 0x90, 0x10, 0x59, 0xcf, 0xd2, 0xb6, + 0x66, 0xdd, 0x26, 0x37, 0xfc, 0x48, 0x75, 0x5c, 0xbd, 0x35, 0xd2, 0x95, 0xbe, 0xa0, 0xfa, 0x0c, + 0x70, 0xf1, 0x69, 0x34, 0x59, 0x09, 0x43, 0x86, 0xe3, 0x7c, 0xd2, 0x1f, 0xe4, 0x33, 0xa2, 0x65, + 0x92, 0x07, 0x53, 0xf4, 0xc9, 0xd3, 0x39, 0x7b, 0x63, 0xc0, 0xe2, 0x83, 0xa8, 0xa0, 0x31, 0xd4, + 0x14, 0x4a, 0x50, 0xaf, 0xde, 0x85, 0xe4, 0x4e, 0x9b, 0x94, 0x48, 0xc5, 0xa9, 0x81, 0xee, 0xd1, + 0xb3, 0x1f, 0xb3, 0x34, 0xab, 0xf9, 0x5e, 0x97, 0xfb, 0x27, 0x3e, 0xa8, 0x13, 0xcb, 0x51, 0x7e, + 0x14, 0x73, 0x24, 0xf8, 0xf6, 0x96, 0xe0, 0x53, 0x1e, 0x29, 0x90, 0x26, 0x8d, 0x9e, 0xfd, 0x38, + 0x7d, 0x66, 0x0f, 0x03, 0x27, 0x85, 0x62, 0x0d, 0x9a, 0x14, 0x0f, 0x35, 0x45, 0x1b, 0x59, 0x02, + 0x5f, 0x72, 0x48, 0xa1, 0x45, 0xd2, 0x02, 0xad, 0xfb, 0x7d, 0xf0, 0xda, 0x74, 0x47, 0x78, 0x42, + 0x70, 0x33, 0x61, 0x0a, 0x70, 0x62, 0xab, 0x80, 0x10, 0x3c, 0xeb, 0x5f, 0xdf, 0xdc, 0xd8, 0x48, + 0xb3, 0xef, 0x92, 0x37, 0x2c, 0x5c, 0xb1, 0xb4, 0x01, 0x82, 0xb6, 0x6c, 0xf7, 0x37, 0xc6, 0x95, + 0x72, 0xb0, 0x32, 0x40, 0x2d, 0x78, 0xc2, 0xea, 0xe9, 0x4f, 0x1e, 0x73, 0x6b, 0x37, 0x5e, 0xa7, + 0xe9, 0x6c, 0x53, 0xc7, 0xaf, 0x95, 0x27, 0x07, 0x0f, 0xda, 0x42, 0xfb, 0xb8, 0xce, 0xc5, 0x17, + 0xf8, 0x3b, 0xcd, 0x22, 0xe3, 0xe9, 0x1d, 0x77, 0xa7, 0x59, 0xa9, 0x67, 0x5a, 0x24, 0x4f, 0x63, + 0xa0, 0x4f, 0xfa, 0xa8, 0x69, 0xf8, 0x23, 0x9a, 0x93, 0x0f, 0x42, 0x58, 0x90, 0x97, 0xf8, 0xfc, + 0xd5, 0xe7, 0x0b, 0xfc, 0x45, 0x00, 0xe2, 0xba, 0x37, 0xbc, 0x54, 0xec, 0xbb, 0x07, 0xbb, 0xb2, + 0x7d, 0xf7, 0xc6, 0x4d, 0xc2, 0x2a, 0xfd, 0x1a, 0x7e, 0x0a, 0xe7, 0x84, 0x4c, 0xaf, 0xe1, 0xdd, + 0xe6, 0x8e, 0x21, 0x2c, 0x02, 0x5c, 0xca, 0xa7, 0xfb, 0xde, 0x1a, 0x6d, 0xed, 0xd4, 0xaf, 0xe2, + 0x9f, 0xe1, 0x02, 0x3b, 0x14, 0xb3, 0xd8, 0xfc, 0xe5, 0x5e, 0xbd, 0xd0, 0xa1, 0x2b, 0xc2, 0x9d, + 0xb4, 0x2b, 0x23, 0x12, 0xc4, 0x43, 0xc8, 0xd5, 0x22, 0x51, 0x1f, 0x62, 0xe2, 0x21, 0xee, 0x6a, + 0x91, 0xa4, 0xf9, 0x70, 0xf2, 0x83, 0x03, 0x5f, 0x8b, 0x44, 0xbc, 0x86, 0xb1, 0xa8, 0xa4, 0xd1, + 0xe3, 0x5c, 0x2d, 0x92, 0x58, 0xab, 0x3f, 0xcb, 0x98, 0x66, 0xc4, 0x9c, 0x65, 0xcf, 0x32, 0x16, + 0x9a, 0x1e, 0x5d, 0x40, 0x21, 0x60, 0x0a, 0xc6, 0xc2, 0xde, 0x5f, 0x88, 0x9b, 0xf4, 0x98, 0x12, + 0xd3, 0x59, 0xec, 0x80, 0x47, 0xf5, 0x98, 0x12, 0xb6, 0xa8, 0xa6, 0x93, 0xb1, 0x45, 0x35, 0x0b, + 0x3a, 0xf1, 0x22, 0x20, 0x88, 0x88, 0xdd, 0x19, 0xa4, 0xdf, 0x5a, 0x12, 0xbc, 0x99, 0x15, 0x4a, + 0x0f, 0x3a, 0xf7, 0x0c, 0xb2, 0xd8, 0xbe, 0x7f, 0xbd, 0x03, 0xb1, 0x31, 0x2b, 0x7e, 0xc6, 0x4c, + 0xf2, 0x95, 0x9f, 0xaa, 0xf2, 0xaa, 0xac, 0x00, 0x27, 0xb6, 0x5f, 0xe2, 0x83, 0x9e, 0xd8, 0x7f, + 0xc9, 0x1c, 0x09, 0x85, 0xde, 0xab, 0x3b, 0x8a, 0x6a, 0x66, 0x6b, 0xe2, 0xc3, 0x4c, 0x40, 0x6c, + 0x23, 0x48, 0xa9, 0xe5, 0x19, 0x75, 0x81, 0x05, 0x9a, 0x0b, 0xe7, 0xa1, 0x8b, 0xf9, 0xd5, 0x59, + 0x61, 0x3d, 0x48, 0xd0, 0x73, 0xb6, 0x04, 0x77, 0x8f, 0x1f, 0xe9, 0x3e, 0x4b, 0xa4, 0x0f, 0x62, + 0x6e, 0x34, 0x22, 0x7d, 0xdc, 0xcf, 0xf7, 0x05, 0xf1, 0x3e, 0x1c, 0xd0, 0xac, 0x87, 0xff, 0x60, + 0x42, 0x2e, 0x6f, 0x5c, 0x42, 0x4e, 0x97, 0xa4, 0xf9, 0x13, 0x91, 0xa4, 0x55, 0xeb, 0x54, 0xf9, + 0x69, 0xf4, 0x53, 0xaf, 0x13, 0x82, 0xa4, 0x45, 0xd4, 0xb7, 0x92, 0x1b, 0xb7, 0x15, 0xc5, 0x9f, + 0x09, 0x14, 0x0f, 0x9e, 0x63, 0xf4, 0xea, 0x36, 0x6b, 0xa1, 0x6e, 0x0f, 0xdd, 0xeb, 0x39, 0xd3, + 0xe9, 0xbb, 0xc2, 0xce, 0x81, 0xc1, 0x76, 0x5e, 0xb5, 0xfe, 0x84, 0xdf, 0x74, 0x1c, 0xa7, 0x8f, + 0x06, 0xc9, 0xf3, 0x5e, 0xd0, 0xc5, 0x3c, 0x7d, 0x02, 0x9a, 0xc3, 0x70, 0xec, 0x53, 0x02, 0x91, + 0x58, 0x50, 0xa7, 0xc1, 0x4d, 0x59, 0x34, 0xf8, 0xb5, 0x88, 0x01, 0x3d, 0xe6, 0xad, 0xfd, 0x47, + 0x75, 0x9f, 0x59, 0xd2, 0x13, 0x7d, 0xdc, 0xc0, 0x33, 0xcd, 0x21, 0x8e, 0x69, 0xf4, 0xa6, 0xb7, + 0x5b, 0xf0, 0x67, 0xbc, 0x8c, 0xf7, 0x67, 0x2f, 0xa3, 0xcd, 0x8c, 0xc6, 0xb3, 0x80, 0xbd, 0x2e, + 0x74, 0xa7, 0x43, 0x53, 0x31, 0xa6, 0x6f, 0x6d, 0x82, 0x91, 0x21, 0x8a, 0x6d, 0x6d, 0xeb, 0x28, + 0xef, 0x40, 0xc0, 0x1e, 0x88, 0x00, 0xf7, 0x92, 0x3f, 0x94, 0x08, 0x85, 0x1b, 0xca, 0xdd, 0x8d, + 0x11, 0x7f, 0x90, 0xfc, 0x11, 0x6f, 0x0e, 0x04, 0x94, 0x78, 0xbc, 0xdc, 0xbd, 0xc3, 0xdf, 0xb8, + 0x7d, 0x23, 0xfb, 0xb1, 0xdd, 0x1f, 0x6a, 0x54, 0x82, 0xe5, 0x6e, 0x96, 0x08, 0x5a, 0x31, 0x5c, + 0xd2, 0xba, 0x04, 0x94, 0x8f, 0x45, 0x45, 0x89, 0x8b, 0x9c, 0x14, 0x16, 0x38, 0x4f, 0x13, 0xb3, + 0x74, 0xf5, 0xcf, 0x55, 0x79, 0xb3, 0x97, 0x34, 0xf8, 0xba, 0x07, 0x44, 0x3a, 0xf5, 0xfc, 0xce, + 0x85, 0xa6, 0x99, 0x3f, 0x29, 0x3e, 0xc0, 0xbb, 0x3c, 0x53, 0xf4, 0x92, 0xeb, 0x97, 0x62, 0x7e, + 0xb3, 0xa1, 0x17, 0xa2, 0x4f, 0xea, 0x28, 0xcc, 0x33, 0x02, 0x6f, 0x31, 0x14, 0x96, 0x9a, 0xc4, + 0x26, 0x8c, 0x58, 0x3b, 0xdc, 0x95, 0x1c, 0x7c, 0xcd, 0xc0, 0x47, 0x0d, 0xaf, 0xe7, 0xe2, 0xa5, + 0xcf, 0x83, 0xf7, 0xc9, 0x9c, 0x9e, 0x3b, 0x9b, 0x7e, 0x97, 0xd3, 0x76, 0x53, 0x1d, 0x57, 0x79, + 0xd5, 0x76, 0xa5, 0xa1, 0xda, 0x16, 0x90, 0x2e, 0xc8, 0x7b, 0x0d, 0x5d, 0xb5, 0x9d, 0xcd, 0x18, + 0xcf, 0x50, 0x70, 0x71, 0x07, 0xba, 0x36, 0xcb, 0x72, 0xd0, 0x4c, 0x22, 0x4b, 0xe2, 0xc9, 0xbd, + 0x24, 0x84, 0xe8, 0xc6, 0xd5, 0x3f, 0x10, 0xe0, 0x0d, 0x01, 0x89, 0xd6, 0x1e, 0xc4, 0x07, 0x50, + 0x5e, 0x63, 0xa4, 0x81, 0x8f, 0x21, 0x8e, 0x7f, 0x4b, 0xd3, 0xb5, 0x1b, 0xaf, 0x6b, 0x9d, 0x07, + 0x33, 0x67, 0xf1, 0xc9, 0x5d, 0xeb, 0xbf, 0xee, 0xc3, 0xa5, 0xe2, 0xc3, 0xa8, 0x28, 0x11, 0x6a, + 0x52, 0xe2, 0x09, 0x7f, 0x53, 0x94, 0xac, 0x4b, 0x1e, 0x34, 0x31, 0x4a, 0xa5, 0x22, 0x0e, 0x31, + 0x7a, 0xa9, 0x28, 0x9b, 0xdf, 0xcd, 0x13, 0x0d, 0x9a, 0x86, 0xa2, 0x5a, 0x68, 0x0d, 0x45, 0xe5, + 0xfe, 0x99, 0xec, 0x5b, 0x5f, 0xee, 0x36, 0x45, 0xa4, 0xf2, 0x0c, 0x08, 0x10, 0x4f, 0xc6, 0x51, + 0x84, 0x8a, 0x2b, 0x50, 0x01, 0x31, 0x2c, 0x50, 0xc1, 0x02, 0x81, 0x30, 0x48, 0x89, 0x39, 0x88, + 0x14, 0x8b, 0xbc, 0x48, 0xaa, 0xc4, 0x9f, 0xa3, 0xc9, 0xc0, 0xf8, 0x71, 0xca, 0x0a, 0x16, 0xbc, + 0xf3, 0x5f, 0xac, 0x55, 0x12, 0xfe, 0x50, 0x23, 0x3d, 0x89, 0xd2, 0x76, 0x59, 0xfc, 0xce, 0x8a, + 0x3d, 0x7b, 0x0b, 0x90, 0x68, 0x6d, 0xfb, 0xf5, 0x44, 0xf3, 0xab, 0xb2, 0x39, 0xd1, 0x91, 0x41, + 0xf1, 0x27, 0xba, 0x22, 0xe8, 0xc0, 0x9d, 0x75, 0xa4, 0x5b, 0x99, 0x15, 0xce, 0x0f, 0xde, 0xe1, + 0xd3, 0x0d, 0xa3, 0x04, 0x68, 0xc8, 0x6d, 0xf3, 0x8c, 0x8f, 0xea, 0x2a, 0x5f, 0x2e, 0x34, 0xd8, + 0x78, 0x42, 0xfa, 0x65, 0x5a, 0xdb, 0x27, 0x1a, 0xd2, 0xaf, 0xfb, 0x48, 0xfa, 0x8d, 0xd3, 0x36, + 0x21, 0xfd, 0xb6, 0xa0, 0x7c, 0x3c, 0x5c, 0x72, 0x62, 0x9b, 0x22, 0xcd, 0xb2, 0x63, 0x25, 0xd0, + 0xba, 0x09, 0x98, 0x74, 0x37, 0xdd, 0xc8, 0x06, 0xde, 0x4d, 0x0f, 0xef, 0xb3, 0xbe, 0xeb, 0x24, + 0x8f, 0x10, 0x31, 0x20, 0x89, 0x98, 0xc3, 0x8e, 0x0f, 0x85, 0x7c, 0xc4, 0x1c, 0x76, 0x7c, 0x28, + 0xe6, 0x0f, 0x0c, 0xdc, 0x51, 0x61, 0x99, 0x39, 0xd0, 0x1c, 0xdd, 0x88, 0xa8, 0x80, 0x2a, 0xe6, + 0x0f, 0x2c, 0x9c, 0x48, 0x32, 0xeb, 0xc9, 0xe8, 0x4b, 0x04, 0x02, 0xf4, 0xbc, 0x41, 0xaf, 0x8d, + 0xcd, 0xca, 0xd9, 0xed, 0xf8, 0x3a, 0xae, 0xdc, 0x4e, 0xa1, 0xb2, 0x9b, 0xd6, 0x38, 0xf5, 0xa9, + 0x79, 0xb9, 0xda, 0x7f, 0x49, 0x61, 0xf2, 0xb3, 0x6c, 0x61, 0x72, 0xb7, 0x1d, 0xe5, 0xd1, 0x0f, + 0x4e, 0x44, 0x96, 0x5c, 0x75, 0xa1, 0x99, 0x96, 0xa6, 0x62, 0x45, 0x96, 0xea, 0x37, 0x5b, 0x95, + 0x45, 0x9d, 0x93, 0x0b, 0x59, 0x54, 0x41, 0x9d, 0x73, 0x1f, 0xb6, 0x9c, 0x32, 0x80, 0x78, 0xf5, + 0x53, 0x46, 0xb1, 0x43, 0x24, 0xc1, 0xaf, 0x2e, 0xbe, 0xbf, 0xd9, 0x80, 0x82, 0x0e, 0x52, 0xc0, + 0xf3, 0x57, 0x79, 0xe8, 0xae, 0x9a, 0x46, 0xc5, 0x1f, 0xae, 0xdd, 0xf6, 0xd3, 0x50, 0x3c, 0x11, + 0x89, 0xed, 0xc2, 0x6b, 0xcb, 0x14, 0xe7, 0x36, 0x01, 0x15, 0x62, 0x62, 0xe0, 0xa4, 0xf0, 0x0e, + 0x55, 0x5e, 0xeb, 0xd5, 0x0b, 0xa5, 0xa7, 0x68, 0x88, 0x1d, 0x9a, 0x9d, 0x28, 0xfd, 0x56, 0xbf, + 0xd6, 0x79, 0x30, 0x39, 0xdc, 0x0e, 0x61, 0x95, 0x30, 0x56, 0xcb, 0x79, 0xa3, 0x4f, 0xba, 0xaf, + 0x33, 0x73, 0xf6, 0x22, 0xdf, 0x06, 0x52, 0x16, 0xe5, 0x83, 0x49, 0x4e, 0x07, 0x6d, 0x8c, 0x34, + 0xf8, 0xf4, 0x8f, 0x88, 0x2b, 0x79, 0xcd, 0xc3, 0x45, 0x2c, 0x62, 0x84, 0xc7, 0x39, 0xcd, 0x63, + 0x7a, 0x0e, 0x9d, 0xe3, 0x61, 0x43, 0xe7, 0x00, 0xf3, 0x1c, 0xc1, 0x8f, 0xae, 0x13, 0x4c, 0x77, + 0xd2, 0x36, 0xaa, 0x06, 0x05, 0x55, 0xfe, 0x48, 0x40, 0x57, 0x04, 0xaf, 0x33, 0x8e, 0xa4, 0xd7, + 0x05, 0x88, 0x69, 0x92, 0x3a, 0x79, 0x36, 0x39, 0x7c, 0x0d, 0xd2, 0xec, 0xc2, 0x04, 0xb5, 0xa1, + 0xd7, 0xe1, 0x8f, 0x72, 0x37, 0x8d, 0xdb, 0x4e, 0xd2, 0xc0, 0xc2, 0x5b, 0x23, 0xfa, 0xb9, 0xfe, + 0x8f, 0xd3, 0x3d, 0x6d, 0x70, 0x3a, 0x28, 0x77, 0x43, 0xe3, 0x4c, 0xd7, 0xab, 0xda, 0x5b, 0x1f, + 0x25, 0x07, 0x0f, 0x6a, 0xed, 0x7b, 0x32, 0xfd, 0x83, 0x90, 0x46, 0x7d, 0x99, 0x76, 0xfd, 0xa3, + 0xcf, 0x5b, 0xf7, 0x26, 0x07, 0xdf, 0xd0, 0x2b, 0xe8, 0xa7, 0x7a, 0x5b, 0x33, 0x37, 0x8f, 0x2c, + 0xc7, 0x3d, 0xf6, 0x76, 0xe0, 0xa3, 0x0a, 0xf9, 0xa2, 0x67, 0x58, 0x40, 0xa5, 0x76, 0x63, 0xbe, + 0x2d, 0xc4, 0x9a, 0xe7, 0xb4, 0x0b, 0x4d, 0x35, 0x5d, 0x14, 0x89, 0xcf, 0xa0, 0xe9, 0x71, 0xbe, + 0x40, 0x67, 0x68, 0x12, 0xef, 0x33, 0xbb, 0x4e, 0x9a, 0xa2, 0x5f, 0x24, 0xd5, 0xd5, 0xfa, 0xb2, + 0x6b, 0xc5, 0xcd, 0x68, 0xa6, 0xa9, 0x88, 0x63, 0x77, 0xa2, 0x15, 0x5b, 0x6b, 0xa5, 0xe9, 0xc6, + 0xcd, 0x14, 0xbd, 0x44, 0xb1, 0xc0, 0x88, 0x35, 0x76, 0x76, 0x75, 0x32, 0x3e, 0x93, 0x5d, 0xdd, + 0xe8, 0xca, 0x2e, 0xab, 0x19, 0x56, 0x35, 0x90, 0xdb, 0x6b, 0x9e, 0x3e, 0xd7, 0x86, 0x9a, 0xd6, + 0x8f, 0x0a, 0xe8, 0x8e, 0xf5, 0x91, 0xa0, 0xa2, 0x6b, 0x4f, 0x34, 0xab, 0xc0, 0x63, 0x28, 0x1f, + 0x9f, 0x20, 0xc8, 0x4d, 0xb1, 0xcd, 0xd1, 0xcc, 0xa6, 0x09, 0x71, 0xbc, 0x27, 0x8d, 0x44, 0x19, + 0x4d, 0xa6, 0x87, 0x12, 0x2a, 0x9b, 0xc7, 0xdd, 0x9e, 0xb5, 0xf3, 0x6c, 0x40, 0x77, 0x3a, 0xc0, + 0x88, 0xa5, 0x10, 0x83, 0x8f, 0x7b, 0x8d, 0xa2, 0xff, 0xe6, 0x43, 0xde, 0xba, 0x4c, 0x21, 0x6f, + 0x3d, 0xff, 0xb9, 0x00, 0xcd, 0xa8, 0x8d, 0xf9, 0x43, 0x24, 0x72, 0x00, 0x93, 0x4b, 0xaf, 0xa0, + 0x42, 0x1a, 0x7b, 0x81, 0xde, 0x89, 0x57, 0x6f, 0x55, 0xe5, 0x5f, 0x7a, 0xf5, 0x42, 0xa9, 0x9e, + 0x8f, 0xb7, 0x51, 0x57, 0x6f, 0x84, 0x75, 0x54, 0xbb, 0x68, 0x0d, 0x78, 0xa3, 0x81, 0xc7, 0xd4, + 0x50, 0xd7, 0x68, 0x6b, 0x67, 0x72, 0xb0, 0xf5, 0xd6, 0x48, 0x17, 0x24, 0xe5, 0xb7, 0xc2, 0xf8, + 0xf4, 0xbe, 0xc5, 0x2d, 0xd6, 0x7c, 0x8f, 0x8f, 0x90, 0xcc, 0x23, 0x86, 0x91, 0xf8, 0xee, 0x68, + 0x24, 0x98, 0xb9, 0xb9, 0x27, 0x7d, 0x61, 0x38, 0x2b, 0xa0, 0x85, 0x0e, 0x42, 0x2e, 0x20, 0xdd, + 0x02, 0x6f, 0x1d, 0x8e, 0xa1, 0x02, 0x8c, 0x0f, 0x7c, 0x3e, 0xc3, 0x33, 0xfa, 0xa5, 0x2a, 0xff, + 0xc2, 0x0b, 0x25, 0xfa, 0x74, 0xb8, 0x01, 0x99, 0x26, 0x63, 0x9a, 0xe6, 0xb8, 0xa6, 0x03, 0x1d, + 0x8b, 0xb3, 0x50, 0xc1, 0x76, 0x92, 0xce, 0x1c, 0xef, 0x38, 0x85, 0x3e, 0xf8, 0x21, 0x2e, 0x41, + 0x62, 0x43, 0xcc, 0x1f, 0x50, 0xea, 0x95, 0x58, 0x28, 0x12, 0xdc, 0xa8, 0x04, 0x22, 0xe1, 0x60, + 0x9c, 0xbe, 0x82, 0xb5, 0xa9, 0x11, 0x97, 0xa2, 0x3b, 0x42, 0x0d, 0xe1, 0x48, 0x4c, 0x91, 0x1b, + 0x1b, 0x6b, 0xfd, 0x4a, 0x53, 0x24, 0xbc, 0x51, 0x49, 0xc4, 0xc9, 0x66, 0x54, 0xe8, 0xb3, 0xab, + 0xc2, 0xeb, 0x8d, 0x8f, 0x3e, 0x91, 0x66, 0x70, 0x6b, 0x9a, 0xea, 0x63, 0x3f, 0xc5, 0x32, 0x34, + 0x3d, 0x48, 0x72, 0x86, 0xaf, 0x8d, 0x04, 0xfc, 0x8d, 0x58, 0x68, 0xc1, 0x4d, 0x80, 0x2f, 0xbb, + 0x18, 0xd3, 0x53, 0x5c, 0x69, 0x54, 0x02, 0x89, 0x08, 0x8d, 0x5f, 0xea, 0xd3, 0x7f, 0x13, 0xa7, + 0x7a, 0x3c, 0x3e, 0x5a, 0x8d, 0xa8, 0x53, 0xbd, 0x51, 0x44, 0xbe, 0x13, 0x8a, 0xfb, 0xb7, 0x35, + 0x2a, 0xab, 0x5a, 0x42, 0x01, 0xc2, 0xb0, 0x53, 0xe8, 0x77, 0xcc, 0xc5, 0xe2, 0x4f, 0xd1, 0xc2, + 0xf8, 0xce, 0x50, 0xf4, 0x67, 0xfe, 0x50, 0x62, 0x75, 0x24, 0x06, 0x09, 0xcd, 0x37, 0xc1, 0x68, + 0x19, 0x6a, 0x8a, 0xc9, 0x1c, 0xc6, 0x02, 0x13, 0xe7, 0xa0, 0x49, 0xc1, 0xd8, 0x2e, 0x5f, 0x73, + 0x18, 0x0c, 0xe2, 0x3e, 0xfa, 0xcb, 0xd3, 0xe6, 0x42, 0x33, 0x39, 0x1a, 0xbf, 0xdd, 0xdc, 0x04, + 0xb0, 0xea, 0x79, 0xcf, 0x38, 0x24, 0xc5, 0x58, 0x1a, 0x67, 0xa7, 0x0b, 0x4d, 0xc3, 0xcd, 0x8c, + 0x1c, 0x97, 0xe2, 0x13, 0xd9, 0x32, 0x03, 0xd2, 0x73, 0xe8, 0x85, 0x52, 0x31, 0x4f, 0xdb, 0x8c, + 0xa9, 0x0c, 0xb9, 0xf2, 0x12, 0x9a, 0xc2, 0x67, 0xe6, 0x04, 0xa9, 0x56, 0x69, 0x37, 0x56, 0xe3, + 0xa3, 0x4b, 0xb8, 0x1c, 0x9b, 0xf0, 0x62, 0x0a, 0xee, 0x46, 0xf9, 0x24, 0x9d, 0x34, 0x24, 0x4e, + 0xea, 0xea, 0xc5, 0xcc, 0x85, 0x77, 0xd8, 0xdd, 0x28, 0x07, 0x50, 0xfa, 0x04, 0x9a, 0x91, 0xdd, + 0x8d, 0xcd, 0x33, 0xaa, 0x59, 0xfc, 0x33, 0xaa, 0x22, 0xee, 0x99, 0x94, 0xe7, 0x5f, 0x08, 0x68, + 0x1e, 0x24, 0x61, 0x35, 0x0f, 0x4e, 0xb7, 0x69, 0x6e, 0xb4, 0x3e, 0xbf, 0x7b, 0x50, 0x95, 0x1f, + 0xe0, 0xa5, 0xd0, 0x02, 0x9a, 0x33, 0x79, 0xfc, 0x22, 0x68, 0x3d, 0x13, 0x41, 0x0e, 0x26, 0x2f, + 0xf3, 0x58, 0xe8, 0x03, 0x59, 0x10, 0x51, 0xc5, 0x7c, 0x98, 0x0d, 0x2a, 0x5e, 0x3c, 0xbf, 0x73, + 0xa1, 0xf9, 0x0e, 0xb3, 0xf8, 0x3d, 0x25, 0x72, 0x76, 0x1d, 0x90, 0x1b, 0x2d, 0xd2, 0x1c, 0x7e, + 0xe9, 0x0c, 0xba, 0xb2, 0x7a, 0x0e, 0xa4, 0x04, 0x54, 0x84, 0x3b, 0x59, 0xeb, 0xdf, 0xa6, 0x34, + 0x7e, 0x65, 0x76, 0xf9, 0x15, 0x9a, 0xd4, 0x88, 0x3b, 0x62, 0x04, 0x70, 0xaf, 0xdd, 0x84, 0xc9, + 0xa7, 0x96, 0x90, 0xff, 0x53, 0xfe, 0x80, 0x37, 0xc7, 0xd0, 0x52, 0x67, 0x8d, 0x33, 0xfb, 0xd3, + 0x7d, 0x9f, 0xb2, 0x2b, 0x5e, 0xa8, 0x2b, 0x7d, 0x14, 0x4d, 0xe1, 0xda, 0x4d, 0x88, 0x21, 0xae, + 0x0b, 0xe8, 0x4e, 0x03, 0x67, 0xd0, 0x0b, 0xe3, 0x85, 0x3a, 0x46, 0xb6, 0x82, 0x7d, 0xa8, 0x31, + 0xbd, 0xc5, 0x98, 0x14, 0x6b, 0x66, 0x2b, 0xd7, 0xd7, 0xc3, 0x56, 0x9e, 0xbf, 0x74, 0xa1, 0x12, + 0xeb, 0xd8, 0x7f, 0x5f, 0x39, 0xa0, 0x46, 0x95, 0x9f, 0x42, 0x4f, 0x78, 0x1d, 0x31, 0x22, 0xcd, + 0xe4, 0x11, 0x4c, 0x28, 0xc7, 0x4a, 0xf7, 0x6f, 0x51, 0xba, 0xdf, 0xe4, 0x0f, 0x85, 0x13, 0x5f, + 0x99, 0xee, 0xd7, 0xa3, 0x49, 0x09, 0xdc, 0x11, 0xa3, 0xfb, 0xd9, 0x56, 0x9b, 0x44, 0x28, 0x9c, + 0xa0, 0x74, 0x0e, 0x90, 0x3a, 0x9d, 0x5f, 0x39, 0xab, 0x07, 0xac, 0xf2, 0xd1, 0xba, 0x2c, 0x62, + 0x25, 0x8d, 0x27, 0x44, 0xac, 0xf0, 0xb9, 0xef, 0x86, 0x58, 0xff, 0x9d, 0x89, 0x58, 0xd9, 0xd8, + 0x7f, 0x5f, 0x89, 0x95, 0xe6, 0x7d, 0x72, 0xc4, 0x88, 0x24, 0xf2, 0x08, 0x86, 0xe5, 0xb7, 0x52, + 0xeb, 0x93, 0x68, 0xea, 0x4f, 0x15, 0x7f, 0x63, 0x62, 0x07, 0x25, 0x02, 0x96, 0x01, 0xd7, 0x5c, + 0x2a, 0x95, 0x68, 0x7b, 0xce, 0x6b, 0x43, 0x9f, 0xa4, 0xde, 0x69, 0x4d, 0x9d, 0x3e, 0x9f, 0x3a, + 0x74, 0x5e, 0xeb, 0x7e, 0x87, 0xe6, 0x10, 0xda, 0xe7, 0x42, 0xd3, 0x18, 0xec, 0x77, 0xb0, 0x14, + 0xab, 0x51, 0x91, 0xfe, 0x92, 0x80, 0x9e, 0x6b, 0x49, 0xc8, 0x0a, 0xa3, 0x54, 0x2a, 0xe1, 0x17, + 0xa4, 0x2c, 0x11, 0x6b, 0x56, 0x2a, 0x89, 0x8f, 0xce, 0x62, 0x9f, 0x01, 0xc4, 0xde, 0xf8, 0x64, + 0x4d, 0xc5, 0x76, 0xde, 0x0e, 0x9e, 0x72, 0x07, 0x05, 0xb8, 0xfe, 0x66, 0xe9, 0x61, 0x37, 0x06, + 0x76, 0x28, 0x4d, 0xba, 0xbd, 0x6a, 0x49, 0xb6, 0xff, 0x27, 0xf1, 0x9e, 0xd3, 0xfd, 0x3f, 0x27, + 0x25, 0x87, 0x8e, 0x90, 0x80, 0x1f, 0x2c, 0xa2, 0x00, 0x1d, 0x8f, 0x73, 0x8f, 0xd2, 0x02, 0xfa, + 0x12, 0x1d, 0x62, 0x45, 0x5f, 0x3c, 0x6b, 0x84, 0x4f, 0x85, 0x85, 0xb9, 0x64, 0x4e, 0x4d, 0xfc, + 0x95, 0x86, 0x93, 0xe3, 0x3e, 0xcf, 0x64, 0xbe, 0x86, 0xf7, 0x52, 0xcb, 0x55, 0x79, 0x29, 0x5a, + 0xe2, 0x75, 0xfc, 0x3a, 0x73, 0x5b, 0xe4, 0x87, 0xee, 0xf9, 0xa3, 0x3c, 0x54, 0xfa, 0x6c, 0xb3, + 0x12, 0xdb, 0x55, 0xaf, 0xc4, 0x9a, 0xaa, 0x77, 0xc9, 0xe4, 0x84, 0x53, 0x57, 0xeb, 0x53, 0x7e, + 0x43, 0x8e, 0x54, 0x8f, 0x20, 0x44, 0xdd, 0x89, 0xb6, 0xb2, 0xd8, 0x4a, 0xd4, 0x0b, 0xce, 0x28, + 0x96, 0x0a, 0xad, 0x29, 0x79, 0x82, 0xb8, 0x25, 0x65, 0x36, 0xdc, 0x92, 0xf7, 0x9f, 0x33, 0x8a, + 0xed, 0xe2, 0x41, 0x04, 0xc5, 0x65, 0x74, 0xd2, 0xdc, 0x63, 0x1f, 0x98, 0xb4, 0xa8, 0x1d, 0xb9, + 0x81, 0x67, 0xfc, 0xde, 0xd0, 0xe8, 0xf1, 0x8f, 0x4c, 0x57, 0x99, 0x4f, 0xa0, 0x29, 0x09, 0x1a, + 0x2f, 0x17, 0x7f, 0x2d, 0xdf, 0x68, 0xc9, 0x97, 0x4b, 0x53, 0x52, 0x17, 0xcf, 0xa6, 0x4e, 0xde, + 0x1c, 0x7d, 0x6b, 0x5f, 0x5d, 0xad, 0x0f, 0xb1, 0x9a, 0xba, 0xa0, 0xf8, 0x18, 0x42, 0xd4, 0xc3, + 0x16, 0x37, 0x2f, 0x30, 0x1c, 0x7e, 0xb9, 0x62, 0xf2, 0x8a, 0x02, 0x82, 0x8b, 0xf1, 0xaf, 0x28, + 0x70, 0xe3, 0x42, 0x30, 0x53, 0x46, 0x62, 0xd4, 0xdc, 0x4a, 0x3c, 0x41, 0xf4, 0x42, 0xee, 0xaa, + 0x86, 0x85, 0x3b, 0xd3, 0xeb, 0x58, 0x3c, 0xb2, 0x1c, 0x6b, 0x20, 0x2d, 0x80, 0x6c, 0xff, 0x40, + 0x5f, 0xe9, 0x9e, 0xb6, 0xe4, 0xe0, 0x6b, 0xc9, 0xc1, 0x03, 0xa9, 0x63, 0x34, 0xcb, 0x84, 0xe7, + 0x0d, 0x97, 0xd3, 0x12, 0x12, 0x9a, 0x7b, 0x14, 0x15, 0xfa, 0x69, 0x11, 0x5d, 0x40, 0x82, 0x18, + 0xbd, 0x50, 0x9a, 0x06, 0xfd, 0xb3, 0xdf, 0x3e, 0xbd, 0x46, 0xdc, 0x81, 0x0a, 0xa3, 0x4a, 0xac, + 0x69, 0x6b, 0x20, 0xf1, 0x32, 0x8d, 0xeb, 0xe0, 0xcd, 0x96, 0xa0, 0xce, 0xe3, 0xa6, 0x89, 0x77, + 0x58, 0x07, 0x92, 0xc8, 0x4f, 0x83, 0xd9, 0xea, 0x71, 0x6d, 0x4d, 0xe2, 0xe5, 0xaa, 0x67, 0x55, + 0x79, 0x3d, 0x5a, 0xeb, 0xcd, 0x31, 0x0f, 0xe6, 0x3d, 0x0b, 0xb1, 0xec, 0xf8, 0xbe, 0x3e, 0x13, + 0xf4, 0x11, 0x7f, 0x26, 0xe8, 0xdf, 0xf3, 0x1c, 0x11, 0x50, 0x01, 0xee, 0x29, 0x2e, 0x3e, 0x84, + 0x0a, 0x70, 0x29, 0xdb, 0x60, 0x2d, 0x21, 0x03, 0x09, 0x14, 0xfc, 0x9f, 0xa8, 0xa1, 0x3e, 0x00, + 0x2f, 0xad, 0x47, 0xc8, 0x28, 0xb4, 0xd1, 0x4d, 0xcb, 0xcd, 0x31, 0x2f, 0xe6, 0x2c, 0x69, 0x88, + 0x44, 0x1a, 0x1a, 0x95, 0x25, 0xd1, 0x58, 0x24, 0x11, 0xd9, 0xd6, 0xbc, 0x7d, 0xc9, 0x16, 0x5c, + 0xcb, 0xeb, 0xac, 0x47, 0x04, 0x34, 0xd7, 0x76, 0x8a, 0x5f, 0x52, 0x84, 0x57, 0xd3, 0xed, 0x0d, + 0x06, 0x30, 0xdb, 0x76, 0x62, 0x36, 0x1b, 0x1a, 0xff, 0x6a, 0xc5, 0xa3, 0xba, 0x10, 0xaa, 0x89, + 0x34, 0x35, 0x45, 0xc2, 0x78, 0x18, 0xdf, 0xf7, 0x0d, 0xbd, 0xd6, 0xb4, 0xa1, 0xdf, 0x69, 0x41, + 0xf9, 0xc6, 0x44, 0xac, 0x39, 0x90, 0x18, 0x6b, 0x13, 0x67, 0xe9, 0xb4, 0x8d, 0x79, 0x4b, 0xc5, + 0xa3, 0xad, 0x3d, 0xe9, 0x37, 0xa8, 0x43, 0xb6, 0xe7, 0x1d, 0x17, 0x9a, 0x06, 0x95, 0x74, 0x27, + 0xf8, 0xde, 0x23, 0x66, 0x8d, 0x09, 0x31, 0xa5, 0x16, 0xc4, 0xe0, 0x79, 0x10, 0x7a, 0x1c, 0x0b, + 0x37, 0x8b, 0x55, 0xf9, 0x3e, 0xb4, 0xc8, 0x9b, 0x35, 0x7d, 0x49, 0x04, 0xfc, 0xf0, 0x6e, 0xeb, + 0x9e, 0xb5, 0x88, 0x3c, 0xce, 0xad, 0x7e, 0x86, 0xa6, 0xee, 0x03, 0x55, 0x86, 0xc6, 0x20, 0xb1, + 0xa9, 0x62, 0xc9, 0xda, 0x93, 0x43, 0x47, 0x20, 0x24, 0xaf, 0x69, 0xe7, 0x3c, 0x91, 0x4f, 0x23, + 0x23, 0xd4, 0x6c, 0x8a, 0x44, 0x23, 0x8d, 0x91, 0x86, 0x5d, 0x4c, 0x84, 0xdd, 0x10, 0xac, 0xb6, + 0x8d, 0x53, 0x82, 0x2a, 0xb7, 0x0a, 0xbc, 0x66, 0x1b, 0x67, 0x9b, 0x49, 0x39, 0x38, 0x70, 0xa5, + 0x0e, 0x74, 0x6a, 0x87, 0x86, 0x69, 0xba, 0xcd, 0x81, 0xeb, 0xda, 0xd0, 0x1b, 0x44, 0x78, 0xf6, + 0x68, 0xaf, 0x9d, 0x4d, 0x1d, 0x78, 0x3d, 0xd5, 0x79, 0xe4, 0xf3, 0xd6, 0xbd, 0xe0, 0x12, 0x9c, + 0x3a, 0x7e, 0x26, 0x75, 0xb4, 0x83, 0x35, 0x4f, 0x1d, 0xbf, 0x96, 0x1c, 0xe9, 0xc1, 0xad, 0xbb, + 0x8f, 0x81, 0x6b, 0x16, 0x49, 0x8f, 0x64, 0xdb, 0xc5, 0x17, 0xd5, 0x77, 0xc6, 0x66, 0xcf, 0x10, + 0x4a, 0x82, 0xd2, 0xf4, 0x5f, 0x3d, 0xbf, 0xb4, 0xe2, 0x51, 0x7f, 0xc5, 0x6e, 0xb9, 0xe2, 0xb9, + 0x8a, 0x17, 0x1e, 0x58, 0xc4, 0x5b, 0x51, 0xb0, 0x28, 0x82, 0x8c, 0x4d, 0x40, 0x09, 0xaf, 0xa8, + 0xf2, 0xcb, 0x2c, 0x63, 0x53, 0x24, 0xd0, 0x14, 0xdc, 0xc6, 0xb2, 0x36, 0x95, 0xa5, 0x4e, 0x1f, + 0x4e, 0x0e, 0xbd, 0x05, 0x0e, 0xcb, 0xc9, 0xc1, 0x03, 0x90, 0x6c, 0x82, 0x65, 0x0a, 0xba, 0x96, + 0x1c, 0x3e, 0xc6, 0x20, 0xd3, 0x3d, 0x6d, 0x30, 0x02, 0x3d, 0x6b, 0x25, 0x15, 0x8f, 0x3d, 0x6d, + 0xa9, 0x37, 0x07, 0xe8, 0xa4, 0x49, 0x0c, 0x29, 0x68, 0xa1, 0x1d, 0x79, 0x13, 0xe0, 0x59, 0xb2, + 0xa7, 0x1d, 0x68, 0xca, 0xf6, 0x50, 0x23, 0x79, 0x8e, 0x99, 0x50, 0xe0, 0xb9, 0xa2, 0x1d, 0xd9, + 0x54, 0x47, 0x22, 0x8d, 0x40, 0x36, 0xe4, 0x99, 0x3b, 0xdf, 0x46, 0x2a, 0x01, 0xaf, 0x5d, 0xed, + 0x4a, 0x77, 0xe6, 0x8d, 0x1b, 0x64, 0x57, 0xfe, 0x30, 0xd5, 0x3b, 0x94, 0xba, 0x72, 0xc6, 0xc7, + 0x83, 0x55, 0x55, 0xab, 0xf2, 0x93, 0x68, 0xa5, 0xd7, 0x7e, 0x6d, 0x75, 0x6f, 0x47, 0x32, 0xca, + 0xe4, 0xe0, 0x30, 0xee, 0xe1, 0xe2, 0x59, 0xed, 0xe4, 0x71, 0x18, 0x2e, 0xa5, 0x8d, 0xf7, 0x0a, + 0xd0, 0xbc, 0x35, 0x4a, 0xa2, 0x7a, 0xe7, 0xc6, 0x48, 0x34, 0xce, 0x42, 0xe3, 0x03, 0x6d, 0xb2, + 0x5d, 0x0e, 0x6d, 0x6b, 0x8e, 0x87, 0xc2, 0x4a, 0x3c, 0xae, 0x93, 0x08, 0xa8, 0x1b, 0x46, 0xb1, + 0x54, 0xc8, 0xb0, 0xe7, 0xe3, 0x4a, 0xc5, 0x5f, 0x71, 0xfb, 0xb7, 0xcb, 0x78, 0xb2, 0x63, 0xec, + 0xdf, 0xcb, 0x33, 0x03, 0xe7, 0x61, 0xdb, 0xd1, 0x7a, 0x2f, 0x82, 0x93, 0x0f, 0x1b, 0xee, 0x81, + 0x54, 0x6f, 0x27, 0xec, 0x45, 0x18, 0xf1, 0x44, 0xbb, 0x60, 0xd7, 0x03, 0xac, 0xb9, 0xd8, 0x2b, + 0xa0, 0x69, 0x4c, 0xd7, 0xd8, 0x48, 0xd4, 0x32, 0xaa, 0xda, 0x24, 0x54, 0xf9, 0xe7, 0xde, 0xac, + 0x2a, 0x69, 0x35, 0xf4, 0x92, 0x3a, 0x79, 0x3e, 0x35, 0x74, 0xb8, 0xdc, 0xcd, 0xc6, 0x99, 0xea, + 0x38, 0x96, 0x69, 0x6d, 0x0f, 0x10, 0x9e, 0x84, 0x4c, 0x17, 0xa0, 0x74, 0xa5, 0x3e, 0xde, 0x93, + 0xbe, 0x78, 0x20, 0xd5, 0x71, 0x0c, 0xaf, 0x05, 0x09, 0x71, 0x06, 0x25, 0x70, 0x8b, 0x5a, 0xc8, + 0x9a, 0xfb, 0x26, 0x41, 0x53, 0xdf, 0x4f, 0x7c, 0x59, 0x1f, 0x14, 0xff, 0x49, 0x40, 0x05, 0xf1, + 0x40, 0x44, 0x0f, 0x3d, 0xf7, 0x37, 0x82, 0x2a, 0x8f, 0x08, 0x5e, 0x28, 0x93, 0x3e, 0x14, 0xb6, + 0xed, 0xdc, 0xba, 0x2d, 0xb4, 0x7b, 0x6b, 0x28, 0xe8, 0x4e, 0xbd, 0xd3, 0x9a, 0xfe, 0x08, 0x53, + 0x58, 0xf2, 0x46, 0x2f, 0x16, 0x05, 0xa7, 0x4f, 0x2f, 0x31, 0x3c, 0xbf, 0x31, 0x19, 0x63, 0xc0, + 0xf2, 0x54, 0xdf, 0xb9, 0xd4, 0xf1, 0x6b, 0x3a, 0x6c, 0xea, 0xcd, 0x81, 0xf4, 0xf0, 0x11, 0x88, + 0xce, 0xea, 0xae, 0x59, 0x57, 0x5b, 0xed, 0x06, 0xdc, 0xb9, 0xeb, 0x6a, 0xdd, 0xc9, 0xc1, 0x21, + 0xb7, 0xd1, 0xbd, 0x9e, 0xdb, 0xb1, 0x1c, 0xe3, 0xb8, 0x75, 0x04, 0xd7, 0x52, 0x7d, 0xd2, 0x9d, + 0x3a, 0x7e, 0x4d, 0xeb, 0x38, 0x01, 0x9d, 0x02, 0x50, 0x8e, 0xf6, 0x84, 0x29, 0x7d, 0x85, 0x6c, + 0x44, 0xbe, 0xc9, 0xb4, 0x17, 0xdf, 0x4f, 0x7c, 0x30, 0xab, 0xaa, 0xe7, 0x55, 0xf9, 0xe7, 0x68, + 0x8b, 0x37, 0x27, 0x49, 0xe9, 0x4e, 0xce, 0xdc, 0xaa, 0x02, 0x35, 0x82, 0xb4, 0xfe, 0x4c, 0xe0, + 0x88, 0xe8, 0x33, 0x41, 0x5f, 0x6f, 0xcf, 0x75, 0x17, 0x9a, 0xef, 0xd0, 0xf1, 0x77, 0x70, 0x52, + 0x63, 0x71, 0x04, 0xf2, 0xec, 0x83, 0x23, 0xb1, 0xf1, 0x91, 0xf7, 0xad, 0x7c, 0xa8, 0x64, 0xd3, + 0xb4, 0x2d, 0x5a, 0x43, 0xd5, 0x66, 0x55, 0xf6, 0xa1, 0x7a, 0x6f, 0xee, 0x89, 0xda, 0xa2, 0x90, + 0xf4, 0xc5, 0x50, 0x68, 0x63, 0xbd, 0x2c, 0xe6, 0x87, 0x24, 0x7a, 0x50, 0x31, 0xa3, 0x57, 0xee, + 0x9e, 0xd0, 0x54, 0x26, 0x2e, 0x40, 0x86, 0x2e, 0xaf, 0xa7, 0xd5, 0x34, 0x4a, 0x70, 0x3d, 0x27, + 0x1b, 0x88, 0x6f, 0xb7, 0x49, 0x00, 0x78, 0x50, 0x31, 0xfb, 0x65, 0xbc, 0xa6, 0xf3, 0x99, 0xca, + 0xc4, 0x12, 0x34, 0x99, 0x38, 0x49, 0x44, 0x58, 0xa6, 0x4d, 0xf6, 0x53, 0x9c, 0x83, 0x26, 0x29, + 0xc1, 0x90, 0xae, 0xfc, 0xfb, 0xe8, 0x2f, 0x73, 0x90, 0xa7, 0xc9, 0x59, 0x49, 0x34, 0x3d, 0x49, + 0x3b, 0x81, 0xc6, 0x47, 0xd3, 0xfb, 0x0a, 0x02, 0xed, 0x51, 0x2b, 0x3e, 0x68, 0x53, 0xa3, 0x58, + 0x2a, 0x84, 0x45, 0x31, 0x1d, 0x84, 0xcc, 0xb2, 0x30, 0xef, 0xdb, 0x91, 0x85, 0xf9, 0xdf, 0x4b, + 0x59, 0x58, 0xf0, 0xa3, 0x2c, 0xe4, 0xa3, 0x28, 0x9a, 0x19, 0x99, 0x28, 0x45, 0xe3, 0x92, 0x85, + 0xff, 0xc1, 0x4e, 0x16, 0x7e, 0x67, 0x11, 0x16, 0x7f, 0xad, 0xcb, 0x42, 0xc1, 0xd6, 0x59, 0x98, + 0x8e, 0x0f, 0x3c, 0xc5, 0x88, 0x44, 0x24, 0xef, 0xf6, 0x40, 0x22, 0xde, 0x0f, 0x93, 0x87, 0x3e, + 0xd3, 0x3d, 0x6d, 0x5a, 0xfb, 0x45, 0xed, 0x4a, 0x2b, 0xc5, 0x85, 0x55, 0x40, 0x52, 0xb4, 0xe6, + 0x9e, 0x3d, 0xd3, 0x7e, 0x28, 0x5e, 0x2d, 0x3d, 0x3a, 0x89, 0xc9, 0x26, 0x24, 0x5a, 0x07, 0x2b, + 0xba, 0x0d, 0x2b, 0xc8, 0xe6, 0x58, 0x23, 0x0b, 0xf0, 0xc9, 0x15, 0x89, 0x0f, 0xa2, 0x49, 0xe4, + 0x30, 0xca, 0xcc, 0xda, 0xf3, 0x6d, 0xc2, 0x1d, 0x90, 0xb8, 0x53, 0x70, 0x72, 0xa5, 0xc0, 0x9e, + 0xad, 0x68, 0xaa, 0xa9, 0xc2, 0xe6, 0x2c, 0x6c, 0x17, 0x6c, 0x7b, 0x16, 0x2a, 0x08, 0x85, 0x83, + 0xca, 0xcb, 0x54, 0xe4, 0xc2, 0x0f, 0x0c, 0x19, 0x54, 0xe2, 0x01, 0x2a, 0x65, 0xc9, 0xdf, 0x9e, + 0x8c, 0x40, 0xc8, 0xa4, 0x2e, 0x1c, 0x56, 0x62, 0x6c, 0x62, 0xe4, 0x4b, 0xf1, 0xaf, 0x1a, 0x5c, + 0xf4, 0x61, 0x8b, 0x72, 0x07, 0xfe, 0x7b, 0xba, 0x40, 0x2b, 0xa6, 0x81, 0x53, 0x89, 0x4c, 0xe3, + 0x0c, 0x33, 0x34, 0x22, 0x71, 0xee, 0x61, 0x49, 0x4b, 0xe9, 0xfa, 0x91, 0xf0, 0xfb, 0x99, 0x9b, + 0x87, 0xd3, 0xc3, 0x1f, 0x11, 0xdf, 0x8b, 0xfe, 0xd4, 0xe0, 0x87, 0xa9, 0xd3, 0xaf, 0x33, 0x7e, + 0x79, 0x73, 0x74, 0x7f, 0x37, 0xd5, 0x64, 0xff, 0xb5, 0x0b, 0x2d, 0x70, 0xea, 0xf3, 0x3b, 0x60, + 0x89, 0x2d, 0x26, 0xf5, 0x60, 0xbe, 0x13, 0x4b, 0xc0, 0x11, 0xc0, 0x46, 0x3f, 0x80, 0xa9, 0x59, + 0xc9, 0x5f, 0x51, 0xe5, 0x6d, 0xe8, 0x45, 0xef, 0x18, 0x53, 0x95, 0x2a, 0xc6, 0x8f, 0x3f, 0xad, + 0x75, 0xc4, 0xca, 0x08, 0xbb, 0xd0, 0x54, 0x53, 0xcf, 0xb6, 0x91, 0xdf, 0x18, 0xc5, 0xb9, 0x0c, + 0x8a, 0xc3, 0xb4, 0x19, 0x53, 0xb6, 0x2b, 0x2c, 0xe8, 0x1b, 0xfc, 0xc0, 0xa5, 0x89, 0x98, 0x3f, + 0xcc, 0x62, 0xbf, 0xc3, 0x0f, 0xe3, 0x0e, 0xb2, 0x80, 0xbb, 0x83, 0xf4, 0xfc, 0x65, 0x01, 0x9a, + 0x53, 0xab, 0x6c, 0x6b, 0x6e, 0xa0, 0xec, 0x4d, 0xde, 0x09, 0x00, 0xb1, 0x3e, 0x65, 0xb3, 0x77, + 0xbb, 0x1d, 0xf7, 0x6e, 0x66, 0x14, 0xe4, 0xb7, 0xf0, 0xa7, 0x6c, 0xb6, 0x70, 0xb7, 0xe3, 0x16, + 0xae, 0xf7, 0xc0, 0xed, 0xe4, 0x5b, 0x2c, 0x3b, 0x79, 0x95, 0x2a, 0x2f, 0xe5, 0x08, 0x7f, 0x91, + 0xbe, 0x5d, 0xa7, 0x3a, 0x2f, 0x64, 0xce, 0x76, 0x65, 0x06, 0xce, 0x43, 0x7f, 0xe9, 0x9e, 0xb6, + 0x58, 0xe2, 0x65, 0x60, 0x08, 0x8b, 0xc1, 0xf2, 0xfb, 0xbe, 0x83, 0x77, 0x08, 0xa8, 0x30, 0x40, + 0x65, 0x15, 0x8d, 0xcd, 0xb7, 0xc2, 0x92, 0x24, 0xd2, 0x76, 0xd5, 0x74, 0xd9, 0x07, 0x57, 0xd8, + 0xf0, 0x98, 0x90, 0x75, 0x25, 0xdd, 0xcf, 0x93, 0x28, 0x75, 0x3d, 0x37, 0xf6, 0x00, 0x42, 0x9f, + 0x44, 0x6e, 0xfb, 0xf4, 0x26, 0xa5, 0x8f, 0x19, 0x52, 0x73, 0xc2, 0xb7, 0xdb, 0x55, 0x71, 0x55, + 0x8e, 0xa2, 0xb0, 0xd7, 0x81, 0xc2, 0xa4, 0x45, 0x99, 0xcb, 0xaf, 0x66, 0x06, 0x8e, 0x5a, 0x07, + 0x65, 0x7e, 0x23, 0x68, 0xda, 0x95, 0x39, 0xea, 0xe0, 0xb6, 0xe8, 0xcf, 0x04, 0x7d, 0xc4, 0x9e, + 0x7f, 0xeb, 0x42, 0x77, 0x5a, 0x3e, 0xf8, 0x1d, 0x08, 0xa5, 0x1d, 0xa6, 0x7d, 0xfa, 0x9e, 0x31, + 0xd6, 0x8f, 0x6c, 0xd4, 0xe4, 0x45, 0x32, 0x88, 0x26, 0x67, 0xdc, 0x70, 0x7b, 0x2a, 0x15, 0x53, + 0xbf, 0x52, 0xe5, 0xe7, 0xd1, 0x2f, 0xbc, 0x4e, 0xb3, 0xfe, 0xca, 0xf2, 0xe9, 0x49, 0x74, 0x87, + 0xcd, 0x68, 0xc5, 0x32, 0xfa, 0xd4, 0x42, 0x70, 0x7e, 0x6a, 0x01, 0x1e, 0xd0, 0x9e, 0x5b, 0x53, + 0xd0, 0x74, 0x62, 0x42, 0x5b, 0x17, 0x09, 0x36, 0x37, 0x2a, 0xab, 0x1b, 0xfd, 0x0d, 0xe2, 0xe6, + 0xec, 0x5b, 0xa4, 0xc7, 0x54, 0xf9, 0x11, 0xe3, 0x16, 0xa9, 0xa2, 0xba, 0x66, 0x23, 0x24, 0x35, + 0xd0, 0x53, 0xd9, 0x26, 0x87, 0x8e, 0xe8, 0x59, 0x63, 0x32, 0x07, 0xae, 0xa4, 0x8e, 0xed, 0xd7, + 0xb3, 0x85, 0x19, 0x97, 0x4d, 0x7e, 0x23, 0x3a, 0x32, 0xac, 0xd8, 0x1a, 0x55, 0xae, 0xf5, 0xb2, + 0x32, 0xe9, 0x51, 0xbd, 0x13, 0x78, 0x95, 0x5d, 0xa6, 0xbd, 0xbb, 0x77, 0xd3, 0x33, 0xab, 0xaa, + 0xdc, 0xcb, 0x96, 0x48, 0x4b, 0x97, 0x3c, 0x54, 0xbe, 0x6c, 0xc9, 0xb2, 0x47, 0x96, 0xac, 0xc0, + 0xff, 0xac, 0x58, 0xb2, 0xbc, 0x22, 0xb1, 0xf3, 0x91, 0x38, 0xfe, 0xfb, 0xa1, 0x25, 0xcb, 0x17, + 0xeb, 0x61, 0x96, 0xc5, 0x76, 0x01, 0x15, 0x36, 0x91, 0x89, 0xe8, 0x2f, 0x69, 0x48, 0xfa, 0x1b, + 0xbd, 0x50, 0x7a, 0x2e, 0x3d, 0xdc, 0x96, 0x1c, 0xbe, 0x06, 0xb7, 0x3b, 0x65, 0xcf, 0x34, 0x6f, + 0x53, 0xe4, 0xfa, 0xba, 0x8d, 0x4a, 0xac, 0x45, 0x89, 0xdd, 0x1a, 0xe9, 0xc2, 0xbf, 0x6b, 0x22, + 0xe1, 0x44, 0x2c, 0xd2, 0xd8, 0x48, 0x0a, 0x56, 0x25, 0x02, 0x41, 0x5a, 0xbe, 0x31, 0xb0, 0x43, + 0xc1, 0x9d, 0xe0, 0xe2, 0x9d, 0xcd, 0xdb, 0x94, 0x46, 0x25, 0xf1, 0x79, 0xeb, 0x9e, 0x18, 0x04, + 0x93, 0x4e, 0xf7, 0x75, 0x2e, 0xf6, 0xe9, 0x5f, 0x11, 0x57, 0xa0, 0xc2, 0xed, 0x8d, 0xfe, 0x06, + 0x2e, 0x76, 0x0a, 0x51, 0x26, 0xf4, 0x42, 0xa9, 0x08, 0x38, 0x48, 0x3b, 0x7c, 0xd0, 0xa7, 0x17, + 0x62, 0x5d, 0x02, 0xff, 0x5d, 0x8b, 0xf7, 0x12, 0x2e, 0xd0, 0x96, 0x5e, 0x28, 0x15, 0x43, 0x2b, + 0xea, 0xc5, 0xab, 0x97, 0x8b, 0xab, 0x51, 0x71, 0x50, 0xd9, 0xee, 0x6f, 0x6e, 0x04, 0xf5, 0x89, + 0xde, 0x12, 0x79, 0x54, 0x79, 0xa1, 0xd7, 0x54, 0x21, 0x4d, 0x87, 0x0e, 0xe0, 0x20, 0xa1, 0xb5, + 0x8e, 0xf8, 0x4c, 0xd5, 0x62, 0x15, 0x9a, 0xa4, 0x84, 0xc9, 0x95, 0x2b, 0x44, 0x55, 0x20, 0x3d, + 0xd0, 0x22, 0x69, 0x36, 0xb5, 0xc6, 0x1d, 0x26, 0x89, 0x84, 0x07, 0xce, 0x53, 0x79, 0x44, 0xab, + 0xc5, 0x87, 0x8d, 0x03, 0x6c, 0xa1, 0x71, 0x0b, 0xc4, 0xca, 0xa4, 0xe9, 0x2c, 0xa2, 0xf6, 0x5b, + 0xda, 0xf0, 0x50, 0xa6, 0xb5, 0xdd, 0x38, 0xdf, 0x3e, 0x8c, 0x26, 0x37, 0x93, 0xbb, 0x6e, 0x96, + 0x14, 0x1e, 0x1a, 0xd2, 0x32, 0xd6, 0x90, 0x5e, 0x7a, 0xe3, 0x86, 0xb4, 0x46, 0xac, 0x42, 0x45, + 0xa4, 0x0f, 0xe2, 0x67, 0x8f, 0x8c, 0x3b, 0x35, 0xa3, 0x54, 0x2a, 0x86, 0xef, 0xd1, 0x67, 0x08, + 0x46, 0x85, 0xb8, 0x12, 0x21, 0xe8, 0x86, 0x34, 0x9e, 0xc2, 0x3d, 0x62, 0x30, 0x8a, 0xa5, 0x62, + 0xf8, 0x28, 0x7b, 0xc4, 0x60, 0xd4, 0x88, 0x09, 0x58, 0x29, 0x2e, 0x62, 0x01, 0x79, 0x8c, 0xa9, + 0x17, 0x4a, 0x75, 0xa9, 0x33, 0xfb, 0x33, 0x03, 0xfb, 0x00, 0x47, 0x34, 0xd9, 0x52, 0x28, 0x9c, + 0x58, 0x2e, 0x55, 0x6e, 0x8b, 0x44, 0x1a, 0x2b, 0xe3, 0x89, 0x58, 0x28, 0xdc, 0x50, 0x19, 0x6c, + 0x06, 0xcf, 0x80, 0xca, 0x26, 0x7f, 0x94, 0x96, 0xc5, 0xd3, 0x7d, 0x9d, 0xda, 0xe9, 0xa1, 0xf4, + 0xd9, 0x56, 0x68, 0xb5, 0xd8, 0xa7, 0x77, 0x2a, 0xfa, 0xd0, 0x54, 0xfc, 0x37, 0x59, 0x2b, 0x12, + 0xa9, 0x60, 0x2a, 0xf1, 0xdb, 0x25, 0x6f, 0xa6, 0xcc, 0x35, 0x52, 0x09, 0xa5, 0x2f, 0x12, 0xba, + 0x04, 0x6f, 0x24, 0xad, 0x23, 0xf4, 0xac, 0x6c, 0x06, 0x14, 0x7f, 0x81, 0xf5, 0x94, 0x06, 0xe5, + 0x65, 0x12, 0xf5, 0x60, 0x8a, 0x54, 0x9a, 0x2d, 0x2a, 0xc8, 0x8e, 0xe1, 0xc3, 0x10, 0xe0, 0xa9, + 0x0e, 0xd0, 0xd2, 0x5c, 0x4a, 0x89, 0xbd, 0x9d, 0xa9, 0xa3, 0x1d, 0xa9, 0xd6, 0x0b, 0xa9, 0x33, + 0x67, 0x47, 0xdf, 0xef, 0xca, 0x5c, 0x68, 0xd3, 0x3a, 0x4e, 0xf8, 0x00, 0x46, 0x8c, 0xa0, 0x82, + 0x18, 0x89, 0x69, 0x38, 0xdd, 0x3e, 0x5c, 0xdf, 0xfa, 0xe6, 0xa6, 0x6d, 0x0a, 0xc4, 0x2e, 0x84, + 0x07, 0xd2, 0x00, 0x2e, 0x2d, 0xcd, 0x1c, 0xa0, 0xc4, 0x95, 0x1c, 0x1c, 0xc2, 0x93, 0x68, 0x1d, + 0x31, 0x84, 0x0b, 0x64, 0xf0, 0x86, 0x23, 0x0c, 0x79, 0xb6, 0x80, 0xa9, 0x18, 0x1a, 0x8a, 0x9f, + 0x0b, 0xe6, 0xec, 0x3b, 0x10, 0x2a, 0xe1, 0x8f, 0xe0, 0x8c, 0xcd, 0xd7, 0x48, 0x97, 0x04, 0xed, + 0xc6, 0xeb, 0x8c, 0x5b, 0x57, 0x52, 0x1e, 0x26, 0xe9, 0x97, 0x31, 0x61, 0x93, 0xa4, 0xfb, 0xe9, + 0x37, 0x4e, 0xa7, 0x8e, 0x76, 0x7c, 0xde, 0xba, 0x97, 0x6a, 0xfd, 0xf5, 0xfa, 0x18, 0xb8, 0x8e, + 0xaa, 0xdc, 0xa1, 0x68, 0xcb, 0x8a, 0xca, 0x50, 0xb4, 0xe5, 0xa1, 0xca, 0x60, 0xb3, 0xbf, 0xd1, + 0x0d, 0xe3, 0x03, 0x01, 0xa6, 0x4b, 0x47, 0x3e, 0xad, 0x16, 0xee, 0x90, 0xc4, 0x92, 0x00, 0x01, + 0xf9, 0x7c, 0xf9, 0x0b, 0x10, 0x53, 0x42, 0x4f, 0x7e, 0x0b, 0x3d, 0xe8, 0x0f, 0x5a, 0x70, 0xff, + 0xa6, 0x04, 0x42, 0x2c, 0xa8, 0x5e, 0xb6, 0xd4, 0x96, 0xee, 0x83, 0xd4, 0x75, 0xe9, 0xfe, 0xb3, + 0xe9, 0xc3, 0xfb, 0x20, 0x46, 0x29, 0x91, 0xbc, 0x78, 0x00, 0x20, 0xf3, 0xe0, 0x19, 0xf8, 0xe7, + 0x2e, 0x20, 0x5e, 0xe6, 0x22, 0xaf, 0x0b, 0x2a, 0xea, 0x22, 0xaf, 0x8b, 0xa3, 0x52, 0x4e, 0x1c, + 0xb9, 0x8c, 0x3a, 0x22, 0x71, 0x3c, 0x59, 0x12, 0x07, 0xb4, 0x5c, 0xb3, 0x34, 0x91, 0x74, 0x69, + 0x92, 0x3f, 0x96, 0xf1, 0x5f, 0x97, 0x22, 0xa5, 0x1c, 0x63, 0x15, 0x18, 0xdf, 0x24, 0xe4, 0xbf, + 0x28, 0x9b, 0xfc, 0x27, 0x91, 0xe0, 0x74, 0x59, 0x04, 0xbd, 0x94, 0x11, 0xf4, 0xe4, 0xb1, 0x08, + 0x9a, 0xd1, 0xe9, 0x32, 0x46, 0xa7, 0x85, 0x63, 0xd2, 0x29, 0xa3, 0xb4, 0xac, 0x34, 0x4f, 0x45, + 0x96, 0x34, 0x4f, 0x9e, 0x5a, 0x84, 0x8c, 0x2f, 0x89, 0xf3, 0x50, 0x51, 0x8b, 0xbf, 0x31, 0x14, + 0x24, 0xe2, 0x11, 0xf0, 0x6c, 0x14, 0xe4, 0x78, 0x8b, 0xb0, 0x0c, 0x4d, 0xe1, 0xbe, 0x8e, 0x15, + 0xbc, 0xa6, 0x50, 0x98, 0x74, 0x50, 0xe0, 0xc3, 0x7f, 0x92, 0x12, 0xff, 0xcb, 0x34, 0x42, 0x33, + 0xfe, 0xd3, 0x93, 0xca, 0x47, 0xf3, 0x6a, 0xc8, 0x73, 0xab, 0x2c, 0x02, 0x61, 0x87, 0x87, 0xdb, + 0x77, 0x77, 0xdf, 0x6b, 0xdd, 0xdd, 0xb7, 0x93, 0x57, 0x18, 0xfa, 0xee, 0x5e, 0xff, 0x75, 0xee, + 0xee, 0x90, 0xdb, 0x9b, 0x9e, 0x4f, 0xf4, 0xad, 0x7d, 0x2b, 0x50, 0x28, 0x4d, 0xe0, 0x6b, 0x1b, + 0xaa, 0x9c, 0x71, 0x57, 0xf5, 0x62, 0xe2, 0xa1, 0xc0, 0xc0, 0x25, 0x91, 0xe7, 0x43, 0x10, 0xc7, + 0x5f, 0x54, 0x17, 0xa8, 0x82, 0xab, 0x50, 0xf0, 0xe9, 0x50, 0xe2, 0x53, 0xdc, 0xc1, 0x8a, 0x8b, + 0x06, 0x6b, 0x1c, 0xac, 0x66, 0x9b, 0xbb, 0x61, 0x1b, 0xaa, 0x61, 0x5a, 0x08, 0xaa, 0xb2, 0x1f, + 0x6d, 0xf5, 0xe6, 0x24, 0x03, 0x69, 0x36, 0xb4, 0xc4, 0xcb, 0xc2, 0x75, 0xf7, 0x99, 0xc0, 0x16, + 0xf4, 0x33, 0x81, 0xe1, 0xfd, 0x33, 0x41, 0x9f, 0x3d, 0x6f, 0x7a, 0xd3, 0x04, 0x34, 0xdf, 0xe1, + 0x0b, 0xdf, 0xbe, 0x4a, 0xcf, 0x62, 0x63, 0xe6, 0x1e, 0x91, 0x74, 0xb7, 0xed, 0xa4, 0x73, 0xc7, + 0xc6, 0xfc, 0xfb, 0x7c, 0xe6, 0x18, 0xff, 0x83, 0x63, 0xa8, 0x57, 0x2c, 0xfc, 0xb4, 0xf5, 0x1b, + 0xe6, 0xa7, 0xef, 0x2f, 0x23, 0x19, 0x0a, 0xa6, 0x95, 0x91, 0x72, 0x2d, 0xbf, 0x34, 0x1b, 0x5a, + 0x7e, 0x79, 0x46, 0xfa, 0x9d, 0xc0, 0xde, 0x2c, 0x7c, 0x1f, 0x18, 0xc9, 0xa7, 0xca, 0x1b, 0xd0, + 0x3a, 0x6f, 0xee, 0x11, 0x49, 0x73, 0x6d, 0x27, 0xed, 0xe4, 0x43, 0xf9, 0x6f, 0xf2, 0xd1, 0x3c, + 0x78, 0x9f, 0xf4, 0x23, 0x0b, 0x7d, 0x9d, 0x2c, 0xb4, 0x01, 0x15, 0x33, 0x6d, 0x4d, 0x67, 0x23, + 0xfa, 0x14, 0xdc, 0x54, 0x21, 0x95, 0x98, 0x18, 0x86, 0x7f, 0x96, 0x67, 0x82, 0x9b, 0xf0, 0xde, + 0x73, 0x66, 0xf4, 0xc4, 0x39, 0x7b, 0x96, 0xc9, 0xb5, 0xdc, 0x78, 0xef, 0xc1, 0x2d, 0xbf, 0x1a, + 0xcb, 0x38, 0x7c, 0xe1, 0x3b, 0x64, 0x99, 0x9c, 0x23, 0x92, 0xe6, 0xda, 0x4e, 0xda, 0x89, 0x65, + 0xfe, 0x2c, 0x9f, 0xcb, 0xc4, 0xff, 0x23, 0xc3, 0xfc, 0x70, 0x19, 0x66, 0x9b, 0x2a, 0x6f, 0x45, + 0x2f, 0x78, 0x73, 0x2c, 0xb6, 0x34, 0x5b, 0xf7, 0x6a, 0xfb, 0x92, 0xec, 0x32, 0xe0, 0xe2, 0x32, + 0xeb, 0x7d, 0xb7, 0xcc, 0x22, 0xfa, 0x4c, 0x17, 0x42, 0x0b, 0x6d, 0xd3, 0xfc, 0x18, 0x43, 0x34, + 0x47, 0xc5, 0xe5, 0x9c, 0x09, 0x6d, 0xf3, 0x6a, 0xe7, 0x98, 0x23, 0xe7, 0x1a, 0x38, 0x1e, 0xf6, + 0xfb, 0x9d, 0x8b, 0xb8, 0x4f, 0xac, 0x7a, 0x39, 0xa1, 0xc4, 0xc2, 0xfe, 0xc6, 0xf5, 0x91, 0xa0, + 0xb2, 0x91, 0xbc, 0x98, 0x67, 0x0c, 0xf8, 0x02, 0x9a, 0x12, 0x8e, 0x04, 0x15, 0x73, 0x68, 0x80, + 0xaf, 0xc4, 0x84, 0x7c, 0x7f, 0xe2, 0x0a, 0xcb, 0xb5, 0x62, 0x89, 0xad, 0xcf, 0x77, 0x72, 0x68, + 0x88, 0xbb, 0x3b, 0x79, 0x0e, 0x15, 0x86, 0xc2, 0x30, 0x62, 0xea, 0xd8, 0xf9, 0x84, 0x2a, 0x3f, + 0xe6, 0xd5, 0x0b, 0xa5, 0x4a, 0x1a, 0x58, 0x98, 0x3c, 0xdf, 0x4e, 0x75, 0x1c, 0xd3, 0xce, 0x1d, + 0x4b, 0xdf, 0x38, 0x92, 0x69, 0xeb, 0x49, 0xf5, 0x5e, 0x62, 0x7e, 0x7e, 0x7c, 0x99, 0x4f, 0x6f, + 0xca, 0x72, 0x96, 0xe5, 0xc4, 0x0a, 0x43, 0x72, 0xfa, 0xd2, 0xa5, 0xe4, 0x60, 0x67, 0xea, 0xd8, + 0x75, 0xe8, 0x85, 0xd1, 0x2b, 0x3f, 0x43, 0xcf, 0x5f, 0xe4, 0x91, 0x2b, 0x59, 0xbb, 0xbe, 0x6e, + 0x8f, 0xa7, 0x3f, 0x2b, 0x38, 0x87, 0x58, 0x96, 0x6e, 0x83, 0xd0, 0xe9, 0xec, 0x6d, 0xfe, 0xb8, + 0xf2, 0xd0, 0x8a, 0xf4, 0xc8, 0xb1, 0xf4, 0x19, 0xbc, 0xe8, 0x14, 0x95, 0xa4, 0x12, 0x9f, 0x61, + 0xa7, 0xbf, 0xa4, 0x6c, 0xdb, 0xca, 0x3f, 0x12, 0x2e, 0xb0, 0xcf, 0x34, 0xff, 0x33, 0x65, 0x1b, + 0xf7, 0x52, 0x73, 0x8b, 0x04, 0xf1, 0xb7, 0xb3, 0x5b, 0x4b, 0x77, 0x53, 0x8f, 0x75, 0x73, 0x42, + 0x30, 0xb0, 0x5a, 0xc1, 0xfd, 0x9b, 0x6f, 0xda, 0x4b, 0xa6, 0xae, 0xf4, 0x0d, 0x2b, 0x27, 0xfe, + 0x1d, 0x16, 0xd3, 0x89, 0x63, 0xda, 0x05, 0x54, 0xb4, 0xce, 0x1f, 0x05, 0xff, 0x68, 0x71, 0xa5, + 0xee, 0x08, 0x20, 0xd8, 0xbf, 0xeb, 0xd4, 0x41, 0xc1, 0x89, 0x9d, 0x3a, 0xc6, 0xd3, 0x46, 0xa5, + 0x8f, 0xa2, 0x29, 0x5c, 0xf1, 0x84, 0x9e, 0x6d, 0xfe, 0x59, 0x1e, 0x38, 0x3e, 0xf9, 0x13, 0x81, + 0x1d, 0x90, 0xb8, 0x76, 0xa3, 0x92, 0x48, 0x84, 0xc2, 0xfa, 0xd6, 0xe9, 0x47, 0x45, 0xc4, 0x31, + 0x85, 0x0b, 0x31, 0x53, 0xa3, 0xca, 0x4f, 0x79, 0x8d, 0x52, 0x69, 0x39, 0x3c, 0x61, 0x01, 0x03, + 0x23, 0xb5, 0xde, 0x6e, 0x0b, 0xed, 0xae, 0xdc, 0x16, 0xda, 0xbd, 0x35, 0xae, 0x24, 0x16, 0x5b, + 0xc2, 0xce, 0x6c, 0x0b, 0xed, 0xf6, 0x19, 0xed, 0xc5, 0x17, 0xd1, 0x64, 0xf2, 0x43, 0xcf, 0xe7, + 0x41, 0x32, 0x22, 0xb1, 0x32, 0xe9, 0x11, 0xbe, 0xfb, 0xba, 0xda, 0x32, 0x76, 0x51, 0x5b, 0x09, + 0x7f, 0x90, 0xe7, 0x23, 0xf6, 0xdf, 0x60, 0x5d, 0x88, 0x6f, 0x0b, 0x08, 0x81, 0xa4, 0x27, 0xfb, + 0x18, 0x04, 0x70, 0xd8, 0x23, 0xa8, 0xf2, 0x1f, 0x7a, 0xb9, 0x72, 0x29, 0x6a, 0xfc, 0x0d, 0x8b, + 0x39, 0xda, 0x7e, 0x30, 0x7d, 0xa3, 0x1f, 0x53, 0x09, 0x71, 0xa1, 0xd2, 0x4e, 0x1e, 0xd7, 0x83, + 0x3b, 0x24, 0x07, 0x0f, 0x26, 0x47, 0xce, 0x80, 0xf9, 0x91, 0xde, 0x4a, 0x91, 0xd4, 0xd7, 0x00, + 0x56, 0x96, 0x35, 0x1a, 0x77, 0x28, 0xba, 0x95, 0x05, 0x3f, 0xd8, 0xba, 0x23, 0x12, 0x4f, 0x6c, + 0x6d, 0x0c, 0xc5, 0x13, 0x8b, 0x7d, 0xdc, 0xd7, 0xd9, 0x63, 0xa7, 0x9c, 0xcb, 0xc1, 0xe2, 0xf0, + 0xeb, 0x03, 0x83, 0xd8, 0x76, 0xd4, 0x99, 0x61, 0x84, 0xba, 0xf7, 0xd8, 0xb4, 0xfe, 0x92, 0x42, + 0x62, 0x05, 0x1f, 0x71, 0x04, 0x73, 0x3a, 0xc4, 0x3c, 0xa2, 0x65, 0x52, 0x31, 0x4d, 0x85, 0xd5, + 0x71, 0x58, 0x7b, 0xed, 0xb4, 0x1e, 0x64, 0x44, 0x7c, 0x18, 0x15, 0x2a, 0xb1, 0x58, 0x24, 0xb6, + 0x2e, 0xde, 0xc0, 0x27, 0x19, 0xd3, 0x0b, 0xa5, 0x62, 0x93, 0x58, 0xd1, 0xcb, 0xc5, 0x87, 0x50, + 0x51, 0x0c, 0x26, 0x5a, 0x17, 0xe4, 0x6f, 0x82, 0x8c, 0x52, 0xa9, 0x10, 0xe6, 0x5a, 0x57, 0xeb, + 0x33, 0x0a, 0xf5, 0x67, 0x08, 0x05, 0x13, 0x7d, 0x86, 0x60, 0x7a, 0x7a, 0x51, 0x83, 0x8a, 0x36, + 0x12, 0x82, 0x09, 0x6f, 0x8f, 0x88, 0xf3, 0x2c, 0x74, 0xcf, 0x93, 0x6c, 0x49, 0x16, 0xc9, 0xea, + 0xa4, 0xe6, 0x79, 0x37, 0x1f, 0xdd, 0x85, 0xd7, 0x20, 0xb4, 0x9b, 0xb9, 0x56, 0xff, 0x34, 0x62, + 0xf8, 0x45, 0xff, 0x20, 0xb8, 0x29, 0x84, 0x0a, 0xfd, 0x8d, 0x8d, 0x04, 0x55, 0x54, 0xfe, 0x93, + 0x5c, 0xee, 0x7a, 0xa1, 0xf4, 0x04, 0xcd, 0x1c, 0xc4, 0xb1, 0x85, 0x69, 0x52, 0xcc, 0x59, 0x9e, + 0x60, 0xbf, 0xed, 0xd6, 0x48, 0x97, 0xee, 0xaa, 0x47, 0x9e, 0x24, 0xfa, 0xf4, 0x9e, 0xc4, 0x63, + 0x02, 0x45, 0x18, 0x67, 0xf7, 0xb0, 0xbc, 0xc8, 0xd5, 0x17, 0xad, 0xfa, 0x05, 0x55, 0x7e, 0xce, + 0x6b, 0x34, 0x90, 0xd6, 0x65, 0xde, 0xdd, 0x43, 0x47, 0xc1, 0x7d, 0x10, 0x6f, 0x32, 0xdc, 0x70, + 0x52, 0x47, 0x2f, 0xa7, 0x87, 0xdb, 0xca, 0xac, 0x33, 0x36, 0xc2, 0xcb, 0x82, 0x6b, 0xbf, 0xcf, + 0xe8, 0xf9, 0xeb, 0x61, 0xd6, 0x52, 0x3b, 0x42, 0xf9, 0x61, 0x73, 0xea, 0x1a, 0x13, 0xa7, 0x4e, + 0xec, 0x5d, 0x8c, 0x89, 0x59, 0x57, 0xa3, 0x42, 0xbc, 0x09, 0xb3, 0x48, 0x33, 0x91, 0x6d, 0xf0, + 0xd0, 0x91, 0x5d, 0xcb, 0xb0, 0xdf, 0xe2, 0x02, 0x84, 0x42, 0xc4, 0x9f, 0x22, 0xc0, 0x38, 0x22, + 0xdf, 0xc7, 0x95, 0x78, 0xfe, 0xd3, 0x24, 0x74, 0xe7, 0x1a, 0x25, 0xc1, 0xd6, 0x00, 0xf7, 0x19, + 0xff, 0x41, 0x71, 0xeb, 0x56, 0x78, 0x7b, 0xaf, 0x6f, 0x7c, 0x36, 0x86, 0x43, 0x86, 0x48, 0x6a, + 0x38, 0x64, 0xe0, 0x92, 0x48, 0x1f, 0x7d, 0xc0, 0xe3, 0x74, 0xc2, 0x26, 0x86, 0xe1, 0x90, 0x41, + 0xe1, 0xcd, 0x75, 0x6a, 0x5c, 0xf1, 0xc7, 0x02, 0x3b, 0xf0, 0x49, 0x53, 0x09, 0x27, 0x28, 0x3d, + 0xfc, 0x81, 0x2a, 0xef, 0xf2, 0x9a, 0x6b, 0xa4, 0x1d, 0xa9, 0x8b, 0x67, 0xd3, 0x57, 0x5f, 0x4b, + 0x1d, 0xee, 0x4d, 0x7f, 0xf4, 0x36, 0xb0, 0xc3, 0xad, 0x91, 0x0e, 0x1a, 0x7d, 0xed, 0x70, 0x57, + 0xea, 0xf8, 0x35, 0x6d, 0xe0, 0x3a, 0x3c, 0x3b, 0xa9, 0xab, 0xaf, 0x84, 0x3f, 0xb4, 0xc3, 0x07, + 0x2b, 0xf9, 0x74, 0xea, 0x95, 0xc6, 0x7b, 0x25, 0x72, 0xd2, 0xcc, 0xdc, 0x7c, 0x2b, 0x73, 0xb6, + 0x8b, 0xef, 0xf8, 0xd6, 0x48, 0xa7, 0xcf, 0xfc, 0x61, 0xb1, 0x4b, 0x40, 0x05, 0xfe, 0xc6, 0x50, + 0x8b, 0x42, 0x29, 0x6f, 0xae, 0x85, 0xf2, 0xea, 0xc2, 0x89, 0xe5, 0x12, 0x90, 0xde, 0x2f, 0x54, + 0x79, 0x8b, 0x17, 0xc0, 0xa5, 0x75, 0x10, 0x32, 0x1f, 0xa2, 0xc7, 0xdd, 0x1a, 0xe9, 0x21, 0xa5, + 0xb7, 0x46, 0x7a, 0x96, 0x26, 0x07, 0x87, 0xe4, 0x06, 0x25, 0x9c, 0xd0, 0x46, 0xf6, 0x6a, 0x83, + 0x83, 0xb7, 0x46, 0xba, 0x96, 0xb1, 0x12, 0xc8, 0x9d, 0xaf, 0xeb, 0x08, 0x5a, 0xc7, 0x89, 0xe4, + 0xe0, 0x41, 0x1a, 0x79, 0x1f, 0x7a, 0x15, 0xd7, 0xa0, 0x02, 0x12, 0xff, 0x8e, 0xf8, 0x1e, 0xe4, + 0x57, 0x2f, 0x53, 0xe5, 0x25, 0x5e, 0x28, 0x91, 0xee, 0x85, 0x13, 0x5b, 0xe6, 0xe3, 0x4f, 0xb4, + 0x0b, 0x07, 0x92, 0x37, 0xb0, 0xe8, 0xd0, 0xbb, 0xd2, 0xe5, 0xe4, 0x52, 0x1f, 0x40, 0x8b, 0x2f, + 0xa0, 0xc2, 0xa8, 0xbf, 0x41, 0xd9, 0x18, 0xda, 0x0d, 0x5e, 0x08, 0x05, 0xd5, 0xb2, 0x2a, 0x3f, + 0xe1, 0xd5, 0x0b, 0x25, 0x09, 0x5e, 0x4e, 0x41, 0xa7, 0x10, 0xea, 0xf1, 0xd6, 0x48, 0x57, 0xaa, + 0xb7, 0x55, 0x3b, 0x77, 0xe1, 0xc1, 0xa5, 0x4b, 0xad, 0x5d, 0x4b, 0x4b, 0x7d, 0x7a, 0xeb, 0x2a, + 0x7c, 0x44, 0x43, 0x0f, 0x79, 0x9d, 0x38, 0x44, 0xcf, 0xae, 0x09, 0xd2, 0xb5, 0xa7, 0x8d, 0xae, + 0x18, 0x64, 0xa0, 0xf9, 0x13, 0x17, 0x79, 0x7b, 0x9d, 0xd5, 0xf0, 0x87, 0x2d, 0xdf, 0x9e, 0x35, + 0xc9, 0xb7, 0x45, 0xd9, 0x9c, 0x96, 0x8d, 0x0e, 0x87, 0x40, 0x9f, 0x26, 0x49, 0xd7, 0x25, 0xa0, + 0x59, 0x76, 0xed, 0xb0, 0x56, 0x0f, 0x44, 0x04, 0x39, 0xab, 0x29, 0x45, 0x94, 0x72, 0x14, 0x41, + 0x53, 0xd1, 0xb2, 0xdf, 0xc4, 0xa1, 0x32, 0x92, 0xa0, 0xc7, 0xdd, 0x7c, 0x1f, 0xfc, 0x10, 0xcb, + 0x73, 0xa7, 0x12, 0xc6, 0xdb, 0x12, 0x09, 0x4e, 0x08, 0xc3, 0xf9, 0x0b, 0x01, 0x15, 0xb2, 0x22, + 0x71, 0x0e, 0x9a, 0x84, 0xb5, 0x59, 0x2a, 0x77, 0xf3, 0x7d, 0xf4, 0x97, 0x38, 0x0d, 0xb9, 0x42, + 0x51, 0xaa, 0x1a, 0xb9, 0x42, 0x51, 0x51, 0x44, 0xf9, 0xa1, 0x68, 0xcb, 0x43, 0xf4, 0xe2, 0x9b, + 0xfc, 0x8d, 0x07, 0x8a, 0xa1, 0xb9, 0x37, 0x1e, 0xfa, 0x6f, 0x3c, 0x50, 0x83, 0x5b, 0xa7, 0x32, + 0xae, 0x99, 0x83, 0x26, 0x45, 0xe0, 0x4d, 0x08, 0x7d, 0xdb, 0x01, 0xbf, 0xc4, 0xc7, 0x50, 0x11, + 0xb1, 0x22, 0xc8, 0x31, 0xc5, 0x4f, 0x2f, 0xb2, 0xe7, 0xdb, 0xcd, 0xa2, 0x86, 0x01, 0xf9, 0x0c, + 0x78, 0xcf, 0x72, 0x34, 0xd5, 0x54, 0x47, 0xc6, 0x0e, 0xf3, 0x99, 0xea, 0x73, 0x85, 0x82, 0x76, + 0xbe, 0xd4, 0x9e, 0xcf, 0x27, 0x11, 0xb7, 0x61, 0x7e, 0xe7, 0xae, 0x0b, 0xc6, 0x7f, 0xdc, 0x3c, + 0x7e, 0xdc, 0x3c, 0x6e, 0xa7, 0xcd, 0xe3, 0xe7, 0x96, 0xcd, 0x83, 0x38, 0x16, 0x19, 0x9b, 0x47, + 0x85, 0xed, 0xe6, 0xc1, 0x77, 0x47, 0x01, 0x88, 0x8e, 0xcf, 0xed, 0x1b, 0x34, 0x2c, 0xcb, 0x18, + 0x3c, 0x22, 0xcd, 0xb7, 0xdd, 0x3e, 0xea, 0x6a, 0xe9, 0x06, 0xf2, 0x99, 0x0b, 0x2d, 0x74, 0xec, + 0xe1, 0x87, 0xbd, 0x8f, 0xfc, 0xdc, 0xb4, 0x8f, 0x3c, 0x90, 0x63, 0x1f, 0xe1, 0xb1, 0x32, 0x9e, + 0xed, 0xa4, 0x47, 0x40, 0x73, 0x73, 0x34, 0xff, 0xda, 0x76, 0x95, 0xe5, 0xa6, 0x5d, 0x65, 0xa1, + 0x9d, 0x3c, 0xae, 0xab, 0x8d, 0x33, 0xe9, 0x41, 0x07, 0xb7, 0x11, 0x4d, 0xcf, 0xaa, 0x70, 0xdc, + 0x62, 0xca, 0x50, 0x7e, 0x93, 0xa2, 0x07, 0x5b, 0xb0, 0x38, 0xed, 0xae, 0x53, 0x70, 0xa7, 0x18, + 0xc2, 0xf3, 0x4b, 0x94, 0x8f, 0x7f, 0x89, 0xf3, 0x11, 0x22, 0x72, 0x6d, 0x6b, 0xc2, 0xf6, 0x4c, + 0x7f, 0x17, 0x2a, 0x84, 0xea, 0x50, 0xf6, 0xa1, 0x5e, 0x2c, 0x45, 0x45, 0xfa, 0x63, 0x2e, 0xba, + 0x87, 0x4d, 0xde, 0xb6, 0xb3, 0x3a, 0xb4, 0xbb, 0x2e, 0xe8, 0x69, 0xcd, 0x43, 0x73, 0xd6, 0x28, + 0x09, 0x3c, 0xec, 0x38, 0xbc, 0xfe, 0xf9, 0x61, 0x6d, 0x01, 0xbf, 0x80, 0x6d, 0x9a, 0xdb, 0x02, + 0xc6, 0x5a, 0x4b, 0xf0, 0x2b, 0xd5, 0x5b, 0x49, 0x53, 0x61, 0xc5, 0xe2, 0xec, 0xf9, 0x21, 0xab, + 0x60, 0xe9, 0xf9, 0x1c, 0xd0, 0x27, 0xdd, 0x0f, 0x81, 0x9b, 0x99, 0x50, 0x88, 0xd3, 0x93, 0x7c, + 0xef, 0x90, 0x76, 0xe2, 0x62, 0x66, 0xe0, 0xdd, 0xd4, 0xab, 0xed, 0x34, 0xe4, 0xca, 0x4d, 0x17, + 0x39, 0xc3, 0x99, 0xfb, 0xf8, 0x61, 0xcb, 0x87, 0x75, 0xba, 0x7c, 0xb0, 0x8d, 0xa1, 0xc2, 0x14, + 0xb4, 0x9f, 0x85, 0x12, 0x3b, 0x30, 0xed, 0x8f, 0x25, 0x14, 0xfe, 0x5f, 0x01, 0xcd, 0xc8, 0x6e, + 0xf3, 0x03, 0x50, 0xee, 0x74, 0x21, 0x51, 0x38, 0xa6, 0x90, 0x18, 0xca, 0x27, 0x87, 0x15, 0x62, + 0x4b, 0x22, 0xdd, 0xed, 0x50, 0x02, 0x3b, 0x7f, 0x50, 0x8c, 0xbc, 0x59, 0x4f, 0xd9, 0x06, 0xf6, + 0xef, 0x95, 0xaa, 0x5c, 0xa5, 0xa7, 0x6c, 0x5b, 0x5a, 0x57, 0xdf, 0xb2, 0x02, 0xb4, 0x34, 0x3d, + 0x1a, 0xfa, 0xc0, 0x75, 0x5d, 0x59, 0xe2, 0xd5, 0x24, 0xad, 0xeb, 0xfa, 0x68, 0xfb, 0x41, 0x3d, + 0x87, 0xdb, 0xf3, 0xa8, 0x10, 0xaf, 0x38, 0x77, 0x41, 0x4c, 0x72, 0xe6, 0xe9, 0x85, 0xa4, 0xeb, + 0x87, 0x26, 0xd4, 0xb5, 0xde, 0x56, 0x6c, 0x40, 0x93, 0x77, 0x2a, 0xbb, 0x48, 0xdf, 0x05, 0xa4, + 0x6f, 0x62, 0x69, 0x64, 0x65, 0xd2, 0x93, 0x5a, 0xfb, 0xd5, 0xd1, 0x37, 0xfa, 0xb5, 0xbe, 0xe3, + 0xac, 0xff, 0xcc, 0x85, 0x77, 0x52, 0xa7, 0x0e, 0x6b, 0xfb, 0x87, 0x8c, 0xc3, 0xe8, 0xe1, 0x83, + 0x95, 0x40, 0xb8, 0xe9, 0xbe, 0x4e, 0x1d, 0x9e, 0xdd, 0x68, 0xd1, 0x9e, 0xaa, 0xb0, 0xe2, 0x83, + 0x1e, 0xf6, 0x3a, 0x92, 0x80, 0x34, 0x17, 0x12, 0x4f, 0xd9, 0x9f, 0x74, 0xaf, 0xbb, 0x88, 0xd1, + 0x37, 0xbb, 0xe5, 0x0f, 0x5b, 0x04, 0xad, 0x32, 0x89, 0x20, 0xc7, 0x63, 0xe3, 0x58, 0xa2, 0xe7, + 0xcf, 0x04, 0x54, 0xbc, 0x3e, 0x92, 0x08, 0x6d, 0xdf, 0x55, 0x13, 0x09, 0x6f, 0x0f, 0x35, 0x88, + 0x6b, 0xd1, 0xa4, 0x38, 0xf1, 0x5f, 0xa0, 0x9c, 0xb6, 0x42, 0x95, 0x97, 0x79, 0x69, 0x91, 0x74, + 0x3f, 0xb8, 0x6a, 0x8f, 0xb6, 0xf6, 0xa4, 0x4f, 0x9f, 0x07, 0x95, 0x1e, 0xd2, 0x14, 0x42, 0x79, + 0xba, 0xa7, 0x0d, 0x00, 0x7d, 0xb4, 0x81, 0xf8, 0x00, 0x9a, 0x84, 0x3f, 0xc3, 0x6c, 0x7f, 0xd5, + 0x77, 0xa8, 0xf2, 0x0c, 0x2f, 0x2d, 0x92, 0xe8, 0xbf, 0x3e, 0xfa, 0xaf, 0xf8, 0x24, 0x9a, 0xe2, + 0x27, 0xd8, 0xdc, 0x14, 0xd9, 0xa9, 0x84, 0xf9, 0x90, 0x67, 0x7c, 0xb9, 0xc4, 0xff, 0xf0, 0xf1, + 0x3f, 0x3c, 0x07, 0x5d, 0x08, 0xc1, 0x64, 0x88, 0xee, 0xb2, 0x52, 0xf7, 0xe9, 0x16, 0xc8, 0x42, + 0x42, 0x9e, 0x1a, 0xfa, 0x42, 0xa4, 0x84, 0x26, 0xe1, 0x80, 0x77, 0x22, 0x23, 0xad, 0xda, 0xe1, + 0x01, 0x98, 0x96, 0xee, 0xde, 0xfd, 0x38, 0x2a, 0x48, 0x84, 0x12, 0x8d, 0xec, 0x82, 0x96, 0xe4, + 0x67, 0x84, 0x12, 0xa9, 0x14, 0x40, 0xc9, 0x0f, 0xed, 0xe0, 0xd5, 0xe4, 0xd0, 0x01, 0xdd, 0x09, + 0xc4, 0x07, 0x20, 0xe2, 0x1e, 0x01, 0x4d, 0x0e, 0xd0, 0x43, 0x55, 0x9e, 0x91, 0xbb, 0x95, 0x95, + 0x49, 0xbf, 0x80, 0x2e, 0xe0, 0x20, 0x05, 0x4f, 0xa7, 0xca, 0xdd, 0xb0, 0xe5, 0xc2, 0x1d, 0xe9, + 0x68, 0x6f, 0x6b, 0xea, 0xca, 0x5e, 0x78, 0x5a, 0x05, 0xe8, 0x05, 0xd8, 0xcf, 0x5b, 0xf7, 0xea, + 0xfe, 0xf7, 0xf8, 0x38, 0x40, 0xf0, 0x4f, 0x8f, 0x03, 0x17, 0xcf, 0xa6, 0x3b, 0x3b, 0x7c, 0xec, + 0x1b, 0x9e, 0xfe, 0x69, 0x68, 0x1a, 0xe0, 0x83, 0xbd, 0x0b, 0x15, 0x9f, 0x45, 0x33, 0xc2, 0xa6, + 0x12, 0xdd, 0x1f, 0x80, 0x60, 0xc7, 0x52, 0x29, 0x4d, 0x83, 0x71, 0x42, 0xd7, 0x75, 0xb5, 0x3e, + 0x0b, 0x84, 0x1e, 0xa2, 0xce, 0x65, 0x09, 0x51, 0xc7, 0x37, 0x35, 0x85, 0xa8, 0xfb, 0x35, 0x1f, + 0x0e, 0x02, 0xb0, 0xb3, 0x56, 0x95, 0xeb, 0xf8, 0x54, 0x9f, 0x8f, 0xf3, 0x8d, 0x53, 0x9d, 0xad, + 0x10, 0xbf, 0x47, 0x7f, 0xca, 0x7f, 0x6b, 0xa4, 0x2b, 0x33, 0x70, 0x1e, 0xfe, 0x4e, 0x0e, 0x0e, + 0x65, 0x5e, 0x3f, 0x39, 0xfa, 0xe1, 0xa0, 0x5e, 0xcb, 0xe7, 0xfd, 0x3c, 0x2b, 0x20, 0x44, 0xc7, + 0xbc, 0x4b, 0x8f, 0xeb, 0xd2, 0x2a, 0xa8, 0xf2, 0x6f, 0xbd, 0x5c, 0xb9, 0x14, 0xa1, 0x44, 0x6d, + 0x9f, 0xaa, 0x63, 0xdb, 0xce, 0xad, 0x4d, 0x91, 0x70, 0x28, 0x11, 0x89, 0x6d, 0x55, 0x5a, 0x94, + 0x70, 0xe2, 0xf3, 0x56, 0xbe, 0xa8, 0x49, 0x49, 0xc4, 0x42, 0x81, 0xf8, 0x12, 0x77, 0xaa, 0xf7, + 0xfd, 0xd4, 0xc9, 0xf3, 0xda, 0xe5, 0x7d, 0xd0, 0x2a, 0x96, 0x78, 0xf9, 0xf3, 0xd6, 0x3d, 0x4a, + 0x93, 0x3f, 0xd4, 0xf8, 0x79, 0xeb, 0x9e, 0x96, 0x48, 0x28, 0xa0, 0xa4, 0xfb, 0x3a, 0x53, 0xc7, + 0xae, 0x6b, 0x23, 0xdd, 0x3e, 0xee, 0xe3, 0xe2, 0xc3, 0xf4, 0x51, 0x2e, 0x78, 0xe5, 0xd0, 0x97, + 0xc5, 0x4a, 0x3c, 0x20, 0x95, 0xe8, 0x58, 0x48, 0x9d, 0xbc, 0x69, 0xca, 0x35, 0x0c, 0x2f, 0x77, + 0x1f, 0xd6, 0x49, 0x9c, 0x84, 0x93, 0xa7, 0x31, 0x58, 0x29, 0x89, 0x8b, 0x39, 0x88, 0xfb, 0x90, + 0x80, 0x26, 0x05, 0x08, 0xc7, 0xd3, 0x5d, 0x7d, 0x9e, 0xd5, 0xb2, 0x60, 0x48, 0x05, 0x78, 0x31, + 0x44, 0x1b, 0x48, 0xcf, 0xf0, 0xfc, 0x0f, 0xd7, 0x2b, 0x3a, 0x21, 0xea, 0x82, 0x80, 0x0e, 0x9c, + 0xcc, 0x15, 0x22, 0x37, 0x01, 0xa4, 0x0e, 0x00, 0x9d, 0xf9, 0x68, 0xa7, 0xe2, 0x0e, 0x34, 0x35, + 0x40, 0xdd, 0xa1, 0xc9, 0x30, 0xa8, 0xd2, 0x50, 0x6a, 0x3f, 0x2c, 0x22, 0xda, 0x08, 0x47, 0x9a, + 0x5b, 0x49, 0x22, 0x38, 0x4d, 0x83, 0x47, 0x01, 0x9d, 0xb3, 0x19, 0x04, 0x7f, 0x29, 0x48, 0x9d, + 0xdf, 0xe0, 0x4b, 0x45, 0xe3, 0xfc, 0x92, 0xa9, 0x15, 0xfe, 0xd2, 0x99, 0xd1, 0x13, 0xe7, 0xcc, + 0x5f, 0x32, 0x81, 0x88, 0xbf, 0x41, 0xd3, 0xe1, 0xd3, 0xeb, 0x99, 0x2f, 0x09, 0x79, 0xfa, 0x95, + 0xfb, 0x5b, 0xc4, 0xc1, 0x2b, 0xbb, 0x9d, 0x34, 0x9b, 0xc5, 0xd3, 0x3d, 0x93, 0x3a, 0x76, 0x59, + 0x7b, 0xfb, 0x14, 0xfd, 0x60, 0x36, 0x1c, 0xfe, 0x24, 0x8c, 0xc1, 0xf8, 0xe4, 0x94, 0x71, 0x7e, + 0x32, 0xab, 0x1d, 0xf7, 0x49, 0x3a, 0x53, 0xfa, 0xc9, 0x2c, 0x38, 0xfc, 0xc9, 0x66, 0x3d, 0xfe, + 0x2b, 0x7c, 0xb2, 0x78, 0x9c, 0x9f, 0xcc, 0x6a, 0xc7, 0xcf, 0x92, 0xb8, 0xec, 0xb2, 0x4f, 0x66, + 0xc1, 0x89, 0xbf, 0x45, 0x33, 0x49, 0xb2, 0xea, 0x8d, 0x01, 0x7f, 0xa3, 0xb2, 0xa1, 0x39, 0x81, + 0x6b, 0x48, 0xd6, 0x80, 0xdc, 0x1f, 0x5d, 0xae, 0xca, 0x4b, 0xbd, 0xd6, 0x96, 0xd2, 0x5c, 0xe3, + 0xb3, 0x9d, 0xef, 0x69, 0xfd, 0xd7, 0xe1, 0x27, 0xfd, 0xb8, 0x15, 0x5e, 0x7c, 0x05, 0xcd, 0x30, + 0x0a, 0xeb, 0x48, 0x5e, 0x02, 0xa7, 0x27, 0x69, 0x13, 0xfa, 0x7a, 0x7a, 0xc4, 0xf2, 0x75, 0xcb, + 0x87, 0xc4, 0x56, 0x01, 0x6b, 0x0c, 0x01, 0x25, 0xd4, 0xa2, 0xc4, 0xe2, 0x34, 0x73, 0xef, 0x36, + 0x55, 0xde, 0xea, 0x35, 0x4a, 0x25, 0x1f, 0xe5, 0xbe, 0x43, 0xe7, 0x53, 0x6f, 0x5c, 0xcb, 0xb4, + 0xb6, 0x97, 0x6b, 0xdd, 0x03, 0xa9, 0xae, 0xfd, 0x5a, 0x7f, 0xcf, 0xad, 0x91, 0xb7, 0x32, 0x07, + 0xce, 0xa7, 0x8e, 0x9f, 0x81, 0x9f, 0xe5, 0x6e, 0xad, 0x7b, 0x80, 0x6e, 0x21, 0x84, 0x90, 0x2b, + 0xb9, 0x45, 0x27, 0xaf, 0x11, 0x75, 0x4f, 0x73, 0xa3, 0x7b, 0x3e, 0xfe, 0xcf, 0x0c, 0x73, 0xfc, + 0x9f, 0x12, 0xe3, 0x7d, 0xe4, 0x4c, 0xa8, 0x61, 0x0f, 0x20, 0x17, 0x98, 0x32, 0x31, 0x89, 0x10, + 0x97, 0x88, 0x4b, 0xb8, 0xb6, 0xc0, 0xf4, 0xc8, 0xf1, 0x0e, 0xa8, 0x37, 0x4a, 0xaa, 0x02, 0xaa, + 0xfc, 0x22, 0xfa, 0x95, 0x37, 0x6b, 0x3f, 0x93, 0xd6, 0xf2, 0xdb, 0x44, 0xb9, 0x3b, 0x39, 0x38, + 0x9c, 0x79, 0x77, 0x0f, 0x3c, 0x2e, 0xd3, 0x06, 0xae, 0xc3, 0x4e, 0x0a, 0x3a, 0x2e, 0x00, 0x96, + 0xc1, 0x34, 0x3f, 0x6f, 0xdd, 0x63, 0x60, 0xbd, 0xaf, 0x13, 0x74, 0x81, 0xc5, 0x9e, 0xbf, 0x9a, + 0x8a, 0xe6, 0xd6, 0x50, 0x8e, 0xe2, 0x3f, 0xc3, 0x4e, 0x22, 0xdb, 0xf9, 0x7d, 0x4b, 0x60, 0x69, + 0x87, 0xbd, 0xfc, 0xbe, 0x35, 0xdf, 0x24, 0xb1, 0x59, 0x48, 0x69, 0x16, 0x14, 0xf6, 0x8b, 0xea, + 0x92, 0xd8, 0x9c, 0x19, 0x42, 0x49, 0xeb, 0x0c, 0x9b, 0x18, 0x79, 0xc6, 0x9e, 0xf5, 0x88, 0x69, + 0x4b, 0x5d, 0x64, 0xb7, 0xa5, 0xa6, 0x4e, 0xde, 0xe4, 0xe2, 0x75, 0xcf, 0x10, 0xe8, 0xce, 0xca, + 0x76, 0x92, 0xbc, 0x89, 0xee, 0x24, 0x7f, 0x6e, 0xb7, 0x4d, 0x7e, 0xf0, 0x9d, 0x6f, 0x93, 0x5f, + 0x54, 0x97, 0xc5, 0xee, 0xf3, 0xcd, 0xc8, 0xee, 0xd8, 0x27, 0x5a, 0xfb, 0x35, 0xed, 0xa8, 0x1b, + 0xf5, 0x8d, 0xb1, 0x60, 0xcc, 0x60, 0x7e, 0xe3, 0xde, 0x34, 0x2d, 0x7b, 0xd4, 0xa4, 0x6f, 0x6d, + 0x8f, 0x9a, 0xfc, 0x2d, 0xee, 0x51, 0x85, 0xdf, 0xfe, 0x1e, 0x55, 0xf4, 0xed, 0xef, 0x51, 0xe8, + 0xbb, 0xd8, 0xa3, 0xa6, 0x7c, 0xa7, 0x7b, 0x54, 0xf1, 0xb7, 0xb5, 0x47, 0x71, 0xda, 0xe5, 0xd4, + 0xef, 0x85, 0x76, 0x69, 0xde, 0x34, 0xa7, 0x7d, 0xc7, 0x9b, 0xe6, 0x74, 0xd3, 0xa6, 0x59, 0xf5, + 0xa2, 0x2a, 0xbf, 0x80, 0x9e, 0xf7, 0xe6, 0xda, 0x79, 0x74, 0x99, 0xc1, 0x09, 0xf1, 0xcf, 0x04, + 0x63, 0xc7, 0xf8, 0x4c, 0x20, 0xe2, 0xff, 0x33, 0x81, 0x93, 0x81, 0x9f, 0x09, 0xec, 0x0b, 0x9e, + 0x41, 0x17, 0x7b, 0x67, 0x9b, 0xdd, 0xfb, 0xed, 0xe1, 0xbe, 0xbc, 0xcb, 0xea, 0x87, 0x9c, 0x3f, + 0x4e, 0x3f, 0x64, 0x92, 0x51, 0xdf, 0xe2, 0x87, 0x5c, 0x62, 0xf5, 0x43, 0xb6, 0x77, 0x3f, 0xf6, + 0xbc, 0xe6, 0x42, 0x73, 0x6b, 0xa9, 0x34, 0xb1, 0x53, 0x09, 0x6a, 0xac, 0x2a, 0x01, 0xe4, 0x7d, + 0x36, 0x54, 0x82, 0xd9, 0x59, 0x6a, 0x00, 0x45, 0x08, 0xb7, 0xdf, 0xdb, 0x9d, 0xca, 0x5d, 0x5f, + 0xe9, 0x54, 0x5e, 0xb5, 0x51, 0x95, 0xeb, 0xd1, 0x7a, 0x6f, 0xae, 0xb1, 0xeb, 0xdb, 0x03, 0xd7, + 0x97, 0x99, 0xa8, 0xa6, 0x85, 0x23, 0x41, 0xc5, 0xe8, 0x94, 0xd0, 0x91, 0x7d, 0x87, 0x3f, 0xd2, + 0xd1, 0x18, 0x74, 0xf4, 0xd7, 0x2e, 0x48, 0xcd, 0x60, 0x4f, 0x45, 0x0f, 0x59, 0xa9, 0x08, 0xac, + 0x80, 0x06, 0x15, 0xd9, 0x24, 0x16, 0xf8, 0x46, 0x08, 0xa7, 0x5f, 0x50, 0xe5, 0xf7, 0x05, 0x74, + 0x41, 0xf0, 0x3a, 0x8f, 0x57, 0xfa, 0x43, 0xea, 0x5b, 0xc9, 0x89, 0x23, 0x30, 0x52, 0xde, 0x1a, + 0xe9, 0xd2, 0xde, 0xdd, 0x9b, 0x3a, 0xd5, 0xab, 0x9d, 0xfd, 0x40, 0xdb, 0x77, 0x22, 0x39, 0xb4, + 0x0f, 0xa3, 0xe4, 0xcc, 0x7e, 0x88, 0x53, 0x81, 0x6b, 0x3b, 0x4e, 0x90, 0x34, 0x91, 0x1d, 0x50, + 0x4e, 0x03, 0xa6, 0x90, 0xde, 0x8c, 0xb6, 0xed, 0x17, 0xc1, 0xbe, 0x45, 0xee, 0xdf, 0x87, 0x58, + 0xc8, 0xe7, 0x8b, 0xa3, 0xfb, 0xbb, 0x59, 0x10, 0x40, 0x2e, 0x7a, 0xe8, 0xff, 0xee, 0x82, 0xd7, + 0x67, 0xb7, 0x27, 0x49, 0x3e, 0x6b, 0xba, 0xa8, 0x5d, 0x60, 0xbf, 0x4f, 0xb2, 0x49, 0x99, 0x5e, + 0x18, 0x99, 0x8e, 0x02, 0x70, 0xb9, 0x07, 0x2f, 0x8c, 0xd6, 0xaa, 0x72, 0x1d, 0x5a, 0xe3, 0xcd, + 0x81, 0x14, 0x96, 0x3f, 0xc0, 0xb4, 0x7e, 0x4e, 0xaf, 0x8b, 0x0a, 0x88, 0x1b, 0x40, 0x7d, 0x2c, + 0xd2, 0x12, 0x0a, 0x2a, 0x31, 0x96, 0x4d, 0x63, 0x33, 0xae, 0x64, 0xe4, 0xfb, 0x1b, 0x92, 0x19, + 0x83, 0xd4, 0xeb, 0xf4, 0xfb, 0xac, 0x2a, 0xaf, 0xf7, 0x72, 0xc5, 0xd2, 0x53, 0x34, 0xd7, 0xc6, + 0x95, 0x33, 0xac, 0xf0, 0xd6, 0x48, 0x17, 0x1c, 0x20, 0xa8, 0x9b, 0xfe, 0xae, 0xe6, 0x70, 0x22, + 0x54, 0x19, 0x57, 0x1a, 0xb7, 0x57, 0x06, 0x62, 0x95, 0xdb, 0x02, 0xf1, 0xad, 0x2c, 0x15, 0xf5, + 0xd6, 0x68, 0x24, 0xd2, 0xe8, 0xe3, 0x7a, 0x13, 0xab, 0x30, 0xaa, 0x1b, 0x8c, 0xc7, 0x7f, 0x10, + 0xfe, 0x07, 0x8a, 0xa4, 0xd9, 0xa9, 0xde, 0x21, 0xed, 0xd4, 0x01, 0xcc, 0x96, 0xbd, 0x17, 0xd3, + 0x3d, 0x6d, 0x5a, 0xef, 0x65, 0xed, 0xf4, 0x69, 0x1f, 0xad, 0x16, 0x57, 0xa2, 0x62, 0xe6, 0x83, + 0x4a, 0x0e, 0x3b, 0x79, 0x46, 0x54, 0x58, 0x53, 0x85, 0x34, 0x09, 0xfa, 0xf1, 0x99, 0x4a, 0xc5, + 0x57, 0x05, 0x54, 0x40, 0x62, 0xe1, 0x50, 0xe1, 0x31, 0xcf, 0x72, 0xb6, 0xd8, 0xcc, 0x79, 0xa4, + 0x6c, 0x50, 0xe5, 0x1a, 0x2f, 0xc0, 0x4b, 0x55, 0x10, 0x18, 0x3c, 0x7d, 0x68, 0x7f, 0xb9, 0x5b, + 0xc7, 0x86, 0x5e, 0xa6, 0x5d, 0xee, 0x4e, 0x0e, 0x1d, 0x4a, 0xf7, 0x75, 0x26, 0x87, 0x0e, 0x11, + 0x78, 0xdd, 0x55, 0x3a, 0x75, 0xe5, 0xcc, 0x17, 0xd5, 0x93, 0xbc, 0xf9, 0x25, 0xc1, 0xb2, 0x9f, + 0xf8, 0xa0, 0x2f, 0xf1, 0x84, 0xc0, 0xa7, 0x9d, 0x29, 0x18, 0xc7, 0x48, 0xc0, 0x3f, 0xdb, 0x48, + 0x4a, 0xb3, 0x0e, 0xbe, 0x9c, 0x1c, 0x7c, 0x3f, 0x75, 0xf4, 0x32, 0x37, 0x20, 0xad, 0x7b, 0x20, + 0xfd, 0x06, 0x46, 0x1b, 0xc5, 0xe2, 0xd1, 0xcb, 0x78, 0x95, 0xb8, 0xc1, 0xe9, 0x5d, 0xf0, 0x03, + 0xe4, 0x33, 0xd9, 0xe0, 0x73, 0xe3, 0x05, 0x01, 0x9d, 0x13, 0xbc, 0x63, 0x91, 0x8e, 0xd4, 0x6c, + 0xca, 0xc3, 0x72, 0xe5, 0x0c, 0x44, 0x96, 0x87, 0x2f, 0x93, 0x88, 0xb2, 0xa0, 0xf7, 0x91, 0xc8, + 0xb0, 0xf7, 0xb9, 0xd9, 0x9d, 0x34, 0x31, 0x87, 0x43, 0xbc, 0x22, 0xe2, 0x9c, 0xa3, 0xed, 0x1f, + 0x4a, 0x5f, 0x7a, 0x57, 0x3b, 0xdc, 0x01, 0xce, 0x3e, 0xfc, 0xb8, 0x8c, 0x50, 0xf5, 0x5c, 0x57, + 0x26, 0x01, 0xb2, 0x37, 0x0f, 0xb9, 0x9d, 0x87, 0x79, 0x3b, 0xa6, 0x3a, 0x77, 0x7c, 0x83, 0x01, + 0x29, 0xeb, 0x89, 0xfc, 0xb8, 0x9b, 0xe2, 0x98, 0xb9, 0xd9, 0xd3, 0xc8, 0xc5, 0x04, 0x49, 0xa9, + 0x57, 0xdb, 0xb5, 0x7d, 0x1f, 0x53, 0x71, 0x42, 0x5f, 0x49, 0x8f, 0x89, 0x22, 0xc9, 0x6b, 0xca, + 0x06, 0x74, 0xe5, 0x8c, 0x6d, 0xa7, 0x4e, 0x62, 0xe6, 0x5f, 0xe6, 0xa3, 0xe2, 0x6a, 0x16, 0xa0, + 0x8f, 0x3e, 0x01, 0xd1, 0x13, 0xe8, 0x30, 0x77, 0x11, 0x23, 0xa3, 0x8e, 0x1b, 0x4d, 0xa1, 0x3f, + 0x8c, 0xf4, 0xc4, 0x3e, 0xbe, 0x88, 0x83, 0xa8, 0xc1, 0xeb, 0x96, 0x67, 0x82, 0xc0, 0x45, 0xa2, + 0x07, 0x15, 0xd3, 0x9f, 0x9b, 0xe3, 0xf8, 0x58, 0x40, 0x43, 0x5d, 0xf3, 0x65, 0xe2, 0x2c, 0x48, + 0x56, 0x10, 0x64, 0xe1, 0x2e, 0xc9, 0x0f, 0xac, 0xcb, 0x6f, 0x0b, 0xed, 0xe6, 0xae, 0xcb, 0xd9, + 0x4f, 0xb1, 0x14, 0x15, 0x6e, 0x0b, 0xed, 0x86, 0xfe, 0x20, 0xce, 0xb5, 0xfe, 0x1b, 0xcf, 0x48, + 0x4f, 0xec, 0x03, 0x71, 0xc7, 0xf8, 0x4c, 0x3f, 0x6e, 0x34, 0x85, 0xfe, 0x20, 0xfd, 0xd2, 0x30, + 0x3d, 0x5c, 0x91, 0xb8, 0x08, 0x4d, 0xa5, 0x3f, 0x7d, 0x20, 0xf9, 0x20, 0x71, 0xab, 0xb9, 0x10, + 0xcf, 0x8a, 0x16, 0xc0, 0x28, 0xa6, 0xc0, 0xac, 0xf8, 0x32, 0x3c, 0x7e, 0x72, 0x66, 0xab, 0x0b, + 0x42, 0x44, 0x30, 0x1f, 0xfb, 0x89, 0xc7, 0xd8, 0xa0, 0x27, 0x7d, 0x9e, 0x0a, 0x63, 0xd4, 0x0b, + 0x70, 0xdf, 0x26, 0xc1, 0x39, 0x0d, 0xfa, 0x36, 0x49, 0xc7, 0x59, 0xa8, 0x60, 0x77, 0x24, 0xac, + 0x50, 0xd3, 0xa4, 0x0f, 0x7e, 0x10, 0xf3, 0x5f, 0x24, 0x1c, 0x6f, 0x6e, 0x22, 0x93, 0x9f, 0x41, + 0xcd, 0x7f, 0x7a, 0x89, 0x38, 0x07, 0x4d, 0xc2, 0x22, 0xbe, 0x2e, 0x48, 0xed, 0x86, 0xf4, 0x17, + 0x6e, 0x47, 0x3e, 0x0f, 0x73, 0xa1, 0x66, 0x43, 0xa3, 0x44, 0x9c, 0x81, 0xf2, 0x9a, 0x63, 0x8d, + 0xd4, 0x5e, 0x88, 0xff, 0x94, 0xae, 0x9c, 0x72, 0xa1, 0x69, 0xd4, 0xba, 0xb1, 0x0e, 0x76, 0x51, + 0xf1, 0xcf, 0x05, 0x34, 0xb5, 0xc6, 0x64, 0x60, 0xb1, 0x28, 0x7c, 0xa6, 0x6a, 0x9f, 0xf2, 0x9b, + 0xd2, 0xbb, 0xc7, 0x80, 0x88, 0x47, 0x3d, 0x2d, 0xaa, 0xbc, 0x5e, 0x9c, 0x0a, 0x27, 0x33, 0x5a, + 0x5e, 0xba, 0xd2, 0xf4, 0xf3, 0xd6, 0x48, 0x17, 0x1c, 0x11, 0xc1, 0x60, 0xa6, 0xb5, 0x8f, 0xe0, + 0xc3, 0xf3, 0x9e, 0x37, 0x46, 0xf7, 0xbe, 0x4b, 0xd3, 0x52, 0xa8, 0x5d, 0xe9, 0x03, 0x97, 0xd2, + 0x1f, 0x1c, 0x80, 0x9f, 0x7b, 0xff, 0x7d, 0xf2, 0x75, 0xd7, 0x42, 0x4f, 0x69, 0xa5, 0xf9, 0xdb, + 0x95, 0x2d, 0xcb, 0x58, 0x49, 0x95, 0xe0, 0x15, 0x5b, 0x5d, 0x68, 0x8e, 0x4f, 0x49, 0xc4, 0x76, + 0x99, 0x86, 0xb4, 0xc9, 0x1f, 0xdf, 0x29, 0x5a, 0xde, 0x2e, 0x5a, 0xe1, 0xf0, 0xe4, 0xee, 0x1b, + 0x0f, 0x58, 0x3c, 0xea, 0x39, 0x26, 0xa8, 0xf2, 0x2f, 0xc5, 0xbb, 0x46, 0xf7, 0x1f, 0xcc, 0x0c, + 0x1c, 0x35, 0xcd, 0x0c, 0xa2, 0x48, 0x96, 0x3e, 0x39, 0xaa, 0x76, 0x60, 0x09, 0xcb, 0x59, 0xb4, + 0xb4, 0x73, 0x57, 0x32, 0x1f, 0x9d, 0x87, 0xb4, 0x1d, 0x78, 0xfe, 0xfb, 0x0f, 0xa6, 0x8e, 0x5d, + 0x4e, 0x0e, 0x1e, 0xd0, 0xba, 0x8f, 0xf0, 0x60, 0xd0, 0x01, 0x99, 0xf0, 0x32, 0x4f, 0xb9, 0xf3, + 0x84, 0x2b, 0x5f, 0xd1, 0x03, 0x18, 0xff, 0xb6, 0x32, 0x86, 0x87, 0x89, 0x51, 0xf0, 0x67, 0x02, + 0x9a, 0x45, 0xee, 0xf9, 0x89, 0xe3, 0x09, 0x7d, 0x68, 0x8f, 0x4f, 0xfa, 0x16, 0xef, 0x14, 0xa3, + 0x0e, 0x4f, 0x7c, 0x41, 0xae, 0xea, 0x78, 0xd4, 0x13, 0x57, 0xe5, 0x6a, 0xf1, 0xae, 0x9d, 0x7a, + 0x21, 0xec, 0x85, 0xa9, 0xd6, 0x0b, 0xa9, 0x77, 0x5a, 0x53, 0x1f, 0x1f, 0x28, 0xbd, 0xd7, 0xa8, + 0xca, 0xdc, 0x3c, 0x95, 0x3a, 0x74, 0x9e, 0xce, 0xd9, 0x0c, 0x46, 0x66, 0x55, 0x56, 0x7a, 0x8f, + 0xed, 0xac, 0x22, 0xcd, 0xc1, 0x4a, 0xa3, 0x17, 0x3c, 0x99, 0xbd, 0x2e, 0x34, 0xd7, 0x6e, 0x32, + 0x35, 0x91, 0x70, 0x58, 0x09, 0x24, 0xc4, 0x45, 0xce, 0x83, 0xa6, 0x20, 0x78, 0x6a, 0xf7, 0x8e, + 0x03, 0x2a, 0x1e, 0xf5, 0x1c, 0x15, 0x54, 0xf9, 0x69, 0xd1, 0xcd, 0x4d, 0x71, 0x5f, 0x7b, 0x25, + 0x7d, 0x47, 0xdd, 0x7f, 0x73, 0xf4, 0x78, 0x7f, 0xfa, 0xb5, 0x6b, 0xa9, 0xd6, 0x3d, 0xa5, 0xf7, + 0x71, 0x33, 0x25, 0xe5, 0x74, 0xa6, 0x3a, 0x34, 0xc0, 0x91, 0xa9, 0x56, 0x8b, 0x4f, 0x39, 0x4d, + 0x35, 0x8e, 0xd7, 0x8f, 0xbc, 0x31, 0xff, 0x2d, 0x03, 0x89, 0x9b, 0x96, 0x34, 0x40, 0x27, 0xf9, + 0x5f, 0x04, 0x34, 0xb5, 0xae, 0x29, 0x1a, 0x89, 0x25, 0x1c, 0x79, 0xd4, 0x54, 0x6d, 0xcb, 0xa3, + 0x59, 0x10, 0xf1, 0xa8, 0xe7, 0x75, 0x41, 0x95, 0x83, 0xe2, 0x5d, 0xda, 0xc0, 0x88, 0xd6, 0x4e, + 0x83, 0xf5, 0x9b, 0x29, 0x78, 0x0d, 0x5f, 0x05, 0x73, 0x2c, 0xa3, 0x7e, 0x32, 0xe7, 0x7a, 0x92, + 0x43, 0x47, 0x58, 0xce, 0x1c, 0x0c, 0xa4, 0xbd, 0x76, 0x3a, 0xf3, 0xea, 0x8d, 0x2a, 0x37, 0x0b, + 0xae, 0xcd, 0xad, 0xe3, 0x62, 0x82, 0x88, 0xfb, 0x3c, 0x77, 0xe7, 0xa0, 0xe4, 0x10, 0x19, 0x1d, + 0x5e, 0xf1, 0x7d, 0x2e, 0x34, 0x95, 0x05, 0xad, 0x71, 0x98, 0xac, 0xa9, 0xda, 0x76, 0xb2, 0x59, + 0x10, 0xf1, 0xa8, 0x67, 0x40, 0x50, 0xe5, 0x57, 0xc4, 0xa9, 0x60, 0x7f, 0x62, 0x12, 0xe9, 0xd7, + 0xa6, 0x9f, 0xa0, 0x6b, 0xc0, 0xf5, 0x39, 0x24, 0x13, 0x4c, 0x0e, 0xb7, 0xc3, 0x85, 0x09, 0x0d, + 0x93, 0xc3, 0x00, 0x88, 0xa3, 0x71, 0x4f, 0xe6, 0xc2, 0xbb, 0x5a, 0xf7, 0x91, 0xe4, 0xf0, 0x70, + 0xf2, 0xc6, 0x51, 0x2a, 0xca, 0x48, 0xd0, 0x3e, 0xac, 0x62, 0xed, 0x7f, 0x5f, 0x7b, 0xed, 0xa2, + 0xd6, 0x75, 0x4c, 0x7b, 0xed, 0x62, 0xf2, 0x46, 0xef, 0xe7, 0xad, 0x7b, 0x09, 0x0e, 0x1e, 0x28, + 0xbd, 0x6f, 0x7c, 0xdc, 0x8c, 0x11, 0xd1, 0xe5, 0x42, 0x33, 0xe5, 0x60, 0x90, 0x38, 0xc0, 0x6e, + 0x8a, 0x30, 0x64, 0x58, 0x7c, 0x1c, 0x19, 0x08, 0xd5, 0x1a, 0x4b, 0xdd, 0xce, 0x00, 0xa0, 0x8c, + 0x78, 0xae, 0x0a, 0xaa, 0xbc, 0x5b, 0x14, 0x93, 0x83, 0xaf, 0xa5, 0x4e, 0x5d, 0x83, 0x81, 0x83, + 0x95, 0xae, 0x34, 0x08, 0x56, 0xbc, 0xba, 0x7a, 0x7c, 0xfc, 0x18, 0x3e, 0x41, 0xd7, 0xf7, 0xed, + 0x53, 0xda, 0x6b, 0x67, 0x00, 0xa2, 0x2c, 0x39, 0x74, 0xa4, 0x66, 0xcb, 0x3a, 0x9a, 0x53, 0x54, + 0xed, 0xaa, 0xab, 0xad, 0x31, 0xde, 0x95, 0x93, 0xc2, 0xc5, 0x24, 0x79, 0x3c, 0xc5, 0x4d, 0xfa, + 0xad, 0x41, 0xad, 0xfd, 0xaa, 0x8e, 0x0c, 0x08, 0xd2, 0x4c, 0x30, 0xb1, 0xd4, 0xf3, 0xc0, 0x38, + 0xe5, 0x5a, 0x38, 0x12, 0x54, 0x30, 0x3a, 0xfe, 0x0f, 0x01, 0xcd, 0xa9, 0xd5, 0x6d, 0xd7, 0xf1, + 0xd5, 0xb1, 0x48, 0x13, 0xc3, 0x89, 0xc7, 0x1a, 0xf9, 0x57, 0x87, 0x63, 0x68, 0xb9, 0x27, 0x27, + 0x0c, 0xc5, 0xcc, 0x7e, 0x41, 0x95, 0x9f, 0xc5, 0x98, 0x39, 0x90, 0x8d, 0x99, 0xc7, 0x18, 0x66, + 0xf0, 0x79, 0xe9, 0x64, 0x2b, 0x98, 0x7a, 0x01, 0x02, 0x0f, 0x90, 0xf9, 0x8f, 0x25, 0x87, 0x8e, + 0xe0, 0x6d, 0xcb, 0x8c, 0x12, 0x32, 0xe1, 0x0a, 0xef, 0x44, 0x26, 0x2c, 0x0e, 0xba, 0xd0, 0x5c, + 0xf2, 0x7e, 0xd3, 0x61, 0xca, 0x4b, 0xb2, 0xa7, 0xc3, 0x01, 0x53, 0x18, 0xd3, 0xf4, 0x2b, 0xc7, + 0x0d, 0x4f, 0x51, 0xf1, 0x89, 0xa0, 0xca, 0x2f, 0x89, 0x25, 0xa9, 0xce, 0xeb, 0xa3, 0xfb, 0xbb, + 0x6d, 0x10, 0xf2, 0xbc, 0x53, 0x4d, 0x99, 0xd6, 0xd5, 0x9e, 0x3a, 0x70, 0x89, 0x06, 0x2e, 0xe8, + 0x3c, 0x80, 0x39, 0x00, 0x32, 0x11, 0x9e, 0xba, 0x06, 0x10, 0x9f, 0xb7, 0xee, 0xa9, 0x91, 0xf5, + 0x3f, 0xb3, 0x90, 0x95, 0xee, 0xeb, 0x04, 0x79, 0xf1, 0xb0, 0xf7, 0x41, 0x67, 0x84, 0xc5, 0x2d, + 0x18, 0x8b, 0x57, 0x56, 0x54, 0x6e, 0xc3, 0x73, 0x12, 0xff, 0x4f, 0x01, 0xdd, 0xb1, 0x46, 0x61, + 0x92, 0x2e, 0xbe, 0x4e, 0x49, 0xf8, 0x89, 0xcf, 0x93, 0xd7, 0xc6, 0x57, 0x3d, 0x1b, 0x88, 0xa1, + 0xeb, 0x81, 0x71, 0xc1, 0x52, 0x54, 0xfd, 0x81, 0x2a, 0xaf, 0x15, 0x17, 0x51, 0x53, 0xcc, 0xb9, + 0x1e, 0xed, 0xd8, 0x49, 0x2a, 0x0d, 0x7a, 0xda, 0xb4, 0xf6, 0x57, 0xf9, 0x38, 0x27, 0xa5, 0x06, + 0x54, 0x72, 0xf0, 0x7d, 0x27, 0x28, 0x32, 0xfd, 0xfb, 0x3d, 0x9e, 0x5c, 0xd3, 0xaf, 0xa8, 0x6c, + 0x52, 0x12, 0x7e, 0xcc, 0x17, 0x47, 0x5d, 0x90, 0x5d, 0x8d, 0x2c, 0x5f, 0x5d, 0x98, 0x11, 0xc8, + 0xe2, 0xec, 0x19, 0x58, 0x61, 0xd8, 0x64, 0xbd, 0xe3, 0x01, 0xa5, 0x73, 0xbd, 0x20, 0xa8, 0xf2, + 0x6f, 0x44, 0x0f, 0x4c, 0x83, 0xc9, 0xcd, 0xc1, 0x03, 0xf4, 0x2d, 0x35, 0x97, 0x6a, 0xb8, 0xf4, + 0x19, 0x6a, 0x47, 0x01, 0x8d, 0xc6, 0x0e, 0x44, 0x37, 0x6a, 0xa5, 0x4e, 0x1f, 0x86, 0xc3, 0xa9, + 0xee, 0xba, 0xa5, 0x75, 0x9c, 0xd0, 0x6e, 0xde, 0x48, 0x1f, 0x3d, 0x9f, 0x19, 0x38, 0xaf, 0xb5, + 0x8e, 0x00, 0x07, 0x89, 0x13, 0xe2, 0xa0, 0xf7, 0x5c, 0x68, 0x16, 0x9e, 0xc8, 0x3a, 0x3f, 0xc1, + 0x98, 0x81, 0x99, 0x07, 0xec, 0xa6, 0x9b, 0x0d, 0xc5, 0x70, 0x53, 0x3e, 0x3e, 0x60, 0x8a, 0x9d, + 0x8f, 0x05, 0x55, 0xfe, 0xad, 0x58, 0x66, 0x8f, 0x9d, 0x26, 0xd2, 0xca, 0x84, 0xa3, 0x67, 0x6d, + 0x71, 0x64, 0x05, 0x9c, 0x20, 0xa6, 0x2a, 0xc5, 0x8a, 0x71, 0x62, 0x0a, 0x3e, 0x25, 0x7e, 0x20, + 0xa0, 0xa9, 0x26, 0x59, 0x60, 0xdd, 0x73, 0x4d, 0xd5, 0xb6, 0x7b, 0x6e, 0x16, 0x44, 0x3c, 0xea, + 0xd9, 0xac, 0xca, 0x8b, 0xf0, 0x21, 0xe0, 0xcc, 0xe8, 0x89, 0x73, 0x6c, 0xcb, 0xbd, 0x03, 0x7e, + 0xa6, 0x3b, 0xaf, 0x6b, 0xfd, 0x3d, 0xb4, 0x10, 0x74, 0x42, 0xef, 0x38, 0xf7, 0x46, 0xf1, 0xaa, + 0x80, 0x90, 0xc1, 0x8f, 0x56, 0xb5, 0xd6, 0xa8, 0xb3, 0x55, 0x6b, 0xf9, 0xea, 0x78, 0xd4, 0xb3, + 0x5d, 0x95, 0x1f, 0x14, 0xa7, 0x9a, 0x96, 0x8c, 0xb1, 0x29, 0xc8, 0xfc, 0x1a, 0xf6, 0x65, 0x3d, + 0x1c, 0x0b, 0xc7, 0xa6, 0x65, 0xe2, 0x78, 0x47, 0xbd, 0x9f, 0xf2, 0x69, 0x3d, 0x3d, 0x66, 0xd3, + 0xd1, 0xdf, 0x6b, 0x47, 0x60, 0x66, 0x18, 0xdb, 0x53, 0x89, 0x1d, 0x58, 0x3c, 0xea, 0x39, 0x2b, + 0xa8, 0xf2, 0x76, 0xf1, 0x5e, 0x3a, 0xfe, 0xd3, 0x87, 0xb1, 0x98, 0xa1, 0x9e, 0x80, 0x07, 0xd2, + 0x3d, 0x6d, 0x14, 0x94, 0x92, 0xdf, 0x4a, 0x4a, 0x7e, 0x1c, 0x00, 0xdd, 0xf2, 0x49, 0x3d, 0x4c, + 0x33, 0x3b, 0xfe, 0x00, 0xb3, 0xb5, 0x83, 0x94, 0x96, 0xc4, 0xa5, 0x36, 0xf3, 0xa7, 0x76, 0x82, + 0x78, 0xe5, 0x2b, 0xba, 0x29, 0xc9, 0x50, 0x71, 0xc5, 0x77, 0x5c, 0x68, 0x0a, 0x84, 0x78, 0x02, + 0x14, 0x2c, 0xb0, 0x9b, 0x1b, 0x37, 0xf7, 0x85, 0x39, 0xeb, 0xe3, 0x51, 0xcf, 0x67, 0x82, 0x2a, + 0x5f, 0x12, 0xc4, 0x3b, 0x4c, 0x8b, 0x48, 0xe7, 0xf8, 0x86, 0x00, 0x86, 0x31, 0x8a, 0x11, 0xc2, + 0x3c, 0xe0, 0x31, 0x6d, 0x82, 0xe3, 0x39, 0x6c, 0xf4, 0xec, 0x75, 0x80, 0x83, 0x84, 0x4a, 0x59, + 0x7c, 0x96, 0xea, 0x3b, 0x07, 0xb5, 0x9f, 0xb7, 0xee, 0xa5, 0x4d, 0x20, 0xbe, 0x0a, 0x29, 0x1c, + 0x7d, 0xf5, 0x06, 0xdf, 0x84, 0x4f, 0xb9, 0x08, 0x60, 0xdc, 0x61, 0x76, 0x9e, 0x98, 0xe3, 0x30, + 0x2b, 0xfe, 0x27, 0x01, 0xcd, 0x24, 0x13, 0x25, 0x29, 0x2c, 0x18, 0xae, 0x16, 0xd9, 0xe2, 0x82, + 0x07, 0xb1, 0x3d, 0xef, 0xd8, 0x40, 0xc1, 0x21, 0xfd, 0x69, 0xf1, 0x2e, 0x76, 0x87, 0x70, 0x49, + 0x6b, 0xbf, 0x62, 0xc6, 0x5d, 0x05, 0x5f, 0xc5, 0x4e, 0x73, 0xaf, 0xf1, 0x3f, 0xe1, 0x76, 0x07, + 0xee, 0x75, 0xc8, 0x9c, 0xee, 0x11, 0xed, 0xb4, 0xfc, 0xf8, 0x0e, 0x7f, 0x4c, 0x09, 0xea, 0x04, + 0xf0, 0xbf, 0x04, 0x24, 0xca, 0xc1, 0xe0, 0xc6, 0xe6, 0x6d, 0x61, 0x25, 0x61, 0xa8, 0xb6, 0xf7, + 0xda, 0x68, 0xae, 0x59, 0x30, 0xb6, 0xac, 0x60, 0x07, 0x16, 0x8f, 0x7a, 0xde, 0x14, 0x54, 0xf9, + 0x79, 0xb1, 0x84, 0x0e, 0xf4, 0x93, 0x61, 0xed, 0xb5, 0x33, 0x5a, 0xdf, 0x61, 0x7c, 0x96, 0x23, + 0x56, 0xb8, 0xd2, 0x27, 0x9d, 0x6a, 0xca, 0xdd, 0x99, 0xf6, 0x4f, 0x33, 0xfd, 0x03, 0xc9, 0xa1, + 0x23, 0x5b, 0xea, 0x6b, 0x2a, 0x6a, 0xd6, 0xd7, 0xa5, 0x2e, 0x9e, 0xd5, 0x46, 0x88, 0xae, 0xc3, + 0x01, 0x93, 0xf9, 0xae, 0xf0, 0x54, 0x8e, 0x57, 0x4b, 0x89, 0x93, 0x31, 0xc6, 0xf1, 0x9e, 0xfd, + 0xa7, 0x2e, 0x34, 0x6f, 0xe3, 0x4b, 0xa1, 0x44, 0x60, 0x07, 0x1d, 0xf0, 0xe6, 0x70, 0x50, 0x89, + 0x35, 0xfa, 0x77, 0xad, 0x87, 0xd0, 0xd3, 0xa2, 0x45, 0x5d, 0xcb, 0x05, 0x8d, 0x91, 0xb2, 0x74, + 0x62, 0x0d, 0xe2, 0x51, 0xcf, 0x1f, 0x93, 0x53, 0xc0, 0x5c, 0xad, 0x63, 0x7f, 0xea, 0xe0, 0xdb, + 0xba, 0x2a, 0x02, 0x31, 0xce, 0x61, 0xbe, 0xa5, 0xcf, 0x43, 0x25, 0xd8, 0x94, 0xf5, 0xf3, 0x5e, + 0x16, 0x14, 0xbd, 0xa0, 0x68, 0xa6, 0x9f, 0x70, 0xf3, 0x75, 0x65, 0x3a, 0x22, 0x01, 0xaa, 0x25, + 0x1a, 0xa8, 0x08, 0x84, 0x43, 0xba, 0x8e, 0xf7, 0x84, 0xe7, 0xd1, 0x71, 0xeb, 0x78, 0x30, 0xf4, + 0x78, 0x25, 0xfb, 0x10, 0xc6, 0xe3, 0x5f, 0x0a, 0x68, 0x16, 0x58, 0x66, 0xb6, 0x84, 0x62, 0x89, + 0x66, 0x7f, 0x23, 0x23, 0xa5, 0xfb, 0xed, 0x2d, 0x54, 0x66, 0x28, 0x8c, 0xb7, 0xb2, 0xf1, 0x01, + 0xc6, 0xa3, 0x1e, 0x45, 0x95, 0x1f, 0x17, 0xa9, 0xaf, 0x41, 0xe6, 0x44, 0x4f, 0xea, 0xc0, 0x69, + 0x40, 0x47, 0xe9, 0x7d, 0xd6, 0xb2, 0xf2, 0xe4, 0xa7, 0x27, 0x53, 0x9d, 0x6f, 0x26, 0x87, 0x0e, + 0xed, 0x88, 0xc4, 0x13, 0x1c, 0xcb, 0xbb, 0x3d, 0x73, 0x6d, 0x26, 0xdc, 0xc2, 0x19, 0xb0, 0xfe, + 0x54, 0x40, 0xb3, 0x60, 0x27, 0x1d, 0x6b, 0x4a, 0x76, 0x50, 0xb6, 0x53, 0xb2, 0x07, 0x8c, 0x47, + 0x3d, 0xcf, 0xa9, 0x72, 0x99, 0x48, 0x6f, 0xba, 0x4d, 0x53, 0xb2, 0x29, 0x23, 0xc3, 0x5f, 0xec, + 0xbd, 0x3f, 0xc7, 0xf0, 0x4d, 0xdb, 0xdd, 0xdf, 0x09, 0xe8, 0x2e, 0x38, 0x85, 0x9b, 0x3f, 0xfc, + 0x6c, 0x73, 0x24, 0xe1, 0x17, 0xcb, 0xed, 0x0f, 0xec, 0x36, 0xa0, 0x78, 0x46, 0x15, 0x13, 0x80, + 0x8e, 0x47, 0x3d, 0x01, 0x3c, 0x2d, 0x9a, 0xf4, 0x61, 0xb4, 0xfd, 0xe0, 0xe8, 0xdb, 0x27, 0x4b, + 0x4b, 0xa8, 0xdf, 0x09, 0x37, 0x21, 0xa8, 0x81, 0x4d, 0xac, 0xb4, 0x62, 0x9c, 0xd3, 0xaa, 0xfc, + 0x0d, 0xfe, 0x0a, 0x5e, 0xa7, 0x8b, 0x02, 0x9a, 0xbc, 0x46, 0x01, 0x87, 0x22, 0x3b, 0x15, 0x03, + 0x57, 0x30, 0x25, 0x72, 0xa1, 0x63, 0x3d, 0xd5, 0x1b, 0x7f, 0xa9, 0xca, 0x4b, 0x45, 0x04, 0xd2, + 0x16, 0x57, 0x94, 0x7a, 0x78, 0x05, 0x84, 0x24, 0xc6, 0xaa, 0xab, 0x4f, 0xf7, 0xb4, 0x81, 0x4e, + 0xc8, 0xa9, 0x1f, 0xf6, 0xe2, 0x16, 0xeb, 0xbf, 0x95, 0xaf, 0x84, 0xa0, 0xd9, 0x6f, 0xc5, 0x7f, + 0x12, 0xd0, 0x14, 0xfa, 0x45, 0xc8, 0x95, 0xe9, 0x30, 0x1c, 0x2e, 0x91, 0x9f, 0xf5, 0xb8, 0x6c, + 0x82, 0xa1, 0xc3, 0xc6, 0x12, 0xb6, 0x41, 0x9c, 0x63, 0x8c, 0x9b, 0x7f, 0xfc, 0x58, 0xba, 0x2e, + 0xd7, 0x1c, 0x78, 0xc8, 0xf2, 0x2c, 0xd7, 0xd4, 0xd4, 0xa1, 0xf3, 0x5a, 0xe7, 0xc1, 0xf4, 0x07, + 0x03, 0xe0, 0xe8, 0x04, 0xdd, 0xe4, 0xd0, 0xb6, 0xcc, 0xd3, 0xad, 0x0c, 0xe1, 0x39, 0x5e, 0x14, + 0xd0, 0x34, 0x9f, 0x12, 0x88, 0xc4, 0x82, 0xfa, 0xb4, 0x6d, 0xec, 0xbf, 0x7c, 0x3d, 0x9b, 0x79, + 0xa9, 0x35, 0xd7, 0x1d, 0x4b, 0xfe, 0xed, 0xd9, 0xa8, 0xca, 0x4b, 0xc4, 0x12, 0xed, 0xc6, 0x51, + 0xad, 0xfd, 0xbc, 0x75, 0x1e, 0xa5, 0x22, 0x5f, 0x03, 0x27, 0x3a, 0xd8, 0xe8, 0x3d, 0x77, 0x3a, + 0x0c, 0x1b, 0x53, 0xd2, 0xff, 0x2d, 0x20, 0xb4, 0x59, 0xf7, 0x90, 0x13, 0x1d, 0x6c, 0x59, 0x3c, + 0x3d, 0x79, 0x72, 0x81, 0xd0, 0xb5, 0x39, 0x43, 0xec, 0x5d, 0x33, 0x80, 0xee, 0xf1, 0xa7, 0xe8, + 0x18, 0x1b, 0xb2, 0x4b, 0xbe, 0x49, 0x7b, 0xd7, 0xbc, 0xd2, 0x5c, 0x13, 0xff, 0x1b, 0x17, 0xba, + 0xc3, 0x64, 0xa8, 0x83, 0x70, 0x9f, 0xd6, 0x83, 0xba, 0x0d, 0x90, 0xe3, 0x41, 0xdd, 0x16, 0x96, + 0xe2, 0x64, 0x14, 0xf4, 0xc4, 0x25, 0x54, 0x34, 0x90, 0x29, 0xc0, 0x09, 0x48, 0x53, 0xbb, 0xf0, + 0xa8, 0xf0, 0x4c, 0x6e, 0x5c, 0x4a, 0x5f, 0x18, 0x86, 0x60, 0x79, 0x14, 0x65, 0xbb, 0x27, 0x06, + 0x5f, 0xee, 0x4e, 0x0e, 0x0e, 0x25, 0x87, 0xf6, 0xc1, 0x8d, 0x86, 0xd6, 0xf7, 0xe6, 0xe8, 0xfe, + 0x6e, 0xc3, 0x59, 0x6f, 0xa4, 0x47, 0x3b, 0xdc, 0x95, 0xea, 0x3b, 0x0f, 0x7d, 0xfa, 0x9b, 0x13, + 0x91, 0x78, 0xc0, 0xdf, 0x18, 0x0a, 0x37, 0x6c, 0x88, 0x26, 0x42, 0x91, 0xb0, 0x1e, 0xcf, 0x8f, + 0x63, 0xf2, 0xe5, 0xa5, 0x4b, 0xc6, 0xbb, 0x4b, 0x42, 0xd4, 0x3e, 0x8c, 0xdc, 0x7f, 0x14, 0x90, + 0x48, 0x0c, 0xe7, 0x40, 0xdf, 0x6c, 0x17, 0xb1, 0x5e, 0xdd, 0x30, 0x98, 0xb8, 0x23, 0x75, 0xf1, + 0x20, 0x14, 0x93, 0xdd, 0x82, 0x2a, 0xbf, 0x28, 0xde, 0x0b, 0x17, 0xd4, 0x06, 0x2d, 0x51, 0x07, + 0xe1, 0xbe, 0x37, 0xb5, 0xde, 0x8b, 0xdb, 0x02, 0x34, 0xd1, 0x7a, 0xe9, 0xc3, 0xa9, 0x77, 0x5a, + 0x31, 0x13, 0x03, 0x5b, 0xd8, 0x81, 0x94, 0x8f, 0xbe, 0xf9, 0x61, 0xaa, 0xef, 0xed, 0xcc, 0xc0, + 0x80, 0xf6, 0xd6, 0xa9, 0xd4, 0x1b, 0xd7, 0x38, 0xbb, 0x99, 0xbd, 0xd9, 0x98, 0xb0, 0xbc, 0x71, + 0xa9, 0x2e, 0x78, 0xc5, 0x41, 0x01, 0xa1, 0x9a, 0x48, 0x2c, 0x18, 0x09, 0xdb, 0x73, 0x91, 0x51, + 0xe7, 0x3c, 0x4f, 0x0e, 0x84, 0xce, 0x33, 0xa0, 0xca, 0x0f, 0x8b, 0xd4, 0xad, 0x15, 0xab, 0x41, + 0xdd, 0x03, 0x99, 0xcb, 0xaf, 0x6a, 0x43, 0xef, 0xa6, 0x5a, 0xf7, 0x94, 0x2e, 0xa0, 0x12, 0xa0, + 0xff, 0x53, 0xea, 0x5d, 0xc9, 0x2a, 0x39, 0xeb, 0xff, 0x3d, 0xa5, 0x0b, 0x9c, 0x46, 0x1f, 0x20, + 0x5f, 0xc3, 0x43, 0x1f, 0x12, 0x50, 0xf1, 0xe6, 0x30, 0x37, 0x78, 0x8b, 0xf0, 0xe5, 0x6b, 0xd9, + 0xf0, 0x17, 0xe5, 0x06, 0xa2, 0x13, 0xd8, 0xaa, 0xca, 0xcb, 0x44, 0x91, 0xda, 0x12, 0xf8, 0xd1, + 0xcf, 0xe5, 0x47, 0x6f, 0x37, 0xf4, 0x7b, 0x4b, 0xdd, 0x4e, 0x43, 0x6f, 0x0e, 0x9b, 0x06, 0x5f, + 0x54, 0x1b, 0xf3, 0x87, 0x60, 0xe4, 0x56, 0xb3, 0x01, 0xab, 0x62, 0xc3, 0xbe, 0x3b, 0x07, 0x04, + 0x1d, 0xf3, 0x0e, 0x55, 0x5e, 0x29, 0x7a, 0x61, 0x7c, 0xd1, 0x48, 0x30, 0x73, 0x73, 0x4f, 0xfa, + 0xc2, 0x70, 0xb9, 0x76, 0x79, 0x1f, 0x5b, 0x87, 0xd7, 0xd2, 0x3d, 0x6d, 0xee, 0xfa, 0x48, 0xd0, + 0x3d, 0xfa, 0xde, 0x95, 0xd1, 0xd6, 0xc3, 0xa5, 0xd3, 0xb3, 0x60, 0xc9, 0xf8, 0x3d, 0x9e, 0xf9, + 0x4e, 0xe3, 0x0f, 0xe2, 0x4f, 0xe2, 0xc1, 0x0f, 0x0b, 0x68, 0x86, 0x21, 0x3b, 0xd7, 0xfa, 0xb7, + 0x29, 0x8d, 0x71, 0xab, 0xa2, 0x95, 0x0d, 0xc1, 0xa6, 0x52, 0x36, 0x36, 0x20, 0x9d, 0xd1, 0x26, + 0xa2, 0x68, 0x51, 0x1d, 0x04, 0xd8, 0xe0, 0xcc, 0xfe, 0x74, 0xdf, 0xa7, 0xa5, 0x36, 0x65, 0x63, + 0xd1, 0x4d, 0x23, 0xe9, 0x1a, 0x8f, 0xfe, 0xdf, 0x0a, 0x68, 0xb6, 0xf1, 0x49, 0xce, 0xa3, 0xce, + 0x49, 0xbd, 0xca, 0x02, 0x63, 0xf3, 0xa8, 0x18, 0x27, 0x34, 0x9d, 0xcc, 0x2f, 0xac, 0x93, 0xb9, + 0x7a, 0x31, 0x73, 0xe1, 0x9d, 0x52, 0x9b, 0xb2, 0x1c, 0xb7, 0x7d, 0xc0, 0xc2, 0x5c, 0x34, 0x5b, + 0xcb, 0x7a, 0x6c, 0xf2, 0x87, 0xc2, 0x89, 0x9c, 0xeb, 0x01, 0x10, 0xe3, 0x58, 0x0f, 0x06, 0xe8, + 0xbc, 0x1e, 0x57, 0xce, 0xa6, 0xf7, 0x5e, 0x2f, 0xb5, 0x29, 0x1b, 0x6b, 0x3d, 0x12, 0xa4, 0x6b, + 0x3c, 0xfa, 0x7f, 0x86, 0x78, 0x58, 0x54, 0xd4, 0xd6, 0xc4, 0x94, 0xa0, 0x12, 0x4e, 0x84, 0xfc, + 0x8d, 0xd6, 0x19, 0xd8, 0x41, 0xd9, 0xaa, 0xee, 0xf6, 0x80, 0xf1, 0xa8, 0xe7, 0x88, 0xa0, 0xca, + 0x5b, 0xc4, 0xf9, 0x26, 0x8b, 0x87, 0x01, 0x02, 0x5a, 0x49, 0xe9, 0x83, 0xd4, 0xf4, 0xd1, 0x7d, + 0x38, 0xf9, 0xe9, 0x5b, 0xe9, 0x9e, 0x36, 0x88, 0xbe, 0xfe, 0x8c, 0xb2, 0x2b, 0x67, 0xb3, 0x1c, + 0x76, 0x1d, 0x5a, 0x12, 0xd0, 0x5b, 0x54, 0xbe, 0x12, 0x67, 0x7d, 0xfe, 0x56, 0xfc, 0xaf, 0x02, + 0xba, 0xd3, 0xb4, 0xfd, 0x72, 0x28, 0xc8, 0xbd, 0xa7, 0x9b, 0xb1, 0xf0, 0xc0, 0xb8, 0x61, 0xe3, + 0x51, 0xcf, 0x1f, 0xa8, 0xf2, 0x13, 0xe2, 0x7c, 0xd3, 0x3d, 0x9e, 0x05, 0x0f, 0xf3, 0x41, 0x07, + 0x75, 0x00, 0x22, 0xf3, 0x7d, 0xb0, 0x74, 0xc2, 0xf3, 0xc5, 0x4b, 0xfe, 0x9f, 0x05, 0x74, 0xa7, + 0xc9, 0xee, 0x99, 0x6b, 0xca, 0x0e, 0x80, 0xb6, 0x53, 0x76, 0x84, 0x8d, 0x47, 0x3d, 0x4d, 0xaa, + 0x2c, 0x89, 0x77, 0x9a, 0xcc, 0xaa, 0x06, 0x44, 0xa9, 0x53, 0x05, 0x2c, 0xab, 0x77, 0xe2, 0xcb, + 0xfa, 0x8f, 0x02, 0x9a, 0xcd, 0x59, 0xdc, 0xb8, 0x19, 0x96, 0xe5, 0x30, 0xcc, 0x99, 0xe7, 0xb7, + 0x78, 0x9c, 0x90, 0xf1, 0xa8, 0xe7, 0xff, 0xa7, 0xca, 0xf5, 0x8e, 0x84, 0x4d, 0x0d, 0x53, 0x95, + 0x56, 0x9b, 0x5e, 0xce, 0x06, 0xa0, 0x49, 0x88, 0x8b, 0xc6, 0x33, 0x77, 0xf1, 0x2f, 0x04, 0x34, + 0xbb, 0x2e, 0x1c, 0x4a, 0xac, 0x56, 0x82, 0x0a, 0xe4, 0xf5, 0x63, 0xca, 0x93, 0x65, 0xbe, 0xb6, + 0x60, 0xb6, 0xf3, 0x75, 0x80, 0x8c, 0x47, 0xf1, 0x0e, 0xbd, 0x54, 0x9c, 0xa3, 0x75, 0x9c, 0xd4, + 0x2e, 0x1c, 0xd0, 0xba, 0x8e, 0x81, 0x07, 0x0c, 0x33, 0x44, 0x3b, 0x94, 0xe7, 0xd0, 0x8c, 0x42, + 0xe1, 0x50, 0x62, 0xbb, 0x6e, 0x6b, 0x23, 0x6a, 0xb6, 0x80, 0xee, 0x90, 0x83, 0x41, 0xfa, 0x75, + 0x25, 0xc8, 0x66, 0x63, 0x67, 0x47, 0xcb, 0x06, 0xc2, 0x73, 0xb9, 0x7f, 0x5c, 0x70, 0xf1, 0xa8, + 0x27, 0x46, 0x58, 0x51, 0xbb, 0xbc, 0x8f, 0x59, 0x11, 0x5f, 0x3b, 0x83, 0x4f, 0x43, 0xa6, 0x09, + 0xe5, 0xae, 0x86, 0x4b, 0x72, 0x8f, 0xdd, 0x21, 0xcf, 0x1f, 0x0c, 0x6e, 0x67, 0x1f, 0xe5, 0x26, + 0x77, 0x49, 0x40, 0x53, 0xb8, 0x5c, 0x51, 0xd6, 0xb3, 0x2d, 0x57, 0xe9, 0x78, 0xb6, 0x35, 0xc1, + 0x18, 0x5b, 0xc4, 0x12, 0x71, 0xba, 0x9e, 0x67, 0x0a, 0x1c, 0x81, 0x4b, 0xe7, 0x66, 0x15, 0xd0, + 0x2c, 0x7d, 0x86, 0xae, 0x3e, 0xdf, 0x53, 0xe2, 0xe4, 0xee, 0x81, 0x87, 0x7b, 0x59, 0x40, 0x53, + 0xb8, 0x8c, 0x3c, 0xa2, 0xc7, 0x49, 0xd4, 0xe5, 0x1a, 0xae, 0x09, 0x86, 0x0e, 0xf7, 0xe7, 0x78, + 0x47, 0x9b, 0xae, 0x67, 0xf3, 0xa1, 0xc3, 0x9d, 0x9d, 0x55, 0xc0, 0xdf, 0x2f, 0x96, 0x7a, 0x1c, + 0x5d, 0x70, 0x74, 0xb7, 0x14, 0x3c, 0xe4, 0x4f, 0x04, 0x34, 0x85, 0xcb, 0x88, 0xe2, 0x74, 0xd9, + 0x9e, 0x7b, 0xc8, 0x26, 0x18, 0x43, 0x35, 0x95, 0xc4, 0x99, 0x4c, 0x5a, 0x45, 0x9a, 0x83, 0x74, + 0xd0, 0xf3, 0xf9, 0x1b, 0xa2, 0x80, 0x51, 0xc1, 0x0d, 0x7e, 0x91, 0x77, 0x1c, 0x83, 0x17, 0xdf, + 0x17, 0x50, 0x21, 0xd9, 0x40, 0xf1, 0xb0, 0x17, 0xda, 0x6e, 0xad, 0xdc, 0x98, 0xdd, 0xce, 0x00, + 0x74, 0xc0, 0xcf, 0x63, 0x92, 0x98, 0xc2, 0x04, 0x4d, 0xa4, 0x39, 0x58, 0xba, 0x90, 0x37, 0x71, + 0xd0, 0xef, 0x5a, 0x07, 0x2b, 0x8e, 0x67, 0xb0, 0xa7, 0x5d, 0xa8, 0x48, 0xcf, 0x7b, 0x61, 0xd5, + 0xa3, 0xf5, 0x2a, 0x47, 0x3d, 0x9a, 0x83, 0xa0, 0xe3, 0xfd, 0x73, 0x41, 0x95, 0x2f, 0x0a, 0xe2, + 0x4c, 0x6e, 0xc4, 0x54, 0x7e, 0xaa, 0x39, 0x2e, 0x45, 0x74, 0xa8, 0xef, 0xe2, 0x4a, 0xa4, 0x54, + 0x74, 0x64, 0x1f, 0x7c, 0xc2, 0x9b, 0xc6, 0x71, 0xea, 0x96, 0xfa, 0x1a, 0xab, 0x49, 0xc7, 0x5c, + 0xcf, 0x70, 0x75, 0xdf, 0x58, 0x60, 0x14, 0x61, 0x3f, 0xc3, 0x0b, 0x2c, 0xea, 0x2c, 0xbe, 0xa5, + 0xbe, 0x86, 0x5a, 0x00, 0x4a, 0xf8, 0x32, 0x0b, 0xcf, 0xdb, 0x1b, 0x75, 0xc9, 0xa0, 0x5b, 0xa2, + 0x01, 0xcc, 0x43, 0x9f, 0x0a, 0x68, 0x1a, 0xc7, 0xb5, 0xb6, 0x43, 0x37, 0xd7, 0x3b, 0x0e, 0x3d, + 0x1b, 0x8c, 0x0e, 0xfd, 0x05, 0x55, 0xf6, 0x30, 0x9b, 0x67, 0x72, 0xe8, 0x48, 0x4b, 0x34, 0xc0, + 0x74, 0x59, 0xf8, 0xc5, 0x0d, 0xd7, 0xde, 0xda, 0xc9, 0x86, 0xcb, 0xf9, 0xa4, 0xbd, 0xd2, 0x12, + 0x0d, 0x50, 0x21, 0xf0, 0x17, 0x02, 0x9a, 0xc6, 0xf1, 0xb0, 0xed, 0x04, 0xcc, 0xf5, 0x8e, 0x13, + 0xc8, 0x06, 0xa3, 0x13, 0x68, 0x54, 0xe5, 0x15, 0xe2, 0x6c, 0x4e, 0x1a, 0xb8, 0xf5, 0x51, 0x97, + 0xce, 0xb5, 0x48, 0x04, 0xb7, 0x79, 0x4a, 0x95, 0xde, 0x89, 0x4d, 0x49, 0xbc, 0xea, 0x42, 0xc5, + 0x3a, 0xc3, 0xe0, 0xd9, 0xdc, 0xe3, 0xc8, 0x4e, 0xdc, 0x5c, 0x16, 0xe5, 0x06, 0xa2, 0x33, 0xf9, + 0x6b, 0x41, 0x95, 0x2f, 0x0b, 0xe2, 0x6c, 0x8e, 0xed, 0xdc, 0x5b, 0xea, 0x6b, 0x28, 0xeb, 0x1d, + 0xcb, 0xcd, 0x7a, 0x06, 0xe4, 0x77, 0xc1, 0x7e, 0xf3, 0xc5, 0x5c, 0x94, 0x2c, 0x7e, 0x2e, 0xa0, + 0x19, 0x9c, 0x98, 0x69, 0x20, 0x67, 0xcd, 0xfb, 0x73, 0x08, 0xa2, 0x06, 0xfe, 0x98, 0x59, 0x36, + 0x36, 0xa0, 0xe1, 0x50, 0x53, 0x27, 0x96, 0xf0, 0xf8, 0x83, 0xd7, 0x29, 0xfa, 0xb5, 0x24, 0xc1, + 0x20, 0x5d, 0x54, 0x3d, 0x98, 0xbf, 0x76, 0xe5, 0x14, 0x4b, 0x94, 0x0b, 0x8f, 0x5a, 0x38, 0x02, + 0xf1, 0x8a, 0x65, 0x4e, 0x13, 0x83, 0xae, 0x39, 0x49, 0xfc, 0xc7, 0xe0, 0x5e, 0xb0, 0xa5, 0xbe, + 0xa6, 0x26, 0x14, 0xb4, 0xb1, 0x98, 0x19, 0x75, 0x8e, 0x96, 0x24, 0x1e, 0xc4, 0xa0, 0xef, 0x27, + 0xc5, 0x59, 0x30, 0xa7, 0x96, 0x68, 0xc0, 0x1d, 0x08, 0x05, 0xd9, 0x35, 0x2b, 0x0d, 0x27, 0x48, + 0x48, 0x93, 0x9f, 0x4d, 0x4b, 0x34, 0x90, 0xee, 0x69, 0xc3, 0x80, 0x63, 0xee, 0x26, 0x2d, 0xd1, + 0x00, 0x86, 0xd3, 0xe9, 0xfb, 0xdf, 0x08, 0x68, 0x7a, 0x4d, 0xd6, 0xdb, 0x72, 0x07, 0x29, 0xa8, + 0x03, 0xb0, 0xd9, 0xdc, 0x3f, 0x26, 0x1c, 0x9d, 0xd2, 0xaf, 0x55, 0xf9, 0x29, 0xa6, 0x22, 0x51, + 0xe7, 0xad, 0xe1, 0xb6, 0xd2, 0x8a, 0xac, 0x02, 0xb8, 0x53, 0xbd, 0x35, 0xd2, 0x45, 0xed, 0xfb, + 0x23, 0xd7, 0x53, 0xad, 0x17, 0x92, 0x23, 0x83, 0xe9, 0x91, 0xf7, 0x98, 0x99, 0xf8, 0x6e, 0xcf, + 0x3c, 0x87, 0xd3, 0x35, 0x71, 0x67, 0xc7, 0x02, 0xe8, 0x4f, 0x04, 0x34, 0x7d, 0x73, 0xd6, 0x33, + 0xf2, 0xfb, 0x9c, 0xcf, 0xfb, 0xb9, 0x27, 0x64, 0x81, 0xa3, 0x13, 0x7a, 0x91, 0x53, 0xa2, 0xf4, + 0x5a, 0xa6, 0x44, 0xe9, 0x05, 0xbc, 0xdc, 0x29, 0xf5, 0xe6, 0x1a, 0x78, 0xe5, 0x2b, 0x5c, 0xa6, + 0x24, 0x22, 0x47, 0xff, 0xc4, 0x85, 0xa6, 0xd7, 0x66, 0x3d, 0xc0, 0xbf, 0xcf, 0xd9, 0x33, 0x31, + 0xf7, 0x34, 0x2c, 0x70, 0x74, 0x1a, 0xbf, 0x13, 0x54, 0xf9, 0x3d, 0x01, 0xaf, 0x0c, 0x96, 0x9a, + 0xc6, 0x44, 0x8e, 0x0a, 0xbc, 0x1c, 0xd5, 0xcb, 0xb1, 0xd4, 0xb8, 0xf1, 0xba, 0xfe, 0x33, 0xd5, + 0xdb, 0x99, 0x3e, 0x7a, 0x42, 0xeb, 0x7b, 0x33, 0xdd, 0xd3, 0x86, 0x0b, 0x53, 0xc7, 0xaf, 0xc1, + 0x0d, 0x80, 0xd6, 0xbe, 0x27, 0xd3, 0x3f, 0x98, 0x7e, 0xeb, 0xa3, 0xd4, 0xa1, 0xf3, 0xd0, 0x91, + 0x2e, 0x6f, 0x32, 0xef, 0xee, 0x81, 0x92, 0x54, 0x6f, 0xe7, 0x7a, 0x6a, 0x17, 0x67, 0xeb, 0x4f, + 0xee, 0x17, 0x3e, 0xa1, 0x76, 0xc6, 0x91, 0x21, 0xad, 0xe3, 0x1a, 0x05, 0x65, 0x22, 0x8b, 0x60, + 0xb2, 0xdc, 0x3b, 0x01, 0x4c, 0x8a, 0x7f, 0x24, 0xa0, 0x62, 0x7a, 0x21, 0x05, 0x38, 0x74, 0xba, + 0xae, 0x32, 0x21, 0x70, 0x51, 0x6e, 0x20, 0x8a, 0x3d, 0x05, 0x9f, 0xc7, 0xa6, 0x1b, 0x77, 0x5a, + 0x80, 0xbb, 0xf9, 0xbc, 0xa6, 0xb7, 0xde, 0x18, 0x0b, 0x47, 0x0c, 0xe5, 0xe2, 0x44, 0xa6, 0xf0, + 0x8f, 0x02, 0xb8, 0xa7, 0x71, 0xce, 0x97, 0x30, 0x95, 0x07, 0x72, 0x1c, 0x95, 0x2d, 0x53, 0x2a, + 0x1f, 0x1f, 0x30, 0x9d, 0xda, 0x6e, 0x55, 0x5e, 0x29, 0x2e, 0xe0, 0x7d, 0xce, 0xe8, 0x1a, 0x13, + 0x30, 0x2a, 0x8d, 0x68, 0xba, 0x28, 0xde, 0xa5, 0x93, 0xbc, 0xde, 0xd7, 0xcf, 0xd1, 0x2b, 0x44, + 0x69, 0x22, 0x8e, 0x99, 0x64, 0xf2, 0x71, 0xf1, 0x13, 0x17, 0x9a, 0xca, 0xfc, 0x0a, 0x61, 0xa2, + 0x8b, 0x9c, 0xdc, 0x0e, 0x4d, 0x33, 0xbc, 0x77, 0x0c, 0x28, 0x3a, 0xb5, 0xff, 0x64, 0xda, 0x74, + 0xb3, 0xe7, 0xe4, 0xbc, 0xe9, 0x66, 0x41, 0x7e, 0x17, 0x9b, 0xee, 0x02, 0x31, 0xa7, 0xf4, 0x13, + 0xff, 0x9b, 0x80, 0x66, 0xac, 0x8b, 0xb4, 0x28, 0xd4, 0x11, 0x1c, 0x90, 0x67, 0x11, 0x06, 0xd9, + 0x10, 0x8e, 0xbb, 0xae, 0x15, 0x90, 0xa2, 0xb0, 0x4b, 0x50, 0xe5, 0x0d, 0xec, 0xb2, 0x23, 0x7d, + 0x61, 0xd8, 0xb8, 0xc9, 0xbc, 0x72, 0xa6, 0xf4, 0x21, 0xed, 0xf2, 0x3e, 0xea, 0x01, 0xf4, 0xc9, + 0x87, 0x58, 0x44, 0xe8, 0x1c, 0xce, 0x01, 0x62, 0x69, 0x4f, 0x02, 0x0a, 0xa5, 0x87, 0xae, 0xa6, + 0xfb, 0xcf, 0x32, 0xde, 0xb6, 0xf7, 0x91, 0x71, 0x60, 0x0c, 0xfd, 0x76, 0xf0, 0x88, 0x0b, 0xcd, + 0xf2, 0x29, 0x4d, 0x6c, 0xb4, 0xab, 0x63, 0x91, 0x26, 0x07, 0x06, 0xb1, 0x83, 0x72, 0x64, 0x10, + 0x7b, 0x60, 0x8a, 0x82, 0x93, 0xe4, 0x5a, 0x6b, 0xb6, 0x3e, 0x9b, 0xf4, 0x85, 0xe1, 0xd1, 0x13, + 0xcc, 0xe3, 0x79, 0x8d, 0xd9, 0x05, 0x3c, 0x39, 0x7c, 0x48, 0x87, 0x4b, 0x0e, 0xf6, 0x01, 0x28, + 0x09, 0xc7, 0xb1, 0x2f, 0xf5, 0xe6, 0x40, 0x66, 0x80, 0xe2, 0x24, 0x39, 0x7c, 0x30, 0xdd, 0x76, + 0x4d, 0xeb, 0xbd, 0xc8, 0x9c, 0x3c, 0xfb, 0x00, 0x27, 0xde, 0x2f, 0x83, 0x93, 0x2f, 0xf2, 0xd0, + 0xcc, 0x9a, 0x46, 0xc5, 0x1f, 0xa6, 0xde, 0xb9, 0x80, 0x10, 0xab, 0x0f, 0x4b, 0x36, 0x08, 0xc3, + 0xc6, 0xe2, 0x71, 0x40, 0xb2, 0x1b, 0xbe, 0x3c, 0x55, 0xfe, 0x73, 0x97, 0x38, 0x97, 0xbf, 0x90, + 0xa3, 0x33, 0x65, 0x4b, 0x5f, 0x7a, 0xc9, 0x35, 0x4e, 0x94, 0x5c, 0x3f, 0x9d, 0x1c, 0x3e, 0xa4, + 0x23, 0x40, 0x2f, 0xd7, 0xae, 0x5f, 0x4b, 0x0d, 0xb6, 0xa7, 0x0f, 0xef, 0x03, 0x1d, 0x81, 0xff, + 0xd4, 0xe7, 0xad, 0x7b, 0x8d, 0x5b, 0xe9, 0xc1, 0x21, 0x6d, 0x64, 0x6f, 0xaa, 0x8f, 0xfe, 0xc4, + 0x0d, 0x6f, 0xbc, 0xae, 0xd7, 0x42, 0x5c, 0x7a, 0x9a, 0x53, 0x12, 0xf6, 0xaa, 0xe1, 0xf6, 0xcc, + 0xab, 0x37, 0xd2, 0x67, 0xfb, 0x31, 0xcf, 0x91, 0xfe, 0xe1, 0x3d, 0x0b, 0x40, 0x82, 0x7a, 0x02, + 0x5b, 0x5a, 0xe6, 0xd5, 0x1b, 0xc9, 0x9b, 0x27, 0x33, 0x03, 0x2c, 0xe2, 0x15, 0x01, 0xd6, 0x3e, + 0xf9, 0x30, 0x3d, 0xdc, 0xad, 0xf5, 0x77, 0xa5, 0x3a, 0x0e, 0xeb, 0xf2, 0x00, 0x22, 0xa9, 0x40, + 0x9f, 0x99, 0x9b, 0x6f, 0x69, 0x43, 0xef, 0xde, 0x1a, 0xe9, 0xa2, 0xe1, 0x55, 0x5a, 0x7b, 0x32, + 0x37, 0xf7, 0xd3, 0xa7, 0xa7, 0x3d, 0x6d, 0x9b, 0xfc, 0xf1, 0x9d, 0xc0, 0x05, 0x99, 0x81, 0x77, + 0xd3, 0xc3, 0xfb, 0x80, 0xeb, 0x19, 0x2f, 0x3c, 0xea, 0x5d, 0x31, 0x81, 0x75, 0x27, 0x65, 0x6c, + 0xf1, 0x2f, 0xe5, 0xa3, 0x3b, 0x2c, 0xeb, 0xb5, 0x45, 0xb2, 0xda, 0x99, 0x6d, 0x80, 0x1c, 0xaf, + 0xcb, 0x6d, 0x61, 0x29, 0x09, 0x0c, 0xe7, 0xa9, 0xf2, 0xff, 0x70, 0x89, 0x4f, 0xe7, 0x20, 0x01, + 0x3d, 0xfc, 0xcc, 0x6f, 0x9a, 0x95, 0xd8, 0x2e, 0x9a, 0x81, 0x9b, 0xd0, 0x04, 0xe0, 0x06, 0x30, + 0xfa, 0x23, 0xc5, 0x7c, 0x05, 0x8a, 0x79, 0xc8, 0x86, 0x62, 0xa4, 0xb1, 0x29, 0x46, 0xfc, 0x8f, + 0xf4, 0xb0, 0x66, 0x12, 0x15, 0xe3, 0xd2, 0x93, 0xca, 0x72, 0xbc, 0x07, 0x30, 0x0b, 0x89, 0xb8, + 0x2a, 0x3f, 0x2a, 0xce, 0x80, 0xf1, 0xe2, 0x8f, 0xd2, 0xed, 0x96, 0xba, 0x1f, 0x6b, 0x57, 0x4e, + 0x25, 0x87, 0x0e, 0xe9, 0x92, 0x10, 0xcb, 0x53, 0x50, 0x37, 0x38, 0x65, 0x62, 0x99, 0x38, 0x51, + 0x39, 0x28, 0xfe, 0x83, 0x60, 0x7a, 0xf0, 0xc0, 0xd8, 0x60, 0xf1, 0x58, 0xa3, 0x36, 0xb8, 0xc0, + 0x3b, 0x1e, 0xd0, 0x6f, 0x74, 0x8a, 0xd2, 0x18, 0x53, 0xcc, 0x43, 0x73, 0xe0, 0x90, 0x42, 0xca, + 0x6b, 0x95, 0x78, 0x28, 0xa6, 0x10, 0x4f, 0x25, 0xd1, 0xe1, 0xb2, 0x36, 0x1b, 0x8e, 0x4d, 0x75, + 0xc9, 0x78, 0xc1, 0xe9, 0x74, 0x53, 0x2e, 0x55, 0x3e, 0xeb, 0x12, 0xef, 0x84, 0x33, 0x0f, 0x07, + 0x41, 0x4d, 0x31, 0xed, 0xae, 0xec, 0xd3, 0xd0, 0x60, 0x9f, 0x05, 0x8a, 0xba, 0x14, 0x81, 0xf9, + 0x69, 0xa4, 0x47, 0x1b, 0x18, 0xc9, 0xec, 0xff, 0x48, 0x6f, 0x41, 0xa9, 0x5f, 0x0f, 0x42, 0x30, + 0x72, 0x54, 0x6b, 0x3f, 0x4f, 0x83, 0xe7, 0x13, 0x2e, 0xd0, 0xef, 0x3c, 0xb4, 0xeb, 0xd7, 0xe0, + 0x92, 0x80, 0x45, 0x26, 0x34, 0x38, 0x1c, 0xce, 0x13, 0xe9, 0x9e, 0xb6, 0xa0, 0xf1, 0x71, 0xad, + 0xfb, 0xfd, 0xcc, 0xab, 0x37, 0x52, 0x03, 0x6f, 0x68, 0x37, 0x5e, 0xd7, 0x3a, 0x0f, 0x66, 0x2e, + 0x10, 0x57, 0x9a, 0x73, 0x17, 0x74, 0xce, 0x4d, 0x0d, 0xbc, 0x91, 0xbc, 0x7e, 0x40, 0xeb, 0x3c, + 0xa8, 0x5d, 0xee, 0xbe, 0x35, 0xf2, 0x96, 0x71, 0x76, 0xd9, 0xdf, 0xad, 0x5d, 0xee, 0xe6, 0x97, + 0x10, 0xda, 0x66, 0x06, 0x3e, 0x01, 0xe9, 0x66, 0x91, 0x92, 0x64, 0x61, 0x1f, 0xf3, 0x3c, 0x34, + 0x01, 0xda, 0xa5, 0x03, 0x65, 0xd2, 0x7c, 0xc8, 0x65, 0xb7, 0xc4, 0x24, 0x6d, 0xc5, 0x38, 0x96, + 0x18, 0xc3, 0x4d, 0x60, 0x89, 0x01, 0x9c, 0x2e, 0xf1, 0x1f, 0x09, 0xaa, 0xfc, 0x07, 0x59, 0x2b, + 0x8c, 0x01, 0xe8, 0x0a, 0xfb, 0xad, 0x0b, 0xcc, 0x79, 0x29, 0x01, 0x50, 0xba, 0xa7, 0x8d, 0x6b, + 0xa8, 0xfb, 0xbb, 0x11, 0x44, 0x0f, 0x63, 0xb1, 0xff, 0xe6, 0x40, 0xf2, 0x66, 0x7f, 0xaa, 0xef, + 0x1d, 0xfa, 0xac, 0x69, 0xf0, 0x60, 0x72, 0xb0, 0x35, 0xb3, 0xff, 0x23, 0x88, 0x73, 0xf0, 0xe5, + 0x91, 0x17, 0x0f, 0xed, 0x26, 0xc8, 0xfb, 0xc8, 0xc5, 0x3c, 0x1f, 0x08, 0xc4, 0xba, 0x50, 0x78, + 0x9d, 0xff, 0x65, 0x82, 0xbb, 0xf2, 0x1c, 0xc8, 0x30, 0xc0, 0xc6, 0xf0, 0x7c, 0xb0, 0x40, 0x53, + 0xcc, 0xdd, 0x20, 0x3e, 0x75, 0x73, 0x01, 0x41, 0x4d, 0xa1, 0x30, 0xae, 0xac, 0x6c, 0x02, 0x20, + 0x8a, 0xbd, 0x5f, 0x8e, 0x0f, 0x7b, 0x90, 0xe6, 0x0c, 0xff, 0xff, 0x72, 0xf7, 0xe8, 0x89, 0xc3, + 0xa3, 0x6f, 0x9f, 0xe4, 0x71, 0xa7, 0x1d, 0xec, 0xce, 0x5c, 0x7e, 0x55, 0x3b, 0xd7, 0xa3, 0xe3, + 0x00, 0xb8, 0x05, 0x34, 0x08, 0xcf, 0x44, 0x34, 0x88, 0x6d, 0x91, 0xe6, 0xb0, 0x8e, 0xb6, 0x0e, + 0x33, 0xcd, 0xc9, 0xf1, 0x4d, 0xa1, 0x26, 0xc5, 0xe7, 0x0f, 0x37, 0xe4, 0xa6, 0x39, 0x0e, 0x6e, + 0x3c, 0x34, 0x67, 0x02, 0xa7, 0x98, 0x3b, 0x24, 0xc0, 0x1b, 0x39, 0x93, 0x77, 0xc5, 0x19, 0xad, + 0xbf, 0x27, 0x75, 0xfc, 0x5a, 0xaa, 0xf3, 0x3d, 0x78, 0x4e, 0x99, 0xee, 0x3b, 0x96, 0x3e, 0x7a, + 0xbe, 0x74, 0x5c, 0x50, 0x5f, 0x02, 0x15, 0x89, 0x50, 0x93, 0x12, 0xc3, 0xa3, 0x22, 0x9e, 0x26, + 0x2e, 0x92, 0x27, 0xcb, 0x9a, 0x36, 0xb9, 0x7a, 0x17, 0xcb, 0xdd, 0x5d, 0x6e, 0xb3, 0x57, 0x3a, + 0xa6, 0xcc, 0xb6, 0x92, 0x52, 0xce, 0xa4, 0xcc, 0x9e, 0x61, 0x41, 0x95, 0xff, 0x50, 0xac, 0xa0, + 0x11, 0x5e, 0x38, 0xc9, 0x93, 0xf5, 0x1c, 0x12, 0x1e, 0xe9, 0x42, 0xca, 0xe6, 0xd2, 0x75, 0x86, + 0xbf, 0x1d, 0x98, 0x6a, 0x88, 0x99, 0x30, 0x39, 0x74, 0xc4, 0xda, 0x8e, 0xe5, 0x02, 0xcf, 0x7a, + 0xbc, 0x93, 0x50, 0xc2, 0x01, 0x25, 0x0c, 0x56, 0xd7, 0x1c, 0x87, 0x79, 0xe3, 0xdc, 0x9e, 0x85, + 0xc3, 0x38, 0x99, 0x85, 0x78, 0xd8, 0x85, 0xe6, 0x6d, 0x8a, 0xf9, 0xc3, 0x71, 0x9d, 0xce, 0x37, + 0x45, 0xd6, 0x73, 0xf1, 0xd0, 0xc4, 0xe5, 0xd9, 0xd8, 0xc8, 0x05, 0xcd, 0x50, 0xb8, 0x62, 0x62, + 0x8d, 0x28, 0x26, 0xdb, 0x04, 0x55, 0x5e, 0x2d, 0x2e, 0xd0, 0xc9, 0x25, 0x73, 0xe3, 0x12, 0x79, + 0xb3, 0x40, 0x2d, 0x90, 0xf4, 0x52, 0x71, 0x51, 0x8e, 0xfa, 0x74, 0x67, 0x07, 0xe7, 0xf9, 0xf2, + 0xa0, 0x67, 0xf9, 0x44, 0x88, 0x8a, 0xcd, 0xf8, 0xa8, 0x0b, 0x95, 0xac, 0x22, 0xb1, 0x50, 0xf5, + 0x01, 0xcb, 0xcd, 0x89, 0x08, 0x09, 0xfd, 0x68, 0x7d, 0xce, 0xe1, 0x04, 0xc9, 0x50, 0xb1, 0x74, + 0xfc, 0x0d, 0x28, 0x1a, 0x8e, 0x02, 0x87, 0x41, 0x70, 0x56, 0x63, 0xb2, 0x40, 0x0c, 0xc4, 0x3b, + 0x57, 0xe7, 0xa0, 0x52, 0x13, 0x14, 0xdd, 0xf0, 0x08, 0x08, 0x98, 0x65, 0xe1, 0x29, 0x3f, 0x41, + 0xc6, 0x53, 0x9e, 0xc7, 0x26, 0x80, 0x0c, 0x26, 0xe9, 0x94, 0x4a, 0x88, 0x0a, 0x8b, 0x19, 0xed, + 0x84, 0x0b, 0xdd, 0x55, 0x1b, 0x8a, 0x3b, 0x20, 0xc6, 0x32, 0x4f, 0x47, 0x50, 0x86, 0x99, 0x65, + 0x13, 0x68, 0x41, 0x51, 0x73, 0x8c, 0xa2, 0xa6, 0xfd, 0xea, 0xe8, 0xf1, 0xbe, 0x31, 0x51, 0xc3, + 0x41, 0xe5, 0x44, 0x8d, 0xec, 0x79, 0xfc, 0x4b, 0xa1, 0x26, 0x08, 0xe3, 0xc5, 0xb8, 0x79, 0x07, + 0xf2, 0x50, 0xda, 0x86, 0x0e, 0xb2, 0xd2, 0xcc, 0x18, 0xe1, 0xa2, 0xac, 0x34, 0x33, 0x56, 0x54, + 0x22, 0xcf, 0x3b, 0xc4, 0xdc, 0x51, 0xc2, 0x87, 0x99, 0xe2, 0xe3, 0x11, 0x95, 0xd2, 0xdb, 0x08, + 0x16, 0x5a, 0x0c, 0xc4, 0x0d, 0xdc, 0xad, 0xd0, 0xf8, 0x57, 0x1d, 0xc7, 0x32, 0xad, 0xed, 0xba, + 0x2a, 0x07, 0x8d, 0xf5, 0xd8, 0x46, 0xdc, 0x6e, 0x5f, 0x25, 0x3e, 0x62, 0xff, 0x4c, 0x90, 0x74, + 0x0c, 0xef, 0x04, 0x69, 0xf8, 0xb2, 0xdf, 0x56, 0xea, 0x91, 0xcd, 0x9a, 0x09, 0x22, 0xfa, 0x05, + 0x84, 0xe0, 0x0a, 0x82, 0x84, 0x71, 0x71, 0x08, 0x3e, 0x83, 0xeb, 0x9c, 0x3d, 0x7b, 0x39, 0x10, + 0xc3, 0x8b, 0x71, 0x85, 0x58, 0x4c, 0xef, 0x75, 0x21, 0xdc, 0xc5, 0x22, 0x1a, 0x83, 0xe5, 0xe8, + 0xcd, 0xd4, 0xf1, 0x6b, 0xa3, 0xc7, 0x3f, 0xca, 0xdc, 0x3c, 0x9c, 0x39, 0xdb, 0x95, 0xee, 0x69, + 0xd3, 0x0e, 0x1f, 0xd2, 0xba, 0x2f, 0x73, 0x51, 0x59, 0xec, 0x1d, 0xfa, 0x13, 0xfe, 0xf8, 0x4e, + 0xbc, 0xac, 0xaf, 0xba, 0x50, 0x11, 0x09, 0x1a, 0x43, 0xc6, 0xeb, 0xb6, 0x8d, 0x27, 0xc3, 0x0f, + 0xf7, 0xee, 0x1c, 0x10, 0x74, 0xb4, 0x97, 0x89, 0xce, 0x36, 0x83, 0x06, 0x9b, 0x21, 0x51, 0x64, + 0x70, 0x7d, 0xe9, 0x0e, 0x1a, 0x63, 0x86, 0x94, 0x60, 0xc4, 0x93, 0x31, 0x96, 0xbb, 0x69, 0x5c, + 0x6f, 0x02, 0x0e, 0x11, 0xbc, 0x97, 0xb8, 0xe1, 0xd7, 0xff, 0xc7, 0xdd, 0xd5, 0xc6, 0x46, 0x71, + 0xdc, 0xfd, 0x67, 0x2f, 0x7a, 0xa2, 0x68, 0xa5, 0x27, 0xf0, 0x0c, 0x21, 0xc0, 0x26, 0x35, 0xce, + 0xb5, 0xe5, 0xc5, 0x01, 0x0e, 0x08, 0x21, 0x14, 0x85, 0x26, 0x6b, 0x9c, 0x18, 0xc7, 0x24, 0x71, + 0x30, 0xa5, 0x29, 0xdf, 0xce, 0xe7, 0x8d, 0x7d, 0xb1, 0x7d, 0x7b, 0xbd, 0x5d, 0x9b, 0x3a, 0x96, + 0xab, 0x50, 0x30, 0xc4, 0x98, 0xd7, 0x33, 0x84, 0x92, 0x92, 0x04, 0x57, 0x71, 0x70, 0x49, 0x62, + 0x48, 0x42, 0xe0, 0x72, 0x2e, 0xd0, 0x7c, 0xe8, 0x87, 0xa8, 0x51, 0xaa, 0x54, 0x6a, 0xa4, 0xb6, + 0x1f, 0xaa, 0xb6, 0xb7, 0xe7, 0x73, 0x3f, 0xa4, 0x1f, 0xa2, 0x4a, 0x55, 0xd4, 0x54, 0xd5, 0xce, + 0x7f, 0x66, 0x77, 0xf6, 0x76, 0x66, 0xf7, 0xce, 0xa0, 0x50, 0xf5, 0x0b, 0x3e, 0x76, 0x7e, 0x7b, + 0x37, 0xbf, 0xdf, 0xce, 0xdb, 0xce, 0xfc, 0x5f, 0x0a, 0x53, 0x43, 0x33, 0xa7, 0x8e, 0x16, 0xf2, + 0x87, 0xe1, 0x1e, 0xb8, 0xa1, 0x90, 0x3b, 0x5e, 0x98, 0x3a, 0x0c, 0xcb, 0x66, 0xb8, 0x6e, 0x98, + 0x5a, 0xda, 0x1e, 0x25, 0xce, 0x8e, 0x14, 0x87, 0xcf, 0x96, 0xc6, 0x0e, 0x06, 0x84, 0xaf, 0xb0, + 0x69, 0xc7, 0x06, 0xec, 0x7f, 0x3d, 0x61, 0x68, 0x72, 0x11, 0xf9, 0xb6, 0xd6, 0xae, 0x64, 0x1a, + 0x8b, 0xe0, 0xb3, 0xbe, 0xa0, 0x25, 0x42, 0xeb, 0x0b, 0x17, 0x40, 0x24, 0x28, 0x49, 0x59, 0xf5, + 0xa2, 0x84, 0xee, 0x2c, 0x5d, 0x7e, 0xb7, 0x74, 0x6d, 0x3f, 0x5b, 0x57, 0xac, 0xc4, 0x29, 0x29, + 0x50, 0x0a, 0xb8, 0x8b, 0x4a, 0xc1, 0xfe, 0xcf, 0x9e, 0x1b, 0xf1, 0x07, 0xf6, 0x2b, 0x59, 0x59, + 0x0a, 0xb9, 0x91, 0x42, 0xee, 0xf9, 0xe2, 0x5b, 0xe3, 0xac, 0x1e, 0x2b, 0x6a, 0x09, 0xe4, 0xfd, + 0x91, 0x99, 0x93, 0x17, 0x8b, 0xa7, 0x87, 0xa7, 0x7f, 0x92, 0x2b, 0xe4, 0xb3, 0x85, 0xab, 0x2f, + 0x97, 0xde, 0x7b, 0xb1, 0x90, 0x3b, 0x64, 0x4d, 0xe5, 0x4b, 0x93, 0x93, 0xf0, 0x3b, 0x70, 0x02, + 0xa9, 0x7c, 0x33, 0x54, 0x3b, 0xa3, 0x2b, 0x89, 0x0f, 0xbb, 0xc6, 0x1c, 0x8f, 0x10, 0x7e, 0x8b, + 0x77, 0xcb, 0x42, 0x3c, 0x42, 0x3c, 0x02, 0x6e, 0xcd, 0xaa, 0x35, 0x48, 0x86, 0xc5, 0x15, 0x96, + 0x6c, 0xae, 0xfb, 0x99, 0x39, 0xc6, 0xe0, 0xdb, 0x7d, 0x7b, 0x2a, 0x6a, 0xd7, 0xf1, 0x15, 0x49, + 0x96, 0xe1, 0x00, 0x8a, 0x5f, 0x47, 0xb7, 0x4c, 0x58, 0x47, 0x16, 0x42, 0xea, 0xd8, 0x84, 0xeb, + 0x08, 0x07, 0x44, 0x50, 0x47, 0xf6, 0xc8, 0xca, 0xbe, 0x02, 0xb6, 0xdd, 0x75, 0xa1, 0x75, 0x44, + 0x2f, 0x83, 0x83, 0x16, 0xae, 0x1d, 0xcf, 0x41, 0x8b, 0xad, 0xda, 0x62, 0x61, 0x39, 0xa9, 0xd7, + 0x53, 0x59, 0x75, 0x09, 0x75, 0xd0, 0xc2, 0xf5, 0x5a, 0xc8, 0x9e, 0x07, 0x6d, 0xc7, 0x3f, 0xc9, + 0x68, 0x18, 0x45, 0xe1, 0xf5, 0x3b, 0x15, 0x91, 0x6f, 0xdb, 0x9a, 0x34, 0x4c, 0x7e, 0xff, 0xa0, + 0x25, 0xc2, 0xfe, 0xe1, 0x02, 0x48, 0x15, 0x3f, 0x94, 0xb2, 0xea, 0xeb, 0x12, 0xdd, 0xaa, 0xb0, + 0x8b, 0xc8, 0x56, 0xc5, 0x31, 0xe1, 0xe1, 0x87, 0x0b, 0xba, 0x19, 0xe7, 0x1e, 0x8b, 0x90, 0x68, + 0x10, 0xb5, 0xd7, 0x97, 0x0b, 0x60, 0xcc, 0xa6, 0xb3, 0xb9, 0xe3, 0x20, 0xe3, 0x8f, 0x7c, 0x22, + 0x00, 0x0a, 0x23, 0x9f, 0x08, 0xf1, 0x44, 0xc8, 0x51, 0x29, 0xab, 0xc6, 0x51, 0x8d, 0x27, 0xa4, + 0x97, 0x0f, 0xad, 0x3c, 0x14, 0x5c, 0xee, 0x9c, 0x77, 0x93, 0x1f, 0x5f, 0xe9, 0x2c, 0x00, 0x32, + 0xe0, 0x0b, 0x04, 0xfe, 0x94, 0x51, 0x9e, 0x49, 0x2a, 0xf3, 0xc2, 0xa8, 0xe3, 0x2f, 0xb3, 0xfb, + 0x5b, 0x21, 0x42, 0x8d, 0xab, 0x2b, 0x90, 0x44, 0x00, 0x14, 0x4a, 0x22, 0xc4, 0x13, 0x49, 0xa6, + 0xc1, 0x92, 0x6c, 0x83, 0xc7, 0x82, 0xda, 0x07, 0x5f, 0x51, 0xeb, 0xd9, 0x80, 0xc5, 0x41, 0x69, + 0xe1, 0x0e, 0xa5, 0xdb, 0x77, 0xa7, 0x51, 0xa6, 0x56, 0x21, 0xf7, 0x7c, 0x21, 0x77, 0x4e, 0xf4, + 0xd5, 0x10, 0xa9, 0x12, 0x30, 0xd0, 0x84, 0x6c, 0x81, 0x2f, 0xfe, 0xd4, 0xfa, 0xf9, 0x09, 0xe8, + 0x76, 0x85, 0x5c, 0xde, 0x39, 0x77, 0x0c, 0x30, 0xe8, 0xf6, 0x49, 0x5b, 0x1e, 0x74, 0xe9, 0xf7, + 0xb7, 0xc8, 0x77, 0x13, 0x35, 0x0c, 0xf8, 0xe9, 0x06, 0xad, 0x2f, 0x99, 0xd0, 0xe8, 0x42, 0xca, + 0xff, 0x66, 0x13, 0x84, 0x16, 0xbe, 0xd9, 0x04, 0xdf, 0x44, 0x54, 0xff, 0x38, 0x92, 0x55, 0xbf, + 0x90, 0xd0, 0x40, 0xb0, 0x76, 0xce, 0xa2, 0xcb, 0x59, 0x86, 0x39, 0x5b, 0x09, 0x56, 0xfe, 0x38, + 0x34, 0xc2, 0xd2, 0xfe, 0x73, 0xd3, 0x67, 0x8e, 0x17, 0xf2, 0xc7, 0x0a, 0x57, 0xaf, 0x15, 0xf2, + 0x87, 0x0b, 0xf9, 0xb3, 0xd6, 0xe8, 0xee, 0xd2, 0xe4, 0x05, 0xeb, 0xda, 0x3e, 0xfb, 0x05, 0xf3, + 0xcd, 0x31, 0x08, 0xf1, 0xe5, 0xff, 0x2a, 0xe5, 0x66, 0xfe, 0x38, 0x7e, 0x8e, 0x8f, 0x29, 0x8f, + 0x54, 0xfb, 0x1c, 0x79, 0xeb, 0x4a, 0xfc, 0x70, 0xf7, 0x47, 0xa8, 0xb5, 0x7e, 0x05, 0x7d, 0x48, + 0x00, 0x14, 0xf6, 0x21, 0x21, 0x9e, 0x3c, 0xcd, 0x03, 0xf8, 0x78, 0xb5, 0xc6, 0x63, 0x9d, 0xef, + 0x1f, 0x56, 0x56, 0x12, 0xe3, 0x08, 0x38, 0x43, 0xa1, 0x67, 0xf4, 0x22, 0x78, 0x80, 0x4d, 0x7f, + 0xa0, 0x42, 0xb6, 0x12, 0x77, 0x34, 0x6a, 0xa6, 0x5f, 0x06, 0x5e, 0xe0, 0x23, 0xa1, 0x06, 0x2b, + 0x2a, 0x03, 0x33, 0xe3, 0xea, 0xd3, 0xd4, 0xfc, 0x40, 0x28, 0xc0, 0x7a, 0x76, 0x62, 0x75, 0x03, + 0x0e, 0x88, 0x35, 0x60, 0x2d, 0x1b, 0x51, 0xf5, 0x4a, 0xfc, 0x3d, 0x02, 0xde, 0x0d, 0x7e, 0x29, + 0xb8, 0xb6, 0x15, 0x42, 0x2d, 0x56, 0x56, 0x88, 0x26, 0x62, 0xfc, 0x4b, 0xca, 0xaa, 0x1f, 0x4b, + 0x34, 0x6a, 0x94, 0x70, 0xd8, 0x83, 0x19, 0x7c, 0x3c, 0x2c, 0x86, 0x89, 0xe0, 0xc6, 0x9b, 0x31, + 0xab, 0xf3, 0xbd, 0x2c, 0x7c, 0xcf, 0x00, 0x1d, 0xe0, 0xcd, 0x67, 0xad, 0x66, 0xdc, 0xec, 0x35, + 0x2a, 0x98, 0xcf, 0x00, 0x58, 0xf9, 0x7c, 0x46, 0xf1, 0x44, 0xfd, 0x43, 0x52, 0x56, 0xdd, 0x82, + 0xa2, 0xb0, 0x0d, 0x12, 0x83, 0x57, 0x7e, 0x62, 0xdd, 0x80, 0xcd, 0xd3, 0xdc, 0xfd, 0x80, 0x0a, + 0x30, 0x98, 0xf6, 0x83, 0xca, 0x03, 0x55, 0x0f, 0x53, 0x06, 0xae, 0x94, 0x3d, 0x30, 0x1d, 0x88, + 0xc8, 0xf3, 0x5b, 0xfb, 0x53, 0x89, 0x0a, 0x1a, 0x21, 0x17, 0x26, 0x6c, 0x84, 0x02, 0x34, 0xd3, + 0x23, 0x5b, 0xd0, 0x92, 0xcd, 0x2a, 0xe1, 0x35, 0xf9, 0xca, 0xcc, 0xa9, 0x21, 0x38, 0xc4, 0x05, + 0x27, 0xe5, 0xd2, 0xfe, 0x77, 0xa7, 0x27, 0xc7, 0x8a, 0x87, 0xcf, 0x4e, 0xbf, 0x71, 0x5e, 0xa9, + 0x10, 0x07, 0xef, 0xfb, 0xca, 0xfd, 0xd5, 0xcb, 0xd1, 0x9f, 0xc2, 0xc6, 0xd2, 0x9f, 0x4b, 0x32, + 0x72, 0x4d, 0x0e, 0x9d, 0x2d, 0xc5, 0xe5, 0x62, 0xb3, 0xc4, 0xf2, 0x8d, 0xc4, 0xba, 0x4a, 0xa0, + 0x44, 0x83, 0x21, 0x29, 0xab, 0xd6, 0xa3, 0x85, 0x6c, 0xf8, 0x55, 0x76, 0x63, 0x90, 0x46, 0xf7, + 0xf0, 0x97, 0x2c, 0x83, 0x40, 0x48, 0x10, 0x24, 0x1a, 0xc2, 0x99, 0x6c, 0x8c, 0xde, 0x5f, 0x69, + 0x30, 0xa4, 0x94, 0xde, 0xae, 0xd1, 0xbd, 0x43, 0xdc, 0x04, 0xfe, 0x29, 0xc9, 0x88, 0xf1, 0x57, + 0x14, 0xb2, 0xf6, 0x63, 0x84, 0xac, 0x79, 0x50, 0x66, 0x3f, 0x7e, 0x23, 0xaa, 0x21, 0x8e, 0xed, + 0x98, 0x08, 0xcb, 0x8d, 0x9a, 0xbd, 0x7b, 0x76, 0xe2, 0x99, 0x12, 0xcc, 0xb6, 0x59, 0x79, 0x74, + 0x56, 0x6c, 0x61, 0x67, 0xcc, 0x4d, 0xab, 0x30, 0x48, 0x1f, 0xba, 0x6b, 0xcf, 0x28, 0xa6, 0xef, + 0xc7, 0x08, 0xe9, 0xf3, 0xa0, 0xcc, 0x43, 0x5f, 0x67, 0x3f, 0xf4, 0x33, 0x8e, 0x79, 0x0f, 0xeb, + 0xb6, 0xa1, 0x2c, 0x64, 0xdf, 0x3a, 0x59, 0xfa, 0x98, 0xf8, 0x96, 0xba, 0x1b, 0x44, 0x1c, 0x7d, + 0x11, 0x71, 0xcf, 0xe8, 0x1d, 0xce, 0x4b, 0x45, 0xa7, 0xd3, 0xe5, 0x8c, 0x97, 0x85, 0x03, 0x09, + 0xdf, 0x6c, 0x24, 0xab, 0x7e, 0xe2, 0xcc, 0x36, 0x6c, 0xbc, 0x2f, 0x96, 0x1c, 0x99, 0x6d, 0x26, + 0x84, 0xb3, 0x0d, 0xab, 0xd4, 0x57, 0x36, 0xc3, 0x38, 0xb5, 0x65, 0x03, 0x08, 0x32, 0x4f, 0xe3, + 0x01, 0x34, 0xbb, 0x4e, 0x67, 0xf7, 0xb8, 0x39, 0xc4, 0xfc, 0xc1, 0xd1, 0x7e, 0x89, 0xc0, 0x3e, + 0xa2, 0x5c, 0xfa, 0xa5, 0xa1, 0x38, 0xa2, 0xfc, 0x49, 0x7c, 0x3a, 0x51, 0xe7, 0x17, 0xde, 0x1a, + 0xba, 0x5c, 0xb8, 0x32, 0xea, 0x3f, 0x83, 0x50, 0x16, 0xb2, 0x67, 0x42, 0xbe, 0xd3, 0x89, 0x2d, + 0xe8, 0x46, 0xb5, 0xbd, 0xcf, 0x9c, 0xd8, 0x49, 0x65, 0x79, 0x70, 0xef, 0x15, 0x8d, 0x9e, 0x9c, + 0x6c, 0x27, 0xfe, 0x25, 0x60, 0x50, 0x2e, 0xa5, 0xe8, 0x40, 0x56, 0x5d, 0x8f, 0xca, 0xf3, 0x35, + 0xd9, 0xa3, 0x6c, 0xad, 0xff, 0x1a, 0x67, 0x7c, 0x7d, 0x30, 0xfa, 0x40, 0xe5, 0xe4, 0xed, 0x0a, + 0x78, 0x46, 0xd8, 0x2f, 0x9d, 0xc8, 0x4a, 0x61, 0x84, 0x03, 0x12, 0x03, 0xf9, 0x09, 0x07, 0x25, + 0xfd, 0x89, 0x0e, 0xb3, 0x03, 0x0d, 0x9b, 0x52, 0x84, 0x37, 0xd0, 0xb0, 0xec, 0x31, 0xdf, 0xad, + 0x75, 0x8f, 0xcd, 0x92, 0xaf, 0xfd, 0xb8, 0xbd, 0xc9, 0x6b, 0x06, 0xd1, 0x8f, 0x6e, 0xa1, 0x76, + 0x33, 0x1e, 0xf6, 0x02, 0xbb, 0x19, 0x1e, 0xf7, 0xba, 0x4a, 0xa0, 0x84, 0xf9, 0xf1, 0xff, 0xe2, + 0x21, 0xe7, 0x5b, 0x68, 0xb6, 0xed, 0x10, 0xfd, 0xd6, 0x59, 0xdc, 0xe0, 0x33, 0x58, 0x35, 0x91, + 0xd0, 0x7b, 0x53, 0xa6, 0x68, 0x71, 0xc3, 0x62, 0x42, 0x16, 0x37, 0x5e, 0xa8, 0x1b, 0x49, 0x63, + 0x15, 0x9a, 0xef, 0x38, 0xaf, 0x95, 0x2e, 0xbe, 0x6e, 0x1d, 0xb9, 0x4c, 0x9a, 0x1e, 0xff, 0x72, + 0x60, 0xd0, 0xf9, 0xb2, 0x98, 0xe5, 0x71, 0xf8, 0x35, 0xdc, 0xb9, 0xfe, 0xe0, 0x2c, 0x5f, 0x82, + 0x79, 0xf9, 0x31, 0x21, 0xcb, 0x17, 0x2e, 0xaf, 0x94, 0xd7, 0xdb, 0x15, 0x08, 0x30, 0xde, 0xae, + 0x3e, 0x46, 0x9b, 0x94, 0x0d, 0xd5, 0x30, 0x8a, 0x0d, 0x90, 0x4f, 0x64, 0x75, 0x72, 0x3c, 0x22, + 0xcf, 0x7b, 0x3c, 0xd9, 0x91, 0x29, 0xa7, 0xe7, 0xab, 0x33, 0x07, 0x24, 0x34, 0xbd, 0xe4, 0x62, + 0x99, 0x93, 0xb9, 0x24, 0x9a, 0x03, 0xe1, 0x4c, 0x5c, 0x86, 0x3b, 0xe0, 0x82, 0x75, 0xe0, 0x8c, + 0x75, 0x7e, 0x5f, 0x19, 0x4f, 0x1a, 0x99, 0xfd, 0xd0, 0x89, 0x42, 0xee, 0x1c, 0x14, 0x00, 0xfa, + 0x2f, 0xcf, 0xef, 0xb6, 0x5e, 0x7b, 0x09, 0xae, 0xd8, 0x9f, 0x87, 0x26, 0x66, 0xf6, 0x4c, 0xb0, + 0x00, 0x18, 0x5c, 0xd7, 0x28, 0x55, 0x3f, 0xf4, 0xbf, 0x3a, 0x8b, 0xb6, 0xe0, 0x87, 0xee, 0xc7, + 0x84, 0x2c, 0xda, 0xb8, 0x9a, 0x0c, 0xda, 0x4b, 0xd6, 0x85, 0xac, 0x87, 0xa0, 0xa7, 0x3d, 0xd7, + 0xf8, 0x9d, 0x04, 0x7d, 0xcd, 0x60, 0x63, 0xdd, 0xac, 0x9b, 0x01, 0xfa, 0x34, 0xc2, 0x38, 0xbf, + 0x51, 0xaa, 0x62, 0xe7, 0xb7, 0x32, 0xa2, 0xcb, 0xc2, 0x81, 0x84, 0xe6, 0x67, 0x52, 0x56, 0xbd, + 0x24, 0x79, 0xdd, 0xdf, 0x80, 0x08, 0x19, 0x2c, 0x4f, 0x85, 0x78, 0x10, 0xb2, 0xe0, 0xaf, 0x6c, + 0x07, 0x00, 0x7e, 0x14, 0x8b, 0xbc, 0x0a, 0x55, 0xd5, 0x90, 0xd0, 0xe7, 0x11, 0xf9, 0xce, 0x72, + 0x35, 0xb6, 0xeb, 0x2d, 0x5a, 0xa6, 0x47, 0xe4, 0x0b, 0xe3, 0xe2, 0x6c, 0x54, 0x88, 0x2f, 0x4c, + 0x39, 0x98, 0xc8, 0xfc, 0xa5, 0x94, 0x55, 0x3f, 0x95, 0xd0, 0x06, 0x91, 0xcc, 0xde, 0x84, 0xc9, + 0x10, 0xe1, 0x94, 0xec, 0x4c, 0xe2, 0x3b, 0xfe, 0xe3, 0x1f, 0x03, 0xdf, 0x97, 0xd3, 0x51, 0xdd, + 0x92, 0x64, 0xb4, 0x43, 0xcb, 0x24, 0x9f, 0xe9, 0x0f, 0xee, 0xbb, 0x7e, 0x8c, 0xb0, 0xef, 0xf2, + 0xa0, 0x44, 0xed, 0x1f, 0xe0, 0x65, 0x10, 0xc4, 0x01, 0x73, 0xc6, 0x2d, 0x27, 0x33, 0x88, 0x22, + 0x2c, 0x09, 0x30, 0x15, 0x14, 0xf7, 0x5a, 0x4f, 0x5c, 0xb0, 0x22, 0xac, 0xf2, 0x5b, 0xb5, 0x4c, + 0x5f, 0x32, 0xa1, 0x6d, 0xd3, 0xbb, 0x35, 0x83, 0xbb, 0xca, 0x67, 0x01, 0x41, 0xab, 0x7c, 0x2f, + 0x8e, 0xd0, 0xdb, 0x8d, 0x57, 0xf9, 0xf7, 0xc0, 0x93, 0x88, 0xef, 0x32, 0xa0, 0x05, 0x18, 0x00, + 0xad, 0xcd, 0xe8, 0xdd, 0xd4, 0x6c, 0x38, 0x1c, 0x12, 0x18, 0x7d, 0xa7, 0x8c, 0x31, 0xb9, 0x3b, + 0x83, 0x49, 0xfd, 0x49, 0x92, 0xff, 0xbf, 0x51, 0x33, 0xa9, 0xa5, 0x47, 0x23, 0xb8, 0x5d, 0xf1, + 0x22, 0x0a, 0x79, 0x21, 0x42, 0xdf, 0x10, 0x0e, 0x92, 0xd0, 0xdd, 0x65, 0x8f, 0xc4, 0x77, 0x01, + 0x15, 0x6a, 0xac, 0x51, 0x0b, 0xf6, 0x62, 0xd4, 0x89, 0x2c, 0xa0, 0x30, 0xd0, 0x89, 0xac, 0x8c, + 0x21, 0xfd, 0x02, 0xe2, 0x44, 0xf6, 0x11, 0x3c, 0x4c, 0x8f, 0xff, 0xf1, 0x12, 0x71, 0xdc, 0x06, + 0x8f, 0xfb, 0xf1, 0xd2, 0x50, 0x9c, 0xbb, 0x68, 0x5a, 0x8b, 0x16, 0x00, 0x01, 0x5c, 0x11, 0xb0, + 0x78, 0x21, 0xcc, 0x44, 0x05, 0x81, 0x21, 0xea, 0x7d, 0xac, 0xa0, 0xea, 0x25, 0x9a, 0xa9, 0xc0, + 0xa9, 0xc5, 0x4e, 0x9c, 0x11, 0xaa, 0x2e, 0xb8, 0xaa, 0x18, 0x14, 0x9c, 0xa9, 0xa0, 0x1c, 0xeb, + 0x76, 0xc3, 0x06, 0x54, 0xeb, 0x67, 0x80, 0xbb, 0x9b, 0x75, 0x30, 0x4f, 0x38, 0x86, 0x22, 0xc0, + 0x1a, 0x04, 0x2d, 0xaf, 0x84, 0x2c, 0x24, 0xb9, 0xfa, 0x4c, 0x62, 0x06, 0x79, 0xa8, 0x1a, 0x8d, + 0x43, 0xb3, 0x32, 0xc4, 0x2f, 0xbc, 0x2c, 0x22, 0xff, 0xaa, 0x4a, 0xe1, 0x84, 0x73, 0x2f, 0x04, + 0x88, 0x2a, 0x67, 0xc4, 0x06, 0x3a, 0x57, 0x82, 0x8b, 0xab, 0x99, 0xd5, 0x9c, 0x18, 0xd7, 0x9f, + 0x48, 0xe0, 0xef, 0x08, 0xe1, 0x01, 0xd2, 0x09, 0x03, 0x05, 0x44, 0x0f, 0x48, 0x27, 0x8c, 0x40, + 0x7f, 0x47, 0x06, 0xe5, 0xba, 0x25, 0x3c, 0x8c, 0x6a, 0x60, 0xab, 0xa0, 0x90, 0x3f, 0xc6, 0x9a, + 0x66, 0xf5, 0xa5, 0x13, 0x84, 0x56, 0x48, 0x79, 0x98, 0x67, 0x3c, 0xcb, 0xab, 0xcf, 0x66, 0xf0, + 0xa5, 0x24, 0x2f, 0x84, 0x64, 0x4c, 0xc9, 0xf6, 0xcc, 0x66, 0x3d, 0xf5, 0x4c, 0x77, 0x32, 0x61, + 0x3e, 0x9a, 0xd1, 0x7b, 0x76, 0xa4, 0x13, 0x7e, 0x7b, 0x35, 0x11, 0x52, 0x68, 0xaf, 0x26, 0xbe, + 0x81, 0x90, 0xfe, 0x61, 0x56, 0x5d, 0x8f, 0x16, 0x91, 0x80, 0x16, 0xb9, 0x11, 0xec, 0x42, 0xbf, + 0xef, 0x9d, 0xe9, 0x73, 0xbb, 0x49, 0x06, 0x2a, 0x71, 0x11, 0xa6, 0xfa, 0x10, 0xda, 0x54, 0x29, + 0x55, 0x70, 0xa4, 0x6f, 0x1f, 0x8c, 0xd9, 0x5f, 0x94, 0x20, 0xd5, 0x41, 0x7f, 0x64, 0xe3, 0x1f, + 0x40, 0xc8, 0xf1, 0xa0, 0xf8, 0x07, 0x04, 0x11, 0xbe, 0x04, 0x74, 0x80, 0x6e, 0x37, 0xad, 0xa7, + 0xae, 0xac, 0xf6, 0xd3, 0xc2, 0xe1, 0xc6, 0xc9, 0x33, 0x5d, 0x1e, 0x18, 0x2c, 0x00, 0xa0, 0xcc, + 0x8a, 0xb7, 0xc2, 0x11, 0x89, 0xc4, 0x26, 0x47, 0xd3, 0x92, 0xbc, 0xc0, 0xad, 0x96, 0x96, 0xe8, + 0xcd, 0x24, 0xcd, 0x7e, 0x32, 0x95, 0x88, 0x3b, 0x9e, 0x17, 0x28, 0x3c, 0x95, 0x11, 0xe2, 0x09, + 0xed, 0x2e, 0xfc, 0xb6, 0x4a, 0x1c, 0x6b, 0x26, 0x87, 0xad, 0xa1, 0x89, 0xe9, 0xa9, 0xbd, 0x84, + 0x36, 0xff, 0x72, 0x35, 0x53, 0x89, 0x41, 0x7e, 0x94, 0x4c, 0x25, 0xbf, 0x90, 0x20, 0x02, 0x48, + 0xb3, 0xd6, 0x9f, 0x8e, 0x27, 0x33, 0x06, 0x3f, 0x02, 0x48, 0xb3, 0xd6, 0xdf, 0x62, 0x97, 0x06, + 0x46, 0x00, 0x71, 0x41, 0xae, 0x0b, 0xb9, 0x4b, 0xe4, 0xfc, 0xbe, 0x99, 0xec, 0x38, 0xce, 0x03, + 0xe7, 0x21, 0xe2, 0xbd, 0x5c, 0xcd, 0x10, 0xd3, 0x45, 0x6b, 0xfc, 0x37, 0x76, 0x4c, 0x6d, 0x62, + 0x12, 0x0d, 0x1a, 0x48, 0xbc, 0x16, 0x66, 0x71, 0x81, 0x67, 0x97, 0x1c, 0xb4, 0xdb, 0x3c, 0x1f, + 0xa4, 0x76, 0x46, 0x38, 0x42, 0x00, 0xb6, 0x05, 0x55, 0x96, 0x41, 0xcb, 0x84, 0xac, 0xa3, 0x6c, + 0x50, 0x36, 0x17, 0xc3, 0x90, 0xbd, 0x0f, 0xad, 0xa9, 0x84, 0x2c, 0xcd, 0x9f, 0x68, 0x62, 0x5a, + 0xe3, 0x11, 0x59, 0x69, 0xd4, 0x48, 0xfe, 0x95, 0xd6, 0xde, 0x8e, 0x0e, 0xcd, 0x30, 0xb5, 0xf6, + 0xc7, 0xe3, 0x89, 0xce, 0xa4, 0x3d, 0xc9, 0xac, 0xe1, 0xcc, 0x85, 0x02, 0x2c, 0xa5, 0xbe, 0xb6, + 0x9a, 0x5b, 0x08, 0xff, 0x57, 0xa5, 0x1b, 0x21, 0xc0, 0x4e, 0xf4, 0x74, 0x15, 0x6b, 0x85, 0xd8, + 0x00, 0x7c, 0x70, 0x66, 0x98, 0x6e, 0xad, 0x4f, 0xeb, 0x36, 0x62, 0x03, 0xf8, 0x6f, 0xb9, 0x4e, + 0xbf, 0xa6, 0xb9, 0x23, 0xec, 0x6f, 0x21, 0x59, 0x42, 0x0c, 0x24, 0x1e, 0x80, 0x28, 0x44, 0xb8, + 0x16, 0xe4, 0x20, 0x3d, 0x6d, 0xdd, 0x99, 0x68, 0x60, 0xeb, 0x8c, 0xb6, 0x75, 0xee, 0xe5, 0x6a, + 0xda, 0x3a, 0xdd, 0x53, 0x43, 0xff, 0x60, 0x87, 0xde, 0x27, 0x8d, 0xa6, 0x9e, 0x78, 0x87, 0x16, + 0x30, 0xf4, 0x12, 0x44, 0xf8, 0xd0, 0xeb, 0x00, 0x09, 0x9d, 0xa3, 0x52, 0x56, 0xdd, 0x49, 0xf3, + 0x1b, 0xe1, 0xe7, 0x86, 0x6d, 0x43, 0x21, 0x12, 0xf9, 0xcc, 0x89, 0xd3, 0xd6, 0x9e, 0x23, 0x84, + 0xdc, 0xba, 0xc0, 0xa7, 0x2d, 0xb8, 0xab, 0x9a, 0x31, 0x59, 0x37, 0x92, 0x98, 0xe5, 0x0c, 0xf1, + 0x77, 0xf4, 0x74, 0x48, 0x03, 0x2d, 0x0f, 0xed, 0xb4, 0x46, 0xe0, 0xbe, 0x6d, 0x39, 0xd4, 0x8d, + 0xbd, 0xd3, 0xc0, 0xb6, 0x6d, 0xc2, 0x76, 0xb5, 0x88, 0xad, 0x75, 0x74, 0x6f, 0x21, 0x77, 0x0e, + 0x7c, 0x50, 0xd8, 0x94, 0x45, 0x81, 0x89, 0x88, 0x04, 0x9d, 0xdc, 0x40, 0x7f, 0x66, 0x56, 0xc4, + 0x74, 0x2b, 0xa0, 0x3f, 0xad, 0x89, 0x57, 0xc4, 0x0c, 0x28, 0x74, 0x45, 0xec, 0xc1, 0x12, 0xba, + 0x99, 0xac, 0xba, 0x81, 0x0e, 0xd5, 0xce, 0xeb, 0x27, 0x64, 0x24, 0x55, 0x16, 0x03, 0x67, 0xb5, + 0xb9, 0xb5, 0x99, 0x0b, 0x08, 0x70, 0x60, 0x15, 0xbd, 0x9c, 0xda, 0xdd, 0xd3, 0x7e, 0xa0, 0x8b, + 0x68, 0x9d, 0xea, 0xe3, 0xa9, 0xf6, 0x5d, 0xc9, 0x76, 0xb3, 0xb3, 0x25, 0x9e, 0xe8, 0x8a, 0x77, + 0x68, 0x06, 0x5a, 0x2d, 0xaa, 0xbe, 0x0f, 0x2a, 0x74, 0x89, 0x08, 0xb8, 0x83, 0xd0, 0xee, 0x80, + 0xf7, 0x71, 0xca, 0xca, 0x1a, 0x7a, 0xbb, 0x90, 0x7f, 0xc3, 0xca, 0xbd, 0x6e, 0x4d, 0x5e, 0xb1, + 0x0e, 0x0e, 0x29, 0xc2, 0x92, 0x6a, 0x96, 0x8c, 0x6d, 0xbb, 0xd2, 0xf8, 0x90, 0xed, 0x0e, 0x77, + 0x81, 0xde, 0x9b, 0x32, 0x93, 0x3d, 0x10, 0x8d, 0x5f, 0xbc, 0xb5, 0xc3, 0xa0, 0xc2, 0xb7, 0x76, + 0x3c, 0x60, 0x42, 0xee, 0x05, 0x29, 0xab, 0x3e, 0x81, 0xee, 0x76, 0xdb, 0xb0, 0xdd, 0x34, 0xb1, + 0x2d, 0x7f, 0xf1, 0xe4, 0x25, 0xd2, 0x9e, 0x57, 0x05, 0xf5, 0x5e, 0x3f, 0xbe, 0x9a, 0x47, 0x9d, + 0x81, 0x2a, 0xe1, 0x34, 0x04, 0x1f, 0x92, 0x81, 0xf8, 0xc9, 0x34, 0x89, 0xfc, 0xb9, 0x55, 0xef, + 0x10, 0x0c, 0xc4, 0x1e, 0x48, 0xe0, 0x40, 0x5c, 0x86, 0x74, 0xc3, 0x29, 0x3a, 0x8f, 0x14, 0x86, + 0x9f, 0xe2, 0xc9, 0x71, 0xeb, 0xda, 0x49, 0x42, 0x58, 0x58, 0x12, 0x60, 0xb0, 0xac, 0xd3, 0x1f, + 0xea, 0xb6, 0x6b, 0xfd, 0x09, 0x19, 0x82, 0xb7, 0xc7, 0x8d, 0xae, 0x56, 0x53, 0x4b, 0x63, 0x2a, + 0x4b, 0x45, 0x76, 0xc9, 0x14, 0x11, 0x38, 0x04, 0x7b, 0x81, 0x6c, 0x58, 0x29, 0x62, 0x26, 0x46, + 0xdd, 0xf0, 0xc7, 0x67, 0xce, 0xbd, 0xe6, 0xa1, 0x13, 0x52, 0x0e, 0x61, 0xa5, 0xd0, 0x62, 0x81, + 0x81, 0xb1, 0x61, 0x6a, 0x69, 0xcc, 0xe9, 0x03, 0x49, 0x9e, 0xe3, 0x5a, 0x52, 0x27, 0xf4, 0x4c, + 0x3b, 0x67, 0x43, 0xa1, 0x0c, 0x20, 0xdc, 0x50, 0xf0, 0xe1, 0xdc, 0xd8, 0x7c, 0x6e, 0x67, 0xc3, + 0x15, 0x2e, 0x4d, 0x5e, 0xb0, 0xae, 0x9c, 0xf0, 0x3e, 0x19, 0x7f, 0x09, 0x04, 0x17, 0x44, 0x35, + 0x02, 0x12, 0x19, 0x52, 0xdf, 0x3d, 0x11, 0x19, 0x61, 0x07, 0xe5, 0x86, 0xb6, 0x2d, 0x49, 0xc3, + 0xd4, 0x33, 0xfd, 0x38, 0xdd, 0x21, 0x3f, 0xd6, 0x87, 0x07, 0x23, 0x3e, 0x52, 0xe2, 0x40, 0x19, + 0x3f, 0x33, 0x0d, 0xdd, 0x4b, 0x02, 0x1f, 0x1c, 0xde, 0x67, 0x1d, 0x79, 0x07, 0x6a, 0x1e, 0x83, + 0xa6, 0x05, 0x04, 0xe0, 0x59, 0xc0, 0x67, 0x65, 0x3d, 0xd9, 0x28, 0xc5, 0x4e, 0x35, 0xd0, 0xd7, + 0x6a, 0xc1, 0x73, 0xa8, 0xb6, 0x78, 0x38, 0x6b, 0xe5, 0x8f, 0xc0, 0xce, 0x3d, 0x7c, 0x59, 0xaa, + 0xf8, 0xf2, 0x18, 0x93, 0x3a, 0x63, 0x69, 0x1d, 0xcf, 0x6d, 0xa2, 0xbd, 0xad, 0x3d, 0x6e, 0xc6, + 0x8d, 0xd8, 0x80, 0xfd, 0xc7, 0x1e, 0xcf, 0x07, 0xd1, 0xaf, 0xc8, 0x2c, 0x49, 0xb7, 0xac, 0x5a, + 0x13, 0x9d, 0x5a, 0x4f, 0x9c, 0x3f, 0x4b, 0x7a, 0x31, 0x54, 0x85, 0x1a, 0x7e, 0xe2, 0x0f, 0x72, + 0x43, 0xda, 0x6e, 0x97, 0xce, 0x63, 0x24, 0x3b, 0xc1, 0x13, 0x63, 0xce, 0x9a, 0x4e, 0x11, 0x96, + 0x04, 0xcc, 0xf9, 0x74, 0x7b, 0xcb, 0xc0, 0x15, 0x61, 0x62, 0xd0, 0x7d, 0xe4, 0xdd, 0xcc, 0x23, + 0x64, 0x82, 0x36, 0xf3, 0xbc, 0x5c, 0x82, 0x92, 0x98, 0x7c, 0x5f, 0xc0, 0x83, 0xda, 0x1f, 0x88, + 0x4a, 0x02, 0x5e, 0xb6, 0x44, 0x3c, 0x62, 0x03, 0xa9, 0x78, 0x8f, 0x36, 0x88, 0x5e, 0x8c, 0xc8, + 0xf3, 0x9e, 0xea, 0xd5, 0x32, 0xfd, 0x2d, 0x5a, 0xa6, 0xa7, 0xbe, 0x5f, 0x4d, 0xd8, 0x83, 0x4a, + 0x53, 0x83, 0x7f, 0x5a, 0xe7, 0x80, 0x84, 0xd3, 0x3a, 0x17, 0x4b, 0x5a, 0xe9, 0xb8, 0x94, 0x55, + 0xbb, 0xd1, 0xba, 0xe2, 0x99, 0xb1, 0x99, 0x73, 0x07, 0xc1, 0xbe, 0x18, 0xb6, 0xf0, 0x57, 0x58, + 0x57, 0x46, 0x8b, 0x27, 0xcf, 0xc0, 0x7f, 0x8a, 0x27, 0x2f, 0xd1, 0x28, 0x20, 0xe4, 0xca, 0x77, + 0xb6, 0x6d, 0x55, 0x66, 0x75, 0x57, 0x40, 0x52, 0xdb, 0xb4, 0x96, 0xe9, 0x31, 0x62, 0x71, 0x5c, + 0x45, 0x7c, 0xa4, 0x04, 0x75, 0x1d, 0xa4, 0xe1, 0x8b, 0xed, 0x06, 0x56, 0xdf, 0x2c, 0x08, 0xae, + 0xcb, 0x14, 0x56, 0xda, 0x4e, 0xbf, 0xc7, 0xbc, 0x7d, 0xda, 0x33, 0xf8, 0xc1, 0xbc, 0xbb, 0x7b, + 0xc9, 0xbf, 0x1c, 0x30, 0x05, 0xa4, 0xf4, 0x76, 0xad, 0x27, 0x9e, 0x22, 0x21, 0x58, 0x7f, 0x23, + 0xc9, 0xb7, 0xe3, 0xa9, 0x77, 0xf3, 0x76, 0x3d, 0xad, 0x77, 0xeb, 0x1d, 0xfd, 0xfc, 0xfc, 0x85, + 0x6e, 0x79, 0x25, 0x0d, 0x72, 0x90, 0x1d, 0xf0, 0xb1, 0xe7, 0x60, 0x21, 0x37, 0x55, 0x3c, 0x9d, + 0x87, 0x44, 0x28, 0xc5, 0x91, 0xd1, 0xe2, 0xf0, 0x31, 0x25, 0xa4, 0x3c, 0x3c, 0x32, 0x99, 0x37, + 0xb3, 0x76, 0x22, 0x66, 0x52, 0x06, 0x13, 0x11, 0x79, 0x7e, 0xa3, 0x66, 0xd6, 0x77, 0xb5, 0xea, + 0x69, 0x83, 0xda, 0x31, 0xd8, 0x2c, 0xb8, 0x1e, 0xe0, 0x7e, 0x58, 0x90, 0x07, 0x38, 0x0f, 0x4d, + 0x9a, 0xe8, 0xdb, 0x52, 0x56, 0xed, 0x41, 0x4b, 0xc9, 0xb4, 0x7c, 0x66, 0xbf, 0xb5, 0x7f, 0x5f, + 0xe9, 0xda, 0xd1, 0xe9, 0xa9, 0x8b, 0x30, 0x9c, 0x42, 0x22, 0x18, 0xc7, 0xea, 0x41, 0xa9, 0x07, + 0x20, 0x69, 0x95, 0xa7, 0x87, 0xa1, 0xe5, 0x39, 0xbe, 0x96, 0x85, 0xdc, 0x48, 0xe8, 0x77, 0xc0, + 0x61, 0x0a, 0xe2, 0xa5, 0x5c, 0x6b, 0xeb, 0x32, 0xf4, 0xb4, 0x11, 0x6b, 0xeb, 0x35, 0xec, 0x37, + 0x5d, 0x23, 0x36, 0x40, 0x3f, 0xb1, 0x3e, 0xce, 0x06, 0x7a, 0x8f, 0x27, 0x15, 0x5e, 0xce, 0x85, + 0x4b, 0xc5, 0xae, 0xe7, 0x56, 0x56, 0x88, 0x26, 0x52, 0x5d, 0xbd, 0x39, 0x52, 0xf1, 0x6d, 0xad, + 0x2a, 0x93, 0x2a, 0x36, 0x60, 0x32, 0xa6, 0x37, 0x67, 0x23, 0xf2, 0x9d, 0x8d, 0x9a, 0x89, 0x93, + 0x60, 0x51, 0x86, 0x3b, 0xe2, 0xdd, 0xbd, 0x9a, 0x81, 0x78, 0x52, 0x70, 0x70, 0xc2, 0xdd, 0x6f, + 0x11, 0x9c, 0x48, 0xf7, 0x16, 0xce, 0xf2, 0x47, 0xac, 0x70, 0xea, 0x37, 0xb7, 0x5a, 0xef, 0xbf, + 0x6b, 0x1d, 0xb9, 0x60, 0xed, 0x1b, 0x82, 0xe8, 0x29, 0x84, 0xf3, 0x91, 0x1f, 0xcf, 0xec, 0x3f, + 0xa2, 0x6c, 0xab, 0x04, 0xb5, 0x82, 0x1c, 0x88, 0xe6, 0xde, 0x29, 0xbe, 0x3a, 0x0a, 0x12, 0xdb, + 0x08, 0x9f, 0xa0, 0x60, 0x1e, 0x1c, 0xf0, 0xbe, 0x40, 0x74, 0xa4, 0x32, 0xf5, 0x81, 0x1c, 0xbf, + 0x94, 0xe4, 0x39, 0x0d, 0x5a, 0x5b, 0x6f, 0x07, 0x69, 0x0e, 0x71, 0xa3, 0x8b, 0x17, 0x20, 0xd3, + 0x03, 0x08, 0x08, 0x90, 0x59, 0x86, 0x23, 0xa2, 0xc4, 0xf1, 0x0c, 0x58, 0xba, 0xb0, 0xa7, 0x74, + 0xfe, 0x84, 0xbf, 0xe6, 0x8a, 0xb0, 0x04, 0x02, 0xb0, 0x46, 0x17, 0x8b, 0xd9, 0xb4, 0xdb, 0xbf, + 0x68, 0x0f, 0xec, 0xa3, 0xa4, 0xa7, 0xc4, 0xcd, 0x44, 0xe7, 0xe6, 0x5e, 0xc3, 0xd4, 0x7b, 0x5a, + 0x35, 0xd3, 0x4c, 0xa6, 0x3a, 0xf8, 0x3d, 0xc5, 0x07, 0x0b, 0xec, 0x29, 0x1c, 0x34, 0x61, 0x76, + 0x5a, 0xc2, 0x27, 0x3c, 0xb0, 0xef, 0xd2, 0xd4, 0x62, 0xbf, 0xdb, 0x8c, 0xfc, 0xcc, 0x3a, 0x35, + 0x01, 0x3e, 0x67, 0x33, 0x63, 0x24, 0x77, 0x9c, 0x12, 0x8a, 0xc0, 0x54, 0x9f, 0x8c, 0xf2, 0xec, + 0xcf, 0x76, 0x69, 0x6d, 0xb1, 0x04, 0xfb, 0xeb, 0x46, 0xcc, 0x48, 0xe8, 0x69, 0x2d, 0x36, 0x80, + 0xff, 0xe0, 0xe5, 0x18, 0xf9, 0xdc, 0xd4, 0x3e, 0x08, 0x49, 0xb9, 0x1b, 0x35, 0x9c, 0xdb, 0xff, + 0x7c, 0x44, 0x46, 0x36, 0x81, 0xe4, 0x73, 0x74, 0x7e, 0xd8, 0xa2, 0x1b, 0x9c, 0x43, 0x67, 0x3f, + 0x46, 0xb8, 0x54, 0xe5, 0x41, 0x89, 0x18, 0x1f, 0x48, 0x59, 0x35, 0x85, 0xee, 0x27, 0x9b, 0x50, + 0xb8, 0xef, 0xdb, 0x4d, 0x15, 0xcf, 0x17, 0xc5, 0x33, 0xc7, 0x7c, 0xc1, 0x31, 0x08, 0x04, 0x1b, + 0x1c, 0x2a, 0xb3, 0xbb, 0x0d, 0x5c, 0x96, 0xa2, 0x8f, 0x08, 0x64, 0x0b, 0xd2, 0x89, 0xce, 0x47, + 0xb1, 0x4e, 0xdd, 0x30, 0x37, 0xeb, 0xbd, 0x29, 0x93, 0x84, 0x08, 0x98, 0xdb, 0xa8, 0x99, 0x94, + 0x1f, 0x8e, 0x41, 0xc4, 0xcd, 0x27, 0xe3, 0x41, 0x08, 0x5f, 0xba, 0xfc, 0x40, 0x26, 0x1e, 0xc9, + 0x33, 0x08, 0x91, 0x13, 0x05, 0xcc, 0x15, 0x26, 0x59, 0xa5, 0x85, 0xbd, 0x86, 0x07, 0x51, 0xfb, + 0x72, 0xa0, 0x0a, 0xd4, 0xc2, 0xf5, 0x52, 0x61, 0x8a, 0xc4, 0x11, 0x85, 0xe5, 0x3e, 0x4c, 0xd8, + 0x60, 0xda, 0x18, 0x6d, 0xbc, 0x5e, 0x8d, 0x0c, 0xc8, 0xfb, 0x8e, 0xe3, 0xab, 0x47, 0xe4, 0x05, + 0x0c, 0x35, 0xbb, 0x15, 0x34, 0xb5, 0x1b, 0x20, 0xd6, 0xaa, 0x00, 0x0d, 0x58, 0xa0, 0xf0, 0xd8, + 0x42, 0x88, 0x67, 0x9a, 0xd9, 0xb3, 0xe8, 0x0e, 0xbf, 0x74, 0x4d, 0x0d, 0xca, 0x36, 0xae, 0x78, + 0x4d, 0x0d, 0xd7, 0x2b, 0xdf, 0x13, 0xd1, 0xa6, 0xeb, 0x95, 0x2f, 0xd9, 0xce, 0x08, 0x38, 0x14, + 0xc1, 0x07, 0xeb, 0x36, 0x3f, 0xa3, 0x41, 0x33, 0xe3, 0xc9, 0x6e, 0xfe, 0xc1, 0x3a, 0x0b, 0x08, + 0x3a, 0x58, 0xf7, 0xe2, 0x98, 0x94, 0x84, 0xdb, 0x10, 0x89, 0x76, 0x4d, 0x95, 0x30, 0x88, 0x42, + 0x10, 0xff, 0x8b, 0xcd, 0xa6, 0x58, 0x29, 0x10, 0x0b, 0xf2, 0x48, 0xf4, 0xe1, 0x59, 0x08, 0x02, + 0xcd, 0xa8, 0x1d, 0xea, 0x49, 0xe2, 0x33, 0xdb, 0xef, 0x5d, 0xad, 0x36, 0xc0, 0xe6, 0x80, 0x8f, + 0x24, 0xb9, 0xef, 0x5d, 0x5e, 0x48, 0x90, 0x11, 0x45, 0x39, 0x92, 0xa8, 0xf1, 0x3b, 0x29, 0xab, + 0x1e, 0x92, 0xd0, 0x5a, 0x60, 0xd9, 0xd4, 0x12, 0x6b, 0x6a, 0xe9, 0x5b, 0x1f, 0x03, 0xb6, 0xd6, + 0xd1, 0x43, 0xd3, 0x6f, 0x0d, 0x03, 0x3d, 0x3a, 0x0e, 0xe1, 0xeb, 0xb0, 0xc0, 0xf9, 0x2e, 0x91, + 0x02, 0xa7, 0xf7, 0x76, 0x16, 0x35, 0xb5, 0x64, 0xc1, 0x33, 0x3c, 0x62, 0x1d, 0x98, 0x28, 0x5d, + 0x1d, 0xb5, 0x86, 0xc6, 0xa7, 0x5f, 0xda, 0x5b, 0xd9, 0x17, 0x33, 0x4a, 0xd6, 0x47, 0x37, 0xcd, + 0x52, 0xc9, 0x58, 0xc2, 0x26, 0x68, 0xcb, 0xb8, 0x37, 0x22, 0xcf, 0x67, 0xcc, 0x52, 0x21, 0x0d, + 0xe3, 0xa3, 0xdd, 0x71, 0xce, 0xec, 0xc7, 0x85, 0x09, 0x67, 0x3f, 0x01, 0x9a, 0x71, 0xeb, 0x52, + 0xd1, 0x7c, 0xc8, 0xc2, 0x59, 0xc8, 0x1f, 0x9b, 0x9e, 0xda, 0x5b, 0x98, 0xba, 0x04, 0x2b, 0x11, + 0x65, 0x99, 0x73, 0x99, 0x26, 0xea, 0xc0, 0x2e, 0x86, 0xd3, 0xc3, 0x2f, 0x14, 0x4f, 0xbf, 0x09, + 0x5d, 0x8b, 0x59, 0xb3, 0x6c, 0x8e, 0x7e, 0xbb, 0xa2, 0xb3, 0x62, 0x2d, 0x63, 0xc0, 0x6b, 0x1d, + 0xf9, 0x44, 0x53, 0x30, 0xe2, 0xd6, 0x34, 0xe2, 0x84, 0x29, 0x0b, 0x95, 0x81, 0x0b, 0x0b, 0x09, + 0x53, 0x26, 0x92, 0xe1, 0xb8, 0x94, 0x55, 0x37, 0x21, 0xd7, 0x1a, 0xd6, 0x23, 0xc3, 0x37, 0xdc, + 0x94, 0x30, 0x0c, 0xff, 0xe9, 0x97, 0xf6, 0xb2, 0x28, 0x18, 0x63, 0x94, 0xa6, 0xeb, 0x93, 0x20, + 0x36, 0x00, 0x1f, 0xc8, 0xbb, 0xee, 0x0b, 0x11, 0x79, 0x3e, 0x63, 0xde, 0x19, 0xa4, 0x06, 0x17, + 0x26, 0x54, 0x43, 0x80, 0x26, 0x6a, 0x1c, 0x03, 0x35, 0x60, 0x8f, 0xc9, 0xa7, 0x86, 0x73, 0x39, + 0x4c, 0x8d, 0xe6, 0xba, 0x1b, 0xa7, 0x86, 0x3d, 0xdc, 0xce, 0x73, 0xb6, 0xb0, 0x19, 0x21, 0xc4, + 0x07, 0x35, 0x7e, 0x19, 0xee, 0xad, 0x08, 0xcb, 0x34, 0x89, 0x87, 0x99, 0x4d, 0x01, 0x8f, 0x08, + 0x4b, 0x45, 0x86, 0x8c, 0x65, 0x40, 0xd0, 0x01, 0xdd, 0x40, 0x1d, 0xc6, 0x24, 0xf9, 0xd6, 0x2d, + 0x5a, 0xbc, 0xdb, 0xec, 0x44, 0x5f, 0x2b, 0xa7, 0x03, 0xd7, 0x85, 0x9b, 0x1e, 0xb4, 0xd8, 0xcd, + 0x7f, 0xb4, 0x0e, 0x2d, 0x2c, 0x9e, 0x3e, 0x64, 0xbf, 0x7a, 0xec, 0x1e, 0xb7, 0xf2, 0x97, 0xc1, + 0xa4, 0x10, 0xc2, 0x11, 0x28, 0xc2, 0x12, 0xcc, 0xe9, 0x2e, 0xb4, 0x88, 0xc3, 0xa9, 0x13, 0xff, + 0x42, 0xfd, 0x51, 0x29, 0xab, 0x1e, 0x94, 0x50, 0xad, 0xbc, 0x80, 0x58, 0x16, 0xd5, 0x3e, 0x0e, + 0x98, 0x5a, 0xb5, 0xa5, 0xa9, 0xb6, 0x41, 0x4f, 0xac, 0xfd, 0xdf, 0xd5, 0xab, 0xd6, 0xac, 0x5a, + 0x1d, 0x95, 0x63, 0x6d, 0x09, 0x23, 0x9e, 0x4e, 0xc6, 0xfa, 0xd6, 0xd5, 0x49, 0x91, 0xb5, 0x73, + 0xe3, 0xe9, 0x74, 0x77, 0x32, 0x81, 0xf7, 0xcf, 0x63, 0xcf, 0x1a, 0x7a, 0x6a, 0xa3, 0xef, 0xca, + 0xce, 0xaf, 0xcb, 0xf7, 0xc8, 0xb2, 0x9a, 0x4e, 0x36, 0x6b, 0xfd, 0x6a, 0xaf, 0xd9, 0x89, 0xe6, + 0xdd, 0x16, 0x51, 0xfe, 0xcf, 0xfe, 0xa4, 0x67, 0x92, 0xcf, 0x61, 0x5c, 0x6d, 0xa4, 0x6d, 0xae, + 0x7c, 0xbb, 0x07, 0xf4, 0x3f, 0x6d, 0xb7, 0xa6, 0x33, 0xba, 0xa9, 0xdf, 0xf7, 0xef, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x10, 0x24, 0xae, 0x84, 0x4f, 0x88, 0x04, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go index d14635ee97..4e90db74b6 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.pb.validate.go @@ -28013,6 +28013,8 @@ func (m *InstanceType) Validate() error { } + // no validation rules for AvailableQuota + return nil } diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto index 5ba945075f..b98e6c820c 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.proto @@ -11332,6 +11332,10 @@ message InstanceType { title : "dataDisks", description : "机型数据盘, 主要用于自建资源池. 仅仅provider为self时, 需要关注" }]; + uint32 availableQuota = 14 [ (grpc.gateway.protoc_gen_swagger.options.openapiv2_field) = { + title : "availableQuota", + description : "该机型可用的quota容量" + }]; } message GetMasterSuggestedMachinesRequest { diff --git a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json index 4de8eafb24..2577023fcf 100644 --- a/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json +++ b/bcs-services/bcs-cluster-manager/api/clustermanager/clustermanager.swagger.json @@ -13650,6 +13650,12 @@ }, "description": "机型数据盘, 主要用于自建资源池. 仅仅provider为self时, 需要关注", "title": "dataDisks" + }, + "availableQuota": { + "type": "integer", + "format": "int64", + "description": "该机型可用的quota容量", + "title": "availableQuota" } }, "description": "机器类型", diff --git a/bcs-services/bcs-cluster-manager/internal/actions/thirdparty/resource.go b/bcs-services/bcs-cluster-manager/internal/actions/thirdparty/resource.go index 16d8c1c5a5..4d0aead558 100644 --- a/bcs-services/bcs-cluster-manager/internal/actions/thirdparty/resource.go +++ b/bcs-services/bcs-cluster-manager/internal/actions/thirdparty/resource.go @@ -132,7 +132,7 @@ func (ga *GetProviderResourceUsageAction) getBizInfoByPools() error { lock = sync.Mutex{} ) - concurency := utils.NewRoutinePool(10) + concurency := utils.NewRoutinePool(50) defer concurency.Close() for region, insTypes := range ga.regionInsTypes { diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/cloud.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/cloud.go index 0c01835dcd..8ce7f04f29 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/cloud.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/cloud.go @@ -137,5 +137,5 @@ func clusterNetworkSettingByEks(cls *cmproto.Cluster, cluster *eks.Cluster, ipv4 // UpdateClusterCloudInfo update cluster cloud info func (c *CloudInfoManager) UpdateClusterCloudInfo(cls *cmproto.Cluster) error { - return cloudprovider.ErrCloudNotImplemented + return nil } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/ladder/nodegroup.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/ladder/nodegroup.go index 5412875a93..c36f66c8e5 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/ladder/nodegroup.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/ladder/nodegroup.go @@ -393,9 +393,10 @@ func (ng *NodeGroup) CheckResourcePoolQuota(group *proto.NodeGroup, scaleUpNum u resourceZones := make([]string, 0) for _, pool := range pools { - blog.Infof("cloud[%s] CheckResourcePoolQuota pool[%s] region[%s] zone[%s] instanceType[%s] poolTotal[%v] "+ - "poolAvailable[%v] groupQuota[%v] groupUsed[%v]", cloudName, pool.PoolId, pool.Region, pool.Zone, - pool.InstanceType, pool.Total, pool.Available, pool.GroupQuota, pool.GroupUsed) + blog.Infof("cloud[%s] CheckResourcePoolQuota pool[%s] region[%s] zone[%s] instanceType[%s] "+ + "poolTotal[%v] poolAvailable[%v] poolOversoldTotal[%v] poolOversoldAvailable[%v] groupQuota[%v] "+ + "groupUsed[%v]", cloudName, pool.PoolId, pool.Region, pool.Zone, pool.InstanceType, + pool.Total, pool.Available, pool.OversoldTotal, pool.OversoldAvailable, pool.GroupQuota, pool.GroupUsed) resourceZones = append(resourceZones, pool.Zone) } @@ -419,7 +420,7 @@ func (ng *NodeGroup) CheckResourcePoolQuota(group *proto.NodeGroup, scaleUpNum u groupQuota int32 ) for i := range pools { - poolTotal += pools[i].Total + poolTotal += pools[i].OversoldTotal groupQuota += int32(pools[i].GroupQuota) } @@ -444,7 +445,7 @@ func (ng *NodeGroup) CheckResourcePoolQuota(group *proto.NodeGroup, scaleUpNum u // 检验配额是否充足 for i := range pools { num, ok := zoneNum[pools[i].Zone] - if ok && num > 0 && (pools[i].GroupQuota+num) > int(pools[i].Total) { + if ok && num > 0 && (pools[i].GroupQuota+num) > int(pools[i].OversoldTotal) { mulErrors.Append(fmt.Errorf("region[%s] zone[%s] instanceType[%s]", group.GetRegion(), pools[i].Zone, group.GetLaunchTemplate().GetInstanceType())) } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/nodemgr.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/nodemgr.go index 92d79c78c4..f0d78a4cf2 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/nodemgr.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/nodemgr.go @@ -26,6 +26,7 @@ import ( "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/api" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/qcloud/business" icommon "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/common" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/daemon" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/options" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/remote/cmdb" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/remote/resource" @@ -279,10 +280,49 @@ func (nm *NodeManager) getInnerInstanceTypes(info cloudprovider.InstanceInfo) ( } return disks }(), + AvailableQuota: uint32(t.OversoldAvailable), }) } blog.Infof("getInnerInstanceTypes successful[%+v]", instanceTypes) + + if info.Provider == resource.SelfPool || info.Provider == resource.CrPool { + return instanceTypes, nil + } + + // 获取当前资源池的使用情况 & 超卖情况 + var ( + barrier = utils.NewRoutinePool(50) + lock = sync.Mutex{} + ) + defer barrier.Close() + + for i := range instanceTypes { + barrier.Add(1) + // query available vpc + go func(i int) { + defer func() { + barrier.Done() + }() + + pools, errLocal := daemon.GetRegionDevicePoolDetail(cloudprovider.GetStorageModel(), info.Region, + instanceTypes[i].NodeType, nil) + if errLocal != nil { + blog.Errorf("get region %s instanceType %s device pool detail failed, %s", + info.Region, instanceTypes[i].NodeType, err.Error()) + return + } + for pid := range pools { + if utils.StringInSlice(pools[pid].Zone, instanceTypes[pid].Zones) { + lock.Lock() + instanceTypes[i].AvailableQuota = uint32(pools[pid].OversoldTotal) - uint32(pools[pid].GroupQuota) + lock.Unlock() + } + } + }(i) + } + barrier.Wait() + return instanceTypes, nil } diff --git a/bcs-services/bcs-cluster-manager/internal/daemon/device_pool.go b/bcs-services/bcs-cluster-manager/internal/daemon/device_pool.go index db06c8e48e..ce4dc83663 100644 --- a/bcs-services/bcs-cluster-manager/internal/daemon/device_pool.go +++ b/bcs-services/bcs-cluster-manager/internal/daemon/device_pool.go @@ -27,9 +27,11 @@ import ( ) const ( - poolTotal = "pool_total" - poolAvailable = "pool_available" - poolUsed = "pool_used" + poolTotal = "pool_total" + poolAvailable = "pool_available" + poolOversoldTotal = "pool_oversold_total" + poolOversoldAvailable = "pool_oversold_available" + poolUsed = "pool_used" groupUsed = "group_used" groupQuota = "group_quota" @@ -66,12 +68,17 @@ func (d *Daemon) reportRegionInsTypeUsage(error chan<- error) { poolTotal, float64(pool.Total)) metrics.ReportRegionInsTypeNum(region, pool.Zone, insTypes[i], pool.PoolId, poolAvailable, float64(pool.Available)) + metrics.ReportRegionInsTypeNum(region, pool.Zone, insTypes[i], pool.PoolId, + poolOversoldTotal, float64(pool.OversoldTotal)) + metrics.ReportRegionInsTypeNum(region, pool.Zone, insTypes[i], pool.PoolId, + poolOversoldAvailable, float64(pool.OversoldAvailable)) metrics.ReportRegionInsTypeNum(region, pool.Zone, insTypes[i], pool.PoolId, poolUsed, float64(pool.Used)) metrics.ReportRegionInsTypeNum(region, pool.Zone, insTypes[i], pool.PoolId, groupQuota, float64(pool.GroupQuota)) metrics.ReportRegionInsTypeNum(region, pool.Zone, insTypes[i], pool.PoolId, groupUsed, float64(pool.GroupUsed)) + } } @@ -138,9 +145,10 @@ func GetRegionDevicePoolDetail(model store.ClusterManagerModel, region string, i for i := range zonePools { blog.Infof("GetRegionDevicePoolDetail region[%s] zone[%s] instanceType[%s] pool[%s] "+ - "poolTotal[%v] poolAvailable[%v] poolUsed[%v] groupQuota[%v] groupUsed[%v]", region, zonePools[i].Zone, - instanceType, zonePools[i].PoolId, zonePools[i].Total, zonePools[i].Available, zonePools[i].Used, - zonePools[i].GroupQuota, zonePools[i].GroupUsed) + "poolTotal[%v] poolAvailable[%v] poolOversoldTotal[%v] poolOversoldAvailable[%v] poolUsed[%v] "+ + "groupQuota[%v] groupUsed[%v]", region, zonePools[i].Zone, instanceType, zonePools[i].PoolId, + zonePools[i].Total, zonePools[i].Available, zonePools[i].OversoldTotal, zonePools[i].OversoldAvailable, + zonePools[i].Used, zonePools[i].GroupQuota, zonePools[i].GroupUsed) pools = append(pools, zonePools[i]) } diff --git a/bcs-services/bcs-cluster-manager/internal/remote/resource/tresource/options.go b/bcs-services/bcs-cluster-manager/internal/remote/resource/tresource/options.go index 996db00df2..14cd2b72bd 100644 --- a/bcs-services/bcs-cluster-manager/internal/remote/resource/tresource/options.go +++ b/bcs-services/bcs-cluster-manager/internal/remote/resource/tresource/options.go @@ -126,6 +126,8 @@ const ( userQuota = "userQuota" usedQuota = "usedQuota" availableQuota = "availableQuota" + // OverSold ratio + OverSold = "oversold" ) // PoolLabel xxx diff --git a/bcs-services/bcs-cluster-manager/internal/remote/resource/tresource/resource.go b/bcs-services/bcs-cluster-manager/internal/remote/resource/tresource/resource.go index ae2c04afdb..8da75ee29f 100644 --- a/bcs-services/bcs-cluster-manager/internal/remote/resource/tresource/resource.go +++ b/bcs-services/bcs-cluster-manager/internal/remote/resource/tresource/resource.go @@ -16,6 +16,7 @@ import ( "context" "errors" "fmt" + "math" "sort" "strconv" "strings" @@ -314,47 +315,8 @@ func (rm *ResManClient) GetInstanceTypesV2(ctx context.Context, region string, s pools []*DevicePool err error ) - err = retry.Do(func() error { - cli, closeCon, errGet := rm.getResourceManagerClient() - if errGet != nil { - blog.Errorf("GetInstanceTypesV2[%s] GetResourceManagerClient failed: %v", traceID, errGet) - return errGet - } - defer func() { - if closeCon != nil { - closeCon() - } - }() - - var ( - // limit for all devicePool - limit int64 = 10000 - onSale = true - ) - req := &ListDevicePoolReq{ - Limit: &limit, - Onsale: &onSale, - Region: ®ion, - } - if len(spec.Provider) > 0 { - req.Provider = append(req.Provider, spec.Provider) - } - - // list device pool - resp, errList := cli.ListDevicePool(ctx, req) - if errList != nil { - blog.Errorf("GetInstanceTypesV2[%s] ListDevicePool failed: %v", traceID, errList) - return errList - } - if *resp.Code != 0 || !*resp.Result { - blog.Errorf("GetInstanceTypesV2[%s] ListDevicePool failed: %v", traceID, resp.Message) - return errors.New(*resp.Message) - } - pools = resp.Data - - return nil - }, retry.Attempts(3), retry.DelayType(retry.FixedDelay), retry.Delay(time.Second*3)) + pools, err = rm.listDevicePools(ctx, spec.Provider, region, "") if err != nil { blog.Errorf("GetInstanceTypesV2[%s] failed: %v", traceID, err) return nil, err @@ -391,14 +353,11 @@ func (rm *ResManClient) GetInstanceTypesV2(ctx context.Context, region string, s } // available quota - var quota uint64 - availableQuota, ok := labels[AvailableQuota.String()] - if ok { - quota, _ = strconv.ParseUint(availableQuota, 10, 64) - } + poolUsage := getDevicePoolUsage(pool) + // instanceType sell status status := common.InstanceSell - if quota == 0 { + if poolUsage.OversoldAvailable <= 0 { status = common.InstanceSoldOut } @@ -439,6 +398,7 @@ func (rm *ResManClient) GetInstanceTypesV2(ctx context.Context, region string, s return nil }(), + OversoldAvailable: poolUsage.OversoldAvailable, }) } @@ -832,6 +792,44 @@ func (rm *ResManClient) GetRegionInstanceTypesFromPools(ctx context.Context, pro return regionInsTypes, nil } +func getDevicePoolUsage(pool *DevicePool) resource.PoolUsage { + var ( + err error + + poolUsage resource.PoolUsage + oversold float64 = 1 + ) + v, ok := pool.GetLabels()[userQuota] + if ok { + total, _ := utils.StringToInt(v) + poolUsage.Total = int32(total) + } + v, ok = pool.GetLabels()[usedQuota] + if ok { + used, _ := utils.StringToInt(v) + poolUsage.Used = int32(used) + } + v, ok = pool.GetLabels()[availableQuota] + if ok { + available, _ := utils.StringToInt(v) + poolUsage.Available = int32(available) + } + + // oversold ratio + v, ok = pool.GetLabels()[OverSold] + if ok { + oversold, err = strconv.ParseFloat(v, 64) + if err != nil || oversold <= 1 { + oversold = 1 + } + } + + poolUsage.OversoldTotal = int32(math.Floor(float64(poolUsage.Total) * oversold)) + poolUsage.OversoldAvailable = int32(math.Floor(float64(poolUsage.Total)*oversold)) - int32(poolUsage.Used) + + return poolUsage +} + // ListRegionZonePools 获取可用区维度的资源池信息 & 可用区列表 func (rm *ResManClient) ListRegionZonePools(ctx context.Context, provider string, region, insType string) ( map[string]*resource.DevicePoolInfo, []string, error) { @@ -850,19 +848,7 @@ func (rm *ResManClient) ListRegionZonePools(ctx context.Context, provider string ) for _, pool := range pools { - var total, used, available int - v, ok := pool.GetLabels()[userQuota] - if ok { - total, _ = utils.StringToInt(v) - } - v, ok = pool.GetLabels()[usedQuota] - if ok { - used, _ = utils.StringToInt(v) - } - v, ok = pool.GetLabels()[availableQuota] - if ok { - available, _ = utils.StringToInt(v) - } + poolUsage := getDevicePoolUsage(pool) if len(pool.GetBaseConfig().Zone.GetZone()) == 0 { continue @@ -874,10 +860,13 @@ func (rm *ResManClient) ListRegionZonePools(ctx context.Context, provider string Region: pool.GetBaseConfig().GetZone().GetRegion(), Zone: pool.GetBaseConfig().GetZone().GetZone(), InstanceType: pool.GetBaseConfig().GetInstanceType(), - Total: int32(total), - Used: int32(used), - Available: int32(available), + Total: poolUsage.Total, + Used: poolUsage.Used, + Available: poolUsage.Available, Status: pool.GetStatus(), + + OversoldTotal: poolUsage.OversoldTotal, + OversoldAvailable: poolUsage.OversoldAvailable, } zones = append(zones, pool.GetBaseConfig().Zone.GetZone()) @@ -905,37 +894,32 @@ func (rm *ResManClient) ListAvailableInsufficientPools(ctx context.Context, prov ) for _, pool := range pools { - var total, available int - v, ok := pool.GetLabels()[userQuota] - if ok { - total, _ = utils.StringToInt(v) - } - v, ok = pool.GetLabels()[availableQuota] - if ok { - available, _ = utils.StringToInt(v) - } + poolUsage := getDevicePoolUsage(pool) if len(pool.GetBaseConfig().Zone.GetZone()) == 0 { continue } - if ratio.QuotaRatio != nil && ((float64(available)/float64(total))*100 > float64(*ratio.QuotaRatio)) { + if ratio.QuotaRatio != nil && ((float64(poolUsage.Available)/float64(poolUsage.Total))*100 > + float64(*ratio.QuotaRatio)) { continue } - if ratio.QuotaCount != nil && (available > *ratio.QuotaCount) { + if ratio.QuotaCount != nil && (poolUsage.Available > int32(*ratio.QuotaCount)) { continue } filterPools = append(filterPools, &resource.DevicePoolInfo{ - PoolId: *pool.Id, - PoolName: *pool.Name, - Region: pool.GetBaseConfig().GetZone().GetRegion(), - Zone: pool.GetBaseConfig().GetZone().GetZone(), - InstanceType: pool.GetBaseConfig().GetInstanceType(), - Total: int32(total), - Available: int32(available), - Status: pool.GetStatus(), + PoolId: *pool.Id, + PoolName: *pool.Name, + Region: pool.GetBaseConfig().GetZone().GetRegion(), + Zone: pool.GetBaseConfig().GetZone().GetZone(), + InstanceType: pool.GetBaseConfig().GetInstanceType(), + Total: poolUsage.Total, + Available: poolUsage.Available, + Status: pool.GetStatus(), + OversoldTotal: poolUsage.OversoldTotal, + OversoldAvailable: poolUsage.OversoldAvailable, }) } diff --git a/bcs-services/bcs-cluster-manager/internal/remote/resource/types.go b/bcs-services/bcs-cluster-manager/internal/remote/resource/types.go index 50ea8de021..63514b3632 100644 --- a/bcs-services/bcs-cluster-manager/internal/remote/resource/types.go +++ b/bcs-services/bcs-cluster-manager/internal/remote/resource/types.go @@ -173,19 +173,20 @@ type OrderInstanceList struct { // InstanceType instance type info type InstanceType struct { - NodeType string - TypeName string - NodeFamily string - Cpu uint32 - Memory uint32 - Gpu uint32 - Status string - UnitPrice float32 - Zones []string - Provider string - ResourcePoolID string - SystemDisk *DataDisk - DataDisks []*DataDisk + NodeType string + TypeName string + NodeFamily string + Cpu uint32 + Memory uint32 + Gpu uint32 + Status string + UnitPrice float32 + Zones []string + Provider string + ResourcePoolID string + SystemDisk *DataDisk + DataDisks []*DataDisk + OversoldAvailable int32 } // InstanceSpec size @@ -266,6 +267,9 @@ type DevicePoolInfo struct { Used int32 Available int32 + OversoldTotal int32 + OversoldAvailable int32 + Status string // 节点池状态 // 节点池被占用情况 @@ -273,6 +277,16 @@ type DevicePoolInfo struct { GroupQuota int } +// PoolUsage device pool usage +type PoolUsage struct { + Total int32 + Used int32 + Available int32 + + OversoldTotal int32 + OversoldAvailable int32 +} + // UsageRatio ratio type UsageRatio struct { QuotaRatio *int // 空闲率 From f278b88a97c229720e8b9428490238c65602b101 Mon Sep 17 00:00:00 2001 From: Maclon Date: Wed, 28 Aug 2024 11:50:55 +0800 Subject: [PATCH 015/108] =?UTF-8?q?fix:=20=E5=AE=8C=E5=96=84EKS=E9=9B=86?= =?UTF-8?q?=E7=BE=A4CA=E5=8A=9F=E8=83=BD=20(#3467)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 完善EKS集群CA功能 * fix: 完善EKS集群CA功能 --- .../internal/cloudprovider/aws/api/ec2.go | 23 ++- .../internal/cloudprovider/aws/api/node.go | 18 ++- .../internal/cloudprovider/aws/api/utils.go | 5 + .../internal/cloudprovider/aws/api/vpc.go | 12 +- .../internal/cloudprovider/aws/nodegroup.go | 39 +++++- .../internal/cloudprovider/aws/taskmgr.go | 100 +++++++++++-- .../aws/tasks/update_desired_nodes.go | 132 ++++++++++++++---- 7 files changed, 278 insertions(+), 51 deletions(-) diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/ec2.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/ec2.go index 2818bd0fa9..26824ff614 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/ec2.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/ec2.go @@ -14,10 +14,11 @@ package api import ( "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/service/ec2" + "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/utils" - - "github.com/aws/aws-sdk-go/service/ec2" ) // EC2Client aws ec2 client @@ -213,6 +214,24 @@ func (c *EC2Client) TerminateInstances(input *ec2.TerminateInstancesInput) ([]*e // DescribeInstanceTypes gets vm instance types func (c *EC2Client) DescribeInstanceTypes(input *ec2.DescribeInstanceTypesInput) ( *ec2.DescribeInstanceTypesOutput, error) { + // 过滤支持x86机型, 适配AL2_x86_86镜像 + defaultFilter := []*ec2.Filter{ + { + Name: aws.String("processor-info.supported-architecture"), + Values: aws.StringSlice([]string{"x86_64"}), + }, + { + Name: aws.String("supported-usage-class"), + Values: aws.StringSlice([]string{"on-demand"}), + }, + } + + if input.Filters != nil { + input.Filters = append(input.Filters, defaultFilter...) + } else { + input.Filters = defaultFilter + } + blog.Infof("DescribeInstanceTypes input: %s", utils.ToJSONString(input)) output, err := c.ec2Client.DescribeInstanceTypes(input) if err != nil { diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/node.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/node.go index d1d68dd2c8..5c7ce01bb1 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/node.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/node.go @@ -82,8 +82,22 @@ func (nm *NodeManager) ListNodeInstanceType(info cloudprovider.InstanceInfo, } cloudInstanceTypes := make([]*ec2.InstanceTypeInfo, 0) - err = client.ec2Client.DescribeInstanceTypesPages(&ec2.DescribeInstanceTypesInput{MaxResults: aws.Int64(limit)}, - func(page *ec2.DescribeInstanceTypesOutput, lastPage bool) bool { + + err = client.ec2Client.DescribeInstanceTypesPages( + &ec2.DescribeInstanceTypesInput{ + MaxResults: aws.Int64(limit), + // 过滤支持x86的机型, 适配AL2_x86_86镜像 + Filters: []*ec2.Filter{ + { + Name: aws.String("processor-info.supported-architecture"), + Values: aws.StringSlice([]string{"x86_64"}), + }, + { + Name: aws.String("supported-usage-class"), + Values: aws.StringSlice([]string{"on-demand"}), + }, + }, + }, func(page *ec2.DescribeInstanceTypesOutput, lastPage bool) bool { cloudInstanceTypes = append(cloudInstanceTypes, page.InstanceTypes...) return !lastPage }) diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/utils.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/utils.go index e5e731ae09..b53198f73a 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/utils.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/utils.go @@ -226,6 +226,11 @@ func MapToTaints(taints []*proto.Taint) []*Taint { Value: aws.String(v.Value), Effect: aws.String(taintTransEffect(v.Effect))}) } + // attention: eks not support addNodes to set unScheduled nodes, thus realize this feature by taint + result = append(result, &Taint{ + Key: aws.String(utils.BCSNodeGroupTaintKey), + Value: aws.String(utils.BCSNodeGroupTaintValue), + Effect: aws.String(utils.BCSNodeGroupGkeTaintEffect)}) return result } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/vpc.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/vpc.go index f6270141e6..a4799cd5ac 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/vpc.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api/vpc.go @@ -68,6 +68,7 @@ func (vm *VPCManager) ListVpcs(vpcID string, opt *cloudprovider.ListNetworksOpti results := make([]*proto.CloudVpc, 0) for _, v := range vpcs { results = append(results, &proto.CloudVpc{ + Name: *v.VpcId, VpcId: *v.VpcId, Ipv4Cidr: func(v *ec2.Vpc) string { if v.CidrBlockAssociationSet != nil { @@ -118,11 +119,12 @@ func (vm *VPCManager) ListSubnets(vpcID string, zone string, opt *cloudprovider. result := make([]*proto.Subnet, 0) for _, v := range cloudSubnets { subnet := &proto.Subnet{ - VpcID: aws.StringValue(v.VpcId), - SubnetID: aws.StringValue(v.SubnetId), - SubnetName: aws.StringValue(v.SubnetId), - CidrRange: aws.StringValue(v.CidrBlock), - Zone: aws.StringValue(v.AvailabilityZone), + VpcID: aws.StringValue(v.VpcId), + SubnetID: aws.StringValue(v.SubnetId), + SubnetName: aws.StringValue(v.SubnetId), + CidrRange: aws.StringValue(v.CidrBlock), + AvailableIPAddressCount: uint64(aws.Int64Value(v.AvailableIpAddressCount)), + Zone: aws.StringValue(v.AvailabilityZone), } ipv6CidrBlocks := make([]string, 0) diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/nodegroup.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/nodegroup.go index a12c350ca8..7cbe1d8ec5 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/nodegroup.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/nodegroup.go @@ -13,9 +13,11 @@ package aws import ( + "context" "fmt" "github.com/Tencent/bk-bcs/bcs-common/common/blog" + "github.com/Tencent/bk-bcs/bcs-common/pkg/odm/operator" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/autoscaling" "github.com/aws/aws-sdk-go/service/eks" @@ -24,6 +26,7 @@ import ( "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/actions" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider" "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/api" + storeopt "github.com/Tencent/bk-bcs/bcs-services/bcs-cluster-manager/internal/store/options" ) func init() { @@ -186,11 +189,41 @@ func (ng *NodeGroup) CleanNodesInGroup(nodes []*proto.Node, group *proto.NodeGro } // UpdateDesiredNodes update nodegroup desired node -func (ng *NodeGroup) UpdateDesiredNodes(desiredNode uint32, group *proto.NodeGroup, +func (ng *NodeGroup) UpdateDesiredNodes(desired uint32, group *proto.NodeGroup, opt *cloudprovider.UpdateDesiredNodeOption) (*cloudprovider.ScalingResponse, error) { - // awsCloud支持连续扩容, 因此直接返回想扩容的节点数 + if group == nil || opt == nil || opt.Cluster == nil || opt.Cloud == nil { + return nil, fmt.Errorf("invalid request") + } + + taskType := cloudprovider.GetTaskType(opt.Cloud.CloudProvider, cloudprovider.UpdateNodeGroupDesiredNode) + + cond := operator.NewLeafCondition(operator.Eq, operator.M{ + "clusterid": opt.Cluster.ClusterID, + "tasktype": taskType, + "nodegroupid": group.NodeGroupID, + "status": cloudprovider.TaskStatusRunning, + }) + taskList, err := cloudprovider.GetStorageModel().ListTask(context.Background(), cond, &storeopt.ListOption{}) + if err != nil { + blog.Errorf("UpdateDesiredNodes failed: %v", err) + return nil, err + } + if len(taskList) != 0 { + return nil, fmt.Errorf("gke task(%d) %s is still running", len(taskList), taskType) + } + + needScaleOutNodes := desired - group.GetAutoScaling().GetDesiredSize() + + blog.Infof("cluster[%s] nodeGroup[%s] current nodes[%d] desired nodes[%d] needNodes[%s]", + group.ClusterID, group.NodeGroupID, group.GetAutoScaling().GetDesiredSize(), desired, needScaleOutNodes) + + if desired <= group.GetAutoScaling().GetDesiredSize() { + return nil, fmt.Errorf("NodeGroup %s current nodes %d larger than or equel to desired %d nodes", + group.Name, group.GetAutoScaling().GetDesiredSize(), desired) + } + return &cloudprovider.ScalingResponse{ - ScalingUp: desiredNode, + ScalingUp: needScaleOutNodes, }, nil } diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/taskmgr.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/taskmgr.go index d309e3f4dc..dc08e99e67 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/taskmgr.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/taskmgr.go @@ -464,8 +464,42 @@ func (t *Task) BuildCleanNodesInGroupTask(nodes []*proto.Node, group *proto.Node // step1: cluster scaleIn to clean cluster nodes common.BuildCordonNodesTaskStep(task, opt.Cluster.ClusterID, nodeIPs) - // step2: cluster delete nodes + // step2. business user define flow + if group.NodeTemplate != nil && len(group.NodeTemplate.ScaleInPreScript) > 0 { + common.BuildJobExecuteScriptStep(task, common.JobExecParas{ + ClusterID: opt.Cluster.ClusterID, + Content: group.NodeTemplate.ScaleInPreScript, + NodeIps: strings.Join(nodeIPs, ","), + Operator: opt.Operator, + StepName: common.PreInitStepJob, + AllowSkipJobTask: group.NodeTemplate.AllowSkipScaleInWhenFailed, + }) + } + + if group.NodeTemplate != nil && group.NodeTemplate.ScaleInExtraAddons != nil && + len(group.NodeTemplate.ScaleInExtraAddons.PreActions) > 0 { + err := template.BuildSopsFactory{ + StepName: template.UserPreInit, + Cluster: opt.Cluster, + Extra: template.ExtraInfo{ + InstancePasswd: "", + NodeIPList: strings.Join(nodeIPs, ","), + NodeOperator: opt.Operator, + ShowSopsUrl: true, + }}.BuildSopsStep(task, group.NodeTemplate.ScaleInExtraAddons, true) + if err != nil { + return nil, fmt.Errorf("BuildCleanNodesInGroupTask ScaleInExtraAddons.PreActions "+ + "BuildBkSopsStepAction failed: %v", err) + } + } + + // step3: cluster delete nodes cleanNodes.BuildCleanNodeGroupNodesStep(task) + // step4: check deleted node status + common.BuildCheckClusterCleanNodesTaskStep(task, group.Provider, opt.Cluster.ClusterID, nodeIDs) + + // step5: remove host from cmdb + common.BuildRemoveHostStep(task, opt.Cluster.BusinessID, nodeIPs) // set current step if len(task.StepSequence) == 0 { @@ -592,23 +626,59 @@ func (t *Task) BuildUpdateDesiredNodesTask(desired uint32, group *proto.NodeGrou updateDesired.BuildApplyInstanceMachinesStep(task) // step2. check cluster nodes and all nodes status is running updateDesired.BuildCheckClusterNodeStatusStep(task) - // install gse agent + // step3. install gse agent common.BuildInstallGseAgentTaskStep(task, &common.GseInstallInfo{ - ClusterId: opt.Cluster.ClusterID, - BusinessId: opt.Cluster.BusinessID, - CloudArea: group.GetArea(), - User: group.GetLaunchTemplate().GetInitLoginUsername(), - Passwd: passwd, - KeyInfo: group.GetLaunchTemplate().GetKeyPair(), - Port: "", + ClusterId: opt.Cluster.ClusterID, + NodeGroupId: group.NodeGroupID, + BusinessId: opt.Cluster.BusinessID, + CloudArea: group.GetArea(), + User: group.GetLaunchTemplate().GetInitLoginUsername(), + Passwd: passwd, + KeyInfo: group.GetLaunchTemplate().GetKeyPair(), + Port: "", }) - // transfer host module - if group.NodeTemplate != nil && group.NodeTemplate.Module != nil && - len(group.NodeTemplate.Module.ScaleOutModuleID) != 0 { - common.BuildTransferHostModuleStep(task, opt.Cluster.BusinessID, opt.Cluster.GetClusterBasicSettings().GetModule(). - GetWorkerModuleID(), opt.Cluster.GetClusterBasicSettings().GetModule().GetMasterModuleID()) + // step4. transfer host module + moduleID := cloudprovider.GetTransModuleInfo(opt.Cluster, opt.AsOption, opt.NodeGroup) + if moduleID != "" { + common.BuildTransferHostModuleStep(task, opt.Cluster.BusinessID, moduleID, "") } - common.BuildUnCordonNodesTaskStep(task, group.ClusterID, nil) + + // step5. business define sops task 支持脚本和标准运维流程 + if group.NodeTemplate != nil && len(group.NodeTemplate.UserScript) > 0 { + common.BuildJobExecuteScriptStep(task, common.JobExecParas{ + ClusterID: group.ClusterID, + Content: group.NodeTemplate.UserScript, + NodeIps: "", + Operator: opt.Operator, + StepName: common.PostInitStepJob, + AllowSkipJobTask: group.NodeTemplate.GetAllowSkipScaleOutWhenFailed(), + }) + } + + if group.NodeTemplate != nil && group.NodeTemplate.ScaleOutExtraAddons != nil { + err := template.BuildSopsFactory{ + StepName: template.UserAfterInit, + Cluster: opt.Cluster, + Extra: template.ExtraInfo{ + InstancePasswd: passwd, + NodeIPList: "", + NodeOperator: opt.Operator, + ShowSopsUrl: true, + ExternalNodeScript: "", + NodeGroupID: group.NodeGroupID, + }}.BuildSopsStep(task, group.NodeTemplate.ScaleOutExtraAddons, false) + if err != nil { + return nil, fmt.Errorf("BuildScalingNodesTask business BuildBkSopsStepAction failed: %v", err) + } + } + + // step6: set node labels + common.BuildNodeLabelsTaskStep(task, opt.Cluster.ClusterID, nil, cloudprovider.GetLabelsByNg(opt.NodeGroup)) + // step7: set node annotations + common.BuildNodeAnnotationsTaskStep(task, opt.Cluster.ClusterID, nil, + cloudprovider.GetAnnotationsByNg(opt.NodeGroup)) + // step8: remove inner nodes taints + common.BuildRemoveInnerTaintTaskStep(task, group) // set current step if len(task.StepSequence) == 0 { diff --git a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/update_desired_nodes.go b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/update_desired_nodes.go index 8a6a609ff0..9ff2c87668 100644 --- a/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/update_desired_nodes.go +++ b/bcs-services/bcs-cluster-manager/internal/cloudprovider/aws/tasks/update_desired_nodes.go @@ -145,8 +145,15 @@ func applyInstanceMachines(ctx context.Context, info *cloudprovider.CloudDependB return err } + asgInfo, err := asCli.DescribeAutoScalingGroups(&autoscaling.DescribeAutoScalingGroupsInput{ + AutoScalingGroupNames: []*string{&asgName}}) + if err != nil { + blog.Errorf("getInstancesFromAsg DescribeAutoScalingGroups[%s] failed: %v", asgName, err) + return err + } + err = loop.LoopDoFunc(context.Background(), func() error { - err = asCli.SetDesiredCapacity(asgName, int64(nodeNum)) + err = asCli.SetDesiredCapacity(asgName, *asgInfo[0].DesiredCapacity+int64(nodeNum)) if err != nil { if strings.Contains(err.Error(), autoscaling.ErrCodeScalingActivityInProgressFault) { blog.Infof("applyInstanceMachines[%s] ScaleOutInstances: %v", taskID, @@ -159,6 +166,7 @@ func applyInstanceMachines(ctx context.Context, info *cloudprovider.CloudDependB return loop.EndLoop }, loop.LoopInterval(10*time.Second)) if err != nil { + _ = asCli.SetDesiredCapacity(asgName, *asgInfo[0].DesiredCapacity) return fmt.Errorf("applyInstanceMachines[%s] SetDesiredCapacity failed: %v", taskID, err) } @@ -218,7 +226,6 @@ func recordClusterInstanceToDB(ctx context.Context, state *cloudprovider.TaskSta if len(successIns) > 0 { state.Task.CommonParams[cloudprovider.SuccessNodeIDsKey.String()] = strings.Join(successIns, ",") - state.Task.CommonParams[cloudprovider.NodeNamesKey.String()] = strings.Join(successIns, ",") state.Task.CommonParams[cloudprovider.NodeIDsKey.String()] = strings.Join(successIns, ",") } @@ -228,6 +235,8 @@ func recordClusterInstanceToDB(ctx context.Context, state *cloudprovider.TaskSta blog.Errorf("recordClusterInstanceToDB[%s] failed: %v", taskID, err) } if len(nodeIPs) > 0 { + state.Task.NodeIPList = nodeIPs + state.Task.CommonParams[cloudprovider.OriginNodeIPsKey.String()] = strings.Join(nodeIPs, ",") state.Task.CommonParams[cloudprovider.NodeIPsKey.String()] = strings.Join(nodeIPs, ",") } @@ -311,6 +320,13 @@ func differentInstance(rootCtx context.Context, info *cloudprovider.CloudDependB []*autoscaling.Instance, error) { taskID := cloudprovider.GetTaskIDFromContext(rootCtx) res := make([]*autoscaling.Instance, 0) + + // 获取 node map + nodeMap, err := getNodeMap(rootCtx, info) + if err != nil { + return nil, err + } + asgName, err := getAsgNameByNodeGroup(rootCtx, info) if err != nil { return nil, err @@ -323,15 +339,26 @@ func differentInstance(rootCtx context.Context, info *cloudprovider.CloudDependB timeCtx, cancel := context.WithTimeout(context.TODO(), 10*time.Minute) defer cancel() - instances := make([]*autoscaling.Instance, 0) err = loop.LoopDoFunc(timeCtx, func() error { - instances, err = getInstancesFromAsg(asCli, asgName) - if err != nil { - return err + newInstances := make([]*autoscaling.Instance, 0) + + instances, errGet := getInstancesFromAsg(asCli, asgName) + if errGet != nil { + return errGet + } + + // 比对 + for _, vm := range instances { + nodeID := *vm.InstanceId + if _, ok := nodeMap[nodeID]; !ok { + // 如果当前vm不存在于nodeMap中,则为扩容出来的机器 + newInstances = append(newInstances, vm) + } } - blog.Infof("differentInstance[%s] instances[%d], desired[%d]", taskID, len(instances), nodeNum) - if len(instances) == int(nodeNum) { + blog.Infof("differentInstance[%s] instances[%d], desired[%d]", taskID, len(newInstances), nodeNum) + if len(newInstances) == int(nodeNum) { + res = newInstances return loop.EndLoop } @@ -341,21 +368,6 @@ func differentInstance(rootCtx context.Context, info *cloudprovider.CloudDependB return nil, err } - // 获取 node map - nodeMap, err := getNodeMap(rootCtx, info) - if err != nil { - return nil, err - } - - // 比对 - for _, vm := range instances { - nodeID := *vm.InstanceId - if _, ok := nodeMap[nodeID]; !ok { - // 如果当前vm不存在于nodeMap中,则为扩容出来的机器 - res = append(res, vm) - } - } - return res, nil } @@ -423,6 +435,7 @@ func transInstancesToNode(ctx context.Context, state *cloudprovider.TaskState, s for i := range nodes { successNodeNames[i] = nodes[i].NodeName } + state.Task.CommonParams[cloudprovider.NodeNamesKey.String()] = strings.Join(successNodeNames, ",") state.Task.CommonParams[cloudprovider.NodeIDsKey.String()] = strings.Join(successNodeNames, ",") state.Task.CommonParams[cloudprovider.SuccessNodeIDsKey.String()] = strings.Join(successNodeNames, ",") } @@ -483,6 +496,7 @@ func CheckClusterNodesStatusTask(taskID string, stepName string) error { nodeGroupID := step.Params[cloudprovider.NodeGroupIDKey.String()] cloudID := step.Params[cloudprovider.CloudIDKey.String()] successNodeNames := strings.Split(state.Task.CommonParams[cloudprovider.SuccessNodeIDsKey.String()], ",") + manual := state.Task.CommonParams[cloudprovider.ManualKey.String()] if len(clusterID) == 0 || len(nodeGroupID) == 0 || len(cloudID) == 0 || len(successNodeNames) == 0 { blog.Errorf("CheckClusterNodesStatusTask[%s]: check parameter validate failed", taskID) @@ -505,13 +519,26 @@ func CheckClusterNodesStatusTask(taskID string, stepName string) error { // inject taskID ctx := cloudprovider.WithTaskIDForContext(context.Background(), taskID) successInstances, failureInstances, err := checkClusterInstanceStatus(ctx, dependInfo, successNodeNames) - if err != nil { + if err != nil || len(successInstances) == 0 { + if manual != common.True { + // rollback failed nodes + _ = returnEksInstancesAndCleanNodes(ctx, dependInfo, failureInstances) + } blog.Errorf("CheckClusterNodesStatusTask[%s]: checkClusterInstanceStatus failed: %s", taskID, err.Error()) retErr := fmt.Errorf("CheckClusterNodesStatusTask checkClusterInstanceStatus failed") _ = state.UpdateStepFailure(start, stepName, retErr) return retErr } + // rollback abnormal nodes + if len(failureInstances) > 0 { + blog.Errorf("CheckClusterNodesStatusTask[%s] handle failedNodes[%v]", taskID, failureInstances) + errMsg := returnEksInstancesAndCleanNodes(ctx, dependInfo, failureInstances) + if errMsg != nil { + blog.Errorf("CheckClusterNodesStatusTask[%s] returnInstancesAndCleanNodes failed %v", taskID, errMsg) + } + } + // update response information to task common params if state.Task.CommonParams == nil { state.Task.CommonParams = make(map[string]string) @@ -624,3 +651,60 @@ func checkClusterInstanceStatus(ctx context.Context, info *cloudprovider.CloudDe return addSuccessNodes, addFailureNodes, nil } + +func returnEksInstancesAndCleanNodes(ctx context.Context, info *cloudprovider.CloudDependBasicInfo, + instanceNames []string) error { // nolint + taskID := cloudprovider.GetTaskIDFromContext(ctx) + + if len(instanceNames) == 0 { + blog.Infof("returnEksInstancesAndCleanNodes[%s] instanceNames empty", taskID) + return nil + } + + instanceIDs := make([]string, 0) + + // delete db data record + for _, name := range instanceNames { + node, err := cloudprovider.GetStorageModel().GetNodeByName(context.Background(), + info.Cluster.ClusterID, name) + if err != nil { + blog.Errorf("returnEksInstancesAndCleanNodes[%s] GetNodeByName[%s] failed: %v", + taskID, name, err) + } + instanceIDs = append(instanceIDs, node.NodeID) + + err = cloudprovider.GetStorageModel().DeleteClusterNodeByName(context.Background(), + info.Cluster.ClusterID, name) + if err != nil { + blog.Errorf("returnEksInstancesAndCleanNodes[%s] DeleteClusterNodeByName[%s] failed: %v", + taskID, name, err) + } else { + blog.Infof("returnEksInstancesAndCleanNodes[%s] DeleteClusterNodeByName success[%+v]", taskID, name) + } + } + + if len(instanceIDs) == 0 { + blog.Errorf("returnEksInstancesAndCleanNodes[%s] got empty instanceID from storage", taskID) + return fmt.Errorf("returnEksInstancesAndCleanNodes got empty instanceID from storage") + } + + // delete instances + err := removeAsgInstances(ctx, info, instanceNames) + if err != nil { + blog.Errorf("returnEksInstancesAndCleanNodes[%s] removeMigInstances[%+v] "+ + "failed: %v", taskID, instanceNames, err) + } else { + blog.Infof("returnEksInstancesAndCleanNodes[%s] removeMigInstances[%+v] success", taskID, instanceNames) + } + + // rollback nodeGroup desired size + err = cloudprovider.UpdateNodeGroupDesiredSize(info.NodeGroup.NodeGroupID, len(instanceNames), true) + if err != nil { + blog.Errorf("returnEksInstancesAndCleanNodes[%s] UpdateNodeGroupDesiredSize failed: %v", taskID, err) + } else { + blog.Infof("returnEksInstancesAndCleanNodes[%s] UpdateNodeGroupDesiredSize success[%v]", + taskID, len(instanceNames)) + } + + return nil +} From e86beb4d6d4a3c085d7679e4071238b2fc5bda88 Mon Sep 17 00:00:00 2001 From: pelenli Date: Wed, 28 Aug 2024 04:00:15 +0000 Subject: [PATCH 016/108] =?UTF-8?q?--story=3D119385779=20=E3=80=90GitOps?= =?UTF-8?q?=E3=80=91=E6=8F=90=E4=BE=9B=E2=80=9D=E9=9D=9E=E8=85=BE=E8=AE=AF?= =?UTF-8?q?=E2=80=9D=E5=91=98=E5=B7=A5=E6=8E=88=E4=BA=88=E4=BB=85=20VIEW?= =?UTF-8?q?=20=E6=9D=83=E9=99=90=E8=83=BD=E5=8A=9B=20(merge=20request=20!1?= =?UTF-8?q?989)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squash merge branch 'pelenli-gitops-set-not-tencent-user-permission' into 'master' --story=119385779 【GitOps】提供”非腾讯”员工授予仅 VIEW 权限能力 TAPD: --story=119385779 --- .../pkg/proxy/argocd/middleware/handler.go | 17 ++--- .../pkg/proxy/argocd/permitcheck/ctx.go | 4 +- .../pkg/proxy/argocd/permitcheck/permit.go | 2 +- .../proxy/argocd/permitcheck/permit_app.go | 9 +-- .../proxy/argocd/permitcheck/permit_base.go | 68 +++++++++++++------ .../argocd/permitcheck/permit_project.go | 4 +- .../bcs-gitops-manager/pkg/proxy/proxy.go | 13 ++-- 7 files changed, 75 insertions(+), 42 deletions(-) diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware/handler.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware/handler.go index af2f568e32..6f1430cd7d 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware/handler.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware/handler.go @@ -173,7 +173,7 @@ func (h *handler) listAuthorizedProjects(ctx context.Context, names []string) (* if err != nil { return nil, http.StatusInternalServerError, errors.Wrapf(err, "list projects failed") } - projectIDs := make([]string, 0, len(projectList.Items)) + projects := make(map[string]string) controlledProjects := make(map[string]v1alpha1.AppProject) for i, proj := range projectList.Items { projectID := common.GetBCSProjectID(proj.Annotations) @@ -184,13 +184,14 @@ func (h *handler) listAuthorizedProjects(ctx context.Context, names []string) (* continue } controlledProjects[projectID] = projectList.Items[i] - projectIDs = append(projectIDs, projectID) + projects[proj.Name] = projectID } - if len(projectIDs) == 0 { + if len(projects) == 0 { + blog.Warnf("RequestID[%s] get empty projects with query: %v", ctxutils.RequestID(ctx), names) return &v1alpha1.AppProjectList{}, http.StatusOK, nil } - projectAuth, err := h.listAuthorizedProjectsByID(ctx, projectIDs) + projectAuth, err := h.listAuthorizedProjectsByID(ctx, projects) if err != nil { return nil, http.StatusInternalServerError, errors.Wrapf(err, "project permission auth center failed") } @@ -206,15 +207,15 @@ func (h *handler) listAuthorizedProjects(ctx context.Context, names []string) (* return projectList, http.StatusOK, nil } -func (h *handler) listAuthorizedProjectsByID(ctx context.Context, projectIDs []string) (map[string]bool, error) { - result, err := h.permitChecker.GetProjectMultiPermission(ctx, projectIDs, []permitcheck.RSAction{ +func (h *handler) listAuthorizedProjectsByID(ctx context.Context, projects map[string]string) (map[string]bool, error) { + result, err := h.permitChecker.GetProjectMultiPermission(ctx, projects, []permitcheck.RSAction{ permitcheck.ProjectViewRSAction}) if err != nil { return nil, err } projectAuth := make(map[string]bool) - for pid, permits := range result { - projectAuth[pid] = permits[permitcheck.ProjectViewRSAction] + for projID, permits := range result { + projectAuth[projID] = permits[permitcheck.ProjectViewRSAction] } return projectAuth, nil } diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/ctx.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/ctx.go index a3b270013f..dbb83d3bea 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/ctx.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/ctx.go @@ -72,8 +72,8 @@ func (c *checker) createPermitContext(ctx context.Context, project string) (*per if err != nil { return nil, statusCode, err } - result, err := c.getBCSMultiProjectPermission(ctx, []string{projID}, []RSAction{ProjectViewRSAction, - ProjectEditRSAction, ProjectDeleteRSAction}) + result, err := c.getBCSMultiProjectPermission(ctx, map[string]string{project: projID}, + []RSAction{ProjectViewRSAction, ProjectEditRSAction, ProjectDeleteRSAction}) if err != nil { return nil, http.StatusInternalServerError, errors.Wrapf(err, "get project '%s' permission failed", project) diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit.go index 4e016644d0..538ae562c0 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit.go @@ -87,7 +87,7 @@ type UpdatePermissionRequest struct { // PermissionInterface defines the interface of permission type PermissionInterface interface { - GetProjectMultiPermission(ctx context.Context, projectIDs []string, actions []RSAction) ( + GetProjectMultiPermission(ctx context.Context, projects map[string]string, actions []RSAction) ( map[string]map[RSAction]bool, error) CheckProjectPermission(ctx context.Context, project string, action RSAction) (*v1alpha1.AppProject, int, error) diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit_app.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit_app.go index 15affde2fd..cb5e609501 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit_app.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit_app.go @@ -118,7 +118,7 @@ func (c *checker) getMultiApplicationMultiActionPermission(ctx context.Context, return nil, nil, http.StatusInternalServerError, errors.Wrapf(err, "build cluster namespace map failed") } - permits, err := c.getBCSNamespaceScopedPermission(ctx, contextGetProjID(ctx), clusterNamespaceMap) + permits, err := c.getBCSNamespaceScopedPermission(ctx, proj, contextGetProjID(ctx), clusterNamespaceMap) if err != nil { return nil, nil, http.StatusInternalServerError, errors.Wrapf(err, "auth center failed for project '%s'", contextGetProjName(ctx)) @@ -251,9 +251,10 @@ func (c *checker) CheckApplicationCreate(ctx context.Context, app *v1alpha1.Appl if err != nil { return statusCode, err } - permits, err := c.getBCSNamespaceScopedPermission(ctx, contextGetProjID(ctx), map[string]map[string]struct{}{ - clusterName: {clusterNamespace: struct{}{}}, - }) + permits, err := c.getBCSNamespaceScopedPermission(ctx, projectName, contextGetProjID(ctx), + map[string]map[string]struct{}{ + clusterName: {clusterNamespace: struct{}{}}, + }) if err != nil { return http.StatusInternalServerError, err } diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit_base.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit_base.go index 6266ea7caa..6268666aca 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit_base.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit_base.go @@ -17,12 +17,14 @@ import ( "net/http" "time" + "github.com/Tencent/bk-bcs/bcs-common/common/blog" "github.com/Tencent/bk-bcs/bcs-common/pkg/auth/iam" iamnamespace "github.com/Tencent/bk-bcs/bcs-services/pkg/bcs-auth-v4/namespace" authutils "github.com/Tencent/bk-bcs/bcs-services/pkg/bcs-auth/utils" "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1" "github.com/pkg/errors" + "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager/internal/dao" "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager/pkg/common" "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/middleware/ctxutils" "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-manager/pkg/utils" @@ -50,19 +52,41 @@ func (c *checker) getProjectWithID(ctx context.Context, projectName string) (*v1 } // getBCSMultiProjectPermission get mutli-projects permission -func (c *checker) getBCSMultiProjectPermission(ctx context.Context, projectIDs []string, +func (c *checker) getBCSMultiProjectPermission(ctx context.Context, projects map[string]string, actions []RSAction) (map[string]map[RSAction]bool, error) { user := ctxutils.User(ctx) if c.isAdminUser(user.GetUser()) { result := make(map[string]map[RSAction]bool) - for _, projectID := range projectIDs { + for _, projectID := range projects { result[projectID] = map[RSAction]bool{ ProjectViewRSAction: true, ProjectEditRSAction: true, ProjectDeleteRSAction: true, } } return result, nil } + // rewrite not tencent user with only-view permission + if !user.IsTencent { + result := make(map[string]map[RSAction]bool) + for projName, projID := range projects { + result[projID] = map[RSAction]bool{ + ProjectViewRSAction: false, + ProjectEditRSAction: false, + ProjectDeleteRSAction: false, + } + authed, err := dao.GlobalDB().CheckExternalUserPermission(user.GetUser(), projName) + if err != nil { + blog.Errorf("check external user permission error: %v", err) + continue + } + result[projID][ProjectViewRSAction] = authed + } + return result, nil + } + projectIDs := make([]string, 0, len(projects)) + for _, projectID := range projects { + projectIDs = append(projectIDs, projectID) + } bcsActions := make([]string, 0) for _, action := range actions { switch action { @@ -104,13 +128,7 @@ func (c *checker) getBCSMultiProjectPermission(ctx context.Context, projectIDs [ } } } - // rewrite not tencent user with only-view permission - if !user.IsTencent { - for k := range newResult { - newResult[k][ProjectEditRSAction] = false - newResult[k][ProjectDeleteRSAction] = false - } - } + return newResult, nil } @@ -141,7 +159,7 @@ func (c *checker) getBCSClusterCreatePermission(ctx context.Context, projectID s } // getBCSNamespaceScopedPermission get bcs namespace scoped permission -func (c *checker) getBCSNamespaceScopedPermission(ctx context.Context, projectID string, +func (c *checker) getBCSNamespaceScopedPermission(ctx context.Context, proj, projectID string, clusterNS map[string]map[string]struct{}) (map[string]map[string]bool, error) { user := ctxutils.User(ctx) if c.isAdminUser(user.GetUser()) { @@ -156,6 +174,26 @@ func (c *checker) getBCSNamespaceScopedPermission(ctx context.Context, projectID } return result, nil } + // rewrite not tencent user with only-view permission + if !user.IsTencent { + result := make(map[string]map[string]bool) + authed, err := dao.GlobalDB().CheckExternalUserPermission(user.GetUser(), proj) + if err != nil { + blog.Errorf("check external user permission error: %v", err) + authed = false + } + for cls, nsMap := range clusterNS { + for ns := range nsMap { + result[authutils.CalcIAMNsID(cls, ns)] = map[string]bool{ + string(iamnamespace.NameSpaceScopedView): authed, + string(iamnamespace.NameSpaceScopedCreate): false, + string(iamnamespace.NameSpaceScopedDelete): false, + string(iamnamespace.NameSpaceScopedUpdate): false, + } + } + } + return result, nil + } projNsData := make([]iamnamespace.ProjectNamespaceData, 0) for cls, nsMap := range clusterNS { @@ -169,16 +207,6 @@ func (c *checker) getBCSNamespaceScopedPermission(ctx context.Context, projectID } var permits map[string]map[string]bool - defer func() { - // rewrite not tencent user with only-view permission - if !user.IsTencent { - for k := range permits { - permits[k][string(iamnamespace.NameSpaceScopedCreate)] = false - permits[k][string(iamnamespace.NameSpaceScopedDelete)] = false - permits[k][string(iamnamespace.NameSpaceScopedUpdate)] = false - } - } - }() var err error for i := 0; i < 5; i++ { permits, err = c.namespacePermission.GetMultiNamespaceMultiActionPerm(user.GetUser(), projNsData, []string{ diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit_project.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit_project.go index ada5546cdc..fd08c45e1d 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit_project.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/permitcheck/permit_project.go @@ -25,9 +25,9 @@ import ( ) // GetProjectMultiPermission get multi projects permission -func (c *checker) GetProjectMultiPermission(ctx context.Context, projectIDs []string, +func (c *checker) GetProjectMultiPermission(ctx context.Context, projects map[string]string, actions []RSAction) (map[string]map[RSAction]bool, error) { - return c.getBCSMultiProjectPermission(ctx, projectIDs, actions) + return c.getBCSMultiProjectPermission(ctx, projects, actions) } // CheckProjectPermission check permission for project diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/proxy.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/proxy.go index 6398fb0f6a..5c40894c25 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/proxy.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/proxy.go @@ -40,10 +40,6 @@ type GitOpsProxy interface { Init() error } -var ( - tencentUserRegexp = regexp.MustCompile("^(v_|p_|[a-z])[a-z]+$") -) - // UserInfo for token validate type UserInfo struct { *jwt.UserClaimsInfo @@ -61,6 +57,10 @@ func (user *UserInfo) GetUser() string { return "" } +const ( + poTencentUserPrefix = "potencent_" +) + // GetJWTInfo from request func GetJWTInfo(req *http.Request, client *jwt.JWTClient) (*UserInfo, error) { raw := req.Header.Get("Authorization") @@ -72,7 +72,10 @@ func GetJWTInfo(req *http.Request, client *jwt.JWTClient) (*UserInfo, error) { userName := req.Header.Get(common.HeaderBKUserName) user.UserName = userName } - user.IsTencent = tencentUserRegexp.MatchString(user.GetUser()) + if strings.HasPrefix(user.GetUser(), poTencentUserPrefix) { + user.UserName = strings.TrimPrefix(user.UserName, poTencentUserPrefix) + user.IsTencent = false + } return user, nil } From dc4bd8aced8a78e8bb9f6327a6e7983d230d61fa Mon Sep 17 00:00:00 2001 From: kayinli Date: Wed, 28 Aug 2024 04:00:26 +0000 Subject: [PATCH 017/108] =?UTF-8?q?--story=3D119410572=20=E3=80=90GitOps?= =?UTF-8?q?=E3=80=91=E5=A2=9E=E5=8A=A0workflow=E6=89=A7=E8=A1=8C=E5=8F=82?= =?UTF-8?q?=E6=95=B0=20(merge=20request=20!1993)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Squash merge branch 'workflow' into 'master' feat:workflow执行增加params参数 TAPD: --story=119410572 TAPD: --task=075269506 --- .../bcs-gitops-manager/pkg/proxy/argocd/workflow.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/workflow.go b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/workflow.go index c8329d36ce..5eacca1c7c 100644 --- a/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/workflow.go +++ b/bcs-scenarios/bcs-gitops-manager/pkg/proxy/argocd/workflow.go @@ -20,6 +20,7 @@ import ( "net/http" "time" + "github.com/Tencent/bk-bcs/bcs-common/common/blog" workflowv1 "github.com/Tencent/bk-bcs/bcs-scenarios/bcs-gitops-workflow/pkg/apis/gitopsworkflow/v1" "github.com/gorilla/mux" "github.com/pkg/errors" @@ -231,6 +232,16 @@ func (plugin *WorkflowPlugin) executeHandler(r *http.Request) (*http.Request, *m if httpResp != nil { return r, httpResp } + executeParams := wf.Spec.Params + body, err := io.ReadAll(r.Body) + if err != nil { + blog.Warnf("get body failed:%s", err.Error()) + } + if body != nil { + if err = json.Unmarshal(body, &executeParams); err != nil { + blog.Warnf("unmarshal body to executeParams failed:%s", err.Error()) + } + } user := ctxutils.User(r.Context()) controller := true block := true @@ -265,6 +276,7 @@ func (plugin *WorkflowPlugin) executeHandler(r *http.Request) (*http.Request, *m Spec: workflowv1.WorkflowHistorySpec{ TriggerByWorkflow: true, TriggerType: "manual", + Params: executeParams, }, } if err := plugin.workflowStore.ExecuteWorkflow(r.Context(), history); err != nil { From 99eb24d2ed4a8ae7e4c82c5c029982fb0803966a Mon Sep 17 00:00:00 2001 From: ambition <39669748+Ambition9186@users.noreply.github.com> Date: Wed, 28 Aug 2024 19:42:52 +0800 Subject: [PATCH 018/108] =?UTF-8?q?feat:=20kv=E6=9C=8D=E5=8A=A1=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=AF=86=E9=92=A5=E7=B1=BB=E5=9E=8B=20(#3461)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cmd/api-server/service/released_kv.go | 15 +- .../bcs-bscp/cmd/config-server/service/kv.go | 277 +- .../migrations/20240822160103_modif_kv.go | 118 + .../cmd/data-service/service/group.go | 2 +- .../bcs-bscp/cmd/data-service/service/kv.go | 278 +- .../cmd/data-service/service/publish.go | 2 +- .../cmd/data-service/service/release.go | 2 +- .../cmd/data-service/service/released_kv.go | 5 + .../cmd/feed-server/bll/release/match.go | 6 +- bcs-services/bcs-bscp/pkg/dal/dao/kv.go | 22 +- bcs-services/bcs-bscp/pkg/dal/dao/publish.go | 2 +- bcs-services/bcs-bscp/pkg/dal/gen/kvs.gen.go | 42 +- .../bcs-bscp/pkg/dal/gen/released_kvs.gen.go | 42 +- bcs-services/bcs-bscp/pkg/dal/table/app.go | 3 + bcs-services/bcs-bscp/pkg/dal/table/group.go | 28 +- bcs-services/bcs-bscp/pkg/dal/table/kv.go | 44 +- .../bcs-bscp/pkg/dal/table/released_group.go | 4 +- .../bcs-bscp/pkg/i18n/translations/catalog.go | 879 ++-- .../translations/locales/en/out.gotext.json | 336 ++ .../locales/zh/messages.gotext.json | 292 +- .../translations/locales/zh/out.gotext.json | 292 +- .../config-server/config_service.pb.go | 3962 +++++++++-------- .../config-server/config_service.proto | 6 + .../bcs-bscp/pkg/protocol/core/kv/convert.go | 18 +- .../bcs-bscp/pkg/protocol/core/kv/kvs.pb.go | 62 +- .../bcs-bscp/pkg/protocol/core/kv/kvs.proto | 2 + 26 files changed, 4091 insertions(+), 2650 deletions(-) create mode 100644 bcs-services/bcs-bscp/cmd/data-service/db-migration/migrations/20240822160103_modif_kv.go diff --git a/bcs-services/bcs-bscp/cmd/api-server/service/released_kv.go b/bcs-services/bcs-bscp/cmd/api-server/service/released_kv.go index 6f486262a1..17bef5bb63 100644 --- a/bcs-services/bcs-bscp/cmd/api-server/service/released_kv.go +++ b/bcs-services/bcs-bscp/cmd/api-server/service/released_kv.go @@ -28,6 +28,7 @@ import ( "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/criteria/constant" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/i18n" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/logs" pbcs "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/config-server" @@ -144,7 +145,7 @@ func (m *kvService) Export(w http.ResponseWriter, r *http.Request) { _ = render.Render(w, r, rest.BadRequest(err)) return } - outData = kvsToOutData(kvs.Details) + outData = kvsToOutData(kt, kvs.Details) } else { req := &pbcs.ListReleasedKvsReq{ BizId: kt.BizID, @@ -157,7 +158,7 @@ func (m *kvService) Export(w http.ResponseWriter, r *http.Request) { _ = render.Render(w, r, rest.BadRequest(err)) return } - outData = rkvsToOutData(rkvs.Details) + outData = rkvsToOutData(kt, rkvs.Details) } var exporter Exporter @@ -196,7 +197,7 @@ type RkvOutData struct { Memo string `json:"memo" yaml:"memo" xml:"memo"` } -func rkvsToOutData(details []*pbrkv.ReleasedKv) map[string]interface{} { +func rkvsToOutData(kt *kit.Kit, details []*pbrkv.ReleasedKv) map[string]interface{} { d := map[string]interface{}{} for _, rkv := range details { var value interface{} @@ -205,6 +206,9 @@ func rkvsToOutData(details []*pbrkv.ReleasedKv) map[string]interface{} { i, _ := strconv.Atoi(rkv.Spec.Value) value = i } + if rkv.Spec.SecretHidden { + value = i18n.T(kt, "sensitive information cannot be exported") + } d[rkv.Spec.Key] = map[string]interface{}{ "kv_type": rkv.Spec.KvType, "value": value, @@ -215,7 +219,7 @@ func rkvsToOutData(details []*pbrkv.ReleasedKv) map[string]interface{} { return d } -func kvsToOutData(details []*pbkv.Kv) map[string]interface{} { +func kvsToOutData(kt *kit.Kit, details []*pbkv.Kv) map[string]interface{} { d := map[string]interface{}{} for _, rkv := range details { var value interface{} @@ -224,6 +228,9 @@ func kvsToOutData(details []*pbkv.Kv) map[string]interface{} { i, _ := strconv.Atoi(rkv.Spec.Value) value = i } + if rkv.Spec.SecretHidden { + value = i18n.T(kt, "sensitive information cannot be exported") + } d[rkv.Spec.Key] = map[string]interface{}{ "kv_type": rkv.Spec.KvType, "value": value, diff --git a/bcs-services/bcs-bscp/cmd/config-server/service/kv.go b/bcs-services/bcs-bscp/cmd/config-server/service/kv.go index aff00ab877..6c162d215e 100644 --- a/bcs-services/bcs-bscp/cmd/config-server/service/kv.go +++ b/bcs-services/bcs-bscp/cmd/config-server/service/kv.go @@ -14,11 +14,14 @@ package service import ( "context" + "crypto/x509" "encoding/json" + "encoding/pem" "encoding/xml" "errors" "fmt" "reflect" + "regexp" "strings" "sync" @@ -50,16 +53,22 @@ func (s *Service) CreateKv(ctx context.Context, req *pbcs.CreateKvReq) (*pbcs.Cr return nil, err } + if err := verifySecretVaule(grpcKit, req.SecretType, req.Value); err != nil { + return nil, err + } + r := &pbds.CreateKvReq{ Attachment: &pbkv.KvAttachment{ BizId: grpcKit.BizID, AppId: req.AppId, }, Spec: &pbkv.KvSpec{ - Key: req.Key, - Memo: req.Memo, - KvType: req.KvType, - Value: req.Value, + Key: req.Key, + Memo: req.Memo, + KvType: req.KvType, + Value: req.Value, + SecretType: req.SecretType, + SecretHidden: req.SecretHidden, }, } rp, err := s.client.DS.CreateKv(grpcKit.RpcCtx(), r) @@ -86,15 +95,20 @@ func (s *Service) UpdateKv(ctx context.Context, req *pbcs.UpdateKvReq) (*pbcs.Up return nil, err } + if err := verifySecretVaule(grpcKit, req.SecretType, req.Value); err != nil { + return nil, err + } + r := &pbds.UpdateKvReq{ Attachment: &pbkv.KvAttachment{ BizId: grpcKit.BizID, AppId: req.AppId, }, Spec: &pbkv.KvSpec{ - Key: req.Key, - Value: req.Value, - Memo: req.Memo, + Key: req.Key, + Value: req.Value, + Memo: req.Memo, + SecretHidden: req.SecretHidden, }, } if _, err := s.client.DS.UpdateKv(grpcKit.RpcCtx(), r); err != nil { @@ -283,10 +297,12 @@ func (s *Service) BatchUpsertKvs(ctx context.Context, req *pbcs.BatchUpsertKvsRe AppId: req.AppId, }, KvSpec: &pbkv.KvSpec{ - Key: kv.Key, - KvType: kv.KvType, - Value: kv.Value, - Memo: kv.Memo, + Key: kv.Key, + KvType: kv.KvType, + Value: kv.Value, + Memo: kv.Memo, + SecretType: kv.SecretType, + SecretHidden: kv.SecretHidden, }, }) } @@ -462,20 +478,20 @@ func (s *Service) ImportKvs(ctx context.Context, req *pbcs.ImportKvsReq) (*pbcs. switch req.Format { case "json": if !json.Valid([]byte(req.GetData())) { - return nil, errors.New("not legal JSON data") + return nil, errors.New(i18n.T(grpcKit, "not legal JSON data")) } if err := json.Unmarshal([]byte(req.GetData()), &kvMap); err != nil { - return nil, err + return nil, errors.New(i18n.T(grpcKit, "json format error, err: %v", err)) } case "yaml": if err := yaml.Unmarshal([]byte(req.GetData()), &kvMap); err != nil { - return nil, err + return nil, errors.New(i18n.T(grpcKit, "yaml format error, err: %v", err)) } default: - return nil, fmt.Errorf("%s type not supported", req.Format) + return nil, errors.New(i18n.T(grpcKit, "%s type not supported", req.Format)) } - kvs, err := handleKv(kvMap) + kvs, err := handleKv(grpcKit, kvMap) if err != nil { return nil, err } @@ -492,7 +508,7 @@ func (s *Service) ImportKvs(ctx context.Context, req *pbcs.ImportKvsReq) (*pbcs. return &pbcs.ImportKvsResp{}, nil } -func handleKv(result map[string]interface{}) ([]*pbcs.BatchUpsertKvsReq_Kv, error) { +func handleKv(kit *kit.Kit, result map[string]interface{}) ([]*pbcs.BatchUpsertKvsReq_Kv, error) { kvMap := []*pbcs.BatchUpsertKvsReq_Kv{} for key, value := range result { var kVType string @@ -514,62 +530,132 @@ func handleKv(result map[string]interface{}) ([]*pbcs.BatchUpsertKvsReq_Kv, erro }) } } else { - kvType, okType := entry["kv_type"].(string) - kvValue, okVal := entry["value"] - if !okType && !okVal { - return nil, fmt.Errorf("file format error, please check the key: %s", key) - } - if err := validateKvType(kvType); err != nil { - return nil, fmt.Errorf("key: %s %s", key, err.Error()) + + kvType, err := checkKvType(kit, key, entry) + if err != nil { + return nil, err } - var memo string - kvMemo, okMemo := entry["memo"].(string) - if okMemo { - memo = kvMemo + + kvValue, err := checkKv(kit, kvType, key, entry) + if err != nil { + return nil, err } - var val string - val = fmt.Sprintf("%v", kvValue) - // json 和 yaml 都需要格式化 - if kvType == string(table.KvJson) { - v, ok := kvValue.(string) - if !ok { - return nil, fmt.Errorf("key: %s format error", key) - } - mv, err := json.Marshal(v) - if err != nil { - return nil, fmt.Errorf("key: %s json marshal error", key) - } - // 需要处理转义符 - var data interface{} - err = json.Unmarshal(mv, &data) - if err != nil { - return nil, fmt.Errorf("key: %s json unmarshal error", key) - } - val, ok = data.(string) - if !ok { - return nil, fmt.Errorf("key: %s format error", key) - } - } else if kvType == string(table.KvYAML) { - _, ok := kvValue.(string) - if !ok { - ys, err := yaml.Marshal(kvValue) - if err != nil { - return nil, fmt.Errorf("key: %s yaml marshal error", key) - } - val = string(ys) - } + + secretType, secretHidden, err := checkSecret(kit, kvType, key, entry) + if err != nil { + return nil, err } + + kvMemo, _ := entry["memo"].(string) + kvMap = append(kvMap, &pbcs.BatchUpsertKvsReq_Kv{ - Key: key, - Value: val, - KvType: kvType, - Memo: memo, + Key: key, + Value: kvValue, + KvType: kvType, + Memo: kvMemo, + SecretType: secretType, + SecretHidden: secretHidden, }) } } return kvMap, nil } +func checkKvType(kit *kit.Kit, key string, entry map[string]interface{}) (string, error) { + + kvType, ok := entry["kv_type"].(string) + if !ok { + return "", errors.New(i18n.T(kit, "config item %s kv type error", key)) + } + + if err := validateKvType(kvType); err != nil { + return kvType, fmt.Errorf("config item %s %v", key, err) + } + + return kvType, nil +} + +func checkKv(kit *kit.Kit, kvType, key string, entry map[string]interface{}) (string, error) { + + kvValue, okVal := entry["value"] + if !okVal { + return "", errors.New(i18n.T(kit, "format error, please check the key: %s", key)) + } + val := fmt.Sprintf("%v", kvValue) + // json 和 yaml 都需要格式化 + if kvType == string(table.KvJson) { + + v, ok := kvValue.(string) + if !ok { + return "", errors.New(i18n.T(kit, "config item %s format error", key)) + } + + mv, err := json.Marshal(v) + if err != nil { + return "", errors.New(i18n.T(kit, "config item %s json format error", key)) + } + + // 需要处理转义符 + var data interface{} + err = json.Unmarshal(mv, &data) + if err != nil { + return "", errors.New(i18n.T(kit, "config item %s json format error", key)) + } + val, ok = data.(string) + if !ok { + return "", errors.New(i18n.T(kit, "config item %s format error", key)) + } + } else if kvType == string(table.KvYAML) { + _, ok := kvValue.(string) + if !ok { + ys, err := yaml.Marshal(kvValue) + if err != nil { + return "", errors.New(i18n.T(kit, "config item %s yaml format error", key)) + } + val = string(ys) + } + } + + return val, nil +} + +func checkSecret(kit *kit.Kit, kvType, key string, entry map[string]interface{}) (string, bool, error) { + + var secretHidden bool + + // 不是密钥类型 + if kvType != string(table.KvSecret) { + return "", secretHidden, nil + } + + // 判断是否隐藏 + secretHidden, okSecretHidden := entry["secret_hidden"].(bool) + if !okSecretHidden { + return "", secretHidden, errors.New(i18n.T(kit, "config item %s secret hidden error", key)) + } + + secretType, ok := entry["secret_type"].(string) + if !ok || secretType == "" { + return secretType, secretHidden, errors.New(i18n.T(kit, "the key type for config item %s cannot be empty", key)) + } + + // 验证密钥类型 + if err := validateSecretType(secretType); err != nil { + return secretType, secretHidden, errors.New(i18n.T(kit, "config item %s secret type error, err: %v", key, err)) + } + + // 验证密钥值 + kvValue, okVal := entry["value"].(string) + if !okVal { + return secretType, secretHidden, errors.New(i18n.T(kit, "config item %s value error", key)) + } + if err := verifySecretVaule(kit, secretType, kvValue); err != nil { + return secretType, secretHidden, fmt.Errorf("config item %s %v", key, err) + } + + return secretType, secretHidden, nil +} + // 验证kv类型 func validateKvType(kvType string) error { switch kvType { @@ -579,12 +665,27 @@ func validateKvType(kvType string) error { case string(table.KvJson): case string(table.KvYAML): case string(table.KvXml): + case string(table.KvSecret): default: return errors.New("invalid data-type") } return nil } +// 验证密钥类型 +func validateSecretType(secretType string) error { + switch secretType { + case string(table.SecretTypePassword): + case string(table.SecretTypeCertificate): + case string(table.SecretTypeSecretKey): + case string(table.SecretTypeToken): + case string(table.SecretTypeCustom): + default: + return errors.New("invalid secret-type") + } + return nil +} + // 根据值判断类型 func determineType(value string) string { var result string @@ -645,3 +746,53 @@ func isNumber(value interface{}) bool { return false } } + +// 验证密钥的值 +func verifySecretVaule(kit *kit.Kit, secretType, value string) error { + switch secretType { + case string(table.SecretTypeCertificate): + if !validateCertificate(value) { + return errors.New(i18n.T(kit, `the certificate format is incorrect, only X.509 format is supported`)) + } + case string(table.SecretTypeToken): + if !validateToken(value) { + return errors.New(i18n.T(kit, `the access token format is incorrect. Currently only OAtuh 2.0 and jwt formats + are supported. The length is 32-512 characters, including uppercase and lowercase letters and numbers`)) + } + default: + return nil + } + + return nil +} + +// 验证令牌 +func validateToken(token string) bool { + // 令牌长度必须在 32 到 512 个字符之间,并且只包含大小写字母和数字 + if len(token) < 32 || len(token) > 512 { + return false + } + + matched, err := regexp.MatchString(`^[a-zA-Z0-9]+$`, token) + if err != nil { + return false + } + + return matched +} + +// 验证证书 +func validateCertificate(certPEM string) bool { + // 解析PEM编码的证书 + block, _ := pem.Decode([]byte(certPEM)) + if block == nil || block.Type != "CERTIFICATE" { + return false + } + + // 尝试解析X.509证书 + if _, err := x509.ParseCertificate(block.Bytes); err != nil { + return false + } + + return true +} diff --git a/bcs-services/bcs-bscp/cmd/data-service/db-migration/migrations/20240822160103_modif_kv.go b/bcs-services/bcs-bscp/cmd/data-service/db-migration/migrations/20240822160103_modif_kv.go new file mode 100644 index 0000000000..cbff338057 --- /dev/null +++ b/bcs-services/bcs-bscp/cmd/data-service/db-migration/migrations/20240822160103_modif_kv.go @@ -0,0 +1,118 @@ +/* + * Tencent is pleased to support the open source community by making Blueking Container Service available. + * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Licensed under the MIT License (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + */ + +package migrations + +import ( + "gorm.io/gorm" + + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/cmd/data-service/db-migration/migrator" +) + +func init() { + // add current migration to migrator + migrator.GetMigrator().AddMigration(&migrator.Migration{ + Version: "20240822160103", + Name: "20240822160103_modif_kv", + Mode: migrator.GormMode, + Up: mig20240822160103Up, + Down: mig20240822160103Down, + }) +} + +// mig20240822160103Up for up migration +func mig20240822160103Up(tx *gorm.DB) error { + + // Kvs : KV + type Kvs struct { + SecretType string `gorm:"column:secret_type;type:varchar(20);default:'';NOT NULL"` + SecretHidden uint `gorm:"column:secret_hidden;type:tinyint(1) unsigned;default:0;NOT NULL"` + } + + // ReleasedKvs : 发布的KV + type ReleasedKvs struct { + SecretType string `gorm:"column:secret_type;type:varchar(20);default:'';NOT NULL"` + SecretHidden uint `gorm:"column:secret_hidden;type:tinyint(1) unsigned;default:0;NOT NULL"` + } + + // Kvs add new column + if !tx.Migrator().HasColumn(&Kvs{}, "secret_type") { + if err := tx.Migrator().AddColumn(&Kvs{}, "secret_type"); err != nil { + return err + } + } + + if !tx.Migrator().HasColumn(&Kvs{}, "secret_hidden") { + if err := tx.Migrator().AddColumn(&Kvs{}, "secret_hidden"); err != nil { + return err + } + } + + // ReleasedKvs add new column + if !tx.Migrator().HasColumn(&ReleasedKvs{}, "secret_type") { + if err := tx.Migrator().AddColumn(&Kvs{}, "secret_type"); err != nil { + return err + } + } + + if !tx.Migrator().HasColumn(&ReleasedKvs{}, "secret_hidden") { + if err := tx.Migrator().AddColumn(&ReleasedKvs{}, "secret_hidden"); err != nil { + return err + } + } + + return nil +} + +// mig20240822160103Down for down migration +func mig20240822160103Down(tx *gorm.DB) error { + + // Kvs : KV + type Kvs struct { + SecretType string `gorm:"column:secret_type;type:varchar(20);default:'';NOT NULL"` + SecretHidden uint `gorm:"column:secret_hidden;type:tinyint(1) unsigned;default:0;NOT NULL"` + } + + // ReleasedKvs : 发布的KV + type ReleasedKvs struct { + SecretType string `gorm:"column:secret_type;type:varchar(20);default:'';NOT NULL"` + SecretHidden uint `gorm:"column:secret_hidden;type:tinyint(1) unsigned;default:0;NOT NULL"` + } + + // Kvs drop column + if tx.Migrator().HasColumn(&Kvs{}, "secret_type") { + if err := tx.Migrator().DropColumn(&Kvs{}, "secret_type"); err != nil { + return err + } + } + + if tx.Migrator().HasColumn(&Kvs{}, "secret_hidden") { + if err := tx.Migrator().DropColumn(&Kvs{}, "secret_hidden"); err != nil { + return err + } + } + + // ReleasedKvs drop column + if tx.Migrator().HasColumn(&ReleasedKvs{}, "secret_type") { + if err := tx.Migrator().DropColumn(&ReleasedKvs{}, "secret_type"); err != nil { + return err + } + } + + if tx.Migrator().HasColumn(&ReleasedKvs{}, "secret_hidden") { + if err := tx.Migrator().DropColumn(&ReleasedKvs{}, "secret_hidden"); err != nil { + return err + } + } + + return nil +} diff --git a/bcs-services/bcs-bscp/cmd/data-service/service/group.go b/bcs-services/bcs-bscp/cmd/data-service/service/group.go index b7563bf3fe..a258e981f5 100644 --- a/bcs-services/bcs-bscp/cmd/data-service/service/group.go +++ b/bcs-services/bcs-bscp/cmd/data-service/service/group.go @@ -150,7 +150,7 @@ func (s *Service) ListAppGroups(ctx context.Context, req *pbds.ListAppGroupsReq) Spec: &table.GroupSpec{ Name: "默认分组", Public: true, - Mode: table.Default, + Mode: table.GroupModeDefault, Selector: new(selector.Selector), UID: "", }, diff --git a/bcs-services/bcs-bscp/cmd/data-service/service/kv.go b/bcs-services/bcs-bscp/cmd/data-service/service/kv.go index b1962d6bc5..a93c5e0300 100644 --- a/bcs-services/bcs-bscp/cmd/data-service/service/kv.go +++ b/bcs-services/bcs-bscp/cmd/data-service/service/kv.go @@ -15,12 +15,12 @@ package service import ( "context" "errors" - "fmt" "time" "gorm.io/gorm" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/criteria/errf" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/gen" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/i18n" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" @@ -67,6 +67,7 @@ func (s *Service) CreateKv(ctx context.Context, req *pbds.CreateKvReq) (*pbds.Cr Value: req.Spec.Value, KvType: table.DataType(req.Spec.KvType), } + // UpsertKv 创建|更新kv version, err := s.vault.UpsertKv(kt, opt) if err != nil { @@ -151,6 +152,7 @@ func (s *Service) UpdateKv(ctx context.Context, req *pbds.UpdateKvReq) (*pbbase. Md5: tools.MD5(req.Spec.Value), ByteSize: uint64(len(req.Spec.Value)), } + kv.Spec.SecretHidden = req.Spec.SecretHidden if e := s.dao.Kv().Update(kt, kv); e != nil { logs.Errorf("update kv failed, err: %v, rid: %s", e, kt.Rid) return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, "update kv failed, err: %v", err)) @@ -229,7 +231,12 @@ func (s *Service) setKvTypeAndValue(kt *kit.Kit, details []*table.Kv) ([]*pbkv.K if err != nil { return nil, err } + // value 是否隐藏 + if one.Spec.SecretHidden { + kvValue = i18n.T(kt, "sensitive data is not visible, unable to view actual content") + } kvs = append(kvs, pbkv.PbKv(one, kvValue)) + } return kvs, nil @@ -265,10 +272,9 @@ func (s *Service) DeleteKv(ctx context.Context, req *pbds.DeleteKvReq) (*pbbase. } // BatchUpsertKvs is used to insert or update key-value data in bulk. -// 1.键存在则更新,但保证是类型一致 +// 1.键存在则更新, 类型不一致直接提示错误 // 2.键不存在则新增 // replace_all为true时,清空表中的数据,但保证前面两条逻辑 -// nolint:funlen func (s *Service) BatchUpsertKvs(ctx context.Context, req *pbds.BatchUpsertKvsReq) (*pbds.BatchUpsertKvsResp, error) { // FromGrpcContext used only to obtain Kit through grpc context. @@ -276,95 +282,62 @@ func (s *Service) BatchUpsertKvs(ctx context.Context, req *pbds.BatchUpsertKvsRe app, err := s.dao.App().Get(kt, req.BizId, req.AppId) if err != nil { - return nil, fmt.Errorf("get app fail,err : %v", err) + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, "get app failed, err: %v", err)) + } + if app.Spec.ConfigType != table.KV { + return nil, errors.New(i18n.T(kt, "not a KV type service")) } - - var editingKeyArr []string for _, kv := range req.Kvs { if !checkKVTypeMatch(table.DataType(kv.KvSpec.KvType), app.Spec.DataType) { - return nil, fmt.Errorf("kv type does not match the data type defined in the application") + return nil, errors.New(i18n.T(kt, "kv type does not match the data type defined in the application")) } - editingKeyArr = append(editingKeyArr, kv.KvSpec.Key) } + kvStateArr := []string{ string(table.KvStateUnchange), string(table.KvStateAdd), string(table.KvStateRevise), } - editingKv, err := s.dao.Kv().ListAllKvByKey(kt, req.AppId, req.BizId, editingKeyArr, kvStateArr) + + // 1. 查询过滤删除后的kv + kvs, err := s.dao.Kv().ListAllByAppID(kt, req.GetAppId(), req.GetBizId(), kvStateArr) if err != nil { - logs.Errorf("list editing kv failed, err: %v, rid: %s", err, kt.Rid) - return nil, err + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, "list kv failed, err: %v", err)) } - newKvMap := make(map[string]*pbds.BatchUpsertKvsReq_Kv) - for _, kv := range req.Kvs { - newKvMap[kv.KvSpec.Key] = kv + tx := s.dao.GenQuery().Begin() + // 2. 检测服务配置项类型(相同的key类型是否一致) + if err = s.checkKVConfigItemTypes(kt, req, kvs); err != nil { + return nil, err } - editingKvMap := make(map[string]*table.Kv) - for _, kv := range editingKv { - editingKvMap[kv.Spec.Key] = kv + // 3. 清空草稿区域 + if err = s.clearDraftKVStore(kt, tx, req, kvs); err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) + } + return nil, err } - // 在vault中执行更新 - versionMap, err := s.doBatchUpsertVault(kt, req, editingKvMap) + // 4. 在vault中执行更新 + versionMap, err := s.doBatchUpsertVault(kt, req) if err != nil { - return nil, err + return nil, errors.New(i18n.T(kt, "batch import of KV config failed, err: %v", err)) } - toUpdate, toCreate, err := s.checkKvs(kt, req, editingKvMap, versionMap) + // 5. 处理需要编辑和创建的数据 + toUpdate, toCreate, err := s.checkKvs(kt, tx, req, versionMap, kvStateArr) if err != nil { return nil, err } - tx := s.dao.GenQuery().Begin() - - // 清空草稿区 - // 区分真删除和假删除 - if req.ReplaceAll { - reallyDelete := []uint32{} - fakeDelete := make([]*table.Kv, 0) - kvs, lErr := s.dao.Kv().ListAllByAppID(kt, req.GetAppId(), req.GetBizId(), []string{table.KvStateAdd.String(), - table.KvStateDelete.String(), table.KvStateRevise.String(), table.KvStateUnchange.String()}) - if lErr != nil { - return nil, lErr - } - - for _, v := range kvs { - if newKvMap[v.Spec.Key] == nil { - if v.KvState == table.KvStateAdd { - reallyDelete = append(reallyDelete, v.ID) - } else { - v.Revision.Reviser = kt.User - v.Revision.UpdatedAt = time.Now().UTC() - v.KvState = table.KvStateDelete - fakeDelete = append(fakeDelete, v) - } - } - } - - if err = s.dao.Kv().BatchDeleteWithTx(kt, tx, req.GetBizId(), req.GetAppId(), reallyDelete); err != nil { - if rErr := tx.Rollback(); rErr != nil { - logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) - } - return nil, err - } - - if err = s.dao.Kv().BatchUpdateWithTx(kt, tx, fakeDelete); err != nil { - if rErr := tx.Rollback(); rErr != nil { - logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) - } - return nil, err - } - } - + // 5. 创建或更新kv等操作 if len(toCreate) > 0 { if err = s.dao.Kv().BatchCreateWithTx(kt, tx, toCreate); err != nil { if rErr := tx.Rollback(); rErr != nil { logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) } - return nil, err + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, "batch import of KV config failed, err: %v", err)) } } @@ -373,28 +346,85 @@ func (s *Service) BatchUpsertKvs(ctx context.Context, req *pbds.BatchUpsertKvsRe if rErr := tx.Rollback(); rErr != nil { logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) } - return nil, err + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, "batch import of KV config failed, err: %v", err)) } } if e := tx.Commit(); e != nil { logs.Errorf("commit transaction failed, err: %v, rid: %s", e, kt.Rid) - return nil, e + return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, "batch import of KV config failed, err: %v", e)) } - createId := []uint32{} - updateId := []uint32{} + + createIds, updateIds := []uint32{}, []uint32{} for _, item := range toCreate { - createId = append(createId, item.ID) + createIds = append(createIds, item.ID) } for _, item := range toUpdate { - updateId = append(updateId, item.ID) + updateIds = append(updateIds, item.ID) } - mergedID := append(createId, updateId...) // nolint + return &pbds.BatchUpsertKvsResp{ - Ids: mergedID, + Ids: tools.MergeAndDeduplicate(createIds, updateIds), }, nil } +// 检测键值对配置项类型 +func (s *Service) checkKVConfigItemTypes(kt *kit.Kit, req *pbds.BatchUpsertKvsReq, kvs []*table.Kv) error { + + existsKvs := map[string]string{} + for _, v := range kvs { + existsKvs[v.Spec.Key] = string(v.Spec.KvType) + } + + for _, v := range req.GetKvs() { + kvType, exist := existsKvs[v.KvSpec.Key] + if exist && v.KvSpec.KvType != kvType { + return errors.New(i18n.T(kt, "the type of config item %s is incorrect", v.KvSpec.Key)) + } + } + + return nil +} + +// 清空键值对草稿区域 +func (s *Service) clearDraftKVStore(kt *kit.Kit, tx *gen.QueryTx, req *pbds.BatchUpsertKvsReq, + kvs []*table.Kv) error { + + if !req.ReplaceAll { + return nil + } + + reallyDelete := []uint32{} + fakeDelete := make([]*table.Kv, 0) + for _, v := range kvs { + // 如果是新增类型需要真删除, 否则假删除 + if v.KvState == table.KvStateAdd { + reallyDelete = append(reallyDelete, v.ID) + } else { + v.Revision.Reviser = kt.User + v.Revision.UpdatedAt = time.Now().UTC() + v.KvState = table.KvStateDelete + fakeDelete = append(fakeDelete, v) + } + } + + if err := s.dao.Kv().BatchDeleteWithTx(kt, tx, req.GetBizId(), req.GetAppId(), reallyDelete); err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) + } + return errf.Errorf(errf.DBOpFailed, i18n.T(kt, "clearing draft area failed, err: %v", err)) + } + + if err := s.dao.Kv().BatchUpdateWithTx(kt, tx, fakeDelete); err != nil { + if rErr := tx.Rollback(); rErr != nil { + logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid) + } + return errf.Errorf(errf.DBOpFailed, i18n.T(kt, "clearing draft area failed, err: %v", err)) + } + + return nil +} + func (s *Service) getKv(kt *kit.Kit, bizID, appID, version uint32, key string) (table.DataType, string, error) { opt := &types.GetKvByVersion{ BizID: bizID, @@ -407,30 +437,17 @@ func (s *Service) getKv(kt *kit.Kit, bizID, appID, version uint32, key string) ( } // doBatchUpsertVault is used to perform bulk insertion or update of key-value data in Vault. -func (s *Service) doBatchUpsertVault(kt *kit.Kit, req *pbds.BatchUpsertKvsReq, - editingKvMap map[string]*table.Kv) (map[string]int, error) { +func (s *Service) doBatchUpsertVault(kt *kit.Kit, req *pbds.BatchUpsertKvsReq) (map[string]int, error) { versionMap := make(map[string]int) - for _, kv := range req.Kvs { - opt := &types.UpsertKvOption{ - BizID: req.BizId, - AppID: req.AppId, - Key: kv.KvSpec.Key, - Value: kv.KvSpec.Value, - } - - if editing, exists := editingKvMap[kv.KvSpec.Key]; exists { - kvType, _, err := s.getKv(kt, req.BizId, req.AppId, editing.Spec.Version, kv.KvSpec.Key) - if err != nil { - return nil, err - } - opt.KvType = kvType - } else { - opt.KvType = table.DataType(kv.KvSpec.KvType) + BizID: req.BizId, + AppID: req.AppId, + Key: kv.KvSpec.Key, + Value: kv.KvSpec.Value, + KvType: table.DataType(kv.KvSpec.KvType), } - version, err := s.vault.UpsertKv(kt, opt) if err != nil { return nil, err @@ -442,8 +459,19 @@ func (s *Service) doBatchUpsertVault(kt *kit.Kit, req *pbds.BatchUpsertKvsReq, } -func (s *Service) checkKvs(kt *kit.Kit, req *pbds.BatchUpsertKvsReq, editingKvMap map[string]*table.Kv, - versionMap map[string]int) (toUpdate, toCreate []*table.Kv, err error) { +func (s *Service) checkKvs(kt *kit.Kit, tx *gen.QueryTx, req *pbds.BatchUpsertKvsReq, versionMap map[string]int, + kvStates []string) (toUpdate, toCreate []*table.Kv, err error) { + + // 通过事务获取指定状态的kv + editingKvs, err := s.dao.Kv().ListAllByAppIDWithTx(kt, tx, req.GetAppId(), req.GetBizId(), kvStates) + if err != nil { + return nil, nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, "list kv failed, err: %v", err)) + } + + editingKvMap := make(map[string]*table.Kv) + for _, kv := range editingKvs { + editingKvMap[kv.Spec.Key] = kv + } for _, kv := range req.Kvs { @@ -452,64 +480,54 @@ func (s *Service) checkKvs(kt *kit.Kit, req *pbds.BatchUpsertKvsReq, editingKvMa var editing *table.Kv if version, exists = versionMap[kv.KvSpec.Key]; !exists { - return nil, nil, errors.New("save kv fail") + return nil, nil, errors.New(i18n.T(kt, "save kv failed")) } now := time.Now().UTC() + kvSpec := &table.KvSpec{ + Key: kv.KvSpec.Key, + KvType: table.DataType(kv.KvSpec.KvType), + Version: uint32(version), + Memo: kv.KvSpec.Memo, + SecretType: table.SecretType(kv.KvSpec.SecretType), + SecretHidden: kv.KvSpec.SecretHidden, + } + kvAttachment := &table.KvAttachment{ + BizID: req.BizId, + AppID: req.AppId, + } + contentSpec := &table.ContentSpec{ + Signature: tools.SHA256(kv.KvSpec.Value), + Md5: tools.MD5(kv.KvSpec.Value), + ByteSize: uint64(len(kv.KvSpec.Value)), + } if editing, exists = editingKvMap[kv.KvSpec.Key]; exists { if editing.KvState == table.KvStateUnchange { editing.KvState = table.KvStateRevise } toUpdate = append(toUpdate, &table.Kv{ - ID: editing.ID, - KvState: editing.KvState, - Spec: &table.KvSpec{ - Key: kv.KvSpec.Key, - Version: uint32(version), - KvType: editing.Spec.KvType, - Memo: kv.KvSpec.Memo, - }, - Attachment: &table.KvAttachment{ - BizID: req.BizId, - AppID: req.AppId, - }, - Revision: editing.Revision, - ContentSpec: &table.ContentSpec{ - Signature: tools.SHA256(kv.KvSpec.Value), - Md5: tools.MD5(kv.KvSpec.Value), - ByteSize: uint64(len(kv.KvSpec.Value)), - }, + ID: editing.ID, + KvState: editing.KvState, + Spec: kvSpec, + Attachment: kvAttachment, + Revision: editing.Revision, + ContentSpec: contentSpec, }) - } else { toCreate = append(toCreate, &table.Kv{ - KvState: table.KvStateAdd, - Spec: &table.KvSpec{ - Key: kv.KvSpec.Key, - Version: uint32(version), - KvType: table.DataType(kv.KvSpec.KvType), - Memo: kv.KvSpec.Memo, - }, - Attachment: &table.KvAttachment{ - BizID: req.BizId, - AppID: req.AppId, - }, + KvState: table.KvStateAdd, + Spec: kvSpec, + Attachment: kvAttachment, Revision: &table.Revision{ Creator: kt.User, Reviser: kt.User, CreatedAt: now, UpdatedAt: now, }, - ContentSpec: &table.ContentSpec{ - Signature: tools.SHA256(kv.KvSpec.Value), - Md5: tools.MD5(kv.KvSpec.Value), - ByteSize: uint64(len(kv.KvSpec.Value)), - }, + ContentSpec: contentSpec, }) - } - } return toUpdate, toCreate, nil diff --git a/bcs-services/bcs-bscp/cmd/data-service/service/publish.go b/bcs-services/bcs-bscp/cmd/data-service/service/publish.go index a9194aab93..5d485c49ff 100644 --- a/bcs-services/bcs-bscp/cmd/data-service/service/publish.go +++ b/bcs-services/bcs-bscp/cmd/data-service/service/publish.go @@ -386,7 +386,7 @@ func (s *Service) getOrCreateGroupByLabels(grpcKit *kit.Kit, tx *gen.QueryTx, bi Spec: &table.GroupSpec{ Name: groupName, Public: false, - Mode: table.Custom, + Mode: table.GroupModeCustom, Selector: sel, }, Attachment: &table.GroupAttachment{ diff --git a/bcs-services/bcs-bscp/cmd/data-service/service/release.go b/bcs-services/bcs-bscp/cmd/data-service/service/release.go index a29b3f320a..1661fc4a4b 100644 --- a/bcs-services/bcs-bscp/cmd/data-service/service/release.go +++ b/bcs-services/bcs-bscp/cmd/data-service/service/release.go @@ -659,7 +659,7 @@ func (s *Service) ListReleases(ctx context.Context, req *pbds.ListReleasesReq) ( releasedGroups = append(releasedGroups, &pbrelease.ReleaseStatus_ReleasedGroup{ Id: 0, Name: "默认分组", - Mode: table.Default.String(), + Mode: table.GroupModeDefault.String(), }) } for _, group := range groups { diff --git a/bcs-services/bcs-bscp/cmd/data-service/service/released_kv.go b/bcs-services/bcs-bscp/cmd/data-service/service/released_kv.go index 4ab820f85d..818605f88b 100644 --- a/bcs-services/bcs-bscp/cmd/data-service/service/released_kv.go +++ b/bcs-services/bcs-bscp/cmd/data-service/service/released_kv.go @@ -16,6 +16,7 @@ import ( "context" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table" + "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/i18n" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit" "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/logs" pbbase "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/base" @@ -105,6 +106,10 @@ func (s *Service) ListReleasedKvs(ctx context.Context, req *pbds.ListReleasedKvR logs.Errorf("get vault released kv failed, err: %v, rid: %s", err, kt.Rid) return nil, err } + // value 是否隐藏 + if detail.Spec.SecretHidden { + val = i18n.T(kt, "sensitive data is not visible, unable to view actual content") + } rkvs = append(rkvs, pbrkv.PbRKv(detail, val)) } diff --git a/bcs-services/bcs-bscp/cmd/feed-server/bll/release/match.go b/bcs-services/bcs-bscp/cmd/feed-server/bll/release/match.go index 2cd04251e1..d7774a774e 100644 --- a/bcs-services/bcs-bscp/cmd/feed-server/bll/release/match.go +++ b/bcs-services/bcs-bscp/cmd/feed-server/bll/release/match.go @@ -90,7 +90,7 @@ func (rs *ReleasedService) matchReleasedGroupWithLabels( var def *matchedMeta for _, group := range groups { switch group.Mode { - case table.Debug: + case table.GroupModeDebug: if group.UID == meta.Uid { matchedList = append(matchedList, &matchedMeta{ ReleaseID: group.ReleaseID, @@ -98,7 +98,7 @@ func (rs *ReleasedService) matchReleasedGroupWithLabels( StrategyID: group.StrategyID, }) } - case table.Custom: + case table.GroupModeCustom: if group.Selector == nil { return nil, errf.New(errf.InvalidParameter, "custom group must have selector") } @@ -113,7 +113,7 @@ func (rs *ReleasedService) matchReleasedGroupWithLabels( StrategyID: group.StrategyID, }) } - case table.Default: + case table.GroupModeDefault: def = &matchedMeta{ ReleaseID: group.ReleaseID, GroupID: group.GroupID, diff --git a/bcs-services/bcs-bscp/pkg/dal/dao/kv.go b/bcs-services/bcs-bscp/pkg/dal/dao/kv.go index b22411103d..4efe44eb0e 100644 --- a/bcs-services/bcs-bscp/pkg/dal/dao/kv.go +++ b/bcs-services/bcs-bscp/pkg/dal/dao/kv.go @@ -64,6 +64,9 @@ type Kv interface { FetchIDsExcluding(kit *kit.Kit, bizID uint32, appID uint32, ids []uint32) ([]uint32, error) // CountNumberUnDeleted 统计未删除的数量 CountNumberUnDeleted(kit *kit.Kit, bizID uint32, opt *types.ListKvOption) (int64, error) + // ListAllByAppIDWithTx list all Kv by appID using a transaction + ListAllByAppIDWithTx(kit *kit.Kit, tx *gen.QueryTx, appID uint32, bizID uint32, + kvState []string) ([]*table.Kv, error) } var _ Kv = new(kvDao) @@ -74,6 +77,23 @@ type kvDao struct { auditDao AuditDao } +// ListAllByAppIDWithTx list all Kv by appID using a transaction +func (dao *kvDao) ListAllByAppIDWithTx(kit *kit.Kit, tx *gen.QueryTx, appID uint32, bizID uint32, + kvState []string) ([]*table.Kv, error) { + + if appID == 0 { + return nil, errf.New(errf.InvalidParameter, i18n.T(kit, "appID can not be 0")) + } + if bizID == 0 { + return nil, errf.New(errf.InvalidParameter, i18n.T(kit, "bizID can not be 0")) + } + m := dao.genQ.Kv + return tx.Kv. + WithContext(kit.Ctx). + Where(m.AppID.Eq(appID), m.BizID.Eq(bizID), m.KvState.In(kvState...)). + Find() +} + // CountNumberUnDeleted 统计未删除的数量 func (dao *kvDao) CountNumberUnDeleted(kit *kit.Kit, bizID uint32, opt *types.ListKvOption) (int64, error) { m := dao.genQ.Kv @@ -195,7 +215,7 @@ func (dao *kvDao) Update(kit *kit.Kit, kv *table.Kv) error { updateTx := func(tx *gen.Query) error { q = tx.Kv.WithContext(kit.Ctx) if _, e := q.Where(m.BizID.Eq(kv.Attachment.BizID), m.ID.Eq(kv.ID)).Select(m.Version, m.UpdatedAt, - m.Reviser, m.KvState, m.Signature, m.Md5, m.ByteSize, m.Memo).Updates(kv); e != nil { + m.Reviser, m.KvState, m.Signature, m.Md5, m.ByteSize, m.Memo, m.SecretHidden).Updates(kv); e != nil { return e } diff --git a/bcs-services/bcs-bscp/pkg/dal/dao/publish.go b/bcs-services/bcs-bscp/pkg/dal/dao/publish.go index 9a693df4c0..b3c1bdb1c0 100644 --- a/bcs-services/bcs-bscp/pkg/dal/dao/publish.go +++ b/bcs-services/bcs-bscp/pkg/dal/dao/publish.go @@ -271,7 +271,7 @@ func (dao *pubDao) upsertReleasedGroups(kit *kit.Kit, tx *gen.Query, opt *types. ID: 0, Spec: &table.GroupSpec{ Name: "默认分组", - Mode: table.Default, + Mode: table.GroupModeDefault, Public: true, Selector: new(selector.Selector), UID: "", diff --git a/bcs-services/bcs-bscp/pkg/dal/gen/kvs.gen.go b/bcs-services/bcs-bscp/pkg/dal/gen/kvs.gen.go index f4db95dcc0..ebd59ef0cf 100644 --- a/bcs-services/bcs-bscp/pkg/dal/gen/kvs.gen.go +++ b/bcs-services/bcs-bscp/pkg/dal/gen/kvs.gen.go @@ -33,6 +33,8 @@ func newKv(db *gorm.DB, opts ...gen.DOOption) kv { _kv.Memo = field.NewString(tableName, "memo") _kv.KvType = field.NewString(tableName, "kv_type") _kv.Version = field.NewUint32(tableName, "version") + _kv.SecretType = field.NewString(tableName, "secret_type") + _kv.SecretHidden = field.NewBool(tableName, "secret_hidden") _kv.BizID = field.NewUint32(tableName, "biz_id") _kv.AppID = field.NewUint32(tableName, "app_id") _kv.Creator = field.NewString(tableName, "creator") @@ -51,22 +53,24 @@ func newKv(db *gorm.DB, opts ...gen.DOOption) kv { type kv struct { kvDo kvDo - ALL field.Asterisk - ID field.Uint32 - KvState field.String - Key field.String - Memo field.String - KvType field.String - Version field.Uint32 - BizID field.Uint32 - AppID field.Uint32 - Creator field.String - Reviser field.String - CreatedAt field.Time - UpdatedAt field.Time - Signature field.String - ByteSize field.Uint64 - Md5 field.String + ALL field.Asterisk + ID field.Uint32 + KvState field.String + Key field.String + Memo field.String + KvType field.String + Version field.Uint32 + SecretType field.String + SecretHidden field.Bool + BizID field.Uint32 + AppID field.Uint32 + Creator field.String + Reviser field.String + CreatedAt field.Time + UpdatedAt field.Time + Signature field.String + ByteSize field.Uint64 + Md5 field.String fieldMap map[string]field.Expr } @@ -89,6 +93,8 @@ func (k *kv) updateTableName(table string) *kv { k.Memo = field.NewString(table, "memo") k.KvType = field.NewString(table, "kv_type") k.Version = field.NewUint32(table, "version") + k.SecretType = field.NewString(table, "secret_type") + k.SecretHidden = field.NewBool(table, "secret_hidden") k.BizID = field.NewUint32(table, "biz_id") k.AppID = field.NewUint32(table, "app_id") k.Creator = field.NewString(table, "creator") @@ -122,13 +128,15 @@ func (k *kv) GetFieldByName(fieldName string) (field.OrderExpr, bool) { } func (k *kv) fillFieldMap() { - k.fieldMap = make(map[string]field.Expr, 15) + k.fieldMap = make(map[string]field.Expr, 17) k.fieldMap["id"] = k.ID k.fieldMap["kv_state"] = k.KvState k.fieldMap["key"] = k.Key k.fieldMap["memo"] = k.Memo k.fieldMap["kv_type"] = k.KvType k.fieldMap["version"] = k.Version + k.fieldMap["secret_type"] = k.SecretType + k.fieldMap["secret_hidden"] = k.SecretHidden k.fieldMap["biz_id"] = k.BizID k.fieldMap["app_id"] = k.AppID k.fieldMap["creator"] = k.Creator diff --git a/bcs-services/bcs-bscp/pkg/dal/gen/released_kvs.gen.go b/bcs-services/bcs-bscp/pkg/dal/gen/released_kvs.gen.go index 59394970aa..d8de04f86f 100644 --- a/bcs-services/bcs-bscp/pkg/dal/gen/released_kvs.gen.go +++ b/bcs-services/bcs-bscp/pkg/dal/gen/released_kvs.gen.go @@ -33,6 +33,8 @@ func newReleasedKv(db *gorm.DB, opts ...gen.DOOption) releasedKv { _releasedKv.Memo = field.NewString(tableName, "memo") _releasedKv.KvType = field.NewString(tableName, "kv_type") _releasedKv.Version = field.NewUint32(tableName, "version") + _releasedKv.SecretType = field.NewString(tableName, "secret_type") + _releasedKv.SecretHidden = field.NewBool(tableName, "secret_hidden") _releasedKv.BizID = field.NewUint32(tableName, "biz_id") _releasedKv.AppID = field.NewUint32(tableName, "app_id") _releasedKv.Creator = field.NewString(tableName, "creator") @@ -51,22 +53,24 @@ func newReleasedKv(db *gorm.DB, opts ...gen.DOOption) releasedKv { type releasedKv struct { releasedKvDo releasedKvDo - ALL field.Asterisk - ID field.Uint32 - ReleaseID field.Uint32 - Key field.String - Memo field.String - KvType field.String - Version field.Uint32 - BizID field.Uint32 - AppID field.Uint32 - Creator field.String - Reviser field.String - CreatedAt field.Time - UpdatedAt field.Time - Signature field.String - ByteSize field.Uint64 - Md5 field.String + ALL field.Asterisk + ID field.Uint32 + ReleaseID field.Uint32 + Key field.String + Memo field.String + KvType field.String + Version field.Uint32 + SecretType field.String + SecretHidden field.Bool + BizID field.Uint32 + AppID field.Uint32 + Creator field.String + Reviser field.String + CreatedAt field.Time + UpdatedAt field.Time + Signature field.String + ByteSize field.Uint64 + Md5 field.String fieldMap map[string]field.Expr } @@ -89,6 +93,8 @@ func (r *releasedKv) updateTableName(table string) *releasedKv { r.Memo = field.NewString(table, "memo") r.KvType = field.NewString(table, "kv_type") r.Version = field.NewUint32(table, "version") + r.SecretType = field.NewString(table, "secret_type") + r.SecretHidden = field.NewBool(table, "secret_hidden") r.BizID = field.NewUint32(table, "biz_id") r.AppID = field.NewUint32(table, "app_id") r.Creator = field.NewString(table, "creator") @@ -124,13 +130,15 @@ func (r *releasedKv) GetFieldByName(fieldName string) (field.OrderExpr, bool) { } func (r *releasedKv) fillFieldMap() { - r.fieldMap = make(map[string]field.Expr, 15) + r.fieldMap = make(map[string]field.Expr, 17) r.fieldMap["id"] = r.ID r.fieldMap["release_id"] = r.ReleaseID r.fieldMap["key"] = r.Key r.fieldMap["memo"] = r.Memo r.fieldMap["kv_type"] = r.KvType r.fieldMap["version"] = r.Version + r.fieldMap["secret_type"] = r.SecretType + r.fieldMap["secret_hidden"] = r.SecretHidden r.fieldMap["biz_id"] = r.BizID r.fieldMap["app_id"] = r.AppID r.fieldMap["creator"] = r.Creator diff --git a/bcs-services/bcs-bscp/pkg/dal/table/app.go b/bcs-services/bcs-bscp/pkg/dal/table/app.go index e5e7c76f5a..d5b5d16f40 100644 --- a/bcs-services/bcs-bscp/pkg/dal/table/app.go +++ b/bcs-services/bcs-bscp/pkg/dal/table/app.go @@ -286,6 +286,8 @@ const ( KvYAML DataType = "yaml" // KvXml is the type for xml kv KvXml DataType = "xml" + // KvSecret is the type for secret kv + KvSecret DataType = "secret" ) // ValidateApp the kvType and value match @@ -298,6 +300,7 @@ func (k DataType) ValidateApp(kit *kit.Kit) error { case KvJson: case KvYAML: case KvXml: + case KvSecret: default: return errf.Errorf(errf.InvalidArgument, i18n.T(kit, "invalid data-type")) } diff --git a/bcs-services/bcs-bscp/pkg/dal/table/group.go b/bcs-services/bcs-bscp/pkg/dal/table/group.go index 4d9f593e89..43d4a8221c 100644 --- a/bcs-services/bcs-bscp/pkg/dal/table/group.go +++ b/bcs-services/bcs-bscp/pkg/dal/table/group.go @@ -171,16 +171,16 @@ type GroupSpec struct { } const ( - // Custom means this is a user customed group, it's selector is defined by user - Custom GroupMode = "custom" - // Debug means that this group can noly set UID, + // GroupModeCustom means this is a user customed group, it's selector is defined by user + GroupModeCustom GroupMode = "custom" + // GroupModeDebug means that this group can noly set UID, // in other word can only select specific instance - Debug GroupMode = "debug" - // Default will select instances that won't be selected by any other released groups - Default GroupMode = "default" - // BuiltIn define bscp built-in group,eg. ClusterID, Namespace, CMDBModuleID... - // Note: BuiltIn define bscp built-in group,eg. ClusterID, Namespace, CMDBModuleID... - BuiltIn GroupMode = "builtin" + GroupModeDebug GroupMode = "debug" + // GroupModeDefault will select instances that won't be selected by any other released groups + GroupModeDefault GroupMode = "default" + // GroupModeBuiltIn define bscp built-in group,eg. ClusterID, Namespace, CMDBModuleID... + // Note: GroupModeBuiltIn define bscp built-in group,eg. ClusterID, Namespace, CMDBModuleID... + GroupModeBuiltIn GroupMode = "builtin" ) // GroupMode is the mode of an group works in @@ -194,9 +194,9 @@ func (g GroupMode) String() string { // Validate strategy set type. func (g GroupMode) Validate() error { switch g { - case Custom: - case Debug: - case Default: + case GroupModeCustom: + case GroupModeDebug: + case GroupModeDefault: default: return fmt.Errorf("unsupported group working mode: %s", g) } @@ -213,14 +213,14 @@ func (g GroupSpec) ValidateCreate(kit *kit.Kit) error { return err } switch g.Mode { - case Custom: + case GroupModeCustom: if g.Selector == nil || g.Selector.IsEmpty() { return errors.New("group works in custom mode, selector should be set") } if err := g.Selector.Validate(); err != nil { return fmt.Errorf("group works in custom mode, selector is invalid, err: %v", err) } - case Debug: + case GroupModeDebug: if g.UID == "" { return errors.New("group works in debug mode, uid should be set") } diff --git a/bcs-services/bcs-bscp/pkg/dal/table/kv.go b/bcs-services/bcs-bscp/pkg/dal/table/kv.go index cdcdd7212e..129eaa31b1 100644 --- a/bcs-services/bcs-bscp/pkg/dal/table/kv.go +++ b/bcs-services/bcs-bscp/pkg/dal/table/kv.go @@ -39,10 +39,12 @@ type Kv struct { // KvSpec is kv specific which is defined by user. type KvSpec struct { - Key string `json:"key" gorm:"column:key"` - Memo string `json:"memo" gorm:"column:memo"` - KvType DataType `json:"kv_type" gorm:"column:kv_type"` - Version uint32 `json:"version" gorm:"column:version"` + Key string `json:"key" gorm:"column:key"` + Memo string `json:"memo" gorm:"column:memo"` + KvType DataType `json:"kv_type" gorm:"column:kv_type"` + Version uint32 `json:"version" gorm:"column:version"` + SecretType SecretType `json:"secret_type" gorm:"column:secret_type"` + SecretHidden bool `json:"secret_hidden" gorm:"column:secret_hidden"` } // KvAttachment is a kv attachment @@ -133,6 +135,7 @@ func (k DataType) ValidateCreateKv() error { case KvJson: case KvYAML: case KvXml: + case KvSecret: default: return errors.New("invalid data-type") } @@ -250,6 +253,8 @@ func (k DataType) ValidateValue(value string) error { return err } return nil + case KvSecret: + return nil default: return errors.New("invalid key-value type") } @@ -283,3 +288,34 @@ func (k KvState) Validate() error { return errors.New("invalid kv state") } } + +// SecretType secret type (password、certificate、secret_key、token、customize). +type SecretType string + +const ( + // SecretTypePassword is the type for password secret + SecretTypePassword SecretType = "password" + // SecretTypeCertificate is the type for certificate secret + SecretTypeCertificate SecretType = "certificate" + // SecretTypeSecretKey is the type for secret_key secret + SecretTypeSecretKey SecretType = "secret_key" + // SecretTypeToken is the type for token secret + SecretTypeToken SecretType = "token" + // SecretTypeCustom is the type for custom secret + SecretTypeCustom SecretType = "custom" +) + +// Validate the secret type is valid or not. +func (st SecretType) Validate() error { + switch st { + case SecretTypePassword: + case SecretTypeCertificate: + case SecretTypeSecretKey: + case SecretTypeToken: + case SecretTypeCustom: + default: + return fmt.Errorf("unknown %s secret type", st) + } + + return nil +} diff --git a/bcs-services/bcs-bscp/pkg/dal/table/released_group.go b/bcs-services/bcs-bscp/pkg/dal/table/released_group.go index 2ec2ae4d5a..65b0494a3d 100644 --- a/bcs-services/bcs-bscp/pkg/dal/table/released_group.go +++ b/bcs-services/bcs-bscp/pkg/dal/table/released_group.go @@ -81,10 +81,10 @@ func (c ReleasedGroup) ValidateCreate() error { if err := c.Mode.Validate(); err != nil { return err } - if c.Mode == Custom && c.Selector == nil { + if c.Mode == GroupModeCustom && c.Selector == nil { return errors.New("selector should be set when mode is custom") } - if c.Mode == Debug && c.UID == "" { + if c.Mode == GroupModeDebug && c.UID == "" { return errors.New("uid should be set when mode is debug") } diff --git a/bcs-services/bcs-bscp/pkg/i18n/translations/catalog.go b/bcs-services/bcs-bscp/pkg/i18n/translations/catalog.go index 1654e9a689..9e8e4e8686 100644 --- a/bcs-services/bcs-bscp/pkg/i18n/translations/catalog.go +++ b/bcs-services/bcs-bscp/pkg/i18n/translations/catalog.go @@ -39,239 +39,270 @@ func init() { } var messageKeyToIndex = map[string]int{ - "%s and %s path file conflict": 175, - "%s sub path is system reserved path, do not allow to use": 98, - "Unnamed Version": 122, - "app %d not found": 28, - "app %s is not file type": 43, - "app alias %s already exists": 23, - "app is nil": 114, - "app name %s already exists": 22, - "app related biz %d is not exist": 30, - "app spec is nil": 147, - "app's type can not be updated": 149, - "appID can not be 0": 123, - "attachment not set": 87, - "authorize failed": 172, - "batch add templates to template sets failed, err: %s": 66, - "batch create contents failed, err: %s": 47, - "batch delete config items failed": 16, - "batch delete failed": 19, - "batch delete groups failed": 17, - "batch update app template binding's failed, err: %s": 65, - "batch update app template binding's failed, err: %v": 71, - "business query failed, err: %v": 29, - "client ids is empty": 15, - "commit spec's content is empty": 156, - "content id can not set": 161, - "content signature should be lowercase": 163, - "count app %d's config items failed, err: %v": 118, - "count the number of app configs failed, err: %s": 77, - "count the number of service configurations failed, err: %s": 42, - "create app failed, err: %v": 116, - "create data failed, err: %v": 115, - "create directory failed, err: %v": 2, - "create kv failed, err: %v": 61, - "create temporary directory failed, err: %v": 3, - "db operation failed": 83, - "decompress file failed, exceeding the maximum file limit threshold of %d": 12, - "decompress the file. The size of file %s exceeds the maximum limit of %s": 4, - "decompression failed, err: %v": 5, - "default_val %s is not a number type": 168, - "delete app failed, err: %v": 27, - "delete app related resources failed, err: %v": 26, - "delete one app template binding instance by app id failed, err: %s": 46, - "delete one app template variable failed, err: %s": 48, - "delete template from template sets failed, err: %v": 69, - "get 'kv_type' as a string \n\t\tfrom kv.Data failed, err: %v": 170, - "get app %d's template binding failed, err: %v": 119, - "get app fail, key: %s, err: %v": 59, - "get app failed, err: %v": 24, - "get app template bindings by template set ids, err: %s": 64, - "get app template bindings by template set ids, err: %v": 70, - "get excluded hook failed, err: %s": 55, - "get excluded kv failed, err: %s": 63, - "get kv (%d) failed, err: %v": 57, - "get permission to apply failed, err: %v": 173, - "get reference template set under this app failed, err: %s": 51, - "get template binding relationships through business and service IDs failed, err: %s": 50, - "get template count failed, err: %v": 140, - "get template failed, err: %v": 133, - "get template release failed, err: %v": 135, - "get template set count failed, err: %v": 138, - "get template set data failed, err: %s": 67, - "get template set failed, err: %s": 74, - "get template set failed, err: %v": 137, + "%s and %s path file conflict": 199, + "%s sub path is system reserved path, do not allow to use": 121, + "%s type not supported": 24, + "Unnamed Version": 145, + "app %d not found": 44, + "app %s is not file type": 59, + "app alias %s already exists": 39, + "app is nil": 137, + "app name %s already exists": 38, + "app related biz %d is not exist": 46, + "app spec is nil": 171, + "app's type can not be updated": 173, + "appID can not be 0": 146, + "attachment not set": 110, + "authorize failed": 196, + "batch add templates to template sets failed, err: %s": 89, + "batch create contents failed, err: %s": 63, + "batch delete config items failed": 17, + "batch delete failed": 20, + "batch delete groups failed": 18, + "batch import of KV config failed, err: %v": 82, + "batch update app template binding's failed, err: %s": 88, + "batch update app template binding's failed, err: %v": 94, + "bizID can not be 0": 147, + "business query failed, err: %v": 45, + "clearing draft area failed, err: %v": 84, + "client ids is empty": 16, + "commit spec's content is empty": 180, + "config item %s format error": 27, + "config item %s json format error": 28, + "config item %s kv type error": 25, + "config item %s secret hidden error": 30, + "config item %s secret type error, err: %v": 32, + "config item %s value error": 33, + "config item %s yaml format error": 29, + "content id can not set": 185, + "content signature should be lowercase": 187, + "count app %d's config items failed, err: %v": 141, + "count the number of app configs failed, err: %s": 100, + "count the number of service configurations failed, err: %s": 58, + "create app failed, err: %v": 139, + "create data failed, err: %v": 138, + "create directory failed, err: %v": 2, + "create kv failed, err: %v": 77, + "create temporary directory failed, err: %v": 3, + "db operation failed": 106, + "decompress file failed, exceeding the maximum file limit threshold of %d": 12, + "decompress the file. The size of file %s exceeds the maximum limit of %s": 4, + "decompression failed, err: %v": 5, + "default_val %s is not a number type": 192, + "delete app failed, err: %v": 43, + "delete app related resources failed, err: %v": 42, + "delete one app template binding instance by app id failed, err: %s": 62, + "delete one app template variable failed, err: %s": 64, + "delete template from template sets failed, err: %v": 92, + "format error, please check the key: %s": 26, + "get 'kv_type' as a string \n\t\tfrom kv.Data failed, err: %v": 194, + "get app %d's template binding failed, err: %v": 142, + "get app fail, key: %s, err: %v": 75, + "get app failed, err: %v": 40, + "get app template bindings by template set ids, err: %s": 87, + "get app template bindings by template set ids, err: %v": 93, + "get excluded hook failed, err: %s": 71, + "get excluded kv failed, err: %s": 86, + "get kv (%d) failed, err: %v": 73, + "get permission to apply failed, err: %v": 197, + "get reference template set under this app failed, err: %s": 67, + "get template binding relationships through business and service IDs failed, err: %s": 66, + "get template count failed, err: %v": 164, + "get template failed, err: %v": 157, + "get template release failed, err: %v": 159, + "get template set count failed, err: %v": 162, + "get template set data failed, err: %s": 90, + "get template set failed, err: %s": 97, + "get template set failed, err: %v": 161, "get the current number of service config items failed, err: %v": 11, - "grpc status with details failed, err: %v": 174, - "hook is nil": 121, - "hook name %s already exists": 54, - "id can not be set": 144, + "grpc status with details failed, err: %v": 198, + "hook is nil": 144, + "hook name %s already exists": 70, + "id can not be set": 168, "id is required": 0, - "id should not be set": 85, - "invalid app id": 166, - "invalid argument": 84, - "invalid biz id": 145, - "invalid commit spec's content id": 155, - "invalid config item id": 167, - "invalid content signature, should be config's sha256 value": 162, - "invalid data-type": 153, - "invalid memo, length should <= 200": 100, - "invalid name %s, name cannot all be '.'": 109, - "invalid name, length should <= 128": 103, - "invalid name, length should <= 64": 108, - "invalid name, length should >= 1": 102, - "invalid name, length should >= 9 and must start with prefix bk_bscp_ (ignore case)": 105, - "invalid name: %s, only allows to include Chinese, English,numbers, underscore (_),hyphen (-), and must start and end with Chinese, English, or a number": 107, - "invalid name: %s, only allows to include english、numbers、underscore (_), and must start with prefix bk_bscp_ (ignore case)": 106, - "invalid name: %s, only allows to include english、numbers、underscore (_)、hyphen (-), and must start and end with an english、numbers": 104, - "invalid namespace, length should <= 128": 111, - "invalid namespace, length should >= 1": 110, - "invalid origin content signature, should be config's sha256 value": 164, - "invalid path %s, path cannot all be '.' ": 92, - "invalid path, length should <= 1024": 90, - "invalid path, length should <= 256": 93, - "invalid path, length should >= 1": 89, - "invalid path, should start with '/'": 91, - "invalid path,path does not conform to the win file path format specification": 94, - "invalid reload file path, should <= 128": 96, - "invalid spec, is nil": 146, - "invalid username, length should <= 32": 113, - "invalid username, length should >= 1": 112, - "kv type does not match the data type defined in the application": 60, - "list app template bindings by app ids failed, err: %s": 73, - "list apps by app ids failed, err: %s": 76, + "id should not be set": 108, + "invalid app id": 190, + "invalid argument": 107, + "invalid biz id": 169, + "invalid commit spec's content id": 179, + "invalid config item id": 191, + "invalid content signature, should be config's sha256 value": 186, + "invalid data-type": 177, + "invalid memo, length should <= 200": 123, + "invalid name %s, name cannot all be '.'": 132, + "invalid name, length should <= 128": 126, + "invalid name, length should <= 64": 131, + "invalid name, length should >= 1": 125, + "invalid name, length should >= 9 and must start with prefix bk_bscp_ (ignore case)": 128, + "invalid name: %s, only allows to include Chinese, English,numbers, underscore (_),hyphen (-), and must start and end with Chinese, English, or a number": 130, + "invalid name: %s, only allows to include english、numbers、underscore (_), and must start with prefix bk_bscp_ (ignore case)": 129, + "invalid name: %s, only allows to include english、numbers、underscore (_)、hyphen (-), and must start and end with an english、numbers": 127, + "invalid namespace, length should <= 128": 134, + "invalid namespace, length should >= 1": 133, + "invalid origin content signature, should be config's sha256 value": 188, + "invalid path %s, path cannot all be '.' ": 115, + "invalid path, length should <= 1024": 113, + "invalid path, length should <= 256": 116, + "invalid path, length should >= 1": 112, + "invalid path, should start with '/'": 114, + "invalid path,path does not conform to the win file path format specification": 117, + "invalid reload file path, should <= 128": 119, + "invalid spec, is nil": 170, + "invalid username, length should <= 32": 136, + "invalid username, length should >= 1": 135, + "json format error, err: %v": 22, + "kv type does not match the data type defined in the application": 76, + "list app template bindings by app ids failed, err: %s": 96, + "list apps by app ids failed, err: %s": 99, "list config item failed, err: %v": 10, + "list kv failed, err: %v": 81, "list template config failed, err: %v": 7, - "list template revisions failed, err: %v": 39, - "list template sets by template set ids failed, err: %s": 52, - "list template sets by template set ids failed, err: %v": 32, - "list template spaces failed, err: %v": 34, - "list templates by tuple failed, err: %v": 72, - "list templates data failed, err: %s": 79, + "list template revisions failed, err: %v": 55, + "list template sets by template set ids failed, err: %s": 68, + "list template sets by template set ids failed, err: %v": 48, + "list template spaces failed, err: %v": 50, + "list templates by tuple failed, err: %v": 95, + "list templates data failed, err: %s": 102, "list templates failed, err: %v": 14, - "list templates of template set failed, err: %v": 37, - "list templates revisions data failed, err: %s": 81, - "memo is required, can not be empty": 99, - "not support table config type for now": 150, - "obtain the number of configuration items": 49, - "origin content signature should be lowercase": 165, + "list templates of template set failed, err: %v": 53, + "list templates revisions data failed, err: %s": 104, + "memo is required, can not be empty": 122, + "not a KV type service": 80, + "not legal JSON data": 21, + "not support table config type for now": 174, + "obtain the number of configuration items": 65, + "origin content signature should be lowercase": 189, "read file failed, err: %v": 1, - "reload file path is not the absolute path": 97, - "reload file path is required": 95, - "remove the template set bound to the app failed, err: %s": 53, - "resource name '%s' is prefixed with '%s' is reserved name, which is not allows to use": 101, - "retrieve the referenced script failed, err: %s": 56, - "revision not set": 88, - "same template variable name %s already exists": 82, - "spec not set": 86, - "spec should be set": 154, - "template %d is not exist": 132, - "template data is empty": 80, - "template id in %v is not belong to template set id %d": 143, - "template id in %v is not exist": 127, - "template release %d is not exist": 134, - "template revision id in %v is not exist": 129, - "template set %d is not exist": 136, - "template set %s not found": 36, - "template set data is empty": 78, - "template set id in %v is not exist": 131, - "template space %s not found": 35, - "template space id in %v is not exist": 126, - "template variable name must start with %s": 20, - "template version %s in template file %s \n\t\t\t\thas been removed. Please import the set again": 40, - "the config file %s already exists in this space and cannot be created again": 31, - "the config file %s under this service already exists and cannot be created again": 45, - "the config item %s under this service already exists and cannot be created again": 58, - "the length of hook ids is %d, it must be within the range of [1,%d]": 18, - "the length of template variable ids is %d, it must be within the range of [1,%d]": 21, - "the specified type does not match the actual configuration": 25, - "the template file %s in the template set \n\t\t\t\t%s has been removed. Please import the set again": 38, - "the total number of app %d's config items(including template and non-template)exceeded the limit %d": 120, - "the total number of app %s config items(including template and non-template)exceeded the limit %d": 44, - "the total number of template set %d's templates exceeded the limit %d": 124, - "the total number of template set %s templates exceeded the limit %d": 75, - "the version number %s in the template file %s is not the \n\t\tlatest version. Please import the set again": 41, - "there are template sets under the template space, need to delete them first": 139, - "there are templates under the template space, need to delete them first": 141, - "there is no template file under this template set": 68, - "unknown config type: %s": 148, - "unsupported app reload type: %s": 152, - "unsupported config type: %s": 151, - "unsupported file format: %s": 159, - "unsupported file mode: %s": 160, - "unsupported variable type: %s": 169, - "update app failed, err: %s": 117, - "update app template binding failed, err: %v": 33, - "update kv failed, err: %v": 62, + "reload file path is not the absolute path": 120, + "reload file path is required": 118, + "remove the template set bound to the app failed, err: %s": 69, + "resource name '%s' is prefixed with '%s' is reserved name, which is not allows to use": 124, + "retrieve the referenced script failed, err: %s": 72, + "revision not set": 111, + "same template variable name %s already exists": 105, + "save kv failed": 85, + "sensitive data is not visible, unable to view actual content": 79, + "sensitive information cannot be exported": 15, + "spec not set": 109, + "spec should be set": 178, + "template %d is not exist": 156, + "template data is empty": 103, + "template id in %v is not belong to template set id %d": 167, + "template id in %v is not exist": 151, + "template release %d is not exist": 158, + "template revision id in %v is not exist": 153, + "template set %d is not exist": 160, + "template set %s not found": 52, + "template set data is empty": 101, + "template set id in %v is not exist": 155, + "template space %s not found": 51, + "template space id in %v is not exist": 150, + "template variable name must start with %s": 36, + "template version %s in template file %s \n\t\t\t\thas been removed. Please import the set again": 56, + "the access token format is incorrect. Currently only OAtuh 2.0 and jwt formats \n\t\t\tare supported. The length is 32-512 characters, including uppercase and lowercase letters and numbers": 35, + "the certificate format is incorrect, only X.509 format is supported": 34, + "the config file %s already exists in this space and cannot be created again": 47, + "the config file %s under this service already exists and cannot be created again": 61, + "the config item %s under this service already exists and cannot be created again": 74, + "the key type for config item %s cannot be empty": 31, + "the length of hook ids is %d, it must be within the range of [1,%d]": 19, + "the length of template variable ids is %d, it must be within the range of [1,%d]": 37, + "the specified type does not match the actual configuration": 41, + "the template file %s in the template set \n\t\t\t\t%s has been removed. Please import the set again": 54, + "the total number of app %d's config items(including template and non-template)exceeded the limit %d": 143, + "the total number of app %s config items(including template and non-template)exceeded the limit %d": 60, + "the total number of template set %d's templates exceeded the limit %d": 148, + "the total number of template set %s templates exceeded the limit %d": 98, + "the type of config item %s is incorrect": 83, + "the version number %s in the template file %s is not the \n\t\tlatest version. Please import the set again": 57, + "there are template sets under the template space, need to delete them first": 163, + "there are templates under the template space, need to delete them first": 165, + "there is no template file under this template set": 91, + "unknown config type: %s": 172, + "unsupported app reload type: %s": 176, + "unsupported config type: %s": 175, + "unsupported file format: %s": 183, + "unsupported file mode: %s": 184, + "unsupported variable type: %s": 193, + "update app failed, err: %s": 140, + "update app template binding failed, err: %v": 49, + "update kv failed, err: %v": 78, "upload completed": 8, "upload completed, %d failed": 9, "upload failed, please make sure the file size does not exceed %s": 13, "upload file failed, err: %v": 6, - "validate template releases exist failed, err: %v": 128, - "validate template sets exist failed, err: %v": 130, - "validate templates exist failed, err: %v": 125, - "validate templates in a template set failed, err: %v": 142, - "value type assertion failed, err: %v": 171, - "verify Unix file paths failed, path: %s, err: %v": 158, - "verify Windows file paths failed, path: %s, err: %v": 157, + "validate template releases exist failed, err: %v": 152, + "validate template sets exist failed, err: %v": 154, + "validate templates exist failed, err: %v": 149, + "validate templates in a template set failed, err: %v": 166, + "value type assertion failed, err: %v": 195, + "verify Unix file paths failed, path: %s, err: %v": 182, + "verify Windows file paths failed, path: %s, err: %v": 181, + "yaml format error, err: %v": 23, } -var enIndex = []uint32{ // 177 elements +var enIndex = []uint32{ // 201 elements // Entry 0 - 1F 0x00000000, 0x0000000f, 0x0000002c, 0x00000050, 0x0000007e, 0x000000cd, 0x000000ee, 0x0000010d, 0x00000135, 0x00000146, 0x00000165, 0x00000189, 0x000001cb, 0x00000217, 0x0000025b, 0x0000027d, - 0x00000291, 0x000002b2, 0x000002cd, 0x00000317, - 0x0000032b, 0x00000358, 0x000003af, 0x000003cd, - 0x000003ec, 0x00000407, 0x00000442, 0x00000472, - 0x00000490, 0x000004a4, 0x000004c6, 0x000004e9, + 0x000002a6, 0x000002ba, 0x000002db, 0x000002f6, + 0x00000340, 0x00000354, 0x00000368, 0x00000386, + 0x000003a4, 0x000003bd, 0x000003dd, 0x00000407, + 0x00000426, 0x0000044a, 0x0000046e, 0x00000494, // Entry 20 - 3F - 0x00000538, 0x00000572, 0x000005a1, 0x000005c9, - 0x000005e8, 0x00000605, 0x00000637, 0x0000069c, - 0x000006c7, 0x00000728, 0x00000796, 0x000007d4, - 0x000007ef, 0x00000857, 0x000008ab, 0x000008f1, - 0x0000091a, 0x0000094e, 0x00000977, 0x000009ce, - 0x00000a0b, 0x00000a45, 0x00000a81, 0x00000aa0, - 0x00000ac5, 0x00000af7, 0x00000b19, 0x00000b6d, - 0x00000b92, 0x00000bd2, 0x00000bef, 0x00000c0c, + 0x000004c7, 0x000004f7, 0x00000515, 0x00000559, + 0x00000612, 0x0000063f, 0x00000696, 0x000006b4, + 0x000006d3, 0x000006ee, 0x00000729, 0x00000759, + 0x00000777, 0x0000078b, 0x000007ad, 0x000007d0, + 0x0000081f, 0x00000859, 0x00000888, 0x000008b0, + 0x000008cf, 0x000008ec, 0x0000091e, 0x00000983, + 0x000009ae, 0x00000a0f, 0x00000a7d, 0x00000abb, + 0x00000ad6, 0x00000b3e, 0x00000b92, 0x00000bd8, // Entry 40 - 5F - 0x00000c2f, 0x00000c69, 0x00000ca0, 0x00000cd8, - 0x00000d01, 0x00000d33, 0x00000d69, 0x00000da3, - 0x00000dda, 0x00000e05, 0x00000e3e, 0x00000e62, - 0x00000eac, 0x00000ed4, 0x00000f07, 0x00000f22, - 0x00000f49, 0x00000f60, 0x00000f91, 0x00000fc2, - 0x00000fd6, 0x00000fe7, 0x00000ffc, 0x00001009, - 0x0000101c, 0x0000102d, 0x0000104e, 0x00001072, - 0x00001096, 0x000010c6, 0x000010e9, 0x00001136, + 0x00000c01, 0x00000c35, 0x00000c5e, 0x00000cb5, + 0x00000cf2, 0x00000d2c, 0x00000d68, 0x00000d87, + 0x00000dac, 0x00000dde, 0x00000e00, 0x00000e54, + 0x00000e79, 0x00000eb9, 0x00000ed6, 0x00000ef3, + 0x00000f30, 0x00000f46, 0x00000f61, 0x00000f8e, + 0x00000fb9, 0x00000fe0, 0x00000fef, 0x00001012, + 0x0000104c, 0x00001083, 0x000010bb, 0x000010e4, + 0x00001116, 0x0000114c, 0x00001186, 0x000011bd, // Entry 60 - 7F - 0x00001153, 0x0000117b, 0x000011a5, 0x000011e1, - 0x00001204, 0x00001227, 0x00001283, 0x000012a4, - 0x000012c7, 0x00001355, 0x000013a8, 0x0000142a, - 0x000014c5, 0x000014e7, 0x00001512, 0x00001538, - 0x00001560, 0x00001585, 0x000015ab, 0x000015b6, - 0x000015d5, 0x000015f3, 0x00001611, 0x00001643, - 0x00001677, 0x000016e1, 0x000016ed, 0x000016fd, - 0x00001710, 0x0000175c, 0x00001788, 0x000017b0, + 0x000011e8, 0x00001221, 0x00001245, 0x0000128f, + 0x000012b7, 0x000012ea, 0x00001305, 0x0000132c, + 0x00001343, 0x00001374, 0x000013a5, 0x000013b9, + 0x000013ca, 0x000013df, 0x000013ec, 0x000013ff, + 0x00001410, 0x00001431, 0x00001455, 0x00001479, + 0x000014a9, 0x000014cc, 0x00001519, 0x00001536, + 0x0000155e, 0x00001588, 0x000015c4, 0x000015e7, + 0x0000160a, 0x00001666, 0x00001687, 0x000016aa, // Entry 80 - 9F - 0x000017d2, 0x00001806, 0x00001831, 0x00001861, - 0x00001887, 0x000018a3, 0x000018c3, 0x000018e7, - 0x0000190f, 0x0000192f, 0x00001953, 0x0000197d, - 0x000019c9, 0x000019ef, 0x00001a37, 0x00001a6f, - 0x00001aab, 0x00001abd, 0x00001acc, 0x00001ae1, - 0x00001af1, 0x00001b0c, 0x00001b2a, 0x00001b50, - 0x00001b6f, 0x00001b92, 0x00001ba4, 0x00001bb7, - 0x00001bd8, 0x00001bf7, 0x00001c31, 0x00001c68, + 0x00001738, 0x0000178b, 0x0000180d, 0x000018a8, + 0x000018ca, 0x000018f5, 0x0000191b, 0x00001943, + 0x00001968, 0x0000198e, 0x00001999, 0x000019b8, + 0x000019d6, 0x000019f4, 0x00001a26, 0x00001a5a, + 0x00001ac4, 0x00001ad0, 0x00001ae0, 0x00001af3, + 0x00001b06, 0x00001b52, 0x00001b7e, 0x00001ba6, + 0x00001bc8, 0x00001bfc, 0x00001c27, 0x00001c57, + 0x00001c7d, 0x00001c99, 0x00001cb9, 0x00001cdd, // Entry A0 - BF - 0x00001c87, 0x00001ca4, 0x00001cbb, 0x00001cf6, - 0x00001d1c, 0x00001d5e, 0x00001d8b, 0x00001d9a, - 0x00001db1, 0x00001dd8, 0x00001df9, 0x00001e36, - 0x00001e5e, 0x00001e6f, 0x00001e9a, 0x00001ec6, - 0x00001ee9, -} // Size: 732 bytes + 0x00001d05, 0x00001d25, 0x00001d49, 0x00001d73, + 0x00001dbf, 0x00001de5, 0x00001e2d, 0x00001e65, + 0x00001ea1, 0x00001eb3, 0x00001ec2, 0x00001ed7, + 0x00001ee7, 0x00001f02, 0x00001f20, 0x00001f46, + 0x00001f65, 0x00001f88, 0x00001f9a, 0x00001fad, + 0x00001fce, 0x00001fed, 0x00002027, 0x0000205e, + 0x0000207d, 0x0000209a, 0x000020b1, 0x000020ec, + 0x00002112, 0x00002154, 0x00002181, 0x00002190, + // Entry C0 - DF + 0x000021a7, 0x000021ce, 0x000021ef, 0x0000222c, + 0x00002254, 0x00002265, 0x00002290, 0x000022bc, + 0x000022df, +} // Size: 828 bytes -const enData string = "" + // Size: 7913 bytes +const enData string = "" + // Size: 8927 bytes "\x02id is required\x02read file failed, err: %[1]v\x02create directory f" + "ailed, err: %[1]v\x02create temporary directory failed, err: %[1]v\x02de" + "compress the file. The size of file %[1]s exceeds the maximum limit of %" + @@ -281,72 +312,87 @@ const enData string = "" + // Size: 7913 bytes "t the current number of service config items failed, err: %[1]v\x02decom" + "press file failed, exceeding the maximum file limit threshold of %[1]d" + "\x02upload failed, please make sure the file size does not exceed %[1]s" + - "\x02list templates failed, err: %[1]v\x02client ids is empty\x02batch de" + - "lete config items failed\x02batch delete groups failed\x02the length of " + - "hook ids is %[1]d, it must be within the range of [1,%[2]d]\x02batch del" + - "ete failed\x02template variable name must start with %[1]s\x02the length" + - " of template variable ids is %[1]d, it must be within the range of [1,%[" + - "2]d]\x02app name %[1]s already exists\x02app alias %[1]s already exists" + - "\x02get app failed, err: %[1]v\x02the specified type does not match the " + - "actual configuration\x02delete app related resources failed, err: %[1]v" + - "\x02delete app failed, err: %[1]v\x02app %[1]d not found\x02business que" + - "ry failed, err: %[1]v\x02app related biz %[1]d is not exist\x02the confi" + - "g file %[1]s already exists in this space and cannot be created again" + - "\x02list template sets by template set ids failed, err: %[1]v\x02update " + - "app template binding failed, err: %[1]v\x02list template spaces failed, " + - "err: %[1]v\x02template space %[1]s not found\x02template set %[1]s not f" + - "ound\x02list templates of template set failed, err: %[1]v\x02the templat" + - "e file %[1]s in the template set \x0a\x09\x09\x09\x09%[2]s has been remo" + - "ved. Please import the set again\x02list template revisions failed, err:" + - " %[1]v\x02template version %[1]s in template file %[2]s \x0a\x09\x09\x09" + - "\x09has been removed. Please import the set again\x02the version number " + - "%[1]s in the template file %[2]s is not the \x0a\x09\x09latest version. " + - "Please import the set again\x02count the number of service configuration" + - "s failed, err: %[1]s\x02app %[1]s is not file type\x02the total number o" + - "f app %[1]s config items(including template and non-template)exceeded th" + - "e limit %[2]d\x02the config file %[1]s under this service already exists" + - " and cannot be created again\x02delete one app template binding instance" + - " by app id failed, err: %[1]s\x02batch create contents failed, err: %[1]" + - "s\x02delete one app template variable failed, err: %[1]s\x02obtain the n" + - "umber of configuration items\x02get template binding relationships throu" + - "gh business and service IDs failed, err: %[1]s\x02get reference template" + - " set under this app failed, err: %[1]s\x02list template sets by template" + - " set ids failed, err: %[1]s\x02remove the template set bound to the app " + - "failed, err: %[1]s\x02hook name %[1]s already exists\x02get excluded hoo" + - "k failed, err: %[1]s\x02retrieve the referenced script failed, err: %[1]" + - "s\x02get kv (%[1]d) failed, err: %[2]v\x02the config item %[1]s under th" + - "is service already exists and cannot be created again\x02get app fail, k" + - "ey: %[1]s, err: %[2]v\x02kv type does not match the data type defined in" + - " the application\x02create kv failed, err: %[1]v\x02update kv failed, er" + - "r: %[1]v\x02get excluded kv failed, err: %[1]s\x02get app template bindi" + - "ngs by template set ids, err: %[1]s\x02batch update app template binding" + - "'s failed, err: %[1]s\x02batch add templates to template sets failed, er" + - "r: %[1]s\x02get template set data failed, err: %[1]s\x02there is no temp" + - "late file under this template set\x02delete template from template sets " + - "failed, err: %[1]v\x02get app template bindings by template set ids, err" + - ": %[1]v\x02batch update app template binding's failed, err: %[1]v\x02lis" + - "t templates by tuple failed, err: %[1]v\x02list app template bindings by" + - " app ids failed, err: %[1]s\x02get template set failed, err: %[1]s\x02th" + - "e total number of template set %[1]s templates exceeded the limit %[2]d" + - "\x02list apps by app ids failed, err: %[1]s\x02count the number of app c" + - "onfigs failed, err: %[1]s\x02template set data is empty\x02list template" + - "s data failed, err: %[1]s\x02template data is empty\x02list templates re" + - "visions data failed, err: %[1]s\x02same template variable name %[1]s alr" + - "eady exists\x02db operation failed\x02invalid argument\x02id should not " + - "be set\x02spec not set\x02attachment not set\x02revision not set\x02inva" + - "lid path, length should >= 1\x02invalid path, length should <= 1024\x02i" + - "nvalid path, should start with '/'\x04\x00\x01 +\x02invalid path %[1]s, " + - "path cannot all be '.'\x02invalid path, length should <= 256\x02invalid " + - "path,path does not conform to the win file path format specification\x02" + - "reload file path is required\x02invalid reload file path, should <= 128" + - "\x02reload file path is not the absolute path\x02%[1]s sub path is syste" + - "m reserved path, do not allow to use\x02memo is required, can not be emp" + - "ty\x02invalid memo, length should <= 200\x02resource name '%[1]s' is pre" + - "fixed with '%[2]s' is reserved name, which is not allows to use\x02inval" + - "id name, length should >= 1\x02invalid name, length should <= 128\x02inv" + - "alid name: %[1]s, only allows to include english、numbers、underscore (_)、" + - "hyphen (-), and must start and end with an english、numbers\x02invalid na" + - "me, length should >= 9 and must start with prefix bk_bscp_ (ignore case)" + + "\x02list templates failed, err: %[1]v\x02sensitive information cannot be" + + " exported\x02client ids is empty\x02batch delete config items failed\x02" + + "batch delete groups failed\x02the length of hook ids is %[1]d, it must b" + + "e within the range of [1,%[2]d]\x02batch delete failed\x02not legal JSON" + + " data\x02json format error, err: %[1]v\x02yaml format error, err: %[1]v" + + "\x02%[1]s type not supported\x02config item %[1]s kv type error\x02forma" + + "t error, please check the key: %[1]s\x02config item %[1]s format error" + + "\x02config item %[1]s json format error\x02config item %[1]s yaml format" + + " error\x02config item %[1]s secret hidden error\x02the key type for conf" + + "ig item %[1]s cannot be empty\x02config item %[1]s secret type error, er" + + "r: %[2]v\x02config item %[1]s value error\x02the certificate format is i" + + "ncorrect, only X.509 format is supported\x02the access token format is i" + + "ncorrect. Currently only OAtuh 2.0 and jwt formats \x0a\x09\x09\x09are s" + + "upported. The length is 32-512 characters, including uppercase and lower" + + "case letters and numbers\x02template variable name must start with %[1]s" + + "\x02the length of template variable ids is %[1]d, it must be within the " + + "range of [1,%[2]d]\x02app name %[1]s already exists\x02app alias %[1]s a" + + "lready exists\x02get app failed, err: %[1]v\x02the specified type does n" + + "ot match the actual configuration\x02delete app related resources failed" + + ", err: %[1]v\x02delete app failed, err: %[1]v\x02app %[1]d not found\x02" + + "business query failed, err: %[1]v\x02app related biz %[1]d is not exist" + + "\x02the config file %[1]s already exists in this space and cannot be cre" + + "ated again\x02list template sets by template set ids failed, err: %[1]v" + + "\x02update app template binding failed, err: %[1]v\x02list template spac" + + "es failed, err: %[1]v\x02template space %[1]s not found\x02template set " + + "%[1]s not found\x02list templates of template set failed, err: %[1]v\x02" + + "the template file %[1]s in the template set \x0a\x09\x09\x09\x09%[2]s ha" + + "s been removed. Please import the set again\x02list template revisions f" + + "ailed, err: %[1]v\x02template version %[1]s in template file %[2]s \x0a" + + "\x09\x09\x09\x09has been removed. Please import the set again\x02the ver" + + "sion number %[1]s in the template file %[2]s is not the \x0a\x09\x09late" + + "st version. Please import the set again\x02count the number of service c" + + "onfigurations failed, err: %[1]s\x02app %[1]s is not file type\x02the to" + + "tal number of app %[1]s config items(including template and non-template" + + ")exceeded the limit %[2]d\x02the config file %[1]s under this service al" + + "ready exists and cannot be created again\x02delete one app template bind" + + "ing instance by app id failed, err: %[1]s\x02batch create contents faile" + + "d, err: %[1]s\x02delete one app template variable failed, err: %[1]s\x02" + + "obtain the number of configuration items\x02get template binding relatio" + + "nships through business and service IDs failed, err: %[1]s\x02get refere" + + "nce template set under this app failed, err: %[1]s\x02list template sets" + + " by template set ids failed, err: %[1]s\x02remove the template set bound" + + " to the app failed, err: %[1]s\x02hook name %[1]s already exists\x02get " + + "excluded hook failed, err: %[1]s\x02retrieve the referenced script faile" + + "d, err: %[1]s\x02get kv (%[1]d) failed, err: %[2]v\x02the config item %[" + + "1]s under this service already exists and cannot be created again\x02get" + + " app fail, key: %[1]s, err: %[2]v\x02kv type does not match the data typ" + + "e defined in the application\x02create kv failed, err: %[1]v\x02update k" + + "v failed, err: %[1]v\x02sensitive data is not visible, unable to view ac" + + "tual content\x02not a KV type service\x02list kv failed, err: %[1]v\x02b" + + "atch import of KV config failed, err: %[1]v\x02the type of config item %" + + "[1]s is incorrect\x02clearing draft area failed, err: %[1]v\x02save kv f" + + "ailed\x02get excluded kv failed, err: %[1]s\x02get app template bindings" + + " by template set ids, err: %[1]s\x02batch update app template binding's " + + "failed, err: %[1]s\x02batch add templates to template sets failed, err: " + + "%[1]s\x02get template set data failed, err: %[1]s\x02there is no templat" + + "e file under this template set\x02delete template from template sets fai" + + "led, err: %[1]v\x02get app template bindings by template set ids, err: %" + + "[1]v\x02batch update app template binding's failed, err: %[1]v\x02list t" + + "emplates by tuple failed, err: %[1]v\x02list app template bindings by ap" + + "p ids failed, err: %[1]s\x02get template set failed, err: %[1]s\x02the t" + + "otal number of template set %[1]s templates exceeded the limit %[2]d\x02" + + "list apps by app ids failed, err: %[1]s\x02count the number of app confi" + + "gs failed, err: %[1]s\x02template set data is empty\x02list templates da" + + "ta failed, err: %[1]s\x02template data is empty\x02list templates revisi" + + "ons data failed, err: %[1]s\x02same template variable name %[1]s already" + + " exists\x02db operation failed\x02invalid argument\x02id should not be s" + + "et\x02spec not set\x02attachment not set\x02revision not set\x02invalid " + + "path, length should >= 1\x02invalid path, length should <= 1024\x02inval" + + "id path, should start with '/'\x04\x00\x01 +\x02invalid path %[1]s, path" + + " cannot all be '.'\x02invalid path, length should <= 256\x02invalid path" + + ",path does not conform to the win file path format specification\x02relo" + + "ad file path is required\x02invalid reload file path, should <= 128\x02r" + + "eload file path is not the absolute path\x02%[1]s sub path is system res" + + "erved path, do not allow to use\x02memo is required, can not be empty" + + "\x02invalid memo, length should <= 200\x02resource name '%[1]s' is prefi" + + "xed with '%[2]s' is reserved name, which is not allows to use\x02invalid" + + " name, length should >= 1\x02invalid name, length should <= 128\x02inval" + + "id name: %[1]s, only allows to include english、numbers、underscore (_)、hy" + + "phen (-), and must start and end with an english、numbers\x02invalid name" + + ", length should >= 9 and must start with prefix bk_bscp_ (ignore case)" + "\x02invalid name: %[1]s, only allows to include english、numbers、undersco" + "re (_), and must start with prefix bk_bscp_ (ignore case)\x02invalid nam" + "e: %[1]s, only allows to include Chinese, English,numbers, underscore (_" + @@ -359,151 +405,166 @@ const enData string = "" + // Size: 7913 bytes "]s\x02count app %[1]d's config items failed, err: %[2]v\x02get app %[1]d" + "'s template binding failed, err: %[2]v\x02the total number of app %[1]d'" + "s config items(including template and non-template)exceeded the limit %[" + - "2]d\x02hook is nil\x02Unnamed Version\x02appID can not be 0\x02the total" + - " number of template set %[1]d's templates exceeded the limit %[2]d\x02va" + - "lidate templates exist failed, err: %[1]v\x02template space id in %[1]v " + - "is not exist\x02template id in %[1]v is not exist\x02validate template r" + - "eleases exist failed, err: %[1]v\x02template revision id in %[1]v is not" + - " exist\x02validate template sets exist failed, err: %[1]v\x02template se" + - "t id in %[1]v is not exist\x02template %[1]d is not exist\x02get templat" + - "e failed, err: %[1]v\x02template release %[1]d is not exist\x02get templ" + - "ate release failed, err: %[1]v\x02template set %[1]d is not exist\x02get" + - " template set failed, err: %[1]v\x02get template set count failed, err: " + - "%[1]v\x02there are template sets under the template space, need to delet" + - "e them first\x02get template count failed, err: %[1]v\x02there are templ" + - "ates under the template space, need to delete them first\x02validate tem" + - "plates in a template set failed, err: %[1]v\x02template id in %[1]v is n" + - "ot belong to template set id %[2]d\x02id can not be set\x02invalid biz i" + - "d\x02invalid spec, is nil\x02app spec is nil\x02unknown config type: %[1" + - "]s\x02app's type can not be updated\x02not support table config type for" + - " now\x02unsupported config type: %[1]s\x02unsupported app reload type: %" + - "[1]s\x02invalid data-type\x02spec should be set\x02invalid commit spec's" + - " content id\x02commit spec's content is empty\x02verify Windows file pat" + - "hs failed, path: %[1]s, err: %[2]v\x02verify Unix file paths failed, pat" + - "h: %[1]s, err: %[2]v\x02unsupported file format: %[1]s\x02unsupported fi" + - "le mode: %[1]s\x02content id can not set\x02invalid content signature, s" + - "hould be config's sha256 value\x02content signature should be lowercase" + - "\x02invalid origin content signature, should be config's sha256 value" + - "\x02origin content signature should be lowercase\x02invalid app id\x02in" + - "valid config item id\x02default_val %[1]s is not a number type\x02unsupp" + - "orted variable type: %[1]s\x02get 'kv_type' as a string \x0a\x09\x09from" + - " kv.Data failed, err: %[1]v\x02value type assertion failed, err: %[1]v" + - "\x02authorize failed\x02get permission to apply failed, err: %[1]v\x02gr" + - "pc status with details failed, err: %[1]v\x02%[1]s and %[2]s path file c" + - "onflict" + "2]d\x02hook is nil\x02Unnamed Version\x02appID can not be 0\x02bizID can" + + " not be 0\x02the total number of template set %[1]d's templates exceeded" + + " the limit %[2]d\x02validate templates exist failed, err: %[1]v\x02templ" + + "ate space id in %[1]v is not exist\x02template id in %[1]v is not exist" + + "\x02validate template releases exist failed, err: %[1]v\x02template revi" + + "sion id in %[1]v is not exist\x02validate template sets exist failed, er" + + "r: %[1]v\x02template set id in %[1]v is not exist\x02template %[1]d is n" + + "ot exist\x02get template failed, err: %[1]v\x02template release %[1]d is" + + " not exist\x02get template release failed, err: %[1]v\x02template set %[" + + "1]d is not exist\x02get template set failed, err: %[1]v\x02get template " + + "set count failed, err: %[1]v\x02there are template sets under the templa" + + "te space, need to delete them first\x02get template count failed, err: %" + + "[1]v\x02there are templates under the template space, need to delete the" + + "m first\x02validate templates in a template set failed, err: %[1]v\x02te" + + "mplate id in %[1]v is not belong to template set id %[2]d\x02id can not " + + "be set\x02invalid biz id\x02invalid spec, is nil\x02app spec is nil\x02u" + + "nknown config type: %[1]s\x02app's type can not be updated\x02not suppor" + + "t table config type for now\x02unsupported config type: %[1]s\x02unsuppo" + + "rted app reload type: %[1]s\x02invalid data-type\x02spec should be set" + + "\x02invalid commit spec's content id\x02commit spec's content is empty" + + "\x02verify Windows file paths failed, path: %[1]s, err: %[2]v\x02verify " + + "Unix file paths failed, path: %[1]s, err: %[2]v\x02unsupported file form" + + "at: %[1]s\x02unsupported file mode: %[1]s\x02content id can not set\x02i" + + "nvalid content signature, should be config's sha256 value\x02content sig" + + "nature should be lowercase\x02invalid origin content signature, should b" + + "e config's sha256 value\x02origin content signature should be lowercase" + + "\x02invalid app id\x02invalid config item id\x02default_val %[1]s is not" + + " a number type\x02unsupported variable type: %[1]s\x02get 'kv_type' as a" + + " string \x0a\x09\x09from kv.Data failed, err: %[1]v\x02value type assert" + + "ion failed, err: %[1]v\x02authorize failed\x02get permission to apply fa" + + "iled, err: %[1]v\x02grpc status with details failed, err: %[1]v\x02%[1]s" + + " and %[2]s path file conflict" -var zhIndex = []uint32{ // 177 elements +var zhIndex = []uint32{ // 201 elements // Entry 0 - 1F 0x00000000, 0x0000000f, 0x0000002e, 0x0000004d, 0x00000072, 0x000000be, 0x000000d7, 0x000000f6, 0x0000011b, 0x00000128, 0x00000143, 0x00000165, - 0x00000165, 0x000001a7, 0x000001da, 0x000001ff, - 0x00000213, 0x0000022f, 0x00000248, 0x00000288, - 0x0000029b, 0x000002c5, 0x0000030b, 0x00000328, - 0x00000345, 0x00000364, 0x0000038c, 0x000003b7, - 0x000003d6, 0x000003f3, 0x00000412, 0x00000438, + 0x00000199, 0x000001db, 0x0000020e, 0x00000233, + 0x0000024c, 0x00000260, 0x0000027c, 0x00000295, + 0x000002d5, 0x000002e8, 0x000002fc, 0x0000031d, + 0x0000033e, 0x00000354, 0x00000371, 0x00000394, + 0x000003b1, 0x000003d2, 0x000003f3, 0x00000422, // Entry 20 - 3F - 0x00000476, 0x000004ac, 0x000004d7, 0x000004fc, - 0x00000519, 0x00000536, 0x00000567, 0x000005b4, - 0x000005d9, 0x00000626, 0x00000679, 0x000006a4, - 0x000006c7, 0x00000738, 0x00000778, 0x000007a3, - 0x000007c8, 0x000007ed, 0x00000803, 0x00000845, - 0x0000087c, 0x000008b2, 0x000008d1, 0x000008ee, - 0x00000919, 0x00000941, 0x00000966, 0x000009a1, - 0x000009cc, 0x00000a06, 0x00000a21, 0x00000a3c, + 0x0000044e, 0x0000047d, 0x00000497, 0x000004c3, + 0x00000534, 0x0000055e, 0x000005a4, 0x000005c1, + 0x000005de, 0x000005fd, 0x00000625, 0x00000650, + 0x0000066f, 0x0000068c, 0x000006ab, 0x000006d1, + 0x0000070e, 0x00000744, 0x0000076f, 0x00000794, + 0x000007b1, 0x000007ce, 0x000007ff, 0x0000084c, + 0x00000871, 0x000008be, 0x00000911, 0x0000093c, + 0x0000095f, 0x000009d0, 0x00000a10, 0x00000a3b, // Entry 40 - 5F - 0x00000a63, 0x00000a9c, 0x00000acd, 0x00000afb, - 0x00000b23, 0x00000b45, 0x00000b76, 0x00000baf, - 0x00000be0, 0x00000bff, 0x00000c35, 0x00000c57, - 0x00000c9e, 0x00000cc8, 0x00000cf3, 0x00000d0c, - 0x00000d31, 0x00000d44, 0x00000d6f, 0x00000d99, - 0x00000da8, 0x00000db5, 0x00000dca, 0x00000dde, - 0x00000df8, 0x00000e10, 0x00000e30, 0x00000e53, - 0x00000e75, 0x00000eac, 0x00000ece, 0x00000f07, + 0x00000a60, 0x00000a85, 0x00000a9b, 0x00000add, + 0x00000b14, 0x00000b4a, 0x00000b69, 0x00000b86, + 0x00000bb1, 0x00000bd9, 0x00000bfe, 0x00000c39, + 0x00000c64, 0x00000c9e, 0x00000cb9, 0x00000cd4, + 0x00000d05, 0x00000d1d, 0x00000d3e, 0x00000d65, + 0x00000d88, 0x00000daa, 0x00000db9, 0x00000de0, + 0x00000e19, 0x00000e4a, 0x00000e78, 0x00000ea0, + 0x00000ec2, 0x00000ef3, 0x00000f2c, 0x00000f5d, // Entry 60 - 7F - 0x00000f26, 0x00000f54, 0x00000f7f, 0x00000fb5, - 0x00000fd6, 0x00000ff8, 0x00001049, 0x00001069, - 0x00001089, 0x00001110, 0x00001163, 0x000011dc, - 0x00001275, 0x00001296, 0x000012c8, 0x000012ee, - 0x00001316, 0x00001339, 0x0000135d, 0x0000136a, - 0x00001383, 0x000013a2, 0x000013c1, 0x000013f3, - 0x00001429, 0x00001479, 0x00001489, 0x00001499, - 0x000014a9, 0x000014f2, 0x0000151d, 0x00001543, + 0x00000f7c, 0x00000fb2, 0x00000fd4, 0x0000101b, + 0x00001045, 0x00001070, 0x00001089, 0x000010ae, + 0x000010c1, 0x000010ec, 0x00001116, 0x00001125, + 0x00001132, 0x00001147, 0x0000115b, 0x00001175, + 0x0000118d, 0x000011ad, 0x000011d0, 0x000011f2, + 0x00001229, 0x0000124b, 0x00001284, 0x000012a3, + 0x000012d1, 0x000012fc, 0x00001332, 0x00001353, + 0x00001375, 0x000013c6, 0x000013e6, 0x00001406, // Entry 80 - 9F - 0x00001563, 0x00001594, 0x000015ba, 0x000015eb, - 0x00001611, 0x00001628, 0x00001647, 0x00001664, - 0x00001689, 0x000016a6, 0x000016c8, 0x000016f3, - 0x00001723, 0x00001748, 0x00001772, 0x000017a3, - 0x000017d8, 0x000017e8, 0x000017fd, 0x0000180a, - 0x0000181d, 0x0000183b, 0x00001854, 0x00001870, - 0x00001891, 0x000018b2, 0x000018cb, 0x000018d8, - 0x000018eb, 0x000018f8, 0x00001933, 0x0000196b, + 0x0000148d, 0x000014e0, 0x00001559, 0x000015f2, + 0x00001613, 0x00001645, 0x0000166b, 0x00001693, + 0x000016b6, 0x000016da, 0x000016e7, 0x00001700, + 0x0000171f, 0x0000173e, 0x00001770, 0x000017a6, + 0x000017f6, 0x00001806, 0x00001816, 0x00001826, + 0x00001826, 0x0000186f, 0x0000189a, 0x000018c0, + 0x000018e0, 0x00001911, 0x00001937, 0x00001968, + 0x0000198e, 0x000019a5, 0x000019c4, 0x000019e1, // Entry A0 - BF - 0x0000198c, 0x000019ad, 0x000019ba, 0x000019e9, - 0x000019ff, 0x00001a37, 0x00001a53, 0x00001a65, - 0x00001a7a, 0x00001a9f, 0x00001ac0, 0x00001b01, - 0x00001b23, 0x00001b30, 0x00001b4f, 0x00001b79, - 0x00001b9c, -} // Size: 732 bytes + 0x00001a06, 0x00001a23, 0x00001a45, 0x00001a70, + 0x00001aa0, 0x00001ac5, 0x00001aef, 0x00001b20, + 0x00001b55, 0x00001b65, 0x00001b7a, 0x00001b87, + 0x00001b9a, 0x00001bb8, 0x00001bd1, 0x00001bed, + 0x00001c0e, 0x00001c2f, 0x00001c48, 0x00001c55, + 0x00001c68, 0x00001c75, 0x00001cb0, 0x00001ce8, + 0x00001d09, 0x00001d2a, 0x00001d37, 0x00001d66, + 0x00001d7c, 0x00001db4, 0x00001dd0, 0x00001de2, + // Entry C0 - DF + 0x00001df7, 0x00001e1c, 0x00001e3d, 0x00001e7e, + 0x00001ea0, 0x00001ead, 0x00001ecc, 0x00001ef6, + 0x00001f19, +} // Size: 828 bytes -const zhData string = "" + // Size: 7068 bytes +const zhData string = "" + // Size: 7961 bytes "\x02id不能为空\x02读取文件失败, err: %[1]v\x02创建目录失败, err: %[1]v\x02创建临时目录失败, err:" + " %[1]v\x02解压文件失败, 文件 %[1]s 的大小超过了最大限制阈值 %[2]s\x02解压失败, err: %[1]v\x02上传文" + "件失败, err: %[1]v\x02获取模板配置失败, err: %[1]v\x02上传完成\x02上传完成, %[1]d 失败\x02获" + - "取配置项失败, err: %[1]v\x02解压文件失败, 超过了文件数量最大限制阈值 %[1]d\x02上传失败, 请确保文件大小不超过 " + - "%[1]s\x02获取模板数据失败, err: %[1]v\x02客户端 id 为空\x02批量删除配置项失败\x02批量删除群组失败\x02脚" + - "本id列表的长度为%[1]d, 长度范围必须为[1,%[2]d]\x02批量删除失败\x02模版变量名必须以%[1]s前缀开头\x02全局变" + - "量id列表的长度为%[1]d, 长度范围必须为[1,%[2]d]\x02服务名称 %[1]s 已存在\x02服务别名 %[1]s 已存在" + - "\x02获取服务失败, err: %[1]v\x02指定的类型与实际配置不匹配\x02删除服务相关资源失败, err: %[1]v\x02删除服" + - "务失败, err: %[1]v\x02ID为%[1]d的服务不存在\x02业务查询失败, err: %[1]v\x02服务相关的业务 %[1" + - "]d 不存在\x02此空间下配置文件 %[1]s 已存在,无法重复创建\x02按模板套餐ID列出模板套餐失败, err: %[1]v\x02更新" + - "服务模板绑定失败, err: %[1]v\x02列出模板空间失败, err: %[1]v\x02模板空间 %[1]s 不存在\x02模板套餐" + - " %[1]s 不存在\x02获取模板套餐下的模板失败, err: %[1]v\x02模板套餐 %[2]s 中的模板文件 %[1]s 被移除, 请" + - "重新导入套餐\x02获取模板版本失败, err: %[1]v\x02模板文件 %[2]s 中的模板版本 %[1]s 被移除, 请重新导入套餐" + - "\x02模板文件 %[2]s 中的版本号 %[1]s 不是最新版本, 请重新导入套餐\x02统计服务配置数量失败, err: %[1]s\x02" + - "该服务 %[1]s 不是文件类型\x02服务 %[1]s 的配置项总数(包括模板和非模板)超过单服务最大配置文件数量限制 %[2]d\x02" + - "此服务下的配置文件 %[1]s 已存在, 无法重复创建\x02移除服务模板套餐失败, err: %[1]s\x02批量创建内容失败, err" + - ": %[1]s\x02删除模板变量失败, err: %[1]s\x02获取配置项数量\x02通过业务和服务ID获取模板绑定关系失败, err: " + - "%[1]s\x02获取该服务下的引用模板集失败, err: %[1]s\x02按模板套餐ID列出模板套餐失败, err: %[1]s\x02移除" + - "套餐失败, err: %[1]s\x02脚本名称 %[1]s 已存在\x02获取排除后的脚本失败, err: %[1]s\x02检索引用的脚" + - "本失败, err: %[1]s\x02获取 kv (%[1]d) 失败, err: %[2]v\x02该服务下的配置项%[1]s已存在, 无" + - "法重复创建\x02获取服务失败, key: %[1]s, err: %[2]v\x02kv 类型与服务类型中定义的数据类型不匹配\x02创建" + - "kv失败, err: %[1]v\x02更新kv失败, err: %[1]v\x02获取排除后的kv失败, err: %[1]s\x02按模板集" + - "ID获取应用程序模板绑定, err: %[1]s\x02批量更新应用模板绑定失败, err: %[1]s\x02模板集批量添加模板失败, err" + - ": %[1]s\x02获取模板集数据失败, err: %[1]s\x02此模板集下没有模板文件\x02从模板套餐中删除模板失败, err: %[" + - "1]v\x02按模板集ID获取应用程序模板绑定, err: %[1]v\x02批量更新应用模板绑定失败, err: %[1]v\x02列出模板失" + - "败, err: %[1]v\x02按服务ID列出应用模板绑定失败, err: %[1]s\x02获取模板集失败, err: %[1]s" + - "\x02模板套餐 %[1]s 超过单套餐最大配置文件数量限制 %[2]d\x02按服务ID列出服务失败, err: %[1]s\x02统计服务配" + - "置数量失败, err: %[1]s\x02模板套餐数据为空\x02列出模板数据失败, err: %[1]s\x02模板数据为空\x02列出模" + - "板版本数据失败, err: %[1]s\x02同名的模版变量名称%[1]s已存在\x02db操作失败\x02无效参数\x02id不应该被设置" + - "\x02spec没有被设置\x02attachment没有被设置\x02revision没有被设置\x02路径无效, 长度应为 >= 1\x02" + - "路径无效, 长度应为 <= 1024\x02路径无效, 应以“/”开头\x04\x00\x01 2\x02路径 %[1]s 无效, 路径不能" + - "全部为“.”\x02路径无效, 长度应为 <= 256\x02路径无效, 路径不符合win文件路径格式规范\x02需要重新加载文件路径" + - "\x02重新加载文件路径无效, 应该 <= 128\x02重新加载文件路径不是绝对路径\x02%[1]s 子路径为系统保留路径, 不允许使用" + - "\x02描述为必填项, 不能为空\x02描述无效, 长度应为 <= 200\x02资源名称“%[1]s”以“%[2]s”为前缀, 是保留名称, " + - "不允许使用\x02名称无效, 长度应为 >= 1\x02无效名称, 长度应该<=128\x02无效名称:%[1]s, 只允许包含英文、数字、" + - "下划线(_)、连字符(-), 且必须以英文、数字开头和结尾\x02无效名称, 长度应该>=9且必须以bk_bscp_前缀开头(忽略大小写)" + - "\x02无效名称:%[1]s, 只允许英文、数字、下划线(_), 且必须以bk_bscp_前缀开头(忽略大小写)\x02无效名称:%[1]s, " + - "只允许包含中文、英文、数字、下划线(_)、连字符(-), 且必须以中文、英文或数字开头和结尾\x02名称无效, 长度应为 <= 64\x02" + - "名称 %[1]s 无效, 名称不能全部为“.”\x02命名空间无效, 长度应为 >= 1\x02命名空间无效, 长度应为 <= 128" + - "\x02用户名无效, 长度应为 >= 1\x02用户名无效, 长度应为 <= 32\x02服务为空\x02创建失败, err: %[1]v" + - "\x02创建服务失败, err: %[1]v\x02更新服务失败, err: %[1]s\x02统计服务 %[1]d 的配置项失败, err: " + - "%[2]v\x02获取服务 %[1]d 的模板绑定失败, err: %[2]v\x02服务 %[1]d 的配置项总数(包括模板和非模板)超出限" + - "制 %[2]d\x02脚本不存在\x02未命名版本\x02appID不能为0\x02模板套餐 %[1]d's 超过单套餐最大配置文件数量限制" + - " %[2]d\x02验证模板是否存在失败, err: %[1]v\x02%[1]v 中的模板空间 ID 不存在\x02%[1]v 中的模板 ID" + - " 不存在\x02验证模板版本是否存在失败, err: %[1]v\x02%[1]v 中的模板版本 ID 不存在\x02验证模板套餐是否存在失败," + - " err: %[1]v\x02%[1]v 中的模板套餐 ID 不存在\x02模板 %[1]d 不存在\x02获取模板失败, err: %[1]v" + - "\x02模板版本 %[1]d 不存在\x02获取模板版本失败, err: %[1]v\x02模板套餐 %[1]d 不存在\x02获取模板集失败," + - " err: %[1]v\x02统计模板套餐数量失败, err: %[1]v\x02模板空间下有模板套餐, 需要先删除\x02获取模板数量失败, " + - "err: %[1]v\x02模板空间下有模板, 需要先删除\x02验证模板套餐中的模板失败, err: %[1]v\x02%[1]v 中的模板 " + - "ID 不属于模板套餐 ID %[2]d\x02ID 不能为空\x02无法验证业务ID\x02参数为空\x02服务参数为空\x02未知的配置类型:" + - "%[1]s\x02服务类型不能编辑\x02暂不支持表配置类型\x02不支持的配置类型:%[1]s\x02不支持的服务类型:%[1]s\x02无法" + - "验证数据类型\x02参数为空\x02无法验证参数\x02参数为空\x02验证 Windows 文件路径失败, path: %[1]s, er" + - "r: %[2]v\x02验证 Unix 文件路径失败, path: %[1]s, err: %[2]v\x02不支持的文件格式:%[1]s" + - "\x02不支持的文件模式:%[1]s\x02参数为空\x02内容签名无效, 应为配置的 sha256 值\x02内容签名应小写\x02无效的原始" + - "内容签名, 应为配置的 sha256 值\x02原始内容签名应小写\x02无效的服务ID\x02无效的配置项ID\x02default_va" + - "l %[1]s 不是数字类型\x02不支持的变量类型:%[1]s\x02从 kv.Data 获取“kv_type”作为字符串失败, err: %" + - "[1]v\x02值类型断言失败, err: %[1]v\x02授权失败\x02获取权限失败, err: %[1]v\x02grpc 状态详细信息" + - "失败, err: %[1]v\x02%[1]s 与 %[2]s 路径文件冲突" + "取配置项失败, err: %[1]v\x02获取当前服务配置项数量失败, err: %[1]v\x02解压文件失败, 超过了文件数量最大限制" + + "阈值 %[1]d\x02上传失败, 请确保文件大小不超过 %[1]s\x02获取模板数据失败, err: %[1]v\x02敏感信息无法导出" + + "\x02客户端 id 为空\x02批量删除配置项失败\x02批量删除群组失败\x02脚本id列表的长度为%[1]d, 长度范围必须为[1,%[2" + + "]d]\x02批量删除失败\x02JSON数据不合法\x02json 格式化错误, err: %[1]v\x02yaml 格式化错误, err:" + + " %[1]v\x02%[1]s 类型不支持\x02配置项 %[1]s 类型错误\x02格式错误, 请检查键:%[1]s\x02配置项 %[1]s" + + " 格式错误\x02配置项 %[1]s json格式错误\x02配置项 %[1]s yaml格式错误\x02配置项 %[1]s 密钥是否显示设置错" + + "误\x02配置项 %[1]s 的密钥类型不能为空\x02配置项 %[1]s 密钥类型错误, err: %[2]v\x02配置项 %[1]s " + + "值错误\x02证书格式不正确, 仅支持X.509格式\x02token格式错误, 目前仅支持OAuth2.0和jwt格式, 长度为32-51" + + "2个字符, 包括大小写字母和数字\x02模版变量名必须以%[1]s前缀开头\x02全局变量id列表的长度为%[1]d, 长度范围必须为[1,%[" + + "2]d]\x02服务名称 %[1]s 已存在\x02服务别名 %[1]s 已存在\x02获取服务失败, err: %[1]v\x02指定的类型与" + + "实际配置不匹配\x02删除服务相关资源失败, err: %[1]v\x02删除服务失败, err: %[1]v\x02ID为%[1]d的服务" + + "不存在\x02业务查询失败, err: %[1]v\x02服务相关的业务 %[1]d 不存在\x02此空间下配置文件 %[1]s 已存在, " + + "无法重复创建\x02按模板套餐ID列出模板套餐失败, err: %[1]v\x02更新服务模板绑定失败, err: %[1]v\x02列出模" + + "板空间失败, err: %[1]v\x02模板空间 %[1]s 不存在\x02模板套餐 %[1]s 不存在\x02获取模板套餐下的模板失败," + + " err: %[1]v\x02模板套餐 %[2]s 中的模板文件 %[1]s 被移除, 请重新导入套餐\x02获取模板版本失败, err: %[" + + "1]v\x02模板文件 %[2]s 中的模板版本 %[1]s 被移除, 请重新导入套餐\x02模板文件 %[2]s 中的版本号 %[1]s 不是" + + "最新版本, 请重新导入套餐\x02统计服务配置数量失败, err: %[1]s\x02该服务 %[1]s 不是文件类型\x02服务 %[1]" + + "s 的配置项总数(包括模板和非模板)超过单服务最大配置文件数量限制 %[2]d\x02此服务下的配置文件 %[1]s 已存在, 无法重复创建" + + "\x02移除服务模板套餐失败, err: %[1]s\x02批量创建内容失败, err: %[1]s\x02删除模板变量失败, err: %[1" + + "]s\x02获取配置项数量\x02通过业务和服务ID获取模板绑定关系失败, err: %[1]s\x02获取该服务下的引用模板集失败, err:" + + " %[1]s\x02按模板套餐ID列出模板套餐失败, err: %[1]s\x02移除套餐失败, err: %[1]s\x02脚本名称 %[1]" + + "s 已存在\x02获取排除后的脚本失败, err: %[1]s\x02检索引用的脚本失败, err: %[1]s\x02获取 kv (%[1]d" + + ") 失败, err: %[2]v\x02该服务下的配置项%[1]s已存在, 无法重复创建\x02获取服务失败, key: %[1]s, err:" + + " %[2]v\x02kv 类型与服务类型中定义的数据类型不匹配\x02创建kv失败, err: %[1]v\x02更新kv失败, err: %[" + + "1]v\x02敏感数据不可见,无法查看实际内容\x02不是kv类型的服务\x02获取kv列表失败, err: %[1]v\x02批量导入KV配置" + + "失败, err: %[1]v\x02配置项 %[1]s 的类型不正确\x02清除草稿区失败, err: %[1]v\x02kv保持失败" + + "\x02获取排除后的kv失败, err: %[1]s\x02按模板集ID获取应用程序模板绑定, err: %[1]s\x02批量更新应用模板绑定" + + "失败, err: %[1]s\x02模板集批量添加模板失败, err: %[1]s\x02获取模板集数据失败, err: %[1]s\x02" + + "此模板集下没有模板文件\x02从模板套餐中删除模板失败, err: %[1]v\x02按模板集ID获取应用程序模板绑定, err: %[1]" + + "v\x02批量更新应用模板绑定失败, err: %[1]v\x02列出模板失败, err: %[1]v\x02按服务ID列出应用模板绑定失败, " + + "err: %[1]s\x02获取模板集失败, err: %[1]s\x02模板套餐 %[1]s 超过单套餐最大配置文件数量限制 %[2]d" + + "\x02按服务ID列出服务失败, err: %[1]s\x02统计服务配置数量失败, err: %[1]s\x02模板套餐数据为空\x02列出模" + + "板数据失败, err: %[1]s\x02模板数据为空\x02列出模板版本数据失败, err: %[1]s\x02同名的模版变量名称%[1]" + + "s已存在\x02db操作失败\x02无效参数\x02id不应该被设置\x02spec没有被设置\x02attachment没有被设置\x02re" + + "vision没有被设置\x02路径无效, 长度应为 >= 1\x02路径无效, 长度应为 <= 1024\x02路径无效, 应以“/”开头" + + "\x04\x00\x01 2\x02路径 %[1]s 无效, 路径不能全部为“.”\x02路径无效, 长度应为 <= 256\x02路径无效, " + + "路径不符合win文件路径格式规范\x02需要重新加载文件路径\x02重新加载文件路径无效, 应该 <= 128\x02重新加载文件路径不是绝" + + "对路径\x02%[1]s 子路径为系统保留路径, 不允许使用\x02描述为必填项, 不能为空\x02描述无效, 长度应为 <= 200" + + "\x02资源名称“%[1]s”以“%[2]s”为前缀, 是保留名称, 不允许使用\x02名称无效, 长度应为 >= 1\x02无效名称, 长度应" + + "该<=128\x02无效名称:%[1]s, 只允许包含英文、数字、下划线(_)、连字符(-), 且必须以英文、数字开头和结尾\x02无效名称" + + ", 长度应该>=9且必须以bk_bscp_前缀开头(忽略大小写)\x02无效名称:%[1]s, 只允许英文、数字、下划线(_), 且必须以bk_" + + "bscp_前缀开头(忽略大小写)\x02无效名称:%[1]s, 只允许包含中文、英文、数字、下划线(_)、连字符(-), 且必须以中文、英文或数" + + "字开头和结尾\x02名称无效, 长度应为 <= 64\x02名称 %[1]s 无效, 名称不能全部为“.”\x02命名空间无效, 长度应为 " + + ">= 1\x02命名空间无效, 长度应为 <= 128\x02用户名无效, 长度应为 >= 1\x02用户名无效, 长度应为 <= 32\x02" + + "服务为空\x02创建失败, err: %[1]v\x02创建服务失败, err: %[1]v\x02更新服务失败, err: %[1]s" + + "\x02统计服务 %[1]d 的配置项失败, err: %[2]v\x02获取服务 %[1]d 的模板绑定失败, err: %[2]v\x02" + + "服务 %[1]d 的配置项总数(包括模板和非模板)超出限制 %[2]d\x02脚本不存在\x02未命名版本\x02appID不能为0\x02" + + "模板套餐 %[1]d's 超过单套餐最大配置文件数量限制 %[2]d\x02验证模板是否存在失败, err: %[1]v\x02%[1]v " + + "中的模板空间 ID 不存在\x02%[1]v 中的模板 ID 不存在\x02验证模板版本是否存在失败, err: %[1]v\x02%[1]" + + "v 中的模板版本 ID 不存在\x02验证模板套餐是否存在失败, err: %[1]v\x02%[1]v 中的模板套餐 ID 不存在\x02模板" + + " %[1]d 不存在\x02获取模板失败, err: %[1]v\x02模板版本 %[1]d 不存在\x02获取模板版本失败, err: %[1" + + "]v\x02模板套餐 %[1]d 不存在\x02获取模板集失败, err: %[1]v\x02统计模板套餐数量失败, err: %[1]v" + + "\x02模板空间下有模板套餐, 需要先删除\x02获取模板数量失败, err: %[1]v\x02模板空间下有模板, 需要先删除\x02验证模板" + + "套餐中的模板失败, err: %[1]v\x02%[1]v 中的模板 ID 不属于模板套餐 ID %[2]d\x02ID 不能为空\x02无" + + "法验证业务ID\x02参数为空\x02服务参数为空\x02未知的配置类型:%[1]s\x02服务类型不能编辑\x02暂不支持表配置类型" + + "\x02不支持的配置类型:%[1]s\x02不支持的服务类型:%[1]s\x02无法验证数据类型\x02参数为空\x02无法验证参数\x02参数" + + "为空\x02验证 Windows 文件路径失败, path: %[1]s, err: %[2]v\x02验证 Unix 文件路径失败, pa" + + "th: %[1]s, err: %[2]v\x02不支持的文件格式:%[1]s\x02不支持的文件模式:%[1]s\x02参数为空\x02内容签" + + "名无效, 应为配置的 sha256 值\x02内容签名应小写\x02无效的原始内容签名, 应为配置的 sha256 值\x02原始内容签名应" + + "小写\x02无效的服务ID\x02无效的配置项ID\x02default_val %[1]s 不是数字类型\x02不支持的变量类型:%[1]" + + "s\x02从 kv.Data 获取“kv_type”作为字符串失败, err: %[1]v\x02值类型断言失败, err: %[1]v\x02" + + "授权失败\x02获取权限失败, err: %[1]v\x02grpc 状态详细信息失败, err: %[1]v\x02%[1]s 与 %[2" + + "]s 路径文件冲突" - // Total table size 16445 bytes (16KiB); checksum: 5567453D + // Total table size 18544 bytes (18KiB); checksum: FFD0F6A6 diff --git a/bcs-services/bcs-bscp/pkg/i18n/translations/locales/en/out.gotext.json b/bcs-services/bcs-bscp/pkg/i18n/translations/locales/en/out.gotext.json index ebde6f0689..38140a0c25 100644 --- a/bcs-services/bcs-bscp/pkg/i18n/translations/locales/en/out.gotext.json +++ b/bcs-services/bcs-bscp/pkg/i18n/translations/locales/en/out.gotext.json @@ -244,6 +244,13 @@ ], "fuzzy": true }, + { + "id": "sensitive information cannot be exported", + "message": "sensitive information cannot be exported", + "translation": "sensitive information cannot be exported", + "translatorComment": "Copied from source.", + "fuzzy": true + }, { "id": "client ids is empty", "message": "client ids is empty", @@ -297,6 +304,239 @@ "translatorComment": "Copied from source.", "fuzzy": true }, + { + "id": "not legal JSON data", + "message": "not legal JSON data", + "translation": "not legal JSON data", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "json format error, err: {Err}", + "message": "json format error, err: {Err}", + "translation": "json format error, err: {Err}", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ], + "fuzzy": true + }, + { + "id": "yaml format error, err: {Err}", + "message": "yaml format error, err: {Err}", + "translation": "yaml format error, err: {Err}", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ], + "fuzzy": true + }, + { + "id": "{Format} type not supported", + "message": "{Format} type not supported", + "translation": "{Format} type not supported", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Format", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "req.Format" + } + ], + "fuzzy": true + }, + { + "id": "config item {Key} kv type error", + "message": "config item {Key} kv type error", + "translation": "config item {Key} kv type error", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ], + "fuzzy": true + }, + { + "id": "format error, please check the key: {Key}", + "message": "format error, please check the key: {Key}", + "translation": "format error, please check the key: {Key}", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ], + "fuzzy": true + }, + { + "id": "config item {Key} format error", + "message": "config item {Key} format error", + "translation": "config item {Key} format error", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ], + "fuzzy": true + }, + { + "id": "config item {Key} json format error", + "message": "config item {Key} json format error", + "translation": "config item {Key} json format error", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ], + "fuzzy": true + }, + { + "id": "config item {Key} yaml format error", + "message": "config item {Key} yaml format error", + "translation": "config item {Key} yaml format error", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ], + "fuzzy": true + }, + { + "id": "config item {Key} secret hidden error", + "message": "config item {Key} secret hidden error", + "translation": "config item {Key} secret hidden error", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ], + "fuzzy": true + }, + { + "id": "the key type for config item {Key} cannot be empty", + "message": "the key type for config item {Key} cannot be empty", + "translation": "the key type for config item {Key} cannot be empty", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ], + "fuzzy": true + }, + { + "id": "config item {Key} secret type error, err: {Err}", + "message": "config item {Key} secret type error, err: {Err}", + "translation": "config item {Key} secret type error, err: {Err}", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + }, + { + "id": "Err", + "string": "%[2]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 2, + "expr": "err" + } + ], + "fuzzy": true + }, + { + "id": "config item {Key} value error", + "message": "config item {Key} value error", + "translation": "config item {Key} value error", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ], + "fuzzy": true + }, + { + "id": "the certificate format is incorrect, only X.509 format is supported", + "message": "the certificate format is incorrect, only X.509 format is supported", + "translation": "the certificate format is incorrect, only X.509 format is supported", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "the access token format is incorrect. Currently only OAtuh 2.0 and jwt formats \n\t\t\tare supported. The length is 32-512 characters, including uppercase and lowercase letters and numbers", + "message": "the access token format is incorrect. Currently only OAtuh 2.0 and jwt formats \n\t\t\tare supported. The length is 32-512 characters, including uppercase and lowercase letters and numbers", + "translation": "the access token format is incorrect. Currently only OAtuh 2.0 and jwt formats \n\t\t\tare supported. The length is 32-512 characters, including uppercase and lowercase letters and numbers", + "translatorComment": "Copied from source.", + "fuzzy": true + }, { "id": "template variable name must start with {TemplateVariablePrefix}", "message": "template variable name must start with {TemplateVariablePrefix}", @@ -1037,6 +1277,95 @@ ], "fuzzy": true }, + { + "id": "sensitive data is not visible, unable to view actual content", + "message": "sensitive data is not visible, unable to view actual content", + "translation": "sensitive data is not visible, unable to view actual content", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "not a KV type service", + "message": "not a KV type service", + "translation": "not a KV type service", + "translatorComment": "Copied from source.", + "fuzzy": true + }, + { + "id": "list kv failed, err: {Err}", + "message": "list kv failed, err: {Err}", + "translation": "list kv failed, err: {Err}", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ], + "fuzzy": true + }, + { + "id": "batch import of KV config failed, err: {Err}", + "message": "batch import of KV config failed, err: {Err}", + "translation": "batch import of KV config failed, err: {Err}", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ], + "fuzzy": true + }, + { + "id": "the type of config item {Key} is incorrect", + "message": "the type of config item {Key} is incorrect", + "translation": "the type of config item {Key} is incorrect", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "v.KvSpec.Key" + } + ], + "fuzzy": true + }, + { + "id": "clearing draft area failed, err: {Err}", + "message": "clearing draft area failed, err: {Err}", + "translation": "clearing draft area failed, err: {Err}", + "translatorComment": "Copied from source.", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ], + "fuzzy": true + }, + { + "id": "save kv failed", + "message": "save kv failed", + "translation": "save kv failed", + "translatorComment": "Copied from source.", + "fuzzy": true + }, { "id": "get excluded kv failed, err: {Err}", "message": "get excluded kv failed, err: {Err}", @@ -1770,6 +2099,13 @@ "translatorComment": "Copied from source.", "fuzzy": true }, + { + "id": "bizID can not be 0", + "message": "bizID can not be 0", + "translation": "bizID can not be 0", + "translatorComment": "Copied from source.", + "fuzzy": true + }, { "id": "the total number of template set {TmplSetID}'s templates exceeded the limit {TmplSetTmplCnt}", "message": "the total number of template set {TmplSetID}'s templates exceeded the limit {TmplSetTmplCnt}", diff --git a/bcs-services/bcs-bscp/pkg/i18n/translations/locales/zh/messages.gotext.json b/bcs-services/bcs-bscp/pkg/i18n/translations/locales/zh/messages.gotext.json index 9c6e9f4a46..4ea452ca0b 100644 --- a/bcs-services/bcs-bscp/pkg/i18n/translations/locales/zh/messages.gotext.json +++ b/bcs-services/bcs-bscp/pkg/i18n/translations/locales/zh/messages.gotext.json @@ -157,7 +157,7 @@ { "id": "get the current number of service config items failed, err: {Err}", "message": "get the current number of service config items failed, err: {Err}", - "translation": "", + "translation": "获取当前服务配置项数量失败, err: {Err}", "placeholders": [ { "id": "Err", @@ -214,6 +214,11 @@ } ] }, + { + "id": "sensitive information cannot be exported", + "message": "sensitive information cannot be exported", + "translation": "敏感信息无法导出" + }, { "id": "client ids is empty", "message": "client ids is empty", @@ -257,6 +262,209 @@ "message": "batch delete failed", "translation": "批量删除失败" }, + { + "id": "not legal JSON data", + "message": "not legal JSON data", + "translation": "JSON数据不合法" + }, + { + "id": "json format error, err: {Err}", + "message": "json format error, err: {Err}", + "translation": "json 格式化错误, err: {Err}", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ] + }, + { + "id": "yaml format error, err: {Err}", + "message": "yaml format error, err: {Err}", + "translation": "yaml 格式化错误, err: {Err}", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ] + }, + { + "id": "{Format} type not supported", + "message": "{Format} type not supported", + "translation": "{Format} 类型不支持", + "placeholders": [ + { + "id": "Format", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "req.Format" + } + ] + }, + { + "id": "config item {Key} kv type error", + "message": "config item {Key} kv type error", + "translation": "配置项 {Key} 类型错误", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "format error, please check the key: {Key}", + "message": "format error, please check the key: {Key}", + "translation": "格式错误, 请检查键:{Key}", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "config item {Key} format error", + "message": "config item {Key} format error", + "translation": "配置项 {Key} 格式错误", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "config item {Key} json format error", + "message": "config item {Key} json format error", + "translation": "配置项 {Key} json格式错误", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "config item {Key} yaml format error", + "message": "config item {Key} yaml format error", + "translation": "配置项 {Key} yaml格式错误", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "config item {Key} secret hidden error", + "message": "config item {Key} secret hidden error", + "translation": "配置项 {Key} 密钥是否显示设置错误", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "the key type for config item {Key} cannot be empty", + "message": "the key type for config item {Key} cannot be empty", + "translation": "配置项 {Key} 的密钥类型不能为空", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "config item {Key} secret type error, err: {Err}", + "message": "config item {Key} secret type error, err: {Err}", + "translation": "配置项 {Key} 密钥类型错误, err: {Err}", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + }, + { + "id": "Err", + "string": "%[2]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 2, + "expr": "err" + } + ] + }, + { + "id": "config item {Key} value error", + "message": "config item {Key} value error", + "translation": "配置项 {Key} 值错误", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "the certificate format is incorrect, only X.509 format is supported", + "message": "the certificate format is incorrect, only X.509 format is supported", + "translation": "证书格式不正确, 仅支持X.509格式" + }, + { + "id": "the access token format is incorrect. Currently only OAtuh 2.0 and jwt formats \n\t\t\tare supported. The length is 32-512 characters, including uppercase and lowercase letters and numbers", + "message": "the access token format is incorrect. Currently only OAtuh 2.0 and jwt formats \n\t\t\tare supported. The length is 32-512 characters, including uppercase and lowercase letters and numbers", + "translation": "token格式错误, 目前仅支持OAuth2.0和jwt格式, 长度为32-512个字符, 包括大小写字母和数字" + }, { "id": "template variable name must start with {TemplateVariablePrefix}", "message": "template variable name must start with {TemplateVariablePrefix}", @@ -423,7 +631,7 @@ { "id": "the config file {Joindir_name} already exists in this space and cannot be created again", "message": "the config file {Joindir_name} already exists in this space and cannot be created again", - "translation": "此空间下配置文件 {Joindir_name} 已存在,无法重复创建", + "translation": "此空间下配置文件 {Joindir_name} 已存在, 无法重复创建", "placeholders": [ { "id": "Joindir_name", @@ -913,6 +1121,81 @@ } ] }, + { + "id": "sensitive data is not visible, unable to view actual content", + "message": "sensitive data is not visible, unable to view actual content", + "translation": "敏感数据不可见,无法查看实际内容" + }, + { + "id": "not a KV type service", + "message": "not a KV type service", + "translation": "不是kv类型的服务" + }, + { + "id": "list kv failed, err: {Err}", + "message": "list kv failed, err: {Err}", + "translation": "获取kv列表失败, err: {Err}", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ] + }, + { + "id": "batch import of KV config failed, err: {Err}", + "message": "batch import of KV config failed, err: {Err}", + "translation": "批量导入KV配置失败, err: {Err}", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ] + }, + { + "id": "the type of config item {Key} is incorrect", + "message": "the type of config item {Key} is incorrect", + "translation": "配置项 {Key} 的类型不正确", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "v.KvSpec.Key" + } + ] + }, + { + "id": "clearing draft area failed, err: {Err}", + "message": "clearing draft area failed, err: {Err}", + "translation": "清除草稿区失败, err: {Err}", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ] + }, + { + "id": "save kv failed", + "message": "save kv failed", + "translation": "kv保持失败" + }, { "id": "get excluded kv failed, err: {Err}", "message": "get excluded kv failed, err: {Err}", @@ -1528,6 +1811,11 @@ "message": "appID can not be 0", "translation": "appID不能为0" }, + { + "id": "bizID can not be 0", + "message": "bizID can not be 0", + "translation": "" + }, { "id": "the total number of template set {TmplSetID}'s templates exceeded the limit {TmplSetTmplCnt}", "message": "the total number of template set {TmplSetID}'s templates exceeded the limit {TmplSetTmplCnt}", diff --git a/bcs-services/bcs-bscp/pkg/i18n/translations/locales/zh/out.gotext.json b/bcs-services/bcs-bscp/pkg/i18n/translations/locales/zh/out.gotext.json index 9c6e9f4a46..4ea452ca0b 100644 --- a/bcs-services/bcs-bscp/pkg/i18n/translations/locales/zh/out.gotext.json +++ b/bcs-services/bcs-bscp/pkg/i18n/translations/locales/zh/out.gotext.json @@ -157,7 +157,7 @@ { "id": "get the current number of service config items failed, err: {Err}", "message": "get the current number of service config items failed, err: {Err}", - "translation": "", + "translation": "获取当前服务配置项数量失败, err: {Err}", "placeholders": [ { "id": "Err", @@ -214,6 +214,11 @@ } ] }, + { + "id": "sensitive information cannot be exported", + "message": "sensitive information cannot be exported", + "translation": "敏感信息无法导出" + }, { "id": "client ids is empty", "message": "client ids is empty", @@ -257,6 +262,209 @@ "message": "batch delete failed", "translation": "批量删除失败" }, + { + "id": "not legal JSON data", + "message": "not legal JSON data", + "translation": "JSON数据不合法" + }, + { + "id": "json format error, err: {Err}", + "message": "json format error, err: {Err}", + "translation": "json 格式化错误, err: {Err}", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ] + }, + { + "id": "yaml format error, err: {Err}", + "message": "yaml format error, err: {Err}", + "translation": "yaml 格式化错误, err: {Err}", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ] + }, + { + "id": "{Format} type not supported", + "message": "{Format} type not supported", + "translation": "{Format} 类型不支持", + "placeholders": [ + { + "id": "Format", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "req.Format" + } + ] + }, + { + "id": "config item {Key} kv type error", + "message": "config item {Key} kv type error", + "translation": "配置项 {Key} 类型错误", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "format error, please check the key: {Key}", + "message": "format error, please check the key: {Key}", + "translation": "格式错误, 请检查键:{Key}", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "config item {Key} format error", + "message": "config item {Key} format error", + "translation": "配置项 {Key} 格式错误", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "config item {Key} json format error", + "message": "config item {Key} json format error", + "translation": "配置项 {Key} json格式错误", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "config item {Key} yaml format error", + "message": "config item {Key} yaml format error", + "translation": "配置项 {Key} yaml格式错误", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "config item {Key} secret hidden error", + "message": "config item {Key} secret hidden error", + "translation": "配置项 {Key} 密钥是否显示设置错误", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "the key type for config item {Key} cannot be empty", + "message": "the key type for config item {Key} cannot be empty", + "translation": "配置项 {Key} 的密钥类型不能为空", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "config item {Key} secret type error, err: {Err}", + "message": "config item {Key} secret type error, err: {Err}", + "translation": "配置项 {Key} 密钥类型错误, err: {Err}", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + }, + { + "id": "Err", + "string": "%[2]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 2, + "expr": "err" + } + ] + }, + { + "id": "config item {Key} value error", + "message": "config item {Key} value error", + "translation": "配置项 {Key} 值错误", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "key" + } + ] + }, + { + "id": "the certificate format is incorrect, only X.509 format is supported", + "message": "the certificate format is incorrect, only X.509 format is supported", + "translation": "证书格式不正确, 仅支持X.509格式" + }, + { + "id": "the access token format is incorrect. Currently only OAtuh 2.0 and jwt formats \n\t\t\tare supported. The length is 32-512 characters, including uppercase and lowercase letters and numbers", + "message": "the access token format is incorrect. Currently only OAtuh 2.0 and jwt formats \n\t\t\tare supported. The length is 32-512 characters, including uppercase and lowercase letters and numbers", + "translation": "token格式错误, 目前仅支持OAuth2.0和jwt格式, 长度为32-512个字符, 包括大小写字母和数字" + }, { "id": "template variable name must start with {TemplateVariablePrefix}", "message": "template variable name must start with {TemplateVariablePrefix}", @@ -423,7 +631,7 @@ { "id": "the config file {Joindir_name} already exists in this space and cannot be created again", "message": "the config file {Joindir_name} already exists in this space and cannot be created again", - "translation": "此空间下配置文件 {Joindir_name} 已存在,无法重复创建", + "translation": "此空间下配置文件 {Joindir_name} 已存在, 无法重复创建", "placeholders": [ { "id": "Joindir_name", @@ -913,6 +1121,81 @@ } ] }, + { + "id": "sensitive data is not visible, unable to view actual content", + "message": "sensitive data is not visible, unable to view actual content", + "translation": "敏感数据不可见,无法查看实际内容" + }, + { + "id": "not a KV type service", + "message": "not a KV type service", + "translation": "不是kv类型的服务" + }, + { + "id": "list kv failed, err: {Err}", + "message": "list kv failed, err: {Err}", + "translation": "获取kv列表失败, err: {Err}", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ] + }, + { + "id": "batch import of KV config failed, err: {Err}", + "message": "batch import of KV config failed, err: {Err}", + "translation": "批量导入KV配置失败, err: {Err}", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ] + }, + { + "id": "the type of config item {Key} is incorrect", + "message": "the type of config item {Key} is incorrect", + "translation": "配置项 {Key} 的类型不正确", + "placeholders": [ + { + "id": "Key", + "string": "%[1]s", + "type": "string", + "underlyingType": "string", + "argNum": 1, + "expr": "v.KvSpec.Key" + } + ] + }, + { + "id": "clearing draft area failed, err: {Err}", + "message": "clearing draft area failed, err: {Err}", + "translation": "清除草稿区失败, err: {Err}", + "placeholders": [ + { + "id": "Err", + "string": "%[1]v", + "type": "error", + "underlyingType": "interface{Error() string}", + "argNum": 1, + "expr": "err" + } + ] + }, + { + "id": "save kv failed", + "message": "save kv failed", + "translation": "kv保持失败" + }, { "id": "get excluded kv failed, err: {Err}", "message": "get excluded kv failed, err: {Err}", @@ -1528,6 +1811,11 @@ "message": "appID can not be 0", "translation": "appID不能为0" }, + { + "id": "bizID can not be 0", + "message": "bizID can not be 0", + "translation": "" + }, { "id": "the total number of template set {TmplSetID}'s templates exceeded the limit {TmplSetTmplCnt}", "message": "the total number of template set {TmplSetID}'s templates exceeded the limit {TmplSetTmplCnt}", diff --git a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.pb.go b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.pb.go index 7a7657b4c2..dad4fac75f 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.pb.go @@ -16533,12 +16533,14 @@ type CreateKvReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` - AppId uint32 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"` - KvType string `protobuf:"bytes,4,opt,name=kv_type,json=kvType,proto3" json:"kv_type,omitempty"` - Value string `protobuf:"bytes,5,opt,name=value,proto3" json:"value,omitempty"` - Memo string `protobuf:"bytes,6,opt,name=memo,proto3" json:"memo,omitempty"` + BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + AppId uint32 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + Key string `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"` + KvType string `protobuf:"bytes,4,opt,name=kv_type,json=kvType,proto3" json:"kv_type,omitempty"` + Value string `protobuf:"bytes,5,opt,name=value,proto3" json:"value,omitempty"` + Memo string `protobuf:"bytes,6,opt,name=memo,proto3" json:"memo,omitempty"` + SecretType string `protobuf:"bytes,7,opt,name=secret_type,json=secretType,proto3" json:"secret_type,omitempty"` + SecretHidden bool `protobuf:"varint,8,opt,name=secret_hidden,json=secretHidden,proto3" json:"secret_hidden,omitempty"` } func (x *CreateKvReq) Reset() { @@ -16615,6 +16617,20 @@ func (x *CreateKvReq) GetMemo() string { return "" } +func (x *CreateKvReq) GetSecretType() string { + if x != nil { + return x.SecretType + } + return "" +} + +func (x *CreateKvReq) GetSecretHidden() bool { + if x != nil { + return x.SecretHidden + } + return false +} + type CreateKvResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -16667,11 +16683,13 @@ type UpdateKvReq struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` - AppId uint32 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` - Key string `protobuf:"bytes,4,opt,name=key,proto3" json:"key,omitempty"` - Memo string `protobuf:"bytes,5,opt,name=memo,proto3" json:"memo,omitempty"` - Value string `protobuf:"bytes,6,opt,name=value,proto3" json:"value,omitempty"` + BizId uint32 `protobuf:"varint,1,opt,name=biz_id,json=bizId,proto3" json:"biz_id,omitempty"` + AppId uint32 `protobuf:"varint,2,opt,name=app_id,json=appId,proto3" json:"app_id,omitempty"` + Key string `protobuf:"bytes,4,opt,name=key,proto3" json:"key,omitempty"` + Memo string `protobuf:"bytes,5,opt,name=memo,proto3" json:"memo,omitempty"` + Value string `protobuf:"bytes,6,opt,name=value,proto3" json:"value,omitempty"` + SecretType string `protobuf:"bytes,7,opt,name=secret_type,json=secretType,proto3" json:"secret_type,omitempty"` + SecretHidden bool `protobuf:"varint,8,opt,name=secret_hidden,json=secretHidden,proto3" json:"secret_hidden,omitempty"` } func (x *UpdateKvReq) Reset() { @@ -16741,6 +16759,20 @@ func (x *UpdateKvReq) GetValue() string { return "" } +func (x *UpdateKvReq) GetSecretType() string { + if x != nil { + return x.SecretType + } + return "" +} + +func (x *UpdateKvReq) GetSecretHidden() bool { + if x != nil { + return x.SecretHidden + } + return false +} + type UpdateKvResp struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -21089,10 +21121,12 @@ type BatchUpsertKvsReq_Kv struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - KvType string `protobuf:"bytes,2,opt,name=kv_type,json=kvType,proto3" json:"kv_type,omitempty"` - Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` - Memo string `protobuf:"bytes,4,opt,name=memo,proto3" json:"memo,omitempty"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + KvType string `protobuf:"bytes,2,opt,name=kv_type,json=kvType,proto3" json:"kv_type,omitempty"` + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + Memo string `protobuf:"bytes,4,opt,name=memo,proto3" json:"memo,omitempty"` + SecretType string `protobuf:"bytes,5,opt,name=secret_type,json=secretType,proto3" json:"secret_type,omitempty"` + SecretHidden bool `protobuf:"varint,6,opt,name=secret_hidden,json=secretHidden,proto3" json:"secret_hidden,omitempty"` } func (x *BatchUpsertKvsReq_Kv) Reset() { @@ -21155,6 +21189,20 @@ func (x *BatchUpsertKvsReq_Kv) GetMemo() string { return "" } +func (x *BatchUpsertKvsReq_Kv) GetSecretType() string { + if x != nil { + return x.SecretType + } + return "" +} + +func (x *BatchUpsertKvsReq_Kv) GetSecretHidden() bool { + if x != nil { + return x.SecretHidden + } + return false +} + type ListClientsReq_Order struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -23970,7 +24018,7 @@ var file_config_service_proto_rawDesc = []byte{ 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x68, 0x61, 0x76, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x68, 0x61, 0x76, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, + 0x69, 0x61, 0x6c, 0x73, 0x22, 0xd6, 0x01, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, @@ -23979,2086 +24027,2100 @@ var file_config_service_proto_rawDesc = []byte{ 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x1e, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x77, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, - 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, - 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x0e, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x86, 0x03, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x12, + 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x1e, 0x0a, + 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xbd, 0x01, + 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, + 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, + 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x0e, 0x0a, + 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x86, 0x03, + 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x69, 0x74, + 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, + 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, + 0x6f, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6f, 0x70, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x49, 0x64, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x70, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x70, + 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, + 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, + 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x4b, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, + 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x0e, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, + 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x76, 0x0a, 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x2f, 0x0a, 0x13, + 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, + 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8d, 0x01, + 0x0a, 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x2f, 0x0a, 0x13, + 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, + 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x57, 0x0a, + 0x0f, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x5f, 0x69, + 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x66, 0x75, 0x6c, 0x49, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x49, 0x64, 0x73, 0x22, 0xb2, 0x02, 0x0a, 0x11, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x03, 0x6b, 0x76, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, + 0x2e, 0x4b, 0x76, 0x52, 0x03, 0x6b, 0x76, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x70, 0x6c, + 0x61, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, + 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x1a, 0x9f, 0x01, 0x0a, 0x02, 0x4b, 0x76, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x48, 0x69, 0x64, 0x64, 0x65, 0x6e, 0x22, 0x26, 0x0a, 0x12, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, + 0x69, 0x64, 0x73, 0x22, 0x4f, 0x0a, 0x0d, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, + 0x76, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, + 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x22, 0x10, 0x0a, 0x0e, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4b, 0x0a, 0x09, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, + 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, + 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x22, 0x0c, 0x0a, 0x0a, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x68, 0x0a, 0x0c, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, + 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x0f, 0x0a, 0x0d, 0x49, + 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0xc5, 0x02, 0x0a, + 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, - 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1f, 0x0a, 0x0b, - 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x0a, - 0x0d, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x6f, - 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x6f, 0x70, 0x5f, - 0x69, 0x64, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6f, 0x70, 0x49, 0x64, - 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x70, 0x0a, 0x0b, 0x4c, 0x69, 0x73, - 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, + 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x30, 0x0a, 0x05, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, + 0x13, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, + 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, + 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x1a, 0x2d, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, + 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, + 0x73, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x61, 0x73, 0x63, 0x22, 0xe3, 0x02, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x08, 0x2e, 0x70, 0x62, 0x6b, 0x76, 0x2e, 0x4b, 0x76, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x65, 0x78, 0x63, - 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x4b, 0x0a, 0x0b, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, - 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0x0e, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x76, 0x0a, 0x1a, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, - 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x8d, 0x01, 0x0a, 0x1a, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, - 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, - 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x22, 0x57, 0x0a, 0x0f, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, - 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0d, 0x73, 0x75, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x49, 0x64, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x61, - 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, - 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x49, 0x64, 0x73, 0x22, 0xeb, 0x01, 0x0a, 0x11, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x2c, 0x0a, - 0x03, 0x6b, 0x76, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, - 0x52, 0x65, 0x71, 0x2e, 0x4b, 0x76, 0x52, 0x03, 0x6b, 0x76, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, - 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x41, 0x6c, 0x6c, 0x1a, 0x59, 0x0a, 0x02, - 0x4b, 0x76, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x26, 0x0a, 0x12, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x10, 0x0a, - 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, - 0x4f, 0x0a, 0x0d, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, - 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x22, 0x10, 0x0a, 0x0e, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x4b, 0x0a, 0x09, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x12, - 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, - 0x0c, 0x0a, 0x0a, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x68, 0x0a, - 0x0c, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x65, + 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0xda, 0x01, + 0x0a, 0x04, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x28, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x74, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, + 0x65, 0x53, 0x74, 0x72, 0x12, 0x29, 0x0a, 0x11, 0x63, 0x70, 0x75, 0x5f, 0x6d, 0x61, 0x78, 0x5f, + 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x63, 0x70, 0x75, 0x4d, 0x61, 0x78, 0x55, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x12, + 0x28, 0x0a, 0x10, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, + 0x73, 0x74, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x12, 0x2f, 0x0a, 0x14, 0x6d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x74, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, + 0x61, 0x78, 0x55, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x22, 0xe1, 0x02, 0x0a, 0x13, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, + 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, + 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x35, 0x0a, 0x05, 0x6f, + 0x72, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x09, 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, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x1a, + 0x2d, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x10, 0x0a, 0x03, + 0x61, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x73, 0x63, 0x22, 0x59, + 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x07, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x70, 0x62, 0x63, 0x65, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xa1, 0x01, 0x0a, 0x0f, 0x52, 0x65, + 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x0f, 0x0a, 0x0d, 0x49, 0x6d, 0x70, 0x6f, 0x72, - 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0xc5, 0x02, 0x0a, 0x0e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, - 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x30, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x2e, 0x4f, 0x72, 0x64, - 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x61, 0x73, - 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, - 0x74, 0x62, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x73, 0x65, 0x61, - 0x72, 0x63, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x1a, 0x2d, 0x0a, 0x05, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, - 0x73, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x10, - 0x0a, 0x03, 0x61, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x73, 0x63, - 0x22, 0xe3, 0x02, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x12, 0x27, 0x0a, 0x0f, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, - 0x73, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0xda, 0x01, 0x0a, 0x04, 0x49, 0x74, - 0x65, 0x6d, 0x12, 0x28, 0x0a, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0d, - 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, - 0x12, 0x29, 0x0a, 0x11, 0x63, 0x70, 0x75, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x75, 0x73, 0x61, 0x67, - 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x70, 0x75, - 0x4d, 0x61, 0x78, 0x55, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x6d, - 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x73, 0x61, - 0x67, 0x65, 0x53, 0x74, 0x72, 0x12, 0x2f, 0x0a, 0x14, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, - 0x6d, 0x61, 0x78, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x11, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4d, 0x61, 0x78, 0x55, 0x73, - 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x22, 0xe1, 0x02, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, - 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x35, 0x0a, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x05, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x21, - 0x0a, 0x0c, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, - 0x09, 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, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x1a, 0x2d, 0x0a, 0x05, 0x4f, - 0x72, 0x64, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x63, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x73, 0x63, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x73, 0x63, 0x22, 0x59, 0x0a, 0x14, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, - 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x65, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xa1, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, + 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, + 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x2f, 0x0a, 0x13, + 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, + 0x73, 0x69, 0x6f, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x12, 0x0a, + 0x10, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x22, 0xa2, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x09, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x12, 0x2f, 0x0a, 0x13, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x6f, 0x6e, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x12, 0x0a, 0x10, 0x52, 0x65, 0x74, - 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa2, 0x01, - 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, - 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, - 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, - 0x6c, 0x6c, 0x22, 0x59, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x2b, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x71, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xca, 0x01, - 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, - 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, - 0x70, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x10, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, - 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x27, 0x0a, 0x15, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x02, 0x69, 0x64, 0x22, 0xb9, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, - 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, - 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x10, 0x73, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0f, - 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x54, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, + 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, + 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, 0x59, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, + 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x71, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x22, 0xca, 0x01, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, + 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, + 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x61, + 0x72, 0x63, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x10, 0x73, 0x65, + 0x61, 0x72, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0f, 0x73, + 0x65, 0x61, 0x72, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x27, + 0x0a, 0x15, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x22, 0xb9, 0x01, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x17, - 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5b, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, - 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, - 0x70, 0x70, 0x49, 0x64, 0x22, 0x30, 0x0a, 0x18, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x22, 0x7f, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, - 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x64, 0x41, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, - 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x1d, 0x43, 0x6f, 0x6d, 0x70, - 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, - 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6f, 0x74, - 0x68, 0x65, 0x72, 0x41, 0x70, 0x70, 0x49, 0x64, 0x22, 0xa3, 0x09, 0x0a, 0x1e, 0x43, 0x6f, 0x6d, - 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, - 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x68, 0x0a, 0x14, 0x6e, - 0x6f, 0x6e, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, - 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, - 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x12, 0x6e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x33, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x73, 0x1a, 0x85, 0x02, 0x0a, 0x11, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3e, 0x0a, 0x10, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x69, 0x2e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0e, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x12, 0x38, 0x0a, 0x09, 0x76, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x69, 0x73, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, - 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, - 0x64, 0x35, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x64, 0x35, 0x1a, 0xae, 0x05, - 0x0a, 0x0e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x79, 0x0a, 0x12, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, - 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x73, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0xc2, 0x01, 0x0a, 0x16, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x4c, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, - 0x70, 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x22, 0x86, - 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, - 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, - 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6f, 0x74, 0x68, - 0x65, 0x72, 0x41, 0x70, 0x70, 0x49, 0x64, 0x22, 0xe8, 0x01, 0x0a, 0x16, 0x43, 0x6f, 0x6d, 0x70, - 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x35, 0x0a, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, - 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, - 0x4b, 0x76, 0x52, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x09, 0x6e, 0x6f, 0x6e, - 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, - 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4b, 0x76, 0x52, 0x08, 0x6e, - 0x6f, 0x6e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x1a, 0x59, 0x0a, 0x02, 0x4b, 0x76, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, - 0x6d, 0x6f, 0x22, 0x53, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, - 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, - 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x1a, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x17, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0xde, 0xd3, 0x01, 0x0a, 0x06, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6e, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, - 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x38, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1f, + 0x0a, 0x0b, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x42, 0x0a, 0x10, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x52, 0x0f, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x17, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x54, 0x0a, 0x14, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, + 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5b, 0x0a, 0x17, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, + 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, + 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x30, 0x0a, 0x18, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x22, 0x7f, 0x0a, 0x1f, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x64, + 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x13, 0x6c, + 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x48, 0x65, + 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x1d, + 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x09, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x41, 0x70, 0x70, 0x49, 0x64, 0x22, 0xa3, 0x09, 0x0a, + 0x1e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x68, 0x0a, 0x14, 0x6e, 0x6f, 0x6e, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x2e, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x12, 0x6e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x5e, 0x0a, 0x10, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, + 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x1a, 0x85, 0x02, 0x0a, 0x11, 0x4e, 0x6f, + 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x3e, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x69, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x52, + 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x12, + 0x38, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, + 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x45, + 0x78, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x79, 0x74, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x79, 0x74, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x6d, 0x64, 0x35, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x64, + 0x35, 0x1a, 0xae, 0x05, 0x0a, 0x0e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, + 0x12, 0x2e, 0x0a, 0x13, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x26, 0x0a, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, + 0x79, 0x0a, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x11, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x15, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x73, 0x5f, 0x65, 0x6d, + 0x70, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x49, 0x73, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0xc2, 0x01, + 0x0a, 0x16, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, + 0x73, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x69, 0x73, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x62, + 0x74, 0x76, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x22, 0x86, 0x01, 0x0a, 0x15, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, + 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, 0x06, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, + 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6f, 0x74, 0x68, + 0x65, 0x72, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x41, 0x70, 0x70, 0x49, 0x64, 0x22, 0xe8, 0x01, 0x0a, 0x16, + 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x35, 0x0a, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, + 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x2e, 0x4b, 0x76, 0x52, 0x05, 0x65, 0x78, 0x69, 0x73, 0x74, 0x12, 0x3c, 0x0a, + 0x09, 0x6e, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, + 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x2e, 0x4b, + 0x76, 0x52, 0x08, 0x6e, 0x6f, 0x6e, 0x45, 0x78, 0x69, 0x73, 0x74, 0x1a, 0x59, 0x0a, 0x02, 0x4b, + 0x76, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x53, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x15, 0x0a, + 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, + 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x24, + 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, + 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, + 0x74, 0x65, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x3b, 0x0a, 0x1a, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x32, 0xde, 0xd3, + 0x01, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x6e, 0x0a, 0x09, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x71, 0x0a, 0x09, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, + 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x3a, 0x01, + 0x2a, 0x1a, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, + 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x77, 0x0a, 0x09, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x2a, 0x39, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x58, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x12, + 0x0f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, + 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x22, 0x31, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2b, 0x12, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, + 0x71, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x4e, + 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, + 0x70, 0x70, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x12, 0x36, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x7d, 0x12, 0x63, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, + 0x70, 0x73, 0x52, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x28, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x12, 0x7c, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x70, 0x70, 0x73, 0x42, 0x79, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x12, 0x1c, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x42, 0x79, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x71, 0x0a, 0x09, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, - 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, - 0x70, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x3a, 0x01, 0x2a, 0x1a, 0x39, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x77, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x70, 0x70, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x2a, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x2f, 0x61, 0x70, - 0x70, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0x58, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x12, 0x0f, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, - 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, - 0x12, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, - 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x71, 0x0a, 0x0c, 0x47, - 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x15, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x71, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x61, 0x70, 0x70, 0x2e, 0x41, 0x70, 0x70, 0x22, 0x3e, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x12, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x6e, - 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x63, - 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x74, 0x12, 0x15, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x22, 0x12, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, - 0x70, 0x70, 0x73, 0x12, 0x7c, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x42, - 0x79, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x42, 0x79, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x33, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x61, 0x70, - 0x70, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, - 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x58, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x3a, 0x01, 0x2a, 0x22, 0x4d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, - 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, - 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x3a, 0x01, 0x2a, - 0x1a, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, - 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0xb7, 0x01, 0x0a, 0x10, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x66, 0x3a, 0x01, 0x2a, 0x1a, - 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, - 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, - 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x12, 0xb4, 0x01, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, - 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x69, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x63, 0x2a, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, - 0x6d, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa1, 0x01, 0x0a, 0x16, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, - 0x74, 0x65, 0x6d, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4e, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x3a, 0x01, 0x2a, 0x22, 0x43, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xbc, 0x01, - 0x0a, 0x12, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x3a, 0x01, 0x2a, 0x22, 0x4d, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x16, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x3b, 0x3a, 0x01, 0x2a, 0x1a, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0xb7, 0x01, 0x0a, + 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x66, + 0x3a, 0x01, 0x2a, 0x1a, 0x61, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, + 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, + 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb4, 0x01, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x19, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, - 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x22, 0x63, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x73, 0x70, 0x22, 0x69, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x63, 0x2a, 0x61, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa1, 0x01, + 0x0a, 0x16, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x3a, 0x01, 0x2a, 0x22, 0x43, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, + 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x12, 0xbc, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x22, 0x63, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x6e, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, - 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xac, 0x01, 0x0a, - 0x0e, 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x61, 0x22, 0x5f, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x6e, 0x64, 0x6f, 0x2f, + 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, + 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0xac, 0x01, 0x0a, 0x0e, 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, + 0x74, 0x65, 0x6d, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, + 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x61, 0x22, 0x5f, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, + 0x6e, 0x64, 0x6f, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, - 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x91, 0x01, 0x0a, 0x0d, - 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x16, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4f, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x12, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x7b, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0xbf, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x5f, 0x12, 0x5d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, - 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0x89, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x3b, 0x3a, 0x01, 0x2a, 0x22, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0xb4, 0x01, - 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x54, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x12, 0x4c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x2f, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, + 0x91, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, + 0x6d, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x12, 0x47, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, + 0x6d, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x5f, + 0x69, 0x64, 0x7d, 0x12, 0xbf, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x1e, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5f, 0x12, 0x5d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x12, 0x8f, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, - 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x35, 0x3a, 0x01, 0x2a, 0x22, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, - 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa1, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, - 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x22, 0x3c, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x93, 0x01, 0x0a, 0x0d, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x12, 0x16, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, - 0x76, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x51, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x7b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, + 0x6d, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x89, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x3a, 0x01, 0x2a, 0x22, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, + 0x73, 0x12, 0xb4, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x20, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x12, 0x4c, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x12, 0x8f, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1d, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3b, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x3a, 0x01, 0x2a, 0x22, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, + 0x69, 0x74, 0x65, 0x6d, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa1, 0x01, 0x0a, 0x15, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, + 0x75, 0x70, 0x6c, 0x65, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, + 0x22, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, + 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x93, + 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, + 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, + 0x6b, 0x65, 0x79, 0x7d, 0x12, 0x93, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4b, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, - 0x12, 0x93, 0x01, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x64, 0x4b, 0x76, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x19, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x64, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x45, 0x12, 0x43, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, - 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x19, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, - 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x3a, 0x01, 0x2a, 0x1a, 0x36, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, - 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, - 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, - 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x92, 0x01, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, - 0x3a, 0x01, 0x2a, 0x22, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x79, 0x0a, 0x0c, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x34, 0x12, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, - 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x97, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x79, 0x4e, 0x61, - 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x4e, 0x12, 0x4c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x10, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x12, + 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x6f, + 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x3a, 0x01, + 0x2a, 0x1a, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, - 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x6e, 0x61, 0x6d, 0x65, - 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, - 0x7e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x13, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, - 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, - 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, - 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, - 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0x9c, 0x01, 0x0a, 0x10, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x70, 0x72, - 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x51, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x4b, 0x1a, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x12, 0xa7, - 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, - 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x70, 0x72, - 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x3a, 0x01, 0x2a, 0x1a, 0x4b, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, - 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x6e, 0x64, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x0d, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, - 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x41, 0x2a, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, - 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, - 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x65, 0x0a, - 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x13, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, - 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x3a, 0x01, - 0x2a, 0x22, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, - 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x6c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, - 0x6f, 0x6b, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x33, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x2a, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x5f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x92, 0x01, 0x0a, 0x0d, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x16, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x4a, 0x3a, 0x01, 0x2a, 0x22, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x2f, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2f, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x79, + 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x15, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3a, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, - 0x64, 0x7d, 0x12, 0x7d, 0x0a, 0x0f, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, - 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x3a, 0x01, - 0x2a, 0x22, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, - 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x6f, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, - 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x1a, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x12, 0x97, 0x01, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x54, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x12, 0x4c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, - 0x64, 0x7d, 0x12, 0x5f, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x12, - 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, - 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, - 0x12, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, - 0x6f, 0x6b, 0x73, 0x12, 0x6c, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, - 0x61, 0x67, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, - 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x74, 0x61, 0x67, - 0x73, 0x12, 0x63, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x10, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x11, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, + 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x7d, 0x12, 0x7e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, + 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x10, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x70, 0x72, 0x65, + 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x1a, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, + 0x74, 0x65, 0x12, 0xa7, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, + 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x3a, 0x01, 0x2a, 0x1a, + 0x4b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, + 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x75, 0x6e, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x12, 0x89, 0x01, 0x0a, + 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x16, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x2a, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x10, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x4b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x2f, 0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x12, 0x65, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, + 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x26, 0x3a, 0x01, 0x2a, 0x22, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x6c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x2a, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, - 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x7d, 0x0a, 0x0f, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x33, 0x3a, 0x01, 0x2a, 0x22, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x6f, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, + 0x6f, 0x6f, 0x6b, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x36, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x1a, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, + 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x5f, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, + 0x6f, 0x6b, 0x73, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x29, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x23, 0x12, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x6c, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x16, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x54, 0x61, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, 0x25, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, + 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, + 0x5f, 0x74, 0x61, 0x67, 0x73, 0x12, 0x63, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, + 0x12, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, + 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x96, 0x01, 0x0a, 0x12, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x45, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x3f, 0x3a, 0x01, 0x2a, 0x22, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x90, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, + 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xa1, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, - 0x3a, 0x01, 0x2a, 0x22, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x90, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0xa1, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, - 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xac, 0x01, 0x0a, 0x13, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x58, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x52, 0x1a, 0x50, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, + 0x2a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, + 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, + 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xac, 0x01, 0x0a, 0x13, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x68, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x1a, 0x50, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x91, 0x01, 0x0a, 0x0f, 0x47, 0x65, + 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x4a, 0x12, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x91, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x47, 0x65, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x68, 0x72, 0x2e, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x12, - 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, - 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, - 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x12, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x53, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x4d, 0x3a, 0x01, 0x2a, 0x1a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, - 0x12, 0x8f, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x12, 0x36, 0x2f, 0x61, 0x70, 0x69, + 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa4, 0x01, + 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x3a, 0x01, 0x2a, 0x1a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, - 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x73, 0x12, 0xc4, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, - 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5b, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x55, 0x12, 0x53, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x92, 0x01, 0x0a, 0x0e, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x12, 0x17, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, - 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x12, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x12, 0x8a, - 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, 0x01, 0x2a, 0x22, 0x2b, + 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x8f, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, + 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x12, 0x36, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, - 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x9b, 0x01, 0x0a, 0x13, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, + 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0xc4, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x48, + 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x5b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x55, 0x12, 0x53, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x73, 0x2f, 0x7b, 0x68, 0x6f, 0x6f, + 0x6b, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x92, 0x01, + 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, + 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x48, 0x6f, 0x6f, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x12, 0x45, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, + 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x68, 0x6f, 0x6f, + 0x6b, 0x73, 0x12, 0x8a, 0x01, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x3a, + 0x01, 0x2a, 0x22, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, + 0x9b, 0x01, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x2a, 0x3f, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, + 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x2a, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x73, 0x70, 0x22, 0x4a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x3a, 0x01, 0x2a, 0x1a, 0x3f, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x84, + 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x33, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, 0x13, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4a, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x3a, 0x01, 0x2a, 0x1a, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x84, 0x01, 0x0a, 0x12, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x33, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x79, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x42, + 0x69, 0x7a, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, + 0x10, 0x2e, 0x70, 0x62, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, + 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x42, + 0x69, 0x7a, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x69, 0x7a, 0x73, + 0x12, 0x8e, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x31, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, + 0x74, 0x12, 0x96, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, + 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, + 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x01, + 0x2a, 0x22, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x6c, + 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x3a, 0x01, 0x2a, 0x22, 0x49, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5f, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x59, 0x2a, 0x57, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x12, 0x79, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x69, 0x7a, 0x73, 0x4f, - 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x10, 0x2e, 0x70, 0x62, - 0x62, 0x61, 0x73, 0x65, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x42, 0x69, 0x7a, 0x73, 0x4f, - 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x69, 0x7a, 0x73, 0x12, 0x8e, 0x01, 0x0a, - 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x6d, 0x70, 0x6c, - 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x6d, 0x70, - 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2b, 0x3a, 0x01, 0x2a, 0x22, 0x26, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x96, 0x01, - 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x6d, 0x70, 0x6c, 0x53, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x01, 0x2a, 0x22, 0x37, 0x2f, + 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, + 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa5, 0x01, + 0x0a, 0x13, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x51, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x2a, 0x49, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0xa7, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x62, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x5c, 0x3a, 0x01, 0x2a, 0x1a, 0x57, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, + 0x9b, 0x01, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x59, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x53, 0x3a, 0x01, 0x2a, 0x22, 0x4e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, - 0x62, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x12, 0x99, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x54, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x4e, 0x3a, 0x01, 0x2a, 0x22, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x59, - 0x2a, 0x57, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0xc2, 0x01, + 0x0a, 0x14, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x3a, 0x01, 0x2a, + 0x22, 0x60, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa5, 0x01, 0x0a, 0x13, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, - 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x51, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x2a, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, + 0x68, 0x5f, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x12, 0x8e, 0x02, 0x0a, 0x1e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, + 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x91, 0x01, 0x3a, 0x01, 0x2a, 0x22, 0x8b, 0x01, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x73, 0x12, 0xa7, 0x01, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x62, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5c, 0x3a, - 0x01, 0x2a, 0x1a, 0x57, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9b, 0x01, 0x0a, 0x0d, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x16, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x59, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x53, 0x3a, 0x01, 0x2a, 0x22, 0x4e, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x12, 0xc2, 0x01, 0x0a, 0x14, 0x42, 0x61, - 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, - 0x70, 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x6b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x65, 0x3a, 0x01, 0x2a, 0x22, 0x60, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x75, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x8e, - 0x02, 0x0a, 0x1e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x98, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x91, 0x01, 0x3a, 0x01, - 0x2a, 0x22, 0x8b, 0x01, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x5f, 0x73, 0x65, 0x74, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0xdb, 0x01, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, + 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, + 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x41, + 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x89, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x82, 0x01, 0x3a, + 0x01, 0x2a, 0x22, 0x7d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x74, - 0x63, 0x68, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0xdb, 0x01, 0x0a, 0x12, 0x41, 0x64, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, - 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x41, 0x64, - 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x54, 0x6d, - 0x70, 0x6c, 0x73, 0x54, 0x6f, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x89, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x82, 0x01, 0x3a, 0x01, 0x2a, 0x22, 0x7d, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, - 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x2f, 0x7b, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x64, 0x64, 0x5f, 0x74, 0x6f, 0x5f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0xf0, 0x01, - 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x46, 0x72, 0x6f, - 0x6d, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x46, 0x72, 0x6f, 0x6d, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x46, 0x72, - 0x6f, 0x6d, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x8f, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x88, 0x01, 0x3a, 0x01, 0x2a, 0x22, 0x82, 0x01, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x66, 0x72, - 0x6f, 0x6d, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, - 0x12, 0x8d, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, - 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, 0x73, - 0x12, 0xba, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, - 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, - 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x22, 0x60, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x5a, 0x12, 0x58, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x6c, - 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0xae, 0x01, - 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, - 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x3a, 0x01, 0x2a, 0x22, 0x4f, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, - 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x12, 0xc5, - 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, - 0x70, 0x6c, 0x53, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6e, 0x3a, 0x01, 0x2a, 0x22, 0x69, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0xc5, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, - 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x26, + 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x61, 0x64, 0x64, + 0x5f, 0x74, 0x6f, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, + 0x73, 0x12, 0xf0, 0x01, 0x0a, 0x17, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, + 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x20, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, 0x6c, 0x73, + 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x6d, 0x70, + 0x6c, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x8f, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x88, 0x01, 0x3a, 0x01, 0x2a, 0x22, + 0x82, 0x01, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x2f, 0x7b, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x65, 0x74, 0x73, 0x12, 0x8d, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x42, 0x79, 0x49, + 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, + 0x2a, 0x22, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, + 0x5f, 0x69, 0x64, 0x73, 0x12, 0xba, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x12, 0x4e, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, - 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd2, - 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x75, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x6f, 0x3a, 0x01, 0x2a, 0x22, 0x6a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x1a, 0x1f, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x4e, 0x6f, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x60, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5a, 0x12, 0x58, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0xd2, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, - 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x75, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6f, 0x3a, 0x01, 0x2a, 0x1a, 0x6a, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xcc, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6c, 0x12, 0x6a, 0x2f, 0x61, 0x70, + 0x65, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x75, 0x6e, + 0x64, 0x12, 0xae, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, + 0x75, 0x70, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x79, 0x54, 0x75, 0x70, + 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x3a, 0x01, + 0x2a, 0x22, 0x4f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x74, 0x75, 0x70, + 0x6c, 0x65, 0x12, 0xc5, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, + 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, + 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x73, 0x4f, 0x66, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x74, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6e, 0x3a, 0x01, 0x2a, 0x22, + 0x69, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0xc5, 0x01, 0x0a, 0x1c, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, + 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, + 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x50, 0x12, 0x4e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0xd2, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x20, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x75, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6f, 0x3a, 0x01, 0x2a, 0x22, 0x6a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xa2, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x48, 0x12, 0x46, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd2, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x75, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6f, 0x3a, 0x01, 0x2a, + 0x1a, 0x6a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xae, 0x01, 0x0a, - 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, - 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x3a, 0x01, - 0x2a, 0x22, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x12, 0xc9, 0x01, - 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, - 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, - 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, - 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x3a, 0x01, 0x2a, 0x22, 0x49, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, - 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, - 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x62, 0x79, 0x5f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x12, 0xa6, 0x01, 0x0a, 0x11, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x12, - 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x58, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, - 0x3a, 0x01, 0x2a, 0x22, 0x4d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, - 0x74, 0x73, 0x12, 0xb5, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x61, 0x2a, 0x5f, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb8, 0x01, 0x0a, 0x11, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, - 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6a, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x64, 0x3a, 0x01, 0x2a, 0x1a, 0x5f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa0, 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x12, 0x4d, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0x93, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, - 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xcc, 0x01, 0x0a, + 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x72, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6c, 0x12, + 0x6a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xa2, 0x01, 0x0a, 0x13, + 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x12, 0x46, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, + 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0xae, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, + 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x49, 0x44, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x45, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x3f, 0x3a, 0x01, 0x2a, 0x22, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0x9a, - 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, - 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, - 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, - 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x3a, 0x3a, 0x01, 0x2a, 0x22, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, - 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x12, 0x8f, 0x01, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, - 0x7a, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, - 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, - 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x3b, 0x12, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, + 0x73, 0x12, 0xc9, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, + 0x6c, 0x49, 0x44, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x42, 0x79, 0x54, 0x6d, 0x70, 0x6c, + 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x54, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4e, 0x3a, + 0x01, 0x2a, 0x22, 0x49, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x6c, 0x69, - 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x6f, 0x66, 0x5f, 0x62, 0x69, 0x7a, 0x12, 0xa9, 0x01, - 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x62, 0x79, + 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x12, 0xa6, 0x01, + 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, + 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x58, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x52, 0x3a, 0x01, 0x2a, 0x22, 0x4d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0xb5, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x67, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x61, 0x2a, 0x5f, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb8, + 0x01, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x53, 0x65, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6a, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x64, 0x3a, 0x01, 0x2a, 0x1a, 0x5f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa0, 0x01, 0x0a, 0x10, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x12, 0x19, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x12, 0x4d, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0x93, 0x01, 0x0a, + 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, + 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, + 0x74, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x12, 0x1e, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x53, 0x65, 0x74, 0x73, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x40, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x3a, 0x01, 0x2a, 0x22, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x65, 0x74, 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x62, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x12, + 0x8f, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, + 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, + 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x53, 0x65, 0x74, 0x73, 0x4f, 0x66, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, 0x70, 0x22, 0x41, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3b, 0x12, 0x39, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, + 0x73, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x6f, 0x66, 0x5f, 0x62, 0x69, + 0x7a, 0x12, 0xa9, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, + 0x71, 0x1a, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, + 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x3a, 0x01, 0x2a, + 0x22, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, + 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xb3, 0x01, + 0x0a, 0x18, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x3a, 0x01, 0x2a, 0x22, 0x3b, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xb3, 0x01, 0x0a, 0x18, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, + 0x69, 0x64, 0x7d, 0x12, 0xb6, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, + 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x12, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, + 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x3a, + 0x01, 0x2a, 0x1a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, + 0x7b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, + 0x17, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x43, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x73, 0x2f, 0x7b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0xb6, 0x01, 0x0a, 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x1a, - 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x3a, 0x01, 0x2a, 0x1a, 0x48, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, - 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, - 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x62, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x3d, 0x12, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x12, 0xaa, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x3e, 0x12, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0xaa, - 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, - 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, - 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, - 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd8, 0x01, 0x0a, 0x21, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0xd8, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, + 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x2b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, - 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2b, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5a, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x12, 0x52, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xe9, 0x01, 0x0a, 0x1f, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x54, 0x12, 0x52, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xe9, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, - 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, - 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6b, 0x12, 0x69, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, - 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, - 0x64, 0x7d, 0x12, 0xd2, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, - 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x66, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x60, 0x3a, 0x01, 0x2a, 0x1a, 0x5b, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, - 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, - 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xbb, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, - 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x58, 0x2a, 0x56, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, - 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, - 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x62, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0xaa, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x12, - 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x1a, - 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, - 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, - 0x64, 0x7d, 0x12, 0xb5, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x20, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, - 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x70, 0x70, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x3a, 0x01, 0x2a, 0x22, 0x4a, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x29, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x71, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6b, 0x12, 0x69, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, + 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xd2, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, + 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x66, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x60, 0x3a, 0x01, 0x2a, 0x1a, 0x5b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x6c, 0x69, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0xc3, 0x01, 0x0a, 0x1a, 0x49, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x24, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x3a, 0x01, 0x2a, 0x22, - 0x4f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, - 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x69, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, - 0x12, 0xb5, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5b, 0x3a, 0x01, 0x2a, - 0x22, 0x56, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0xef, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x25, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x82, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7c, 0x3a, 0x01, - 0x2a, 0x22, 0x77, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0xc2, 0x01, 0x0a, 0x16, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5f, - 0x3a, 0x01, 0x2a, 0x22, 0x5a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, 0x62, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xbb, 0x01, 0x0a, 0x16, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, + 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, + 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, + 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x58, 0x2a, 0x56, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, + 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, 0x7b, + 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x12, 0xaa, 0x01, 0x0a, 0x15, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, + 0x53, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x41, 0x70, 0x70, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x2a, 0x48, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x65, 0x74, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xb5, 0x01, 0x0a, 0x17, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, + 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x41, 0x70, 0x70, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x22, 0x55, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x3a, + 0x01, 0x2a, 0x22, 0x4a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0xc3, + 0x01, 0x0a, 0x1a, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x12, 0x23, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x72, 0x6f, 0x6d, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, 0x6f, 0x41, 0x70, 0x70, 0x52, + 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x54, + 0x6f, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, + 0x3a, 0x01, 0x2a, 0x22, 0x4f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, - 0x74, 0x73, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, - 0xdc, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x21, 0x2e, 0x70, + 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, + 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x65, 0x74, 0x12, 0xb5, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, + 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x73, 0x12, 0x71, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, - 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xd4, - 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, - 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, - 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, - 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x77, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x71, 0x12, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x61, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x5b, 0x3a, 0x01, 0x2a, 0x22, 0x56, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, - 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xd4, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, - 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x7a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x12, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0xef, 0x01, 0x0a, + 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x24, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, + 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x82, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x7c, 0x3a, 0x01, 0x2a, 0x22, 0x77, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0xc2, + 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, + 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x5f, 0x3a, 0x01, 0x2a, 0x22, 0x5a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x12, 0xdc, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, + 0x12, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x79, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x73, 0x12, + 0x71, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, + 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x12, 0xd4, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1f, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x77, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x71, 0x12, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xd5, 0x01, 0x0a, - 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, - 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x66, 0x12, 0x64, + 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, + 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xd4, 0x01, 0x0a, 0x15, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, + 0x65, 0x74, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x7a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x74, 0x12, 0x72, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x12, 0xd5, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, + 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, + 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x54, 0x6d, + 0x70, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x66, 0x12, 0x64, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, + 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xa1, 0x02, 0x0a, 0x20, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x29, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, + 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0xa5, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x9e, 0x01, 0x12, 0x9b, + 0x01, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, + 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x99, 0x02, 0x0a, + 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, + 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, + 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, + 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0xa3, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x9c, 0x01, 0x12, 0x99, 0x01, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, + 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xee, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, + 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, + 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x25, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, + 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x81, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7b, 0x12, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x12, 0xa1, 0x02, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, - 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, - 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x29, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0xa5, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x9e, 0x01, 0x12, 0x9b, 0x01, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, - 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, - 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, - 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x99, 0x02, 0x0a, 0x1e, 0x4c, 0x69, 0x73, - 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x75, 0x6e, - 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0xa3, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x9c, 0x01, 0x12, 0x99, 0x01, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, + 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xea, 0x01, 0x0a, 0x20, 0x4c, 0x69, + 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x29, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, + 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, + 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, + 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x69, 0x12, 0x67, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xf0, 0x01, 0x0a, 0x1e, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, + 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7b, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x75, 0x3a, 0x01, 0x2a, 0x22, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x73, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x12, 0xe5, 0x01, 0x0a, 0x19, 0x4c, 0x69, + 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, + 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, + 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x7f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x79, 0x12, 0x77, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0xf6, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, + 0x41, 0x70, 0x70, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, + 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, + 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7a, + 0x12, 0x78, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, + 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x16, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, + 0x3a, 0x01, 0x2a, 0x22, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x12, 0xaa, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, + 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, + 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x2a, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x12, 0xee, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, - 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x12, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, - 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x25, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x81, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7b, 0x12, 0x79, 0x2f, 0x61, 0x70, 0x69, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0x9e, 0x01, 0x0a, 0x1b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x40, 0x3a, 0x01, 0x2a, 0x22, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x12, 0xad, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x3a, 0x01, 0x2a, 0x1a, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, - 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xea, 0x01, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, - 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x29, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, - 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, - 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, - 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x6f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x69, 0x12, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, - 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x75, - 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x12, 0xf0, 0x01, 0x0a, 0x1e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x41, 0x70, 0x70, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x53, 0x65, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x75, - 0x3a, 0x01, 0x2a, 0x22, 0x70, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, - 0x74, 0x73, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x5f, 0x61, 0x70, 0x70, 0x73, 0x12, 0xe5, 0x01, 0x0a, 0x19, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6d, - 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, 0x41, - 0x70, 0x70, 0x73, 0x12, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, - 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x53, 0x65, 0x74, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x4e, - 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x7f, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x79, 0x12, 0x77, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, + 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x36, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x30, 0x12, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, - 0x65, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0xf6, 0x01, - 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, - 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, - 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6d, 0x70, 0x6c, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x55, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x80, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x7a, 0x12, 0x78, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x5f, 0x75, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x96, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x54, - 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x12, 0xa0, 0x01, 0x0a, 0x17, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x39, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x3a, 0x01, 0x2a, 0x22, - 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, - 0xaa, 0x01, 0x0a, 0x16, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, - 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4d, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x2a, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, - 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9e, 0x01, 0x0a, - 0x1b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x20, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, - 0x69, 0x7a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x3a, 0x01, 0x2a, - 0x22, 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x3a, 0x01, 0x2a, + 0x22, 0x35, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0xad, 0x01, - 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x4a, 0x3a, 0x01, 0x2a, 0x1a, 0x45, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, - 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, - 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x36, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x30, - 0x12, 0x2e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x12, 0xa0, 0x01, 0x0a, 0x17, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x65, 0x6d, 0x70, - 0x6c, 0x61, 0x74, 0x65, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x3a, 0x01, 0x2a, 0x22, 0x35, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, - 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x12, 0xac, 0x01, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, - 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, - 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, - 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, - 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x12, 0x44, 0x2f, 0x61, + 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0xac, 0x01, 0x0a, 0x17, 0x45, 0x78, 0x74, 0x72, + 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x45, 0x78, 0x74, 0x72, 0x61, + 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x21, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x45, 0x78, 0x74, + 0x72, 0x61, 0x63, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, + 0x12, 0x44, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, + 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x74, 0x72, + 0x61, 0x63, 0x74, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, + 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x70, + 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, + 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, + 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, + 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x12, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, - 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, - 0x65, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, - 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x1f, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x12, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, - 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x12, 0xda, 0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, - 0x52, 0x65, 0x66, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x28, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, - 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, - 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x5f, 0x12, - 0x5d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0xda, 0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x12, 0x27, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, + 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x28, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x65, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x5f, 0x12, 0x5d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, + 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, + 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, + 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x1a, 0x3c, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, + 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x9b, 0x01, 0x0a, 0x14, 0x4c, 0x69, + 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, + 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, + 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, + 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0xc9, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, + 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, + 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, + 0x26, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, + 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, + 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x12, + 0x52, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0xa4, - 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, - 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x1a, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, - 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x9b, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, - 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x1d, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, - 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, - 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x44, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, - 0x6c, 0x65, 0x73, 0x12, 0xc9, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, - 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, - 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x26, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, - 0x70, 0x70, 0x54, 0x6d, 0x70, 0x6c, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x5a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x54, 0x12, 0x52, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x73, 0x2f, - 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, - 0x69, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x2d, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x71, 0x0a, 0x0b, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, - 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x2a, 0x2d, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, - 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x88, 0x01, - 0x0a, 0x11, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, - 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3a, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x34, 0x3a, 0x01, 0x2a, 0x22, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, - 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x74, 0x0a, 0x0b, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x1a, - 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x6c, - 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, - 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x7a, 0x0a, 0x0d, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x16, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x38, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x9d, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, - 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, - 0x70, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, - 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x12, 0x8c, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, - 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x22, 0x51, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x42, 0x4b, - 0x41, 0x50, 0x49, 0x47, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x61, 0x70, + 0x6c, 0x65, 0x73, 0x12, 0x69, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x2d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x3a, 0x01, 0x2a, 0x22, 0x22, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x71, + 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x2f, 0x2a, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, + 0x7d, 0x12, 0x88, 0x01, 0x0a, 0x11, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x69, 0x7a, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x3a, 0x01, 0x2a, 0x22, 0x2f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb1, 0x01, 0x0a, 0x07, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x73, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x22, 0x80, 0x01, 0xfa, 0xd2, 0xe4, 0x93, 0x02, - 0x09, 0x12, 0x07, 0x42, 0x4b, 0x41, 0x50, 0x49, 0x47, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x6b, - 0x3a, 0x01, 0x2a, 0x22, 0x66, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x65, 0x67, 0x79, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x2f, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x2f, 0x7b, - 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x19, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, - 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x22, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, - 0x41, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, - 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, - 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x81, - 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x1a, - 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x22, 0x35, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x74, 0x0a, 0x0b, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x14, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, + 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, + 0x3a, 0x01, 0x2a, 0x1a, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, + 0x64, 0x7d, 0x12, 0x6c, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, + 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x12, 0x7a, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x12, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x70, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x9d, 0x01, 0x0a, + 0x15, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, + 0x65, 0x64, 0x41, 0x70, 0x70, 0x73, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x41, + 0x70, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x43, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, + 0x3b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x2f, 0x7b, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x61, 0x70, 0x70, 0x73, 0x12, 0x8c, 0x01, 0x0a, + 0x0e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x51, 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x09, + 0x12, 0x07, 0x42, 0x4b, 0x41, 0x50, 0x49, 0x47, 0x57, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, + 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x73, 0x2f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0xb1, 0x01, 0x0a, 0x07, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x73, 0x70, 0x22, 0x80, 0x01, 0xfa, + 0xd2, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x42, 0x4b, 0x41, 0x50, 0x49, 0x47, 0x57, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x6b, 0x3a, 0x01, 0x2a, 0x22, 0x66, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x73, + 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x2f, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x2f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, + 0x69, 0x64, 0x2f, 0x7b, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x12, + 0x90, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x22, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x6c, + 0x65, 0x61, 0x73, 0x65, 0x41, 0x6e, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, + 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, + 0x31, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, + 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, + 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x73, 0x68, 0x12, 0x81, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x35, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x3a, 0x01, 0x2a, 0x22, 0x2a, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, + 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x7a, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x32, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x73, 0x12, 0x7a, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x7e, - 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1b, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x31, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2b, 0x2a, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x81, - 0x01, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x1a, - 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x34, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x2e, 0x3a, 0x01, 0x2a, 0x1a, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x6c, 0x73, 0x12, 0x7e, 0x0a, 0x10, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x2a, 0x29, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x61, 0x6c, 0x12, 0x9d, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, - 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x49, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x12, - 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, - 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x2f, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x12, 0x9f, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x42, 0x12, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x7b, 0x63, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x63, - 0x6f, 0x70, 0x65, 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x1e, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1f, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, - 0x4a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x3a, 0x01, 0x2a, 0x1a, 0x3f, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x9c, 0x01, 0x0a, 0x16, - 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, - 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, - 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x50, 0x72, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x39, 0x12, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x73, 0x63, 0x6f, - 0x70, 0x65, 0x2f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x6b, 0x0a, 0x08, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x38, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x12, 0x71, 0x0a, 0x08, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4b, 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3e, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x38, 0x3a, 0x01, 0x2a, 0x1a, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x12, 0x65, 0x0a, 0x07, 0x4c, 0x69, - 0x73, 0x74, 0x4b, 0x76, 0x73, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x35, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, - 0x73, 0x12, 0x6d, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x11, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, - 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, - 0x52, 0x65, 0x73, 0x70, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x2a, 0x32, 0x2f, 0x61, + 0x61, 0x6c, 0x12, 0x81, 0x01, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, + 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x34, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x3a, 0x01, 0x2a, 0x1a, 0x29, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x9d, 0x01, 0x0a, 0x13, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1d, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x49, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x43, 0x12, 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x7b, + 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, + 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x9f, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, + 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1e, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x48, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x12, 0x40, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x15, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, + 0x70, 0x65, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, + 0x65, 0x71, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x22, 0x4a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x44, 0x3a, 0x01, 0x2a, 0x1a, 0x3f, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x2f, 0x7b, 0x63, 0x72, 0x65, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, + 0x9c, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, + 0x6f, 0x70, 0x65, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x1f, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, 0x70, + 0x65, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x71, 0x1a, 0x20, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x63, 0x6f, + 0x70, 0x65, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x2f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x2f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x12, 0x6b, + 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x22, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, - 0x12, 0x8f, 0x01, 0x0a, 0x0d, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4b, 0x76, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x45, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x3f, 0x3a, 0x01, 0x2a, 0x22, 0x3a, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x12, 0x71, 0x0a, 0x08, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3e, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x3a, 0x01, 0x2a, 0x1a, 0x33, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x12, 0x65, + 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x12, 0x10, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x11, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x35, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x12, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x12, 0x7d, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, - 0x74, 0x4b, 0x76, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x18, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, - 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x38, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x3a, - 0x01, 0x2a, 0x1a, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, - 0x73, 0x12, 0x7d, 0x0a, 0x0a, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x12, - 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, - 0x76, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x3e, 0x22, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, - 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x2f, 0x75, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x12, 0x6d, 0x0a, 0x06, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x10, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x40, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x22, 0x38, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x2f, 0x75, 0x6e, 0x64, 0x6f, 0x12, - 0x7e, 0x0a, 0x09, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x12, 0x12, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x71, - 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x76, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x3a, 0x01, 0x2a, - 0x22, 0x3d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x12, 0x6d, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, + 0x76, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, + 0x76, 0x52, 0x65, 0x71, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, + 0x2a, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, - 0x7b, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x7d, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, - 0x78, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x14, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x8f, 0x01, 0x0a, 0x0d, 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x12, 0x20, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, + 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x45, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x3a, 0x01, 0x2a, 0x22, 0x3a, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x62, 0x61, 0x74, 0x63, 0x68, 0x5f, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x7d, 0x0a, 0x0e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, + 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x18, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x42, 0x61, 0x74, 0x63, 0x68, 0x55, 0x70, + 0x73, 0x65, 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x38, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x32, 0x3a, 0x01, 0x2a, 0x1a, 0x2d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x99, 0x01, 0x0a, 0x10, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x19, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x3a, 0x01, 0x2a, - 0x22, 0x43, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, - 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x81, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, - 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x01, 0x2a, - 0x22, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, - 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x12, 0x8a, 0x01, 0x0a, 0x10, 0x4c, 0x69, - 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x12, 0x19, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, - 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, - 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x12, 0x90, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, - 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x3a, 0x01, 0x2a, - 0x22, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, - 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x11, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, - 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, - 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, - 0x3a, 0x01, 0x2a, 0x1a, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x2f, 0x7b, 0x69, 0x64, - 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x2a, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, - 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, - 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x1a, 0x1e, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x12, 0x44, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, + 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x12, 0x7d, 0x0a, 0x0a, 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4b, 0x76, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x55, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x76, 0x52, 0x65, 0x73, 0x70, 0x22, 0x44, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x22, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x2f, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0xab, 0x01, 0x0a, - 0x1d, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, - 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x3a, 0x01, 0x2a, 0x22, 0x4b, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, - 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, - 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, - 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0xa3, 0x01, 0x0a, 0x19, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x6c, 0x6c, 0x54, 0x72, 0x65, 0x6e, 0x64, 0x53, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x52, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x4c, 0x3a, 0x01, 0x2a, 0x22, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x2f, 0x75, 0x6e, 0x64, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x12, 0x6d, 0x0a, 0x06, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x12, 0x0f, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x52, 0x65, 0x71, 0x1a, + 0x10, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x6e, 0x64, 0x6f, 0x4b, 0x76, 0x52, 0x65, 0x73, + 0x70, 0x22, 0x40, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x22, 0x38, 0x2f, 0x61, 0x70, 0x69, 0x2f, + 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, + 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x6b, 0x65, 0x79, 0x7d, 0x2f, 0x75, + 0x6e, 0x64, 0x6f, 0x12, 0x7e, 0x0a, 0x09, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x76, 0x73, + 0x12, 0x12, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x76, + 0x73, 0x52, 0x65, 0x71, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x49, 0x6d, 0x70, 0x6f, + 0x72, 0x74, 0x4b, 0x76, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x42, 0x3a, 0x01, 0x2a, 0x22, 0x3d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x6b, 0x76, 0x73, 0x2f, 0x7b, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x7d, 0x2f, 0x69, 0x6d, 0x70, + 0x6f, 0x72, 0x74, 0x12, 0x78, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x3a, 0x01, 0x2a, 0x22, 0x31, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x99, 0x01, + 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x48, 0x3a, 0x01, 0x2a, 0x22, 0x43, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x7b, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x81, 0x01, 0x0a, 0x0c, 0x52, 0x65, + 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x63, + 0x73, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x79, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x3c, 0x3a, 0x01, 0x2a, 0x22, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x72, 0x65, 0x74, 0x72, 0x79, 0x12, 0x8a, 0x01, + 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1a, 0x2e, + 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x3f, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x39, 0x12, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, + 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x12, 0x90, 0x01, 0x0a, 0x11, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, + 0x62, 0x63, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x42, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x3c, 0x3a, 0x01, 0x2a, 0x22, 0x37, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, 0x12, 0x95, 0x01, + 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, + 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x41, 0x3a, 0x01, 0x2a, 0x1a, 0x3c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, - 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, 0x6c, 0x6c, 0x5f, - 0x74, 0x72, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, - 0x12, 0x98, 0x01, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x6c, 0x6c, 0x53, + 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x73, + 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x92, 0x01, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x1a, 0x2e, 0x70, 0x62, + 0x63, 0x73, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x1a, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x22, 0x44, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x2a, 0x3c, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, + 0x75, 0x65, 0x72, 0x79, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xa3, 0x01, 0x0a, 0x14, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, + 0x65, 0x71, 0x1a, 0x1e, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x12, 0x44, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, + 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, + 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x71, 0x75, 0x65, + 0x72, 0x79, 0x73, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, + 0x12, 0xab, 0x01, 0x0a, 0x1d, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, + 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x56, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x50, 0x3a, 0x01, + 0x2a, 0x22, 0x4b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, + 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0xa3, + 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x75, 0x6c, 0x6c, 0x54, 0x72, 0x65, + 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, + 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x22, 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x3a, 0x01, 0x2a, 0x22, 0x47, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, + 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, + 0x75, 0x6c, 0x6c, 0x5f, 0x74, 0x72, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x14, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, + 0x75, 0x6c, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, + 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x22, 0x4c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x3a, 0x01, 0x2a, 0x22, 0x41, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, + 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, + 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, + 0x70, 0x75, 0x6c, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, + 0x9a, 0x01, 0x0a, 0x15, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x4c, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x3a, 0x01, 0x2a, 0x22, 0x41, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x4d, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x3a, 0x01, 0x2a, 0x22, 0x42, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x70, 0x75, 0x6c, 0x6c, - 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x9a, 0x01, 0x0a, 0x15, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x69, - 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x4d, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x47, 0x3a, 0x01, 0x2a, 0x22, 0x42, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0xa4, 0x01, 0x0a, 0x1a, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x52, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x4c, 0x3a, 0x01, 0x2a, 0x22, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, - 0x9e, 0x01, 0x0a, 0x17, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0xa4, 0x01, 0x0a, + 0x1a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, - 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x3a, 0x01, 0x2a, 0x22, 0x44, 0x2f, 0x61, 0x70, 0x69, + 0x52, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4c, 0x3a, 0x01, 0x2a, 0x22, 0x47, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, - 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, - 0x12, 0xb3, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, + 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, + 0x69, 0x63, 0x73, 0x12, 0x9e, 0x01, 0x0a, 0x17, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, + 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x22, 0x4f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x3a, 0x01, 0x2a, 0x22, 0x44, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, + 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, + 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x73, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x69, 0x73, + 0x74, 0x69, 0x63, 0x73, 0x12, 0xb3, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x3a, 0x01, 0x2a, 0x22, 0x48, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xa5, 0x01, 0x0a, 0x1a, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x52, - 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x4d, 0x3a, 0x01, 0x2a, 0x22, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, - 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0xb9, - 0x01, 0x0a, 0x1a, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x23, 0x2e, - 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, - 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, - 0x12, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x41, 0x6e, 0x64, 0x41, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x53, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x3a, 0x01, 0x2a, + 0x22, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, - 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x98, 0x01, 0x0a, 0x12, 0x43, - 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, - 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, - 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x1c, - 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, - 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, + 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x73, 0x2f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xa5, 0x01, 0x0a, 0x1a, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x2e, 0x70, 0x62, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x22, 0x53, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x4d, 0x3a, 0x01, 0x2a, 0x22, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x73, 0x70, 0x65, 0x63, + 0x69, 0x66, 0x69, 0x63, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x12, 0xb9, 0x01, 0x0a, 0x1a, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, + 0x73, 0x12, 0x23, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, + 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x1a, 0x24, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, + 0x6d, 0x70, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x74, 0x65, 0x6d, 0x43, + 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x22, 0x50, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x4a, 0x12, 0x48, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x6b, 0x76, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0xc2, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, - 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, - 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x70, 0x62, 0x63, - 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, - 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, - 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, - 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, - 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, - 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, - 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x0f, 0xfa, 0xd2, 0xe4, 0x93, - 0x02, 0x09, 0x12, 0x07, 0x42, 0x4b, 0x41, 0x50, 0x49, 0x47, 0x57, 0x42, 0x59, 0x5a, 0x57, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, - 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, - 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, - 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x3b, 0x70, 0x62, 0x63, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x72, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x98, + 0x01, 0x0a, 0x12, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x1b, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, + 0x70, 0x61, 0x72, 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, + 0x65, 0x4b, 0x76, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x7b, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x6b, 0x76, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0xc2, 0x01, 0x0a, 0x20, 0x47, 0x65, + 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x29, + 0x2e, 0x70, 0x62, 0x63, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, + 0x65, 0x41, 0x6e, 0x64, 0x4e, 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, + 0x49, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x2a, 0x2e, 0x70, 0x62, 0x63, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x4e, + 0x6f, 0x6e, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x49, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x47, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2f, 0x62, 0x69, + 0x7a, 0x5f, 0x69, 0x64, 0x2f, 0x7b, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x61, 0x70, + 0x70, 0x73, 0x2f, 0x7b, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x0f, + 0xfa, 0xd2, 0xe4, 0x93, 0x02, 0x09, 0x12, 0x07, 0x42, 0x4b, 0x41, 0x50, 0x49, 0x47, 0x57, 0x42, + 0x59, 0x5a, 0x57, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, + 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, + 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2d, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x3b, 0x70, 0x62, 0x63, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( diff --git a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.proto b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.proto index a30a7a21e7..dffe5434eb 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.proto +++ b/bcs-services/bcs-bscp/pkg/protocol/config-server/config_service.proto @@ -2791,6 +2791,8 @@ message CreateKvReq { string kv_type = 4; string value = 5; string memo = 6; + string secret_type = 7; + bool secret_hidden = 8; } message CreateKvResp { @@ -2803,6 +2805,8 @@ message UpdateKvReq { string key = 4; string memo = 5; string value = 6; + string secret_type = 7; + bool secret_hidden = 8; } message UpdateKvResp {} @@ -2864,6 +2868,8 @@ message BatchUpsertKvsReq { string kv_type = 2; string value = 3; string memo = 4; + string secret_type = 5; + bool secret_hidden = 6; } uint32 biz_id = 1; uint32 app_id = 2; diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/kv/convert.go b/bcs-services/bcs-bscp/pkg/protocol/core/kv/convert.go index dadc5cb8f4..a48d336424 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/kv/convert.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/kv/convert.go @@ -39,9 +39,11 @@ func (k *KvSpec) KvSpec() *table.KvSpec { } return &table.KvSpec{ - Key: k.Key, - KvType: table.DataType(k.KvType), - Memo: k.Memo, + Key: k.Key, + KvType: table.DataType(k.KvType), + SecretType: table.SecretType(k.SecretType), + SecretHidden: k.SecretHidden, + Memo: k.Memo, } } @@ -82,10 +84,12 @@ func PbKvSpec(spec *table.KvSpec, value string) *KvSpec { } return &KvSpec{ - Key: spec.Key, - KvType: string(spec.KvType), - Value: value, - Memo: spec.Memo, + Key: spec.Key, + KvType: string(spec.KvType), + Value: value, + Memo: spec.Memo, + SecretType: string(spec.SecretType), + SecretHidden: spec.SecretHidden, } } diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/kv/kvs.pb.go b/bcs-services/bcs-bscp/pkg/protocol/core/kv/kvs.pb.go index 5d83e73d71..ded5f627f9 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/kv/kvs.pb.go +++ b/bcs-services/bcs-bscp/pkg/protocol/core/kv/kvs.pb.go @@ -116,10 +116,12 @@ type KvSpec struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - KvType string `protobuf:"bytes,2,opt,name=kv_type,json=kvType,proto3" json:"kv_type,omitempty"` - Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` - Memo string `protobuf:"bytes,4,opt,name=memo,proto3" json:"memo,omitempty"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + KvType string `protobuf:"bytes,2,opt,name=kv_type,json=kvType,proto3" json:"kv_type,omitempty"` + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` + Memo string `protobuf:"bytes,4,opt,name=memo,proto3" json:"memo,omitempty"` + SecretType string `protobuf:"bytes,5,opt,name=secret_type,json=secretType,proto3" json:"secret_type,omitempty"` + SecretHidden bool `protobuf:"varint,6,opt,name=secret_hidden,json=secretHidden,proto3" json:"secret_hidden,omitempty"` } func (x *KvSpec) Reset() { @@ -182,6 +184,20 @@ func (x *KvSpec) GetMemo() string { return "" } +func (x *KvSpec) GetSecretType() string { + if x != nil { + return x.SecretType + } + return "" +} + +func (x *KvSpec) GetSecretHidden() bool { + if x != nil { + return x.SecretHidden + } + return false +} + // KvAttachment source resource reference: pkg/dal/table/kvs.go type KvAttachment struct { state protoimpl.MessageState @@ -261,23 +277,27 @@ var file_kvs_proto_rawDesc = []byte{ 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, - 0x63, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x22, 0x5d, - 0x0a, 0x06, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x76, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, 0x6d, - 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x22, 0x3c, 0x0a, - 0x0c, 0x4b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x0a, - 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, - 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x64, 0x42, 0x53, 0x5a, 0x51, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, - 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, - 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, - 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x6b, 0x76, 0x3b, 0x70, 0x62, 0x6b, 0x76, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x22, 0xa3, + 0x01, 0x0a, 0x06, 0x4b, 0x76, 0x53, 0x70, 0x65, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6b, + 0x76, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x76, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x65, + 0x6d, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x65, 0x6d, 0x6f, 0x12, 0x1f, + 0x0a, 0x0b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x68, 0x69, 0x64, 0x64, 0x65, 0x6e, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x48, 0x69, + 0x64, 0x64, 0x65, 0x6e, 0x22, 0x3c, 0x0a, 0x0c, 0x4b, 0x76, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x62, 0x69, 0x7a, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x69, 0x7a, 0x49, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x61, + 0x70, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x61, 0x70, 0x70, + 0x49, 0x64, 0x42, 0x53, 0x5a, 0x51, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x54, 0x65, 0x6e, 0x63, 0x65, 0x6e, 0x74, 0x42, 0x6c, 0x75, 0x65, 0x4b, 0x69, 0x6e, 0x67, + 0x2f, 0x62, 0x6b, 0x2d, 0x62, 0x63, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x2f, 0x62, 0x63, 0x73, 0x2d, 0x62, 0x73, 0x63, 0x70, 0x2f, 0x70, 0x6b, + 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, + 0x6b, 0x76, 0x3b, 0x70, 0x62, 0x6b, 0x76, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/bcs-services/bcs-bscp/pkg/protocol/core/kv/kvs.proto b/bcs-services/bcs-bscp/pkg/protocol/core/kv/kvs.proto index 083db3d4b8..f40edfaffc 100644 --- a/bcs-services/bcs-bscp/pkg/protocol/core/kv/kvs.proto +++ b/bcs-services/bcs-bscp/pkg/protocol/core/kv/kvs.proto @@ -23,6 +23,8 @@ message KvSpec { string kv_type = 2; string value = 3; string memo = 4; + string secret_type = 5; + bool secret_hidden = 6; } // KvAttachment source resource reference: pkg/dal/table/kvs.go From da3292a729f55e0417ccf7e5ee59129ee2c16bcb Mon Sep 17 00:00:00 2001 From: Yuikill <105910874+Yuikill@users.noreply.github.com> Date: Wed, 28 Aug 2024 19:43:17 +0800 Subject: [PATCH 019/108] =?UTF-8?q?feat:=20=E9=94=AE=E5=80=BC=E5=9E=8B?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E6=96=B0=E5=A2=9E=E6=95=8F=E6=84=9F=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E6=95=B0=E6=8D=AE=E7=B1=BB=E5=9E=8B--story=3D11900325?= =?UTF-8?q?0=20(#3462)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 新建编辑服务添加敏感信息 * feat: 新增配置项单行内容添加加密展示 * feat: 敏感信息编辑态,查看态 * feat: 敏感信息类型diff * fix: 业务名称标识英文显示 * feat: 敏感信息支持批量导入 * feat: kv从其他服务导入交互优化 * fix: 自定义类型字段调整 --- bcs-services/bcs-bscp/ui/package.json | 1 + bcs-services/bcs-bscp/ui/src/api/config.ts | 8 +- .../ui/src/components/code-editor/index.vue | 17 +- .../bcs-bscp/ui/src/components/diff/index.vue | 29 +- .../ui/src/components/diff/single-line-kv.vue | 66 ++- .../bcs-bscp/ui/src/components/diff/text.vue | 52 +- .../bcs-bscp/ui/src/components/head.vue | 2 +- .../bcs-bscp/ui/src/constants/config.ts | 1 + bcs-services/bcs-bscp/ui/src/i18n/en-us.ts | 50 +- bcs-services/bcs-bscp/ui/src/i18n/zh-cn.ts | 47 +- bcs-services/bcs-bscp/ui/src/utils/config.ts | 2 + .../scripts/components/script-editor.vue | 2 +- .../components/config-content-editor.vue | 1 + .../config/components/kv-import-editor.vue | 48 +- .../config/components/read-file-content.vue | 1 - .../version-diff/aside-menu/configs-kv.vue | 18 +- .../config/components/version-diff/index.vue | 2 + .../index.vue} | 107 ++-- .../config-form-kv/secret-form/index.vue | 487 ++++++++++++++++++ .../secret-form/secret-content-editor.vue | 165 ++++++ .../secret-form/secret-editor.vue | 110 ++++ .../import-file/import-form-other-service.vue | 47 +- .../import-kv/format-example.vue | 140 +++-- .../create-config/import-kv/text-import.vue | 2 +- .../create-config/manual-create-kv.vue | 12 +- .../config-table-list/edit-config-kv.vue | 20 +- .../tables/kv-value-preview.vue | 88 +++- .../tables/table-with-kv.vue | 13 +- .../config-table-list/view-config-kv.vue | 45 +- .../list/components/create-service.vue | 4 +- .../service/list/components/edit-service.vue | 10 +- .../service/list/components/service-form.vue | 30 +- .../import-configs/config-table.vue | 11 +- bcs-services/bcs-bscp/ui/types.d.ts | 1 + bcs-services/bcs-bscp/ui/types/config.ts | 4 + bcs-services/bcs-bscp/ui/types/index.ts | 1 + bcs-services/bcs-bscp/ui/types/service.ts | 5 + bcs-services/bcs-bscp/ui/yarn.lock | 5 + 38 files changed, 1471 insertions(+), 183 deletions(-) rename bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/{config-form-kv.vue => config-form-kv/index.vue} (57%) create mode 100644 bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form-kv/secret-form/index.vue create mode 100644 bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form-kv/secret-form/secret-content-editor.vue create mode 100644 bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form-kv/secret-form/secret-editor.vue diff --git a/bcs-services/bcs-bscp/ui/package.json b/bcs-services/bcs-bscp/ui/package.json index 16382e4102..1dbf17231b 100644 --- a/bcs-services/bcs-bscp/ui/package.json +++ b/bcs-services/bcs-bscp/ui/package.json @@ -27,6 +27,7 @@ "jszip": "^3.10.1", "markdown-it": "^13.0.1", "monaco-editor": "^0.34.1", + "node-forge": "^1.3.1", "pinia": "^2.0.33", "sass": "^1.54.8", "vue": "^3.4.21", diff --git a/bcs-services/bcs-bscp/ui/src/api/config.ts b/bcs-services/bcs-bscp/ui/src/api/config.ts index ac5d2b566f..d4ae43775f 100644 --- a/bcs-services/bcs-bscp/ui/src/api/config.ts +++ b/bcs-services/bcs-bscp/ui/src/api/config.ts @@ -489,8 +489,12 @@ export const getKvList = (bizId: string, appId: number, query: ICommonQuery) => * @param value 配置值 * @returns */ -export const updateKv = (bizId: string, appId: number, key: string, value: string, memo: string) => - http.put(`/config/biz/${bizId}/apps/${appId}/kvs/${key}`, { value, memo }); +export const updateKv = ( + bizId: string, + appId: number, + key: string, + editContent: { value: string; memo: string; secret_hidden?: boolean }, +) => http.put(`/config/biz/${bizId}/apps/${appId}/kvs/${key}`, editContent); /** * 删除kv diff --git a/bcs-services/bcs-bscp/ui/src/components/code-editor/index.vue b/bcs-services/bcs-bscp/ui/src/components/code-editor/index.vue index 4739da4bd4..93dfe2405c 100644 --- a/bcs-services/bcs-bscp/ui/src/components/code-editor/index.vue +++ b/bcs-services/bcs-bscp/ui/src/components/code-editor/index.vue @@ -5,12 +5,14 @@
{{ content }}
-
-
- - - - {{ errorMessage }} +
+
+
+ + + + {{ errorMessage }} +
+ + + + diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form-kv/secret-form/secret-content-editor.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form-kv/secret-form/secret-content-editor.vue new file mode 100644 index 0000000000..8c3190ac70 --- /dev/null +++ b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form-kv/secret-form/secret-content-editor.vue @@ -0,0 +1,165 @@ + + + diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form-kv/secret-form/secret-editor.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form-kv/secret-form/secret-editor.vue new file mode 100644 index 0000000000..ba1fc95186 --- /dev/null +++ b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/config-form-kv/secret-form/secret-editor.vue @@ -0,0 +1,110 @@ + + + diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-form-other-service.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-form-other-service.vue index fe4418557e..e9a063c20e 100644 --- a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-form-other-service.vue +++ b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/create-config/import-file/import-form-other-service.vue @@ -10,7 +10,21 @@ auto-focus :clearable="false" @select="handleSelectApp"> - + + + {{ item.spec.name }} + +
@@ -30,7 +44,7 @@ diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/tables/table-with-kv.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/tables/table-with-kv.vue index 50e9135d66..bf2850ce88 100644 --- a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/tables/table-with-kv.vue +++ b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/tables/table-with-kv.vue @@ -39,7 +39,13 @@ @@ -52,6 +58,9 @@ :label="t('数据类型')" :filter="{ filterFn: () => true, list: typeFilterList, checked: typeFilterChecked }" :width="120"> + @@ -341,7 +350,7 @@ params.sort = 'updated_at'; params.order = updateSortType.value.toUpperCase(); } - if (topIds.value.length > 0) params.ids = topIds.value.join(','); + if (topIds.value.length > 0) params.ids = topIds.value; let res; if (isUnNamedVersion.value) { if (statusFilterChecked.value!.length > 0) { diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/view-config-kv.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/view-config-kv.vue index 97f0ac4e91..a45a869c0a 100644 --- a/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/view-config-kv.vue +++ b/bcs-services/bcs-bscp/ui/src/views/space/service/detail/config/config-list/config-table-list/view-config-kv.vue @@ -15,9 +15,29 @@
{{ props.config.spec.memo || '--' }}
- {{ props.config.spec.kv_type }} + + {{ props.config.spec.kv_type === 'secret' ? t('敏感信息') : props.config.spec.kv_type }} + - +
+ + {{ t('敏感数据不可见,无法查看实际内容') }} + + +
+ {{ props.config.spec.value }}
@@ -56,6 +76,8 @@ import kvConfigContentEditor from '../../components/kv-config-content-editor.vue'; import ConfigContentEditor from '../../components/config-content-editor.vue'; import { sortObjectKeysByAscii, datetimeFormat } from '../../../../../../../utils'; + import { Unvisible, Eye } from 'bkui-vue/lib/icon'; + import SecretEditor from './config-form-kv/secret-form/secret-content-editor.vue'; const { t } = useI18n(); const props = defineProps<{ @@ -70,6 +92,7 @@ const isFormChange = ref(false); const sideSliderRef = ref(); const editorHeight = ref(0); + const isCipherShowSecret = ref(true); const metaData = computed(() => { const { content_spec, revision, spec } = props.config; @@ -173,4 +196,22 @@ min-width: 88px; } } + .secret-value { + .secret-single-line-value { + display: flex; + align-items: center; + .view-icon { + cursor: pointer; + margin: 0 8px; + font-size: 14px; + color: #979ba5; + &:hover { + color: #3a84ff; + } + } + } + .un-view-value { + color: #c4c6cc; + } + } diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/create-service.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/create-service.vue index 564902d37c..3cfde6dbdb 100644 --- a/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/create-service.vue +++ b/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/create-service.vue @@ -64,7 +64,7 @@ name: '', alias: '', config_type: 'file', - data_type: 'any', + data_type: '', memo: '', // @todo 包含换行符后接口会报错 }); const formCompRef = ref(); @@ -82,7 +82,7 @@ name: '', alias: '', config_type: 'file', - data_type: 'any', + data_type: '', memo: '', }; } diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/edit-service.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/edit-service.vue index dfdd2f7b4e..0ce5d5f775 100644 --- a/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/edit-service.vue +++ b/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/edit-service.vue @@ -144,10 +144,12 @@ InfoBox({ infoType: 'danger', 'ext-cls': 'info-box-style', - title: `调整服务数据类型${dataType}失败`, - subTitle: `该服务下存在非${dataType}类型的配置项,如需修改,请先调整该服务下的所有配置项数据类型为${dataType}`, + title: t('调整服务数据类型{n}失败', { n: dataType }), + subTitle: t('该服务下存在非{n}类型的配置项,如需修改,请先调整该服务下的所有配置项数据类型为{n}', { + n: dataType, + }), dialogType: 'confirm', - confirmText: '我知道了', + confirmText: t('我知道了'), }); return; } @@ -162,7 +164,7 @@ serviceData.value = res; Message({ theme: 'success', - message: '服务属性编辑成功', + message: t('服务属性编辑成功'), }); emits('reload'); isViewMode.value = true; diff --git a/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/service-form.vue b/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/service-form.vue index 69d2f57b6e..c932961ed3 100644 --- a/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/service-form.vue +++ b/bcs-services/bcs-bscp/ui/src/views/space/service/list/components/service-form.vue @@ -32,24 +32,21 @@ @input="handleChange" /> - + {{ t('文件型') }} {{ t('键值型') }} - - - {{ t('任意类型') }} - {{ kvType.name }} - + property="data_type" + :description="t('tips.type')" + required> + + + + @@ -110,11 +107,6 @@ }, ); - const handleConfigTypeChange = (val: string) => { - localData.value.data_type = val === 'file' ? '' : 'any'; - handleChange(); - }; - const handleChange = () => { emits('change', localData.value); }; @@ -127,9 +119,7 @@ diff --git a/bcs-services/bcs-bscp/ui/src/views/space/templates/list/package-detail/operations/add-configs/import-configs/config-table.vue b/bcs-services/bcs-bscp/ui/src/views/space/templates/list/package-detail/operations/add-configs/import-configs/config-table.vue index 1158b48418..267a583423 100644 --- a/bcs-services/bcs-bscp/ui/src/views/space/templates/list/package-detail/operations/add-configs/import-configs/config-table.vue +++ b/bcs-services/bcs-bscp/ui/src/views/space/templates/list/package-detail/operations/add-configs/import-configs/config-table.vue @@ -172,7 +172,7 @@
- {{ item.path + item.name }} + {{ fileAP(item) }}
@@ -291,6 +291,15 @@ { deep: true }, ); + // 配置文件绝对路径 + const fileAP = (config: IConfigImportItem) => { + const { path, name } = config; + if (path.endsWith('/')) { + return `${path}${name}`; + } + return `${path}/${name}`; + }; + // 将权限数字拆分成三个分组配置 const privilegeGroupsValue = computed(() => (privilege: string) => { const data: { [index: string]: number[] } = { 0: [], 1: [], 2: [] }; diff --git a/bcs-services/bcs-bscp/ui/types.d.ts b/bcs-services/bcs-bscp/ui/types.d.ts index 30fa56423b..c19b80b4c9 100644 --- a/bcs-services/bcs-bscp/ui/types.d.ts +++ b/bcs-services/bcs-bscp/ui/types.d.ts @@ -21,3 +21,4 @@ declare module 'bkui-vue/dist/locale/en.esm'; declare module '@blueking/login-modal'; declare module '@blueking/platform-config'; declare module 'vue-virtual-scroller'; +declare module 'node-forge'; diff --git a/bcs-services/bcs-bscp/ui/types/config.ts b/bcs-services/bcs-bscp/ui/types/config.ts index 5d4cabb1f6..6645ccbd70 100644 --- a/bcs-services/bcs-bscp/ui/types/config.ts +++ b/bcs-services/bcs-bscp/ui/types/config.ts @@ -93,6 +93,8 @@ export interface IConfigKvEditParams { kv_type: string; value: string; memo: string; + secret_hidden: boolean; + secret_type: string; // 密钥类型 } // 文件配置概览内容 @@ -225,6 +227,8 @@ export interface IConfigKvItem { kv_type: string; value: string; memo: string; + secret_hidden: boolean; + secret_type: string; is_exist?: boolean; } diff --git a/bcs-services/bcs-bscp/ui/types/index.ts b/bcs-services/bcs-bscp/ui/types/index.ts index 932aa64d09..128edbe90e 100644 --- a/bcs-services/bcs-bscp/ui/types/index.ts +++ b/bcs-services/bcs-bscp/ui/types/index.ts @@ -5,6 +5,7 @@ export interface ISpaceDetail { space_name: string; space_type_id: number; space_type_name: string; + space_en_name: string; space_uid: number; } diff --git a/bcs-services/bcs-bscp/ui/types/service.ts b/bcs-services/bcs-bscp/ui/types/service.ts index e6ef2c416d..f318a0160e 100644 --- a/bcs-services/bcs-bscp/ui/types/service.ts +++ b/bcs-services/bcs-bscp/ui/types/service.ts @@ -13,18 +13,23 @@ export interface ISingleLineKVDIffItem { id: number; name: string; diffType: string; + is_secret: boolean; + secret_hidden: boolean; base: { content: string; }; current: { content: string; }; + isCipherShowValue?: boolean; } // 版本下的脚本配置 export interface IDiffDetail { contentType: 'file' | 'text' | 'singleLineKV'; id: number | string; + is_secret: boolean; + secret_hidden: boolean; base: { content: string | IFileConfigContentSummary; language?: string; diff --git a/bcs-services/bcs-bscp/ui/yarn.lock b/bcs-services/bcs-bscp/ui/yarn.lock index 625cb1cfce..92967b0d94 100644 --- a/bcs-services/bcs-bscp/ui/yarn.lock +++ b/bcs-services/bcs-bscp/ui/yarn.lock @@ -3665,6 +3665,11 @@ nice-try@^1.0.4: resolved "https://mirrors.tencent.com/npm/nice-try/-/nice-try-1.0.5.tgz" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +node-forge@^1.3.1: + version "1.3.1" + resolved "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + "node-libs-browser@^1.0.0 || ^2.0.0": version "2.2.1" resolved "https://mirrors.tencent.com/npm/node-libs-browser/-/node-libs-browser-2.2.1.tgz" From 13493b3275a505101838c3647c6174ca7a17ff2f Mon Sep 17 00:00:00 2001 From: Yuikill <105910874+Yuikill@users.noreply.github.com> Date: Wed, 28 Aug 2024 19:44:16 +0800 Subject: [PATCH 020/108] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=20bat=20?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E5=92=8C=20powershell=20=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=20(#3469)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bcs-services/bcs-bscp/ui/src/i18n/en-us.ts | 3 +- bcs-services/bcs-bscp/ui/src/i18n/zh-cn.ts | 3 +- .../scripts/components/internal-variable.vue | 41 ++++++++++++++++--- .../space/scripts/list/create-script.vue | 14 +++++-- bcs-services/bcs-bscp/ui/types/script.ts | 2 + 5 files changed, 52 insertions(+), 11 deletions(-) diff --git a/bcs-services/bcs-bscp/ui/src/i18n/en-us.ts b/bcs-services/bcs-bscp/ui/src/i18n/en-us.ts index f6f1c94a43..5f9be6bb09 100644 --- a/bcs-services/bcs-bscp/ui/src/i18n/en-us.ts +++ b/bcs-services/bcs-bscp/ui/src/i18n/en-us.ts @@ -714,11 +714,12 @@ export default { form_版本号: 'Version number', 上线版本成功: 'Online version successful', 内置变量: 'Internal variables', - '客户端配置的配置存放临时目录(temp_dir),默认值为 /data/bscp': 'The client configuration directory is temp dir. The default value is /data/bscp', + '客户端配置的配置存放临时目录,默认值为 {n}': 'Temporary directory for configuration storage temporarily configured by the client, default value is {n}', '蓝鲸配置平台上的业务ID,例如:2': 'Service ID on the bscp, for example, 2', '服务配置中心上的服务名称,例如:demo_service': 'bscp service name, for example, demo service', '单个客户端可使用多个服务的配置,为保证路径唯一,服务配置需存放于:配置根目录/业务ID/服务名称,服务配置存放目录 = 配置存放根目录/业务ID/服务名称': 'A client can use multiple service configurations. To ensure a unique path, service configurations must be saved in the following directory: Configuration root directory/service ID/ service name. Service configuration directory = Configuration root directory/service ID/ service name', '当前客户端最近一次成功拉取的服务配置版本名称,如 V1,通常会在后置脚本中为服务配置版本添加标识,以表示配置文件已经完成拉取': 'The name of the service configuration version successfully pulled by the current client, such as V1, usually adds an identifier for the service configuration version in the post-script to indicate that the configuration file has been pulled', + '单个客户端可使用多个服务的配置,为保证路径唯一,服务配置需存放于:配置根目录\\业务ID\\服务名称,服务配置存放目录 = 配置存放根目录\\业务ID\\服务名称': 'A client can use multiple service configurations. To ensure a unique path, service configurations must be saved in the following directory: Configuration root directory\\service ID\\service name. Service configuration directory = Configuration root directory\\service ID\\service name', 配置根目录: 'Configuring the root directory', 业务ID: 'BusinessID', 服务配置目录: 'Service configuration directory', diff --git a/bcs-services/bcs-bscp/ui/src/i18n/zh-cn.ts b/bcs-services/bcs-bscp/ui/src/i18n/zh-cn.ts index d61f7bf995..de5025dc20 100644 --- a/bcs-services/bcs-bscp/ui/src/i18n/zh-cn.ts +++ b/bcs-services/bcs-bscp/ui/src/i18n/zh-cn.ts @@ -713,11 +713,12 @@ export default { form_版本号: '版本号', 上线版本成功: '上线版本成功', 内置变量: '内置变量', - '客户端配置的配置存放临时目录(temp_dir),默认值为 /data/bscp': '客户端配置的配置存放临时目录(temp_dir),默认值为 /data/bscp', + '客户端配置的配置存放临时目录,默认值为 {n}': '客户端配置的配置存放临时目录,默认值为 {n}', '蓝鲸配置平台上的业务ID,例如:2': '蓝鲸配置平台上的业务ID,例如:2', '服务配置中心上的服务名称,例如:demo_service': '服务配置中心上的服务名称,例如:demo_service', '单个客户端可使用多个服务的配置,为保证路径唯一,服务配置需存放于:配置根目录/业务ID/服务名称,服务配置存放目录 = 配置存放根目录/业务ID/服务名称': '单个客户端可使用多个服务的配置,为保证路径唯一,服务配置需存放于:配置根目录/业务ID/服务名称,服务配置存放目录 = 配置存放根目录/业务ID/服务名称', '当前客户端最近一次成功拉取的服务配置版本名称,如 V1,通常会在后置脚本中为服务配置版本添加标识,以表示配置文件已经完成拉取': '当前客户端最近一次成功拉取的服务配置版本名称,如 V1,通常会在后置脚本中为服务配置版本添加标识,以表示配置文件已经完成拉取', + '单个客户端可使用多个服务的配置,为保证路径唯一,服务配置需存放于:配置根目录\\业务ID\\服务名称,服务配置存放目录 = 配置存放根目录\\业务ID\\服务名称': '单个客户端可使用多个服务的配置,为保证路径唯一,服务配置需存放于:配置根目录\\业务ID\\服务名称,服务配置存放目录 = 配置存放根目录\\业务ID\\服务名称', 配置根目录: '配置根目录', 业务ID: '业务ID', 服务配置目录: '服务配置目录', diff --git a/bcs-services/bcs-bscp/ui/src/views/space/scripts/components/internal-variable.vue b/bcs-services/bcs-bscp/ui/src/views/space/scripts/components/internal-variable.vue index 94d20c07da..d272d974b9 100644 --- a/bcs-services/bcs-bscp/ui/src/views/space/scripts/components/internal-variable.vue +++ b/bcs-services/bcs-bscp/ui/src/views/space/scripts/components/internal-variable.vue @@ -4,13 +4,13 @@
- {{ item.cnName }} + {{ item.cnName }}
- {{ language === 'shell' ? item.shellVar : item.pythonVar }} + {{ getVar(item) }}
-
+
@@ -23,7 +23,7 @@ const { t } = useI18n(); - defineProps<{ + const props = defineProps<{ language: string; }>(); @@ -32,35 +32,49 @@ cnName: t('配置根目录'), shellVar: '${bk_bscp_temp_dir}', pythonVar: 'os.environ.get( \'bk_bscp_temp_dir\' )', - tips: t('客户端配置的配置存放临时目录(temp_dir),默认值为 /data/bscp'), + batVar: '%bk_bscp_temp_dir%', + tips: t('客户端配置的配置存放临时目录,默认值为 {n}', { n: ' /data/bscp' }), + batTips: t('客户端配置的配置存放临时目录,默认值为 {n}', { n: ' C:\\data\\bscp' }) }, { cnName: t('业务ID'), shellVar: '${bk_bscp_biz}', pythonVar: 'os.environ.get( \'bk_bscp_biz\' )', + batVar: '%bk_bscp_biz%', tips: t('蓝鲸配置平台上的业务ID,例如:2'), + batTips: t('蓝鲸配置平台上的业务ID,例如:2'), }, { cnName: t('服务名称'), shellVar: '${bk_bscp_app}', pythonVar: 'os.environ.get( \'bk_bscp_app\' )', + batVar: '%bk_bscp_app%', tips: t('服务配置中心上的服务名称,例如:demo_service'), + batTips: t('服务配置中心上的服务名称,例如:demo_service'), }, { cnName: t('服务配置目录'), shellVar: '${bk_bscp_app_temp_dir}', pythonVar: 'os.environ.get( \'bk_bscp_app_temp_dir\' )', + batVar: '%bk_bscp_app_temp_dir%', tips: t( '单个客户端可使用多个服务的配置,为保证路径唯一,服务配置需存放于:配置根目录/业务ID/服务名称,服务配置存放目录 = 配置存放根目录/业务ID/服务名称', ), + batTips: t( + '单个客户端可使用多个服务的配置,为保证路径唯一,服务配置需存放于:配置根目录\\业务ID\\服务名称,服务配置存放目录 = 配置存放根目录\\业务ID\\服务名称', + ), }, { cnName: t('当前配置版本名称'), shellVar: '${bk_bscp_current_version_name}', pythonVar: 'os.environ.get( \'bk_bscp_current_version_name\' )', + batVar: '%bk_bscp_current_version_name%', tips: t( '当前客户端最近一次成功拉取的服务配置版本名称,如 V1,通常会在后置脚本中为服务配置版本添加标识,以表示配置文件已经完成拉取', ), + batTips: t( + '当前客户端最近一次成功拉取的服务配置版本名称,如 V1,通常会在后置脚本中为服务配置版本添加标识,以表示配置文件已经完成拉取', + ), }, ]; @@ -71,6 +85,23 @@ message: t('变量名已复制'), }); }; + + const getTips = (item: any) => { + if (props.language === 'bat' || props.language === 'powershell') { + return item.batTips; + } + return item.tips; + }; + + const getVar = (item: any) => { + if (props.language === 'shell' || props.language === 'powershell') { + return item.shellVar; + } + if (props.language === 'python') { + return item.pythonVar; + } + return item.batVar; + }; diff --git a/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/edit-node-pool.vue b/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/edit-node-pool.vue new file mode 100644 index 0000000000..48f68db829 --- /dev/null +++ b/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/edit-node-pool.vue @@ -0,0 +1,227 @@ + + + diff --git a/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/node-config.vue b/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/node-config.vue new file mode 100644 index 0000000000..3116b0c6e9 --- /dev/null +++ b/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/node-config.vue @@ -0,0 +1,1144 @@ + + + + diff --git a/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/node-pool-detail.vue b/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/node-pool-detail.vue new file mode 100644 index 0000000000..08a97da41e --- /dev/null +++ b/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/node-pool-detail.vue @@ -0,0 +1,465 @@ + + + + diff --git a/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/node-pool-info.vue b/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/node-pool-info.vue new file mode 100644 index 0000000000..9bf1bc393e --- /dev/null +++ b/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/node-pool-info.vue @@ -0,0 +1,328 @@ + + + diff --git a/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/node-pool.vue b/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/node-pool.vue new file mode 100644 index 0000000000..dbb20901eb --- /dev/null +++ b/bcs-ui/frontend/src/views/cluster-manage/autoscaler/aws/node-pool.vue @@ -0,0 +1,193 @@ + + diff --git a/bcs-ui/frontend/src/views/cluster-manage/node-list/node.vue b/bcs-ui/frontend/src/views/cluster-manage/node-list/node.vue index 3a2cdb8ef4..80d7bfb9d6 100644 --- a/bcs-ui/frontend/src/views/cluster-manage/node-list/node.vue +++ b/bcs-ui/frontend/src/views/cluster-manage/node-list/node.vue @@ -20,7 +20,7 @@
-