From ebf4a8dcc53a5873084540c4ac2ce744b178cb43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A1=80=E5=B0=BC=E9=BE=9F?= <365252428@qq.com> Date: Thu, 20 Feb 2025 16:18:23 +0800 Subject: [PATCH] first push --- .gitignore | 25 + api/account/account.pb.go | 9852 +++++++++++++++++ api/account/account.proto | 778 ++ api/account/account.validator.pb.go | 535 + api/account/account_triple.pb.go | 1679 +++ cmd/app.go | 199 + cmd/config/config.go | 105 + cmd/config/nacos.go | 47 + conf/.gitignore | 0 docs/account.sql | 68 + docs/env/ali/conf.ini | 12 + docs/env/ali/dubbogo.yaml | 34 + docs/env/ali/log.yaml | 46 + docs/env/ali/sdk.yaml | 18 + docs/env/dev/conf.ini | 37 + docs/env/dev/dubbogo.yaml | 34 + docs/env/dev/log.yaml | 32 + docs/env/dev/sdk.yaml | 18 + docs/env/local/conf.ini | 29 + docs/env/local/dubbogo.yaml | 34 + docs/env/local/log.yaml | 32 + docs/env/local/sdk.yaml | 18 + go.mod | 223 + go.sum | 2001 ++++ pkg/application/coin.go | 1 + pkg/application/init.go | 5 + pkg/application/order.go | 255 + pkg/application/order_test.go | 36 + pkg/application/token.go | 58 + pkg/application/user.go | 145 + pkg/application/wechat.go | 1 + pkg/blockchain/common.go | 25 + pkg/cache/common.go | 92 + pkg/cache/common_test.go | 80 + pkg/common/dingding/ding.go | 89 + pkg/common/encryption/encryption.go | 68 + pkg/common/filter/filter.go | 70 + pkg/common/jwt/jwt.go | 100 + pkg/common/jwt/jwt_test.go | 38 + pkg/common/log/gorm.go | 44 + pkg/common/log/init.go | 35 + pkg/common/log/log.go | 141 + pkg/common/log/logging.go | 148 + pkg/common/page/page.go | 10 + pkg/common/redis_key/redis_key.go | 94 + pkg/common/utils/idnum/idnum.go | 220 + pkg/common/utils/idnum/idnum_net.go | 172 + pkg/common/utils/idnum/idnum_test.go | 25 + pkg/common/utils/ip.go | 406 + pkg/common/utils/ip_test.go | 11 + pkg/common/utils/phone.go | 19 + pkg/common/utils/phone_test.go | 45 + pkg/common/utils/time.go | 52 + pkg/common/utils/ucode.go | 55 + pkg/common/utils/utils.go | 82 + pkg/common/utils/utils_test.go | 66 + pkg/common/verifica/mobile.go | 141 + pkg/common/verifica/mobile_test.go | 28 + pkg/common/wechat/access_token.go | 82 + pkg/common/wechat/tempate/template.go | 209 + pkg/common/wechat/tempate/template_test.go | 46 + pkg/common/wechat/wechat.go | 339 + pkg/common/wechat/wechat_test.go | 84 + pkg/config/config.go | 33 + pkg/domain/account.go | 1 + pkg/domain/coin.go | 1 + pkg/domain/msg_code.go | 203 + pkg/domain/msg_code_test.go | 78 + pkg/e/code.go | 90 + pkg/e/msg.go | 75 + .../external/mail/webmail_account.go | 331 + .../external/mail/webmail_account_test.go | 125 + pkg/infrsatructure/external/mail_account.go | 254 + .../external/mail_account_test.go | 76 + pkg/m/msg.go | 63 + pkg/model/init.go | 72 + pkg/model/login_log.go | 30 + pkg/model/migration.go | 80 + pkg/model/real_name.go | 23 + pkg/model/refresh_token.go | 23 + pkg/model/user.go | 298 + pkg/model/user_test.go | 186 + pkg/serializer/user.go | 107 + pkg/serializer/user_test.go | 31 + pkg/service/account.go | 905 ++ 85 files changed, 22558 insertions(+) create mode 100644 .gitignore create mode 100644 api/account/account.pb.go create mode 100644 api/account/account.proto create mode 100644 api/account/account.validator.pb.go create mode 100644 api/account/account_triple.pb.go create mode 100644 cmd/app.go create mode 100644 cmd/config/config.go create mode 100644 cmd/config/nacos.go create mode 100644 conf/.gitignore create mode 100644 docs/account.sql create mode 100644 docs/env/ali/conf.ini create mode 100644 docs/env/ali/dubbogo.yaml create mode 100644 docs/env/ali/log.yaml create mode 100644 docs/env/ali/sdk.yaml create mode 100644 docs/env/dev/conf.ini create mode 100644 docs/env/dev/dubbogo.yaml create mode 100644 docs/env/dev/log.yaml create mode 100644 docs/env/dev/sdk.yaml create mode 100644 docs/env/local/conf.ini create mode 100644 docs/env/local/dubbogo.yaml create mode 100644 docs/env/local/log.yaml create mode 100644 docs/env/local/sdk.yaml create mode 100644 go.mod create mode 100644 go.sum create mode 100644 pkg/application/coin.go create mode 100644 pkg/application/init.go create mode 100644 pkg/application/order.go create mode 100644 pkg/application/order_test.go create mode 100644 pkg/application/token.go create mode 100644 pkg/application/user.go create mode 100644 pkg/application/wechat.go create mode 100644 pkg/blockchain/common.go create mode 100644 pkg/cache/common.go create mode 100644 pkg/cache/common_test.go create mode 100644 pkg/common/dingding/ding.go create mode 100644 pkg/common/encryption/encryption.go create mode 100644 pkg/common/filter/filter.go create mode 100644 pkg/common/jwt/jwt.go create mode 100644 pkg/common/jwt/jwt_test.go create mode 100644 pkg/common/log/gorm.go create mode 100644 pkg/common/log/init.go create mode 100644 pkg/common/log/log.go create mode 100644 pkg/common/log/logging.go create mode 100644 pkg/common/page/page.go create mode 100644 pkg/common/redis_key/redis_key.go create mode 100644 pkg/common/utils/idnum/idnum.go create mode 100644 pkg/common/utils/idnum/idnum_net.go create mode 100644 pkg/common/utils/idnum/idnum_test.go create mode 100644 pkg/common/utils/ip.go create mode 100644 pkg/common/utils/ip_test.go create mode 100644 pkg/common/utils/phone.go create mode 100644 pkg/common/utils/phone_test.go create mode 100644 pkg/common/utils/time.go create mode 100644 pkg/common/utils/ucode.go create mode 100644 pkg/common/utils/utils.go create mode 100644 pkg/common/utils/utils_test.go create mode 100644 pkg/common/verifica/mobile.go create mode 100644 pkg/common/verifica/mobile_test.go create mode 100644 pkg/common/wechat/access_token.go create mode 100644 pkg/common/wechat/tempate/template.go create mode 100644 pkg/common/wechat/tempate/template_test.go create mode 100644 pkg/common/wechat/wechat.go create mode 100644 pkg/common/wechat/wechat_test.go create mode 100644 pkg/config/config.go create mode 100644 pkg/domain/account.go create mode 100644 pkg/domain/coin.go create mode 100644 pkg/domain/msg_code.go create mode 100644 pkg/domain/msg_code_test.go create mode 100644 pkg/e/code.go create mode 100644 pkg/e/msg.go create mode 100644 pkg/infrsatructure/external/mail/webmail_account.go create mode 100644 pkg/infrsatructure/external/mail/webmail_account_test.go create mode 100644 pkg/infrsatructure/external/mail_account.go create mode 100644 pkg/infrsatructure/external/mail_account_test.go create mode 100644 pkg/m/msg.go create mode 100644 pkg/model/init.go create mode 100644 pkg/model/login_log.go create mode 100644 pkg/model/migration.go create mode 100644 pkg/model/real_name.go create mode 100644 pkg/model/refresh_token.go create mode 100644 pkg/model/user.go create mode 100644 pkg/model/user_test.go create mode 100644 pkg/serializer/user.go create mode 100644 pkg/serializer/user_test.go create mode 100644 pkg/service/account.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8720896 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Dependency directories (remove the comment below to include it) +# vendor/ +logs.log +.idea +/docs/utils/ +/cmd/logs/* +/cmd/cache/* +/cmd/log/* +/conf/conf.ini +/conf/dubbogo.yaml +/conf/sdk.yaml +/conf/log.yaml diff --git a/api/account/account.pb.go b/api/account/account.pb.go new file mode 100644 index 0000000..f58e1c0 --- /dev/null +++ b/api/account/account.pb.go @@ -0,0 +1,9852 @@ +// +// Licensed to the Apache Software Foundation (ASF) under one or more +// contributor license agreements. See the NOTICE file distributed with +// this work for additional information regarding copyright ownership. +// The ASF licenses this file to You under the Apache License, Version 2.0 +// (the "License"); you may not use this file except in compliance with +// the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v4.24.0--rc1 +// source: api/account/account.proto + +package account + +import ( + _ "github.com/mwitkow/go-proto-validators" + 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 CheckRealNameResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *CheckRealNameResponse) Reset() { + *x = CheckRealNameResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckRealNameResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckRealNameResponse) ProtoMessage() {} + +func (x *CheckRealNameResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_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 CheckRealNameResponse.ProtoReflect.Descriptor instead. +func (*CheckRealNameResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{0} +} + +func (x *CheckRealNameResponse) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *CheckRealNameResponse) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +type CheckRealNameRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Pass bool `protobuf:"varint,2,opt,name=pass,proto3" json:"pass,omitempty"` + NotPassRemarks string `protobuf:"bytes,3,opt,name=notPassRemarks,proto3" json:"notPassRemarks,omitempty"` +} + +func (x *CheckRealNameRequest) Reset() { + *x = CheckRealNameRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckRealNameRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckRealNameRequest) ProtoMessage() {} + +func (x *CheckRealNameRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_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 CheckRealNameRequest.ProtoReflect.Descriptor instead. +func (*CheckRealNameRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{1} +} + +func (x *CheckRealNameRequest) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *CheckRealNameRequest) GetPass() bool { + if x != nil { + return x.Pass + } + return false +} + +func (x *CheckRealNameRequest) GetNotPassRemarks() string { + if x != nil { + return x.NotPassRemarks + } + return "" +} + +type UserListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Count uint64 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` + Page uint64 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"` + PageSize uint64 `protobuf:"varint,3,opt,name=pageSize,proto3" json:"pageSize,omitempty"` + UserList []*UserListInfo `protobuf:"bytes,4,rep,name=userList,proto3" json:"userList,omitempty"` +} + +func (x *UserListResponse) Reset() { + *x = UserListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserListResponse) ProtoMessage() {} + +func (x *UserListResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_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 UserListResponse.ProtoReflect.Descriptor instead. +func (*UserListResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{2} +} + +func (x *UserListResponse) GetCount() uint64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *UserListResponse) GetPage() uint64 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *UserListResponse) GetPageSize() uint64 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *UserListResponse) GetUserList() []*UserListInfo { + if x != nil { + return x.UserList + } + return nil +} + +type UserListInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Status int32 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Sex int32 `protobuf:"varint,4,opt,name=sex,proto3" json:"sex,omitempty"` + Nationality string `protobuf:"bytes,5,opt,name=nationality,proto3" json:"nationality,omitempty"` + DocumentType int32 `protobuf:"varint,6,opt,name=documentType,proto3" json:"documentType,omitempty"` + CertificatePicture string `protobuf:"bytes,7,opt,name=certificatePicture,proto3" json:"certificatePicture,omitempty"` + Validity string `protobuf:"bytes,8,opt,name=validity,proto3" json:"validity,omitempty"` + PlaceOfResidence string `protobuf:"bytes,9,opt,name=placeOfResidence,proto3" json:"placeOfResidence,omitempty"` + GroupPhoto string `protobuf:"bytes,10,opt,name=groupPhoto,proto3" json:"groupPhoto,omitempty"` + Attachment string `protobuf:"bytes,11,opt,name=attachment,proto3" json:"attachment,omitempty"` + RegistrationTime string `protobuf:"bytes,12,opt,name=registrationTime,proto3" json:"registrationTime,omitempty"` + AuditTime string `protobuf:"bytes,13,opt,name=auditTime,proto3" json:"auditTime,omitempty"` + SubNum string `protobuf:"bytes,14,opt,name=subNum,proto3" json:"subNum,omitempty"` + NotPassRemarks string `protobuf:"bytes,15,opt,name=notPassRemarks,proto3" json:"notPassRemarks,omitempty"` + TelNum string `protobuf:"bytes,16,opt,name=telNum,proto3" json:"telNum,omitempty"` +} + +func (x *UserListInfo) Reset() { + *x = UserListInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserListInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserListInfo) ProtoMessage() {} + +func (x *UserListInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_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 UserListInfo.ProtoReflect.Descriptor instead. +func (*UserListInfo) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{3} +} + +func (x *UserListInfo) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *UserListInfo) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *UserListInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *UserListInfo) GetSex() int32 { + if x != nil { + return x.Sex + } + return 0 +} + +func (x *UserListInfo) GetNationality() string { + if x != nil { + return x.Nationality + } + return "" +} + +func (x *UserListInfo) GetDocumentType() int32 { + if x != nil { + return x.DocumentType + } + return 0 +} + +func (x *UserListInfo) GetCertificatePicture() string { + if x != nil { + return x.CertificatePicture + } + return "" +} + +func (x *UserListInfo) GetValidity() string { + if x != nil { + return x.Validity + } + return "" +} + +func (x *UserListInfo) GetPlaceOfResidence() string { + if x != nil { + return x.PlaceOfResidence + } + return "" +} + +func (x *UserListInfo) GetGroupPhoto() string { + if x != nil { + return x.GroupPhoto + } + return "" +} + +func (x *UserListInfo) GetAttachment() string { + if x != nil { + return x.Attachment + } + return "" +} + +func (x *UserListInfo) GetRegistrationTime() string { + if x != nil { + return x.RegistrationTime + } + return "" +} + +func (x *UserListInfo) GetAuditTime() string { + if x != nil { + return x.AuditTime + } + return "" +} + +func (x *UserListInfo) GetSubNum() string { + if x != nil { + return x.SubNum + } + return "" +} + +func (x *UserListInfo) GetNotPassRemarks() string { + if x != nil { + return x.NotPassRemarks + } + return "" +} + +func (x *UserListInfo) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +type UserListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"` + SubNum string `protobuf:"bytes,2,opt,name=subNum,proto3" json:"subNum,omitempty"` + RealNameOrNot int32 `protobuf:"varint,3,opt,name=realNameOrNot,proto3" json:"realNameOrNot,omitempty"` + Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` + Sex int32 `protobuf:"varint,5,opt,name=sex,proto3" json:"sex,omitempty"` + DocumentType int32 `protobuf:"varint,6,opt,name=documentType,proto3" json:"documentType,omitempty"` + AuditStatus int32 `protobuf:"varint,7,opt,name=auditStatus,proto3" json:"auditStatus,omitempty"` + Page uint64 `protobuf:"varint,8,opt,name=page,proto3" json:"page,omitempty"` + PageSize uint64 `protobuf:"varint,9,opt,name=pageSize,proto3" json:"pageSize,omitempty"` +} + +func (x *UserListRequest) Reset() { + *x = UserListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserListRequest) ProtoMessage() {} + +func (x *UserListRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_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 UserListRequest.ProtoReflect.Descriptor instead. +func (*UserListRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{4} +} + +func (x *UserListRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *UserListRequest) GetSubNum() string { + if x != nil { + return x.SubNum + } + return "" +} + +func (x *UserListRequest) GetRealNameOrNot() int32 { + if x != nil { + return x.RealNameOrNot + } + return 0 +} + +func (x *UserListRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *UserListRequest) GetSex() int32 { + if x != nil { + return x.Sex + } + return 0 +} + +func (x *UserListRequest) GetDocumentType() int32 { + if x != nil { + return x.DocumentType + } + return 0 +} + +func (x *UserListRequest) GetAuditStatus() int32 { + if x != nil { + return x.AuditStatus + } + return 0 +} + +func (x *UserListRequest) GetPage() uint64 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *UserListRequest) GetPageSize() uint64 { + if x != nil { + return x.PageSize + } + return 0 +} + +type UserInfoResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Status int32 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Sex int32 `protobuf:"varint,4,opt,name=sex,proto3" json:"sex,omitempty"` + Nationality string `protobuf:"bytes,5,opt,name=nationality,proto3" json:"nationality,omitempty"` + DocumentType int32 `protobuf:"varint,6,opt,name=documentType,proto3" json:"documentType,omitempty"` + CertificatePicture string `protobuf:"bytes,7,opt,name=certificatePicture,proto3" json:"certificatePicture,omitempty"` + Validity string `protobuf:"bytes,8,opt,name=validity,proto3" json:"validity,omitempty"` + PlaceOfResidence string `protobuf:"bytes,9,opt,name=placeOfResidence,proto3" json:"placeOfResidence,omitempty"` + GroupPhoto string `protobuf:"bytes,10,opt,name=groupPhoto,proto3" json:"groupPhoto,omitempty"` + Attachment string `protobuf:"bytes,11,opt,name=attachment,proto3" json:"attachment,omitempty"` + SubNum string `protobuf:"bytes,12,opt,name=subNum,proto3" json:"subNum,omitempty"` + NotPassRemarks string `protobuf:"bytes,13,opt,name=notPassRemarks,proto3" json:"notPassRemarks,omitempty"` +} + +func (x *UserInfoResponse) Reset() { + *x = UserInfoResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserInfoResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserInfoResponse) ProtoMessage() {} + +func (x *UserInfoResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_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 UserInfoResponse.ProtoReflect.Descriptor instead. +func (*UserInfoResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{5} +} + +func (x *UserInfoResponse) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *UserInfoResponse) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *UserInfoResponse) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *UserInfoResponse) GetSex() int32 { + if x != nil { + return x.Sex + } + return 0 +} + +func (x *UserInfoResponse) GetNationality() string { + if x != nil { + return x.Nationality + } + return "" +} + +func (x *UserInfoResponse) GetDocumentType() int32 { + if x != nil { + return x.DocumentType + } + return 0 +} + +func (x *UserInfoResponse) GetCertificatePicture() string { + if x != nil { + return x.CertificatePicture + } + return "" +} + +func (x *UserInfoResponse) GetValidity() string { + if x != nil { + return x.Validity + } + return "" +} + +func (x *UserInfoResponse) GetPlaceOfResidence() string { + if x != nil { + return x.PlaceOfResidence + } + return "" +} + +func (x *UserInfoResponse) GetGroupPhoto() string { + if x != nil { + return x.GroupPhoto + } + return "" +} + +func (x *UserInfoResponse) GetAttachment() string { + if x != nil { + return x.Attachment + } + return "" +} + +func (x *UserInfoResponse) GetSubNum() string { + if x != nil { + return x.SubNum + } + return "" +} + +func (x *UserInfoResponse) GetNotPassRemarks() string { + if x != nil { + return x.NotPassRemarks + } + return "" +} + +type RealNameResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *RealNameResponse) Reset() { + *x = RealNameResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RealNameResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RealNameResponse) ProtoMessage() {} + +func (x *RealNameResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_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 RealNameResponse.ProtoReflect.Descriptor instead. +func (*RealNameResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{6} +} + +func (x *RealNameResponse) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *RealNameResponse) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +type RealNameRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Sex int32 `protobuf:"varint,3,opt,name=sex,proto3" json:"sex,omitempty"` + Nationality string `protobuf:"bytes,4,opt,name=nationality,proto3" json:"nationality,omitempty"` + DocumentType int32 `protobuf:"varint,5,opt,name=documentType,proto3" json:"documentType,omitempty"` + CertificatePicture string `protobuf:"bytes,6,opt,name=certificatePicture,proto3" json:"certificatePicture,omitempty"` + Validity string `protobuf:"bytes,7,opt,name=validity,proto3" json:"validity,omitempty"` + PlaceOfResidence string `protobuf:"bytes,8,opt,name=placeOfResidence,proto3" json:"placeOfResidence,omitempty"` + GroupPhoto string `protobuf:"bytes,9,opt,name=groupPhoto,proto3" json:"groupPhoto,omitempty"` + Attachment string `protobuf:"bytes,10,opt,name=attachment,proto3" json:"attachment,omitempty"` +} + +func (x *RealNameRequest) Reset() { + *x = RealNameRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RealNameRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RealNameRequest) ProtoMessage() {} + +func (x *RealNameRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_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 RealNameRequest.ProtoReflect.Descriptor instead. +func (*RealNameRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{7} +} + +func (x *RealNameRequest) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *RealNameRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RealNameRequest) GetSex() int32 { + if x != nil { + return x.Sex + } + return 0 +} + +func (x *RealNameRequest) GetNationality() string { + if x != nil { + return x.Nationality + } + return "" +} + +func (x *RealNameRequest) GetDocumentType() int32 { + if x != nil { + return x.DocumentType + } + return 0 +} + +func (x *RealNameRequest) GetCertificatePicture() string { + if x != nil { + return x.CertificatePicture + } + return "" +} + +func (x *RealNameRequest) GetValidity() string { + if x != nil { + return x.Validity + } + return "" +} + +func (x *RealNameRequest) GetPlaceOfResidence() string { + if x != nil { + return x.PlaceOfResidence + } + return "" +} + +func (x *RealNameRequest) GetGroupPhoto() string { + if x != nil { + return x.GroupPhoto + } + return "" +} + +func (x *RealNameRequest) GetAttachment() string { + if x != nil { + return x.Attachment + } + return "" +} + +type RegisterResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + Status uint64 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"` + Token string `protobuf:"bytes,3,opt,name=token,proto3" json:"token,omitempty"` +} + +func (x *RegisterResponse) Reset() { + *x = RegisterResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegisterResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegisterResponse) ProtoMessage() {} + +func (x *RegisterResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_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 RegisterResponse.ProtoReflect.Descriptor instead. +func (*RegisterResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{8} +} + +func (x *RegisterResponse) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *RegisterResponse) GetStatus() uint64 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *RegisterResponse) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +type UsersByJobNumRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"` + JobNum []string `protobuf:"bytes,2,rep,name=jobNum,proto3" json:"jobNum,omitempty"` +} + +func (x *UsersByJobNumRequest) Reset() { + *x = UsersByJobNumRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UsersByJobNumRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UsersByJobNumRequest) ProtoMessage() {} + +func (x *UsersByJobNumRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_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 UsersByJobNumRequest.ProtoReflect.Descriptor instead. +func (*UsersByJobNumRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{9} +} + +func (x *UsersByJobNumRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *UsersByJobNumRequest) GetJobNum() []string { + if x != nil { + return x.JobNum + } + return nil +} + +type QueryPersonnelWithTheSameNameRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` + Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *QueryPersonnelWithTheSameNameRequest) Reset() { + *x = QueryPersonnelWithTheSameNameRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryPersonnelWithTheSameNameRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryPersonnelWithTheSameNameRequest) ProtoMessage() {} + +func (x *QueryPersonnelWithTheSameNameRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_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 QueryPersonnelWithTheSameNameRequest.ProtoReflect.Descriptor instead. +func (*QueryPersonnelWithTheSameNameRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{10} +} + +func (x *QueryPersonnelWithTheSameNameRequest) GetNames() []string { + if x != nil { + return x.Names + } + return nil +} + +func (x *QueryPersonnelWithTheSameNameRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *QueryPersonnelWithTheSameNameRequest) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +type QueryPersonnelWithTheSameNameResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` + Count uint64 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *QueryPersonnelWithTheSameNameResponse) Reset() { + *x = QueryPersonnelWithTheSameNameResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryPersonnelWithTheSameNameResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryPersonnelWithTheSameNameResponse) ProtoMessage() {} + +func (x *QueryPersonnelWithTheSameNameResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QueryPersonnelWithTheSameNameResponse.ProtoReflect.Descriptor instead. +func (*QueryPersonnelWithTheSameNameResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{11} +} + +func (x *QueryPersonnelWithTheSameNameResponse) GetNames() []string { + if x != nil { + return x.Names + } + return nil +} + +func (x *QueryPersonnelWithTheSameNameResponse) GetCount() uint64 { + if x != nil { + return x.Count + } + return 0 +} + +type ListV2Request struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"` + PageSize uint64 `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"` + Page uint64 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"` + Key string `protobuf:"bytes,4,opt,name=key,proto3" json:"key,omitempty"` + NickName string `protobuf:"bytes,5,opt,name=nickName,proto3" json:"nickName,omitempty"` + TelNum string `protobuf:"bytes,6,opt,name=telNum,proto3" json:"telNum,omitempty"` + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` + PositionName string `protobuf:"bytes,8,opt,name=positionName,proto3" json:"positionName,omitempty"` + JobNum string `protobuf:"bytes,9,opt,name=jobNum,proto3" json:"jobNum,omitempty"` + MailAccount string `protobuf:"bytes,10,opt,name=mailAccount,proto3" json:"mailAccount,omitempty"` + StartEnterDate string `protobuf:"bytes,11,opt,name=startEnterDate,proto3" json:"startEnterDate,omitempty"` + EndEnterDate string `protobuf:"bytes,12,opt,name=endEnterDate,proto3" json:"endEnterDate,omitempty"` + PositionId uint32 `protobuf:"varint,13,opt,name=positionId,proto3" json:"positionId,omitempty"` + DepartmentId uint32 `protobuf:"varint,14,opt,name=departmentId,proto3" json:"departmentId,omitempty"` + DepartmentName string `protobuf:"bytes,15,opt,name=departmentName,proto3" json:"departmentName,omitempty"` + DepartmentNames []string `protobuf:"bytes,16,rep,name=departmentNames,proto3" json:"departmentNames,omitempty"` + PositionIds []uint32 `protobuf:"varint,17,rep,packed,name=positionIds,proto3" json:"positionIds,omitempty"` + DepartmentIds []uint32 `protobuf:"varint,18,rep,packed,name=departmentIds,proto3" json:"departmentIds,omitempty"` +} + +func (x *ListV2Request) Reset() { + *x = ListV2Request{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListV2Request) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListV2Request) ProtoMessage() {} + +func (x *ListV2Request) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListV2Request.ProtoReflect.Descriptor instead. +func (*ListV2Request) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{12} +} + +func (x *ListV2Request) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *ListV2Request) GetPageSize() uint64 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListV2Request) GetPage() uint64 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ListV2Request) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *ListV2Request) GetNickName() string { + if x != nil { + return x.NickName + } + return "" +} + +func (x *ListV2Request) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +func (x *ListV2Request) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ListV2Request) GetPositionName() string { + if x != nil { + return x.PositionName + } + return "" +} + +func (x *ListV2Request) GetJobNum() string { + if x != nil { + return x.JobNum + } + return "" +} + +func (x *ListV2Request) GetMailAccount() string { + if x != nil { + return x.MailAccount + } + return "" +} + +func (x *ListV2Request) GetStartEnterDate() string { + if x != nil { + return x.StartEnterDate + } + return "" +} + +func (x *ListV2Request) GetEndEnterDate() string { + if x != nil { + return x.EndEnterDate + } + return "" +} + +func (x *ListV2Request) GetPositionId() uint32 { + if x != nil { + return x.PositionId + } + return 0 +} + +func (x *ListV2Request) GetDepartmentId() uint32 { + if x != nil { + return x.DepartmentId + } + return 0 +} + +func (x *ListV2Request) GetDepartmentName() string { + if x != nil { + return x.DepartmentName + } + return "" +} + +func (x *ListV2Request) GetDepartmentNames() []string { + if x != nil { + return x.DepartmentNames + } + return nil +} + +func (x *ListV2Request) GetPositionIds() []uint32 { + if x != nil { + return x.PositionIds + } + return nil +} + +func (x *ListV2Request) GetDepartmentIds() []uint32 { + if x != nil { + return x.DepartmentIds + } + return nil +} + +type SendClockInWechatRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"` + TelNum string `protobuf:"bytes,2,opt,name=telNum,proto3" json:"telNum,omitempty"` + OperatedAt string `protobuf:"bytes,3,opt,name=operatedAt,proto3" json:"operatedAt,omitempty"` + ClockType string `protobuf:"bytes,4,opt,name=clockType,proto3" json:"clockType,omitempty"` + UserId uint32 `protobuf:"varint,5,opt,name=userId,proto3" json:"userId,omitempty"` + GhId string `protobuf:"bytes,6,opt,name=ghId,proto3" json:"ghId,omitempty"` + Address string `protobuf:"bytes,7,opt,name=address,proto3" json:"address,omitempty"` + LogId uint64 `protobuf:"varint,8,opt,name=logId,proto3" json:"logId,omitempty"` +} + +func (x *SendClockInWechatRequest) Reset() { + *x = SendClockInWechatRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendClockInWechatRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendClockInWechatRequest) ProtoMessage() {} + +func (x *SendClockInWechatRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendClockInWechatRequest.ProtoReflect.Descriptor instead. +func (*SendClockInWechatRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{13} +} + +func (x *SendClockInWechatRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *SendClockInWechatRequest) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +func (x *SendClockInWechatRequest) GetOperatedAt() string { + if x != nil { + return x.OperatedAt + } + return "" +} + +func (x *SendClockInWechatRequest) GetClockType() string { + if x != nil { + return x.ClockType + } + return "" +} + +func (x *SendClockInWechatRequest) GetUserId() uint32 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *SendClockInWechatRequest) GetGhId() string { + if x != nil { + return x.GhId + } + return "" +} + +func (x *SendClockInWechatRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *SendClockInWechatRequest) GetLogId() uint64 { + if x != nil { + return x.LogId + } + return 0 +} + +type MailAccountByNickNameRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + NickName string `protobuf:"bytes,2,opt,name=NickName,json=nickName,proto3" json:"NickName,omitempty"` + ID uint32 `protobuf:"varint,3,opt,name=ID,proto3" json:"ID,omitempty"` +} + +func (x *MailAccountByNickNameRequest) Reset() { + *x = MailAccountByNickNameRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MailAccountByNickNameRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MailAccountByNickNameRequest) ProtoMessage() {} + +func (x *MailAccountByNickNameRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MailAccountByNickNameRequest.ProtoReflect.Descriptor instead. +func (*MailAccountByNickNameRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{14} +} + +func (x *MailAccountByNickNameRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *MailAccountByNickNameRequest) GetNickName() string { + if x != nil { + return x.NickName + } + return "" +} + +func (x *MailAccountByNickNameRequest) GetID() uint32 { + if x != nil { + return x.ID + } + return 0 +} + +type CreateMaiAccountRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + NickName string `protobuf:"bytes,2,opt,name=nickName,proto3" json:"nickName,omitempty"` + Domain string `protobuf:"bytes,3,opt,name=domain,proto3" json:"domain,omitempty"` +} + +func (x *CreateMaiAccountRequest) Reset() { + *x = CreateMaiAccountRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateMaiAccountRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateMaiAccountRequest) ProtoMessage() {} + +func (x *CreateMaiAccountRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateMaiAccountRequest.ProtoReflect.Descriptor instead. +func (*CreateMaiAccountRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{15} +} + +func (x *CreateMaiAccountRequest) GetID() uint32 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *CreateMaiAccountRequest) GetNickName() string { + if x != nil { + return x.NickName + } + return "" +} + +func (x *CreateMaiAccountRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +type MaiAccountResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EnglishName string `protobuf:"bytes,1,opt,name=englishName,proto3" json:"englishName,omitempty"` + MailAccount string `protobuf:"bytes,2,opt,name=mailAccount,proto3" json:"mailAccount,omitempty"` +} + +func (x *MaiAccountResponse) Reset() { + *x = MaiAccountResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MaiAccountResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MaiAccountResponse) ProtoMessage() {} + +func (x *MaiAccountResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MaiAccountResponse.ProtoReflect.Descriptor instead. +func (*MaiAccountResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{16} +} + +func (x *MaiAccountResponse) GetEnglishName() string { + if x != nil { + return x.EnglishName + } + return "" +} + +func (x *MaiAccountResponse) GetMailAccount() string { + if x != nil { + return x.MailAccount + } + return "" +} + +type FddCreateUserRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Openid string `protobuf:"bytes,1,opt,name=openid,proto3" json:"openid,omitempty"` + WxUserId uint32 `protobuf:"varint,2,opt,name=wxUserId,proto3" json:"wxUserId,omitempty"` + //string UserId = 3; + CustomerId string `protobuf:"bytes,4,opt,name=customerId,proto3" json:"customerId,omitempty"` + IsVerify bool `protobuf:"varint,5,opt,name=isVerify,proto3" json:"isVerify,omitempty"` + TransactionNo string `protobuf:"bytes,6,opt,name=transactionNo,proto3" json:"transactionNo,omitempty"` +} + +func (x *FddCreateUserRequest) Reset() { + *x = FddCreateUserRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FddCreateUserRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FddCreateUserRequest) ProtoMessage() {} + +func (x *FddCreateUserRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FddCreateUserRequest.ProtoReflect.Descriptor instead. +func (*FddCreateUserRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{17} +} + +func (x *FddCreateUserRequest) GetOpenid() string { + if x != nil { + return x.Openid + } + return "" +} + +func (x *FddCreateUserRequest) GetWxUserId() uint32 { + if x != nil { + return x.WxUserId + } + return 0 +} + +func (x *FddCreateUserRequest) GetCustomerId() string { + if x != nil { + return x.CustomerId + } + return "" +} + +func (x *FddCreateUserRequest) GetIsVerify() bool { + if x != nil { + return x.IsVerify + } + return false +} + +func (x *FddCreateUserRequest) GetTransactionNo() string { + if x != nil { + return x.TransactionNo + } + return "" +} + +type WxBoxUserInfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Openid string `protobuf:"bytes,2,opt,name=openid,proto3" json:"openid,omitempty"` + GhId string `protobuf:"bytes,3,opt,name=ghId,proto3" json:"ghId,omitempty"` +} + +func (x *WxBoxUserInfoRequest) Reset() { + *x = WxBoxUserInfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WxBoxUserInfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WxBoxUserInfoRequest) ProtoMessage() {} + +func (x *WxBoxUserInfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WxBoxUserInfoRequest.ProtoReflect.Descriptor instead. +func (*WxBoxUserInfoRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{18} +} + +func (x *WxBoxUserInfoRequest) GetOpenid() string { + if x != nil { + return x.Openid + } + return "" +} + +func (x *WxBoxUserInfoRequest) GetGhId() string { + if x != nil { + return x.GhId + } + return "" +} + +type WxGetOpenIdByCodeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + State string `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + GhId string `protobuf:"bytes,3,opt,name=ghId,proto3" json:"ghId,omitempty"` +} + +func (x *WxGetOpenIdByCodeRequest) Reset() { + *x = WxGetOpenIdByCodeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WxGetOpenIdByCodeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WxGetOpenIdByCodeRequest) ProtoMessage() {} + +func (x *WxGetOpenIdByCodeRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WxGetOpenIdByCodeRequest.ProtoReflect.Descriptor instead. +func (*WxGetOpenIdByCodeRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{19} +} + +func (x *WxGetOpenIdByCodeRequest) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *WxGetOpenIdByCodeRequest) GetState() string { + if x != nil { + return x.State + } + return "" +} + +func (x *WxGetOpenIdByCodeRequest) GetGhId() string { + if x != nil { + return x.GhId + } + return "" +} + +type WxGetOpenIdByCodeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OpenId string `protobuf:"bytes,1,opt,name=openId,proto3" json:"openId,omitempty"` +} + +func (x *WxGetOpenIdByCodeResponse) Reset() { + *x = WxGetOpenIdByCodeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WxGetOpenIdByCodeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WxGetOpenIdByCodeResponse) ProtoMessage() {} + +func (x *WxGetOpenIdByCodeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WxGetOpenIdByCodeResponse.ProtoReflect.Descriptor instead. +func (*WxGetOpenIdByCodeResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{20} +} + +func (x *WxGetOpenIdByCodeResponse) GetOpenId() string { + if x != nil { + return x.OpenId + } + return "" +} + +type WxBoxTelNumByCodeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TelNum string `protobuf:"bytes,1,opt,name=telNum,proto3" json:"telNum,omitempty"` +} + +func (x *WxBoxTelNumByCodeResponse) Reset() { + *x = WxBoxTelNumByCodeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WxBoxTelNumByCodeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WxBoxTelNumByCodeResponse) ProtoMessage() {} + +func (x *WxBoxTelNumByCodeResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WxBoxTelNumByCodeResponse.ProtoReflect.Descriptor instead. +func (*WxBoxTelNumByCodeResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{21} +} + +func (x *WxBoxTelNumByCodeResponse) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +type WxBoxUserInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OpenId string `protobuf:"bytes,1,opt,name=openId,proto3" json:"openId,omitempty"` + GhId string `protobuf:"bytes,2,opt,name=ghId,proto3" json:"ghId,omitempty"` + IsNew bool `protobuf:"varint,3,opt,name=isNew,proto3" json:"isNew,omitempty"` + User *UserInfo `protobuf:"bytes,4,opt,name=user,proto3" json:"user,omitempty"` + WxUserId uint32 `protobuf:"varint,5,opt,name=wxUserId,proto3" json:"wxUserId,omitempty"` + Fdd *FddInfo `protobuf:"bytes,6,opt,name=fdd,proto3" json:"fdd,omitempty"` +} + +func (x *WxBoxUserInfo) Reset() { + *x = WxBoxUserInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WxBoxUserInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WxBoxUserInfo) ProtoMessage() {} + +func (x *WxBoxUserInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WxBoxUserInfo.ProtoReflect.Descriptor instead. +func (*WxBoxUserInfo) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{22} +} + +func (x *WxBoxUserInfo) GetOpenId() string { + if x != nil { + return x.OpenId + } + return "" +} + +func (x *WxBoxUserInfo) GetGhId() string { + if x != nil { + return x.GhId + } + return "" +} + +func (x *WxBoxUserInfo) GetIsNew() bool { + if x != nil { + return x.IsNew + } + return false +} + +func (x *WxBoxUserInfo) GetUser() *UserInfo { + if x != nil { + return x.User + } + return nil +} + +func (x *WxBoxUserInfo) GetWxUserId() uint32 { + if x != nil { + return x.WxUserId + } + return 0 +} + +func (x *WxBoxUserInfo) GetFdd() *FddInfo { + if x != nil { + return x.Fdd + } + return nil +} + +type FddInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + CustomerId string `protobuf:"bytes,2,opt,name=customerId,proto3" json:"customerId,omitempty"` + IsVerify bool `protobuf:"varint,3,opt,name=isVerify,proto3" json:"isVerify,omitempty"` + TransactionNo string `protobuf:"bytes,4,opt,name=transactionNo,proto3" json:"transactionNo,omitempty"` +} + +func (x *FddInfo) Reset() { + *x = FddInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FddInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FddInfo) ProtoMessage() {} + +func (x *FddInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FddInfo.ProtoReflect.Descriptor instead. +func (*FddInfo) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{23} +} + +func (x *FddInfo) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *FddInfo) GetCustomerId() string { + if x != nil { + return x.CustomerId + } + return "" +} + +func (x *FddInfo) GetIsVerify() bool { + if x != nil { + return x.IsVerify + } + return false +} + +func (x *FddInfo) GetTransactionNo() string { + if x != nil { + return x.TransactionNo + } + return "" +} + +type UserInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + NickName string `protobuf:"bytes,3,opt,name=nickName,proto3" json:"nickName,omitempty"` + TelNum string `protobuf:"bytes,5,opt,name=telNum,proto3" json:"telNum,omitempty"` + Avatar string `protobuf:"bytes,7,opt,name=avatar,proto3" json:"avatar,omitempty"` + CreateAt string `protobuf:"bytes,8,opt,name=createAt,proto3" json:"createAt,omitempty"` + RealNameID uint64 `protobuf:"varint,9,opt,name=realNameID,proto3" json:"realNameID,omitempty"` + RealName string `protobuf:"bytes,10,opt,name=realName,proto3" json:"realName,omitempty"` + IDNum string `protobuf:"bytes,11,opt,name=iDNum,proto3" json:"iDNum,omitempty"` + Domain string `protobuf:"bytes,12,opt,name=domain,proto3" json:"domain,omitempty"` + RealIDImgA string `protobuf:"bytes,17,opt,name=realIDImgA,proto3" json:"realIDImgA,omitempty"` + RealIDImgB string `protobuf:"bytes,18,opt,name=realIDImgB,proto3" json:"realIDImgB,omitempty"` + RealNameIDName string `protobuf:"bytes,19,opt,name=realNameIDName,proto3" json:"realNameIDName,omitempty"` + Video string `protobuf:"bytes,20,opt,name=video,proto3" json:"video,omitempty"` +} + +func (x *UserInfo) Reset() { + *x = UserInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserInfo) ProtoMessage() {} + +func (x *UserInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserInfo.ProtoReflect.Descriptor instead. +func (*UserInfo) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{24} +} + +func (x *UserInfo) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *UserInfo) GetNickName() string { + if x != nil { + return x.NickName + } + return "" +} + +func (x *UserInfo) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +func (x *UserInfo) GetAvatar() string { + if x != nil { + return x.Avatar + } + return "" +} + +func (x *UserInfo) GetCreateAt() string { + if x != nil { + return x.CreateAt + } + return "" +} + +func (x *UserInfo) GetRealNameID() uint64 { + if x != nil { + return x.RealNameID + } + return 0 +} + +func (x *UserInfo) GetRealName() string { + if x != nil { + return x.RealName + } + return "" +} + +func (x *UserInfo) GetIDNum() string { + if x != nil { + return x.IDNum + } + return "" +} + +func (x *UserInfo) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *UserInfo) GetRealIDImgA() string { + if x != nil { + return x.RealIDImgA + } + return "" +} + +func (x *UserInfo) GetRealIDImgB() string { + if x != nil { + return x.RealIDImgB + } + return "" +} + +func (x *UserInfo) GetRealNameIDName() string { + if x != nil { + return x.RealNameIDName + } + return "" +} + +func (x *UserInfo) GetVideo() string { + if x != nil { + return x.Video + } + return "" +} + +type CommonRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` +} + +func (x *CommonRequest) Reset() { + *x = CommonRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CommonRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommonRequest) ProtoMessage() {} + +func (x *CommonRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CommonRequest.ProtoReflect.Descriptor instead. +func (*CommonRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{25} +} + +func (x *CommonRequest) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +type WxAppRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + GhId string `protobuf:"bytes,1,opt,name=GhId,json=ID,proto3" json:"GhId,omitempty"` +} + +func (x *WxAppRequest) Reset() { + *x = WxAppRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WxAppRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WxAppRequest) ProtoMessage() {} + +func (x *WxAppRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[26] + 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 WxAppRequest.ProtoReflect.Descriptor instead. +func (*WxAppRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{26} +} + +func (x *WxAppRequest) GetGhId() string { + if x != nil { + return x.GhId + } + return "" +} + +type WxAppResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AppID string `protobuf:"bytes,1,opt,name=AppID,json=appID,proto3" json:"AppID,omitempty"` + AppSecret string `protobuf:"bytes,2,opt,name=AppSecret,json=appSecret,proto3" json:"AppSecret,omitempty"` +} + +func (x *WxAppResponse) Reset() { + *x = WxAppResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WxAppResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WxAppResponse) ProtoMessage() {} + +func (x *WxAppResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[27] + 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 WxAppResponse.ProtoReflect.Descriptor instead. +func (*WxAppResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{27} +} + +func (x *WxAppResponse) GetAppID() string { + if x != nil { + return x.AppID + } + return "" +} + +func (x *WxAppResponse) GetAppSecret() string { + if x != nil { + return x.AppSecret + } + return "" +} + +type WxUserUpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + WxID uint32 `protobuf:"varint,1,opt,name=wxID,json=wxId,proto3" json:"wxID,omitempty"` + UserID uint32 `protobuf:"varint,2,opt,name=userID,proto3" json:"userID,omitempty"` +} + +func (x *WxUserUpdateRequest) Reset() { + *x = WxUserUpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WxUserUpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WxUserUpdateRequest) ProtoMessage() {} + +func (x *WxUserUpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[28] + 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 WxUserUpdateRequest.ProtoReflect.Descriptor instead. +func (*WxUserUpdateRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{28} +} + +func (x *WxUserUpdateRequest) GetWxID() uint32 { + if x != nil { + return x.WxID + } + return 0 +} + +func (x *WxUserUpdateRequest) GetUserID() uint32 { + if x != nil { + return x.UserID + } + return 0 +} + +type WxUserOrCreateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OpenID string `protobuf:"bytes,1,opt,name=OpenID,json=openID,proto3" json:"OpenID,omitempty"` + GhID string `protobuf:"bytes,2,opt,name=GhID,json=ghID,proto3" json:"GhID,omitempty"` +} + +func (x *WxUserOrCreateRequest) Reset() { + *x = WxUserOrCreateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WxUserOrCreateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WxUserOrCreateRequest) ProtoMessage() {} + +func (x *WxUserOrCreateRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WxUserOrCreateRequest.ProtoReflect.Descriptor instead. +func (*WxUserOrCreateRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{29} +} + +func (x *WxUserOrCreateRequest) GetOpenID() string { + if x != nil { + return x.OpenID + } + return "" +} + +func (x *WxUserOrCreateRequest) GetGhID() string { + if x != nil { + return x.GhID + } + return "" +} + +type WxUserResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OpenID string `protobuf:"bytes,1,opt,name=OpenID,json=openID,proto3" json:"OpenID,omitempty"` + UserID uint32 `protobuf:"varint,2,opt,name=UserID,json=userID,proto3" json:"UserID,omitempty"` + GhID string `protobuf:"bytes,3,opt,name=GhID,json=ghID,proto3" json:"GhID,omitempty"` + RoleAuth string `protobuf:"bytes,4,opt,name=RoleAuth,json=roleAuth,proto3" json:"RoleAuth,omitempty"` + ID uint32 `protobuf:"varint,5,opt,name=ID,proto3" json:"ID,omitempty"` +} + +func (x *WxUserResponse) Reset() { + *x = WxUserResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WxUserResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WxUserResponse) ProtoMessage() {} + +func (x *WxUserResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WxUserResponse.ProtoReflect.Descriptor instead. +func (*WxUserResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{30} +} + +func (x *WxUserResponse) GetOpenID() string { + if x != nil { + return x.OpenID + } + return "" +} + +func (x *WxUserResponse) GetUserID() uint32 { + if x != nil { + return x.UserID + } + return 0 +} + +func (x *WxUserResponse) GetGhID() string { + if x != nil { + return x.GhID + } + return "" +} + +func (x *WxUserResponse) GetRoleAuth() string { + if x != nil { + return x.RoleAuth + } + return "" +} + +func (x *WxUserResponse) GetID() uint32 { + if x != nil { + return x.ID + } + return 0 +} + +type LoginLogsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []*LoginLog `protobuf:"bytes,1,rep,name=Data,json=data,proto3" json:"Data,omitempty"` +} + +func (x *LoginLogsResponse) Reset() { + *x = LoginLogsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LoginLogsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LoginLogsResponse) ProtoMessage() {} + +func (x *LoginLogsResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LoginLogsResponse.ProtoReflect.Descriptor instead. +func (*LoginLogsResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{31} +} + +func (x *LoginLogsResponse) GetData() []*LoginLog { + if x != nil { + return x.Data + } + return nil +} + +type LoginLog struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + ID uint64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` + UserId uint64 `protobuf:"varint,3,opt,name=UserId,json=userId,proto3" json:"UserId,omitempty"` + Ip string `protobuf:"bytes,4,opt,name=Ip,json=ip,proto3" json:"Ip,omitempty"` + Token string `protobuf:"bytes,5,opt,name=Token,json=token,proto3" json:"Token,omitempty"` + Status uint64 `protobuf:"varint,6,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + ExpireDate string `protobuf:"bytes,7,opt,name=ExpireDate,json=expireDate,proto3" json:"ExpireDate,omitempty"` + LastDate string `protobuf:"bytes,8,opt,name=LastDate,json=lastDate,proto3" json:"LastDate,omitempty"` + LogoutDate string `protobuf:"bytes,9,opt,name=LogoutDate,json=logoutDate,proto3" json:"LogoutDate,omitempty"` + CreatedAt string `protobuf:"bytes,10,opt,name=CreatedAt,json=createdAt,proto3" json:"CreatedAt,omitempty"` + Address string `protobuf:"bytes,11,opt,name=Address,json=address,proto3" json:"Address,omitempty"` +} + +func (x *LoginLog) Reset() { + *x = LoginLog{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LoginLog) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LoginLog) ProtoMessage() {} + +func (x *LoginLog) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LoginLog.ProtoReflect.Descriptor instead. +func (*LoginLog) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{32} +} + +func (x *LoginLog) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *LoginLog) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *LoginLog) GetUserId() uint64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *LoginLog) GetIp() string { + if x != nil { + return x.Ip + } + return "" +} + +func (x *LoginLog) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *LoginLog) GetStatus() uint64 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *LoginLog) GetExpireDate() string { + if x != nil { + return x.ExpireDate + } + return "" +} + +func (x *LoginLog) GetLastDate() string { + if x != nil { + return x.LastDate + } + return "" +} + +func (x *LoginLog) GetLogoutDate() string { + if x != nil { + return x.LogoutDate + } + return "" +} + +func (x *LoginLog) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +func (x *LoginLog) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type OnlineLogByIdRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + ID uint64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` +} + +func (x *OnlineLogByIdRequest) Reset() { + *x = OnlineLogByIdRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OnlineLogByIdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OnlineLogByIdRequest) ProtoMessage() {} + +func (x *OnlineLogByIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OnlineLogByIdRequest.ProtoReflect.Descriptor instead. +func (*OnlineLogByIdRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{33} +} + +func (x *OnlineLogByIdRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *OnlineLogByIdRequest) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +type LoginInfosByUserIdRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + UserId uint64 `protobuf:"varint,2,opt,name=UserId,json=userId,proto3" json:"UserId,omitempty"` +} + +func (x *LoginInfosByUserIdRequest) Reset() { + *x = LoginInfosByUserIdRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LoginInfosByUserIdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LoginInfosByUserIdRequest) ProtoMessage() {} + +func (x *LoginInfosByUserIdRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[34] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LoginInfosByUserIdRequest.ProtoReflect.Descriptor instead. +func (*LoginInfosByUserIdRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{34} +} + +func (x *LoginInfosByUserIdRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *LoginInfosByUserIdRequest) GetUserId() uint64 { + if x != nil { + return x.UserId + } + return 0 +} + +type SendNewTelNumMsgRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + ID uint64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` + NewTelNum string `protobuf:"bytes,3,opt,name=NewTelNum,json=newTelNum,proto3" json:"NewTelNum,omitempty"` + Code string `protobuf:"bytes,4,opt,name=Code,json=code,proto3" json:"Code,omitempty"` + Project string `protobuf:"bytes,5,opt,name=Project,json=project,proto3" json:"Project,omitempty"` + SignNo uint32 `protobuf:"varint,6,opt,name=signNo,proto3" json:"signNo,omitempty"` +} + +func (x *SendNewTelNumMsgRequest) Reset() { + *x = SendNewTelNumMsgRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendNewTelNumMsgRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendNewTelNumMsgRequest) ProtoMessage() {} + +func (x *SendNewTelNumMsgRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[35] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendNewTelNumMsgRequest.ProtoReflect.Descriptor instead. +func (*SendNewTelNumMsgRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{35} +} + +func (x *SendNewTelNumMsgRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *SendNewTelNumMsgRequest) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *SendNewTelNumMsgRequest) GetNewTelNum() string { + if x != nil { + return x.NewTelNum + } + return "" +} + +func (x *SendNewTelNumMsgRequest) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *SendNewTelNumMsgRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *SendNewTelNumMsgRequest) GetSignNo() uint32 { + if x != nil { + return x.SignNo + } + return 0 +} + +type UserByTelRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + Tel string `protobuf:"bytes,2,opt,name=Tel,json=tel,proto3" json:"Tel,omitempty"` +} + +func (x *UserByTelRequest) Reset() { + *x = UserByTelRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserByTelRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserByTelRequest) ProtoMessage() {} + +func (x *UserByTelRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[36] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserByTelRequest.ProtoReflect.Descriptor instead. +func (*UserByTelRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{36} +} + +func (x *UserByTelRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *UserByTelRequest) GetTel() string { + if x != nil { + return x.Tel + } + return "" +} + +type CommonResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CommonResponse) Reset() { + *x = CommonResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CommonResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommonResponse) ProtoMessage() {} + +func (x *CommonResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[37] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CommonResponse.ProtoReflect.Descriptor instead. +func (*CommonResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{37} +} + +type UsersByTelRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + Tels []string `protobuf:"bytes,2,rep,name=Tels,json=tels,proto3" json:"Tels,omitempty"` +} + +func (x *UsersByTelRequest) Reset() { + *x = UsersByTelRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UsersByTelRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UsersByTelRequest) ProtoMessage() {} + +func (x *UsersByTelRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[38] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UsersByTelRequest.ProtoReflect.Descriptor instead. +func (*UsersByTelRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{38} +} + +func (x *UsersByTelRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *UsersByTelRequest) GetTels() []string { + if x != nil { + return x.Tels + } + return nil +} + +type ListByIDsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + IDs []uint64 `protobuf:"varint,2,rep,packed,name=IDs,proto3" json:"IDs,omitempty"` + OrderType uint64 `protobuf:"varint,3,opt,name=OrderType,proto3" json:"OrderType,omitempty"` + Page uint64 `protobuf:"varint,4,opt,name=Page,json=page,proto3" json:"Page,omitempty"` + PageSize uint64 `protobuf:"varint,5,opt,name=PageSize,json=pageSize,proto3" json:"PageSize,omitempty"` + NickName string `protobuf:"bytes,6,opt,name=NickName,json=nickName,proto3" json:"NickName,omitempty"` + InvitationCode []string `protobuf:"bytes,7,rep,name=InvitationCode,json=invitationCode,proto3" json:"InvitationCode,omitempty"` +} + +func (x *ListByIDsRequest) Reset() { + *x = ListByIDsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListByIDsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListByIDsRequest) ProtoMessage() {} + +func (x *ListByIDsRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[39] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListByIDsRequest.ProtoReflect.Descriptor instead. +func (*ListByIDsRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{39} +} + +func (x *ListByIDsRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *ListByIDsRequest) GetIDs() []uint64 { + if x != nil { + return x.IDs + } + return nil +} + +func (x *ListByIDsRequest) GetOrderType() uint64 { + if x != nil { + return x.OrderType + } + return 0 +} + +func (x *ListByIDsRequest) GetPage() uint64 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ListByIDsRequest) GetPageSize() uint64 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListByIDsRequest) GetNickName() string { + if x != nil { + return x.NickName + } + return "" +} + +func (x *ListByIDsRequest) GetInvitationCode() []string { + if x != nil { + return x.InvitationCode + } + return nil +} + +type SendMsgRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + TelNum string `protobuf:"bytes,2,opt,name=TelNum,json=telNum,proto3" json:"TelNum,omitempty"` + Project string `protobuf:"bytes,3,opt,name=Project,json=project,proto3" json:"Project,omitempty"` + SignNo uint32 `protobuf:"varint,4,opt,name=signNo,proto3" json:"signNo,omitempty"` + MId uint32 `protobuf:"varint,5,opt,name=mId,proto3" json:"mId,omitempty"` + Scope string `protobuf:"bytes,6,opt,name=scope,proto3" json:"scope,omitempty"` //标记模块 +} + +func (x *SendMsgRequest) Reset() { + *x = SendMsgRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendMsgRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendMsgRequest) ProtoMessage() {} + +func (x *SendMsgRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[40] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendMsgRequest.ProtoReflect.Descriptor instead. +func (*SendMsgRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{40} +} + +func (x *SendMsgRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *SendMsgRequest) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +func (x *SendMsgRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *SendMsgRequest) GetSignNo() uint32 { + if x != nil { + return x.SignNo + } + return 0 +} + +func (x *SendMsgRequest) GetMId() uint32 { + if x != nil { + return x.MId + } + return 0 +} + +func (x *SendMsgRequest) GetScope() string { + if x != nil { + return x.Scope + } + return "" +} + +type SendCustomMsgRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + TelNum string `protobuf:"bytes,2,opt,name=TelNum,json=telNum,proto3" json:"TelNum,omitempty"` + Project string `protobuf:"bytes,3,opt,name=Project,json=project,proto3" json:"Project,omitempty"` + Url string `protobuf:"bytes,4,opt,name=Url,proto3" json:"Url,omitempty"` + ID uint64 `protobuf:"varint,5,opt,name=ID,proto3" json:"ID,omitempty"` + MId uint64 `protobuf:"varint,6,opt,name=MId,json=mId,proto3" json:"MId,omitempty"` + Location uint64 `protobuf:"varint,7,opt,name=Location,json=location,proto3" json:"Location,omitempty"` + SigNo uint32 `protobuf:"varint,8,opt,name=SigNo,json=sigNo,proto3" json:"SigNo,omitempty"` +} + +func (x *SendCustomMsgRequest) Reset() { + *x = SendCustomMsgRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendCustomMsgRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendCustomMsgRequest) ProtoMessage() {} + +func (x *SendCustomMsgRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[41] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendCustomMsgRequest.ProtoReflect.Descriptor instead. +func (*SendCustomMsgRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{41} +} + +func (x *SendCustomMsgRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *SendCustomMsgRequest) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +func (x *SendCustomMsgRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *SendCustomMsgRequest) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *SendCustomMsgRequest) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *SendCustomMsgRequest) GetMId() uint64 { + if x != nil { + return x.MId + } + return 0 +} + +func (x *SendCustomMsgRequest) GetLocation() uint64 { + if x != nil { + return x.Location + } + return 0 +} + +func (x *SendCustomMsgRequest) GetSigNo() uint32 { + if x != nil { + return x.SigNo + } + return 0 +} + +type CheckMsgRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + TelNum string `protobuf:"bytes,2,opt,name=TelNum,json=telNum,proto3" json:"TelNum,omitempty"` + Code string `protobuf:"bytes,3,opt,name=Code,json=code,proto3" json:"Code,omitempty"` + Scope string `protobuf:"bytes,4,opt,name=scope,proto3" json:"scope,omitempty"` //标记模块 +} + +func (x *CheckMsgRequest) Reset() { + *x = CheckMsgRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckMsgRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckMsgRequest) ProtoMessage() {} + +func (x *CheckMsgRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[42] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CheckMsgRequest.ProtoReflect.Descriptor instead. +func (*CheckMsgRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{42} +} + +func (x *CheckMsgRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *CheckMsgRequest) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +func (x *CheckMsgRequest) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *CheckMsgRequest) GetScope() string { + if x != nil { + return x.Scope + } + return "" +} + +type SendMsgStatusResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *SendMsgStatusResponse) Reset() { + *x = SendMsgStatusResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendMsgStatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendMsgStatusResponse) ProtoMessage() {} + +func (x *SendMsgStatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[43] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SendMsgStatusResponse.ProtoReflect.Descriptor instead. +func (*SendMsgStatusResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{43} +} + +type RemoveRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + ID uint64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` + Code string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` +} + +func (x *RemoveRequest) Reset() { + *x = RemoveRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RemoveRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RemoveRequest) ProtoMessage() {} + +func (x *RemoveRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[44] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RemoveRequest.ProtoReflect.Descriptor instead. +func (*RemoveRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{44} +} + +func (x *RemoveRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *RemoveRequest) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *RemoveRequest) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +type WriteOffRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"` + UserId uint64 `protobuf:"varint,3,opt,name=userId,proto3" json:"userId,omitempty"` + Tel string `protobuf:"bytes,4,opt,name=tel,proto3" json:"tel,omitempty"` + JonNum string `protobuf:"bytes,5,opt,name=jonNum,proto3" json:"jonNum,omitempty"` + UserName string `protobuf:"bytes,6,opt,name=userName,proto3" json:"userName,omitempty"` + EnterDate string `protobuf:"bytes,7,opt,name=enterDate,proto3" json:"enterDate,omitempty"` + PositionName string `protobuf:"bytes,8,opt,name=positionName,proto3" json:"positionName,omitempty"` + PositionId uint64 `protobuf:"varint,9,opt,name=positionId,proto3" json:"positionId,omitempty"` + SiteName string `protobuf:"bytes,10,opt,name=siteName,proto3" json:"siteName,omitempty"` + SiteId uint64 `protobuf:"varint,11,opt,name=siteId,proto3" json:"siteId,omitempty"` + AuthUrl string `protobuf:"bytes,12,opt,name=authUrl,proto3" json:"authUrl,omitempty"` + Type string `protobuf:"bytes,13,opt,name=type,proto3" json:"type,omitempty"` + Status uint32 `protobuf:"varint,14,opt,name=status,proto3" json:"status,omitempty"` + SubmitDate string `protobuf:"bytes,15,opt,name=submitDate,proto3" json:"submitDate,omitempty"` +} + +func (x *WriteOffRequest) Reset() { + *x = WriteOffRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WriteOffRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WriteOffRequest) ProtoMessage() {} + +func (x *WriteOffRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[45] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WriteOffRequest.ProtoReflect.Descriptor instead. +func (*WriteOffRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{45} +} + +func (x *WriteOffRequest) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *WriteOffRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *WriteOffRequest) GetUserId() uint64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *WriteOffRequest) GetTel() string { + if x != nil { + return x.Tel + } + return "" +} + +func (x *WriteOffRequest) GetJonNum() string { + if x != nil { + return x.JonNum + } + return "" +} + +func (x *WriteOffRequest) GetUserName() string { + if x != nil { + return x.UserName + } + return "" +} + +func (x *WriteOffRequest) GetEnterDate() string { + if x != nil { + return x.EnterDate + } + return "" +} + +func (x *WriteOffRequest) GetPositionName() string { + if x != nil { + return x.PositionName + } + return "" +} + +func (x *WriteOffRequest) GetPositionId() uint64 { + if x != nil { + return x.PositionId + } + return 0 +} + +func (x *WriteOffRequest) GetSiteName() string { + if x != nil { + return x.SiteName + } + return "" +} + +func (x *WriteOffRequest) GetSiteId() uint64 { + if x != nil { + return x.SiteId + } + return 0 +} + +func (x *WriteOffRequest) GetAuthUrl() string { + if x != nil { + return x.AuthUrl + } + return "" +} + +func (x *WriteOffRequest) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *WriteOffRequest) GetStatus() uint32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *WriteOffRequest) GetSubmitDate() string { + if x != nil { + return x.SubmitDate + } + return "" +} + +type WriteOffListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Page uint64 `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"` + PageSize uint64 `protobuf:"varint,2,opt,name=pageSize,proto3" json:"pageSize,omitempty"` + Domain string `protobuf:"bytes,3,opt,name=domain,proto3" json:"domain,omitempty"` + UserName string `protobuf:"bytes,4,opt,name=userName,proto3" json:"userName,omitempty"` + UserId uint64 `protobuf:"varint,5,opt,name=userId,proto3" json:"userId,omitempty"` + SiteId uint64 `protobuf:"varint,6,opt,name=siteId,proto3" json:"siteId,omitempty"` + Type string `protobuf:"bytes,7,opt,name=type,proto3" json:"type,omitempty"` + Status uint32 `protobuf:"varint,8,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *WriteOffListRequest) Reset() { + *x = WriteOffListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WriteOffListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WriteOffListRequest) ProtoMessage() {} + +func (x *WriteOffListRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[46] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WriteOffListRequest.ProtoReflect.Descriptor instead. +func (*WriteOffListRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{46} +} + +func (x *WriteOffListRequest) GetPage() uint64 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *WriteOffListRequest) GetPageSize() uint64 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *WriteOffListRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *WriteOffListRequest) GetUserName() string { + if x != nil { + return x.UserName + } + return "" +} + +func (x *WriteOffListRequest) GetUserId() uint64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *WriteOffListRequest) GetSiteId() uint64 { + if x != nil { + return x.SiteId + } + return 0 +} + +func (x *WriteOffListRequest) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *WriteOffListRequest) GetStatus() uint32 { + if x != nil { + return x.Status + } + return 0 +} + +type WriteOffApproveRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Status uint32 `protobuf:"varint,2,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *WriteOffApproveRequest) Reset() { + *x = WriteOffApproveRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WriteOffApproveRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WriteOffApproveRequest) ProtoMessage() {} + +func (x *WriteOffApproveRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[47] + 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 WriteOffApproveRequest.ProtoReflect.Descriptor instead. +func (*WriteOffApproveRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{47} +} + +func (x *WriteOffApproveRequest) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *WriteOffApproveRequest) GetStatus() uint32 { + if x != nil { + return x.Status + } + return 0 +} + +type WriteOffListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Total int64 `protobuf:"varint,1,opt,name=total,proto3" json:"total,omitempty"` + WriteOffList []*WriteOffRequest `protobuf:"bytes,2,rep,name=writeOffList,proto3" json:"writeOffList,omitempty"` +} + +func (x *WriteOffListResponse) Reset() { + *x = WriteOffListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WriteOffListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WriteOffListResponse) ProtoMessage() {} + +func (x *WriteOffListResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[48] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WriteOffListResponse.ProtoReflect.Descriptor instead. +func (*WriteOffListResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{48} +} + +func (x *WriteOffListResponse) GetTotal() int64 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *WriteOffListResponse) GetWriteOffList() []*WriteOffRequest { + if x != nil { + return x.WriteOffList + } + return nil +} + +type RemoveResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *RemoveResponse) Reset() { + *x = RemoveResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RemoveResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RemoveResponse) ProtoMessage() {} + +func (x *RemoveResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[49] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RemoveResponse.ProtoReflect.Descriptor instead. +func (*RemoveResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{49} +} + +type UpdateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` //ID + Domain string `protobuf:"bytes,2,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + NickName string `protobuf:"bytes,3,opt,name=NickName,json=nickName,proto3" json:"NickName,omitempty"` + Password string `protobuf:"bytes,4,opt,name=Password,json=password,proto3" json:"Password,omitempty"` //密码 + Avatar string `protobuf:"bytes,5,opt,name=Avatar,json=avatar,proto3" json:"Avatar,omitempty"` //头像 + Status string `protobuf:"bytes,7,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + TelNum string `protobuf:"bytes,8,opt,name=TelNum,json=telNum,proto3" json:"TelNum,omitempty"` + EnterDate string `protobuf:"bytes,14,opt,name=EnterDate,json=enterDate,proto3" json:"EnterDate,omitempty"` + Extend *Extend `protobuf:"bytes,17,opt,name=Extend,json=extend,proto3" json:"Extend,omitempty"` + Title string `protobuf:"bytes,18,opt,name=Title,json=title,proto3" json:"Title,omitempty"` + JobNum string `protobuf:"bytes,19,opt,name=JobNum,json=jobNum,proto3" json:"JobNum,omitempty"` + BirthDate string `protobuf:"bytes,20,opt,name=BirthDate,json=birthDate,proto3" json:"BirthDate,omitempty"` + Sex uint64 `protobuf:"varint,21,opt,name=Sex,json=sex,proto3" json:"Sex,omitempty"` + IdNum string `protobuf:"bytes,22,opt,name=IdNum,json=idNum,proto3" json:"IdNum,omitempty"` + RealName string `protobuf:"bytes,23,opt,name=RealName,json=realName,proto3" json:"RealName,omitempty"` + InvitationCode string `protobuf:"bytes,24,opt,name=InvitationCode,json=invitationCode,proto3" json:"InvitationCode,omitempty"` + LeftDate string `protobuf:"bytes,25,opt,name=LeftDate,json=leftDate,proto3" json:"LeftDate,omitempty"` + Remark string `protobuf:"bytes,26,opt,name=Remark,json=remark,proto3" json:"Remark,omitempty"` + RecentImg string `protobuf:"bytes,27,opt,name=RecentImg,json=recentImg,proto3" json:"RecentImg,omitempty"` + ICNum string `protobuf:"bytes,28,opt,name=ICNum,json=icNum,proto3" json:"ICNum,omitempty"` + Train string `protobuf:"bytes,29,opt,name=Train,json=train,proto3" json:"Train,omitempty"` + Certificate string `protobuf:"bytes,30,opt,name=Certificate,json=certificate,proto3" json:"Certificate,omitempty"` + TrainVideos []*TrainVideo `protobuf:"bytes,31,rep,name=TrainVideos,json=trainVideos,proto3" json:"TrainVideos,omitempty"` + Operator *Operator `protobuf:"bytes,32,opt,name=operator,proto3" json:"operator,omitempty"` + SecurityCode string `protobuf:"bytes,33,opt,name=SecurityCode,json=securityCode,proto3" json:"SecurityCode,omitempty"` +} + +func (x *UpdateRequest) Reset() { + *x = UpdateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateRequest) ProtoMessage() {} + +func (x *UpdateRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[50] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateRequest.ProtoReflect.Descriptor instead. +func (*UpdateRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{50} +} + +func (x *UpdateRequest) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *UpdateRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *UpdateRequest) GetNickName() string { + if x != nil { + return x.NickName + } + return "" +} + +func (x *UpdateRequest) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +func (x *UpdateRequest) GetAvatar() string { + if x != nil { + return x.Avatar + } + return "" +} + +func (x *UpdateRequest) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *UpdateRequest) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +func (x *UpdateRequest) GetEnterDate() string { + if x != nil { + return x.EnterDate + } + return "" +} + +func (x *UpdateRequest) GetExtend() *Extend { + if x != nil { + return x.Extend + } + return nil +} + +func (x *UpdateRequest) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *UpdateRequest) GetJobNum() string { + if x != nil { + return x.JobNum + } + return "" +} + +func (x *UpdateRequest) GetBirthDate() string { + if x != nil { + return x.BirthDate + } + return "" +} + +func (x *UpdateRequest) GetSex() uint64 { + if x != nil { + return x.Sex + } + return 0 +} + +func (x *UpdateRequest) GetIdNum() string { + if x != nil { + return x.IdNum + } + return "" +} + +func (x *UpdateRequest) GetRealName() string { + if x != nil { + return x.RealName + } + return "" +} + +func (x *UpdateRequest) GetInvitationCode() string { + if x != nil { + return x.InvitationCode + } + return "" +} + +func (x *UpdateRequest) GetLeftDate() string { + if x != nil { + return x.LeftDate + } + return "" +} + +func (x *UpdateRequest) GetRemark() string { + if x != nil { + return x.Remark + } + return "" +} + +func (x *UpdateRequest) GetRecentImg() string { + if x != nil { + return x.RecentImg + } + return "" +} + +func (x *UpdateRequest) GetICNum() string { + if x != nil { + return x.ICNum + } + return "" +} + +func (x *UpdateRequest) GetTrain() string { + if x != nil { + return x.Train + } + return "" +} + +func (x *UpdateRequest) GetCertificate() string { + if x != nil { + return x.Certificate + } + return "" +} + +func (x *UpdateRequest) GetTrainVideos() []*TrainVideo { + if x != nil { + return x.TrainVideos + } + return nil +} + +func (x *UpdateRequest) GetOperator() *Operator { + if x != nil { + return x.Operator + } + return nil +} + +func (x *UpdateRequest) GetSecurityCode() string { + if x != nil { + return x.SecurityCode + } + return "" +} + +type Operator struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + Name string `protobuf:"bytes,2,opt,name=Name,proto3" json:"Name,omitempty"` +} + +func (x *Operator) Reset() { + *x = Operator{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Operator) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Operator) ProtoMessage() {} + +func (x *Operator) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[51] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Operator.ProtoReflect.Descriptor instead. +func (*Operator) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{51} +} + +func (x *Operator) GetID() uint32 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *Operator) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +type TrainVideo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TrainUUID string `protobuf:"bytes,1,opt,name=trainUUID,proto3" json:"trainUUID,omitempty"` + TrainDesc string `protobuf:"bytes,2,opt,name=trainDesc,proto3" json:"trainDesc,omitempty"` + Video string `protobuf:"bytes,3,opt,name=video,proto3" json:"video,omitempty"` + SecurityCode string `protobuf:"bytes,31,opt,name=SecurityCode,json=securityCode,proto3" json:"SecurityCode,omitempty"` +} + +func (x *TrainVideo) Reset() { + *x = TrainVideo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TrainVideo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TrainVideo) ProtoMessage() {} + +func (x *TrainVideo) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[52] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TrainVideo.ProtoReflect.Descriptor instead. +func (*TrainVideo) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{52} +} + +func (x *TrainVideo) GetTrainUUID() string { + if x != nil { + return x.TrainUUID + } + return "" +} + +func (x *TrainVideo) GetTrainDesc() string { + if x != nil { + return x.TrainDesc + } + return "" +} + +func (x *TrainVideo) GetVideo() string { + if x != nil { + return x.Video + } + return "" +} + +func (x *TrainVideo) GetSecurityCode() string { + if x != nil { + return x.SecurityCode + } + return "" +} + +type UpdateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *UpdateResponse) Reset() { + *x = UpdateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateResponse) ProtoMessage() {} + +func (x *UpdateResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[53] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateResponse.ProtoReflect.Descriptor instead. +func (*UpdateResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{53} +} + +type PrivacyInfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` //ID + Domain string `protobuf:"bytes,2,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + SecurityCode string `protobuf:"bytes,3,opt,name=SecurityCode,json=securityCode,proto3" json:"SecurityCode,omitempty"` +} + +func (x *PrivacyInfoRequest) Reset() { + *x = PrivacyInfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PrivacyInfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrivacyInfoRequest) ProtoMessage() {} + +func (x *PrivacyInfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[54] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PrivacyInfoRequest.ProtoReflect.Descriptor instead. +func (*PrivacyInfoRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{54} +} + +func (x *PrivacyInfoRequest) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *PrivacyInfoRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *PrivacyInfoRequest) GetSecurityCode() string { + if x != nil { + return x.SecurityCode + } + return "" +} + +type ListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + PageSize uint64 `protobuf:"varint,2,opt,name=PageSize,json=pageSize,proto3" json:"PageSize,omitempty"` + Page uint64 `protobuf:"varint,3,opt,name=Page,json=page,proto3" json:"Page,omitempty"` + Key string `protobuf:"bytes,4,opt,name=key,proto3" json:"key,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` + TelNum string `protobuf:"bytes,6,opt,name=telNum,proto3" json:"telNum,omitempty"` + StartEnterDate string `protobuf:"bytes,7,opt,name=startEnterDate,proto3" json:"startEnterDate,omitempty"` + EndEnterDate string `protobuf:"bytes,8,opt,name=endEnterDate,proto3" json:"endEnterDate,omitempty"` +} + +func (x *ListRequest) Reset() { + *x = ListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListRequest) ProtoMessage() {} + +func (x *ListRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[55] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListRequest.ProtoReflect.Descriptor instead. +func (*ListRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{55} +} + +func (x *ListRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *ListRequest) GetPageSize() uint64 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ListRequest) GetPage() uint64 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ListRequest) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *ListRequest) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ListRequest) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +func (x *ListRequest) GetStartEnterDate() string { + if x != nil { + return x.StartEnterDate + } + return "" +} + +func (x *ListRequest) GetEndEnterDate() string { + if x != nil { + return x.EndEnterDate + } + return "" +} + +type ListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Status string `protobuf:"bytes,1,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + Count uint64 `protobuf:"varint,2,opt,name=Count,json=count,proto3" json:"Count,omitempty"` + Data []*AccountInfo `protobuf:"bytes,3,rep,name=Data,json=data,proto3" json:"Data,omitempty"` + AllCount uint64 `protobuf:"varint,4,opt,name=AllCount,json=allCount,proto3" json:"AllCount,omitempty"` +} + +func (x *ListResponse) Reset() { + *x = ListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListResponse) ProtoMessage() {} + +func (x *ListResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[56] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListResponse.ProtoReflect.Descriptor instead. +func (*ListResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{56} +} + +func (x *ListResponse) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ListResponse) GetCount() uint64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *ListResponse) GetData() []*AccountInfo { + if x != nil { + return x.Data + } + return nil +} + +func (x *ListResponse) GetAllCount() uint64 { + if x != nil { + return x.AllCount + } + return 0 +} + +type InfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + ID uint64 `protobuf:"varint,2,opt,name=ID,json=id,proto3" json:"ID,omitempty"` + Scene string `protobuf:"bytes,3,opt,name=scene,proto3" json:"scene,omitempty"` //场景值 base-默认仅仅user数据 +} + +func (x *InfoRequest) Reset() { + *x = InfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InfoRequest) ProtoMessage() {} + +func (x *InfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[57] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InfoRequest.ProtoReflect.Descriptor instead. +func (*InfoRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{57} +} + +func (x *InfoRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *InfoRequest) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *InfoRequest) GetScene() string { + if x != nil { + return x.Scene + } + return "" +} + +type InfoResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Status string `protobuf:"bytes,1,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + Info *AccountInfo `protobuf:"bytes,2,opt,name=Info,json=accountInfo,proto3" json:"Info,omitempty"` + IsExist bool `protobuf:"varint,3,opt,name=IsExist,json=isExist,proto3" json:"IsExist,omitempty"` +} + +func (x *InfoResponse) Reset() { + *x = InfoResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *InfoResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InfoResponse) ProtoMessage() {} + +func (x *InfoResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[58] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InfoResponse.ProtoReflect.Descriptor instead. +func (*InfoResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{58} +} + +func (x *InfoResponse) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *InfoResponse) GetInfo() *AccountInfo { + if x != nil { + return x.Info + } + return nil +} + +func (x *InfoResponse) GetIsExist() bool { + if x != nil { + return x.IsExist + } + return false +} + +type DecryptJwtResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=status,proto3" json:"Domain,omitempty"` + ID uint64 `protobuf:"varint,2,opt,name=ID,json=id,proto3" json:"ID,omitempty"` + Account string `protobuf:"bytes,3,opt,name=Account,json=account,proto3" json:"Account,omitempty"` + NickName string `protobuf:"bytes,4,opt,name=NickName,json=nickName,proto3" json:"NickName,omitempty"` + IsOffline bool `protobuf:"varint,5,opt,name=IsOffline,json=isOffline,proto3" json:"IsOffline,omitempty"` +} + +func (x *DecryptJwtResponse) Reset() { + *x = DecryptJwtResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DecryptJwtResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DecryptJwtResponse) ProtoMessage() {} + +func (x *DecryptJwtResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[59] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DecryptJwtResponse.ProtoReflect.Descriptor instead. +func (*DecryptJwtResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{59} +} + +func (x *DecryptJwtResponse) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *DecryptJwtResponse) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *DecryptJwtResponse) GetAccount() string { + if x != nil { + return x.Account + } + return "" +} + +func (x *DecryptJwtResponse) GetNickName() string { + if x != nil { + return x.NickName + } + return "" +} + +func (x *DecryptJwtResponse) GetIsOffline() bool { + if x != nil { + return x.IsOffline + } + return false +} + +type DecryptJwtRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + Domain string `protobuf:"bytes,2,opt,name=Domain,proto3" json:"Domain,omitempty"` +} + +func (x *DecryptJwtRequest) Reset() { + *x = DecryptJwtRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DecryptJwtRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DecryptJwtRequest) ProtoMessage() {} + +func (x *DecryptJwtRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[60] + 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 DecryptJwtRequest.ProtoReflect.Descriptor instead. +func (*DecryptJwtRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{60} +} + +func (x *DecryptJwtRequest) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *DecryptJwtRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +type CheckPwdRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=Token,json=token,proto3" json:"Token,omitempty"` + Password string `protobuf:"bytes,2,opt,name=Password,json=password,proto3" json:"Password,omitempty"` +} + +func (x *CheckPwdRequest) Reset() { + *x = CheckPwdRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckPwdRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckPwdRequest) ProtoMessage() {} + +func (x *CheckPwdRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[61] + 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 CheckPwdRequest.ProtoReflect.Descriptor instead. +func (*CheckPwdRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{61} +} + +func (x *CheckPwdRequest) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *CheckPwdRequest) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +type AuthenticationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=Name,json=name,proto3" json:"Name,omitempty"` + IDNum string `protobuf:"bytes,2,opt,name=IDNum,json=idNum,proto3" json:"IDNum,omitempty"` + Token string `protobuf:"bytes,3,opt,name=Token,json=token,proto3" json:"Token,omitempty"` +} + +func (x *AuthenticationRequest) Reset() { + *x = AuthenticationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuthenticationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuthenticationRequest) ProtoMessage() {} + +func (x *AuthenticationRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[62] + 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 AuthenticationRequest.ProtoReflect.Descriptor instead. +func (*AuthenticationRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{62} +} + +func (x *AuthenticationRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *AuthenticationRequest) GetIDNum() string { + if x != nil { + return x.IDNum + } + return "" +} + +func (x *AuthenticationRequest) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +type RequestStatus struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Status string `protobuf:"bytes,1,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + ID uint64 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` + IsExist bool `protobuf:"varint,3,opt,name=isExist,proto3" json:"isExist,omitempty"` +} + +func (x *RequestStatus) Reset() { + *x = RequestStatus{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RequestStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequestStatus) ProtoMessage() {} + +func (x *RequestStatus) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[63] + 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 RequestStatus.ProtoReflect.Descriptor instead. +func (*RequestStatus) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{63} +} + +func (x *RequestStatus) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *RequestStatus) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *RequestStatus) GetIsExist() bool { + if x != nil { + return x.IsExist + } + return false +} + +type RegistRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"` + TelNum string `protobuf:"bytes,2,opt,name=telNum,proto3" json:"telNum,omitempty"` + Code string `protobuf:"bytes,3,opt,name=code,proto3" json:"code,omitempty"` + Address string `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"` + TelAreaCode string `protobuf:"bytes,5,opt,name=telAreaCode,proto3" json:"telAreaCode,omitempty"` +} + +func (x *RegistRequest) Reset() { + *x = RegistRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegistRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegistRequest) ProtoMessage() {} + +func (x *RegistRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[64] + 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 RegistRequest.ProtoReflect.Descriptor instead. +func (*RegistRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{64} +} + +func (x *RegistRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *RegistRequest) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +func (x *RegistRequest) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *RegistRequest) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *RegistRequest) GetTelAreaCode() string { + if x != nil { + return x.TelAreaCode + } + return "" +} + +type LoginRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Domain string `protobuf:"bytes,1,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + TelNum string `protobuf:"bytes,2,opt,name=TelNum,json=telNum,proto3" json:"TelNum,omitempty"` + Code string `protobuf:"bytes,3,opt,name=Code,json=code,proto3" json:"Code,omitempty"` + Password string `protobuf:"bytes,4,opt,name=Password,json=password,proto3" json:"Password,omitempty"` + Ip string `protobuf:"bytes,5,opt,name=Ip,json=ip,proto3" json:"Ip,omitempty"` + PassCheckIp bool `protobuf:"varint,6,opt,name=passCheckIp,proto3" json:"passCheckIp,omitempty"` +} + +func (x *LoginRequest) Reset() { + *x = LoginRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LoginRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LoginRequest) ProtoMessage() {} + +func (x *LoginRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[65] + 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 LoginRequest.ProtoReflect.Descriptor instead. +func (*LoginRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{65} +} + +func (x *LoginRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *LoginRequest) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +func (x *LoginRequest) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *LoginRequest) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +func (x *LoginRequest) GetIp() string { + if x != nil { + return x.Ip + } + return "" +} + +func (x *LoginRequest) GetPassCheckIp() bool { + if x != nil { + return x.PassCheckIp + } + return false +} + +type TokenInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AccountInfo *AccountInfo `protobuf:"bytes,1,opt,name=AccountInfo,json=accountInfo,proto3" json:"AccountInfo,omitempty"` + Token string `protobuf:"bytes,2,opt,name=Token,json=token,proto3" json:"Token,omitempty"` + RefreshToken string `protobuf:"bytes,4,opt,name=RefreshToken,json=refresh,proto3" json:"RefreshToken,omitempty"` + IsSampleAddress bool `protobuf:"varint,3,opt,name=IsSampleAddress,json=isSampleAddress,proto3" json:"IsSampleAddress,omitempty"` + NowAddress string `protobuf:"bytes,5,opt,name=nowAddress,proto3" json:"nowAddress,omitempty"` +} + +func (x *TokenInfo) Reset() { + *x = TokenInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TokenInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TokenInfo) ProtoMessage() {} + +func (x *TokenInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[66] + 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 TokenInfo.ProtoReflect.Descriptor instead. +func (*TokenInfo) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{66} +} + +func (x *TokenInfo) GetAccountInfo() *AccountInfo { + if x != nil { + return x.AccountInfo + } + return nil +} + +func (x *TokenInfo) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *TokenInfo) GetRefreshToken() string { + if x != nil { + return x.RefreshToken + } + return "" +} + +func (x *TokenInfo) GetIsSampleAddress() bool { + if x != nil { + return x.IsSampleAddress + } + return false +} + +func (x *TokenInfo) GetNowAddress() string { + if x != nil { + return x.NowAddress + } + return "" +} + +type Extend struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + JumpTo string `protobuf:"bytes,1,opt,name=JumpTo,json=jumpTo,proto3" json:"JumpTo,omitempty"` + Lang string `protobuf:"bytes,2,opt,name=Lang,json=lang,proto3" json:"Lang,omitempty"` + CanScan bool `protobuf:"varint,3,opt,name=CanScan,json=canScan,proto3" json:"CanScan,omitempty"` + ResolutionRatio bool `protobuf:"varint,4,opt,name=ResolutionRatio,json=resolutionRatio,proto3" json:"ResolutionRatio,omitempty"` +} + +func (x *Extend) Reset() { + *x = Extend{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Extend) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Extend) ProtoMessage() {} + +func (x *Extend) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[67] + 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 Extend.ProtoReflect.Descriptor instead. +func (*Extend) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{67} +} + +func (x *Extend) GetJumpTo() string { + if x != nil { + return x.JumpTo + } + return "" +} + +func (x *Extend) GetLang() string { + if x != nil { + return x.Lang + } + return "" +} + +func (x *Extend) GetCanScan() bool { + if x != nil { + return x.CanScan + } + return false +} + +func (x *Extend) GetResolutionRatio() bool { + if x != nil { + return x.ResolutionRatio + } + return false +} + +type Department struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + Name string `protobuf:"bytes,2,opt,name=Name,json=name,proto3" json:"Name,omitempty"` +} + +func (x *Department) Reset() { + *x = Department{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Department) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Department) ProtoMessage() {} + +func (x *Department) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[68] + 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 Department.ProtoReflect.Descriptor instead. +func (*Department) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{68} +} + +func (x *Department) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *Department) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +// The response message containing the greetings +type AccountInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,json=id,proto3" json:"ID,omitempty"` + Account string `protobuf:"bytes,2,opt,name=Account,json=account,proto3" json:"Account,omitempty"` + NickName string `protobuf:"bytes,3,opt,name=NickName,json=nickName,proto3" json:"NickName,omitempty"` + Type int64 `protobuf:"varint,4,opt,name=Type,json=type,proto3" json:"Type,omitempty"` + TelNum string `protobuf:"bytes,5,opt,name=TelNum,json=telNum,proto3" json:"TelNum,omitempty"` + Status int32 `protobuf:"varint,6,opt,name=Status,json=status,proto3" json:"Status,omitempty"` + Avatar string `protobuf:"bytes,7,opt,name=Avatar,json=avatar,proto3" json:"Avatar,omitempty"` + CreateAt string `protobuf:"bytes,8,opt,name=CreateAt,json=createAt,proto3" json:"CreateAt,omitempty"` + RealNameID uint64 `protobuf:"varint,9,opt,name=RealNameID,json=realNameID,proto3" json:"RealNameID,omitempty"` + RealName string `protobuf:"bytes,10,opt,name=RealName,json=realName,proto3" json:"RealName,omitempty"` + IDNum string `protobuf:"bytes,11,opt,name=IDNum,json=iDNum,proto3" json:"IDNum,omitempty"` + MnemonicWords string `protobuf:"bytes,12,opt,name=MnemonicWords,json=mnemonicWords,proto3" json:"MnemonicWords,omitempty"` + IsNeedChange uint64 `protobuf:"varint,13,opt,name=IsNeedChange,json=isNeedChange,proto3" json:"IsNeedChange,omitempty"` + EnterDate string `protobuf:"bytes,14,opt,name=EnterDate,json=enterDate,proto3" json:"EnterDate,omitempty"` + WorkYear float32 `protobuf:"fixed32,15,opt,name=WorkYear,json=workYear,proto3" json:"WorkYear,omitempty"` + Domain string `protobuf:"bytes,16,opt,name=Domain,json=domain,proto3" json:"Domain,omitempty"` + Extend *Extend `protobuf:"bytes,17,opt,name=Extend,json=extend,proto3" json:"Extend,omitempty"` + JobNum string `protobuf:"bytes,18,opt,name=JobNum,json=jobNum,proto3" json:"JobNum,omitempty"` + BirthDate string `protobuf:"bytes,19,opt,name=BirthDate,json=birth_date,proto3" json:"BirthDate,omitempty"` + Age uint64 `protobuf:"varint,20,opt,name=Age,json=age,proto3" json:"Age,omitempty"` + Sex uint64 `protobuf:"varint,21,opt,name=Sex,json=sex,proto3" json:"Sex,omitempty"` + Title string `protobuf:"bytes,22,opt,name=Title,json=title,proto3" json:"Title,omitempty"` + Departments []*Department `protobuf:"bytes,23,rep,name=Departments,json=departments,proto3" json:"Departments,omitempty"` + Ip string `protobuf:"bytes,24,opt,name=Ip,json=ip,proto3" json:"Ip,omitempty"` + LoginDate string `protobuf:"bytes,25,opt,name=LoginDate,json=loginDate,proto3" json:"LoginDate,omitempty"` + InvitationCode string `protobuf:"bytes,26,opt,name=InvitationCode,json=invitationCode,proto3" json:"InvitationCode,omitempty"` + NowLogId uint64 `protobuf:"varint,27,opt,name=NowLogId,json=nowLogId,proto3" json:"NowLogId,omitempty"` + CanScan bool `protobuf:"varint,28,opt,name=CanScan,json=canScan,proto3" json:"CanScan,omitempty"` + LeftDate string `protobuf:"bytes,29,opt,name=LeftDate,json=leftDate,proto3" json:"LeftDate,omitempty"` + Positions []*PositionUser `protobuf:"bytes,30,rep,name=Positions,json=positions,proto3" json:"Positions,omitempty"` + Remark string `protobuf:"bytes,31,opt,name=Remark,json=remark,proto3" json:"Remark,omitempty"` + RecentImg string `protobuf:"bytes,32,opt,name=recentImg,proto3" json:"recentImg,omitempty"` + Clocks []*ClockUser `protobuf:"bytes,33,rep,name=clocks,proto3" json:"clocks,omitempty"` + MailAccount string `protobuf:"bytes,34,opt,name=mailAccount,proto3" json:"mailAccount,omitempty"` + ICNum string `protobuf:"bytes,35,opt,name=ICNum,json=icNum,proto3" json:"ICNum,omitempty"` + EnglishName string `protobuf:"bytes,36,opt,name=englishName,proto3" json:"englishName,omitempty"` + Train string `protobuf:"bytes,37,opt,name=Train,json=train,proto3" json:"Train,omitempty"` + Certificate string `protobuf:"bytes,38,opt,name=Certificate,json=certificate,proto3" json:"Certificate,omitempty"` + TrainVideos []*TrainVideo `protobuf:"bytes,39,rep,name=TrainVideos,json=trainVideos,proto3" json:"TrainVideos,omitempty"` + Operator *Operator `protobuf:"bytes,40,opt,name=operator,proto3" json:"operator,omitempty"` + UpdatedAt string `protobuf:"bytes,41,opt,name=updatedAt,proto3" json:"updatedAt,omitempty"` + SecurityCode string `protobuf:"bytes,42,opt,name=SecurityCode,json=securityCode,proto3" json:"SecurityCode,omitempty"` + BlockAddr string `protobuf:"bytes,43,opt,name=BlockAddr,json=blockAddr,proto3" json:"BlockAddr,omitempty"` +} + +func (x *AccountInfo) Reset() { + *x = AccountInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccountInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountInfo) ProtoMessage() {} + +func (x *AccountInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[69] + 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 AccountInfo.ProtoReflect.Descriptor instead. +func (*AccountInfo) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{69} +} + +func (x *AccountInfo) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *AccountInfo) GetAccount() string { + if x != nil { + return x.Account + } + return "" +} + +func (x *AccountInfo) GetNickName() string { + if x != nil { + return x.NickName + } + return "" +} + +func (x *AccountInfo) GetType() int64 { + if x != nil { + return x.Type + } + return 0 +} + +func (x *AccountInfo) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +func (x *AccountInfo) GetStatus() int32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *AccountInfo) GetAvatar() string { + if x != nil { + return x.Avatar + } + return "" +} + +func (x *AccountInfo) GetCreateAt() string { + if x != nil { + return x.CreateAt + } + return "" +} + +func (x *AccountInfo) GetRealNameID() uint64 { + if x != nil { + return x.RealNameID + } + return 0 +} + +func (x *AccountInfo) GetRealName() string { + if x != nil { + return x.RealName + } + return "" +} + +func (x *AccountInfo) GetIDNum() string { + if x != nil { + return x.IDNum + } + return "" +} + +func (x *AccountInfo) GetMnemonicWords() string { + if x != nil { + return x.MnemonicWords + } + return "" +} + +func (x *AccountInfo) GetIsNeedChange() uint64 { + if x != nil { + return x.IsNeedChange + } + return 0 +} + +func (x *AccountInfo) GetEnterDate() string { + if x != nil { + return x.EnterDate + } + return "" +} + +func (x *AccountInfo) GetWorkYear() float32 { + if x != nil { + return x.WorkYear + } + return 0 +} + +func (x *AccountInfo) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *AccountInfo) GetExtend() *Extend { + if x != nil { + return x.Extend + } + return nil +} + +func (x *AccountInfo) GetJobNum() string { + if x != nil { + return x.JobNum + } + return "" +} + +func (x *AccountInfo) GetBirthDate() string { + if x != nil { + return x.BirthDate + } + return "" +} + +func (x *AccountInfo) GetAge() uint64 { + if x != nil { + return x.Age + } + return 0 +} + +func (x *AccountInfo) GetSex() uint64 { + if x != nil { + return x.Sex + } + return 0 +} + +func (x *AccountInfo) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *AccountInfo) GetDepartments() []*Department { + if x != nil { + return x.Departments + } + return nil +} + +func (x *AccountInfo) GetIp() string { + if x != nil { + return x.Ip + } + return "" +} + +func (x *AccountInfo) GetLoginDate() string { + if x != nil { + return x.LoginDate + } + return "" +} + +func (x *AccountInfo) GetInvitationCode() string { + if x != nil { + return x.InvitationCode + } + return "" +} + +func (x *AccountInfo) GetNowLogId() uint64 { + if x != nil { + return x.NowLogId + } + return 0 +} + +func (x *AccountInfo) GetCanScan() bool { + if x != nil { + return x.CanScan + } + return false +} + +func (x *AccountInfo) GetLeftDate() string { + if x != nil { + return x.LeftDate + } + return "" +} + +func (x *AccountInfo) GetPositions() []*PositionUser { + if x != nil { + return x.Positions + } + return nil +} + +func (x *AccountInfo) GetRemark() string { + if x != nil { + return x.Remark + } + return "" +} + +func (x *AccountInfo) GetRecentImg() string { + if x != nil { + return x.RecentImg + } + return "" +} + +func (x *AccountInfo) GetClocks() []*ClockUser { + if x != nil { + return x.Clocks + } + return nil +} + +func (x *AccountInfo) GetMailAccount() string { + if x != nil { + return x.MailAccount + } + return "" +} + +func (x *AccountInfo) GetICNum() string { + if x != nil { + return x.ICNum + } + return "" +} + +func (x *AccountInfo) GetEnglishName() string { + if x != nil { + return x.EnglishName + } + return "" +} + +func (x *AccountInfo) GetTrain() string { + if x != nil { + return x.Train + } + return "" +} + +func (x *AccountInfo) GetCertificate() string { + if x != nil { + return x.Certificate + } + return "" +} + +func (x *AccountInfo) GetTrainVideos() []*TrainVideo { + if x != nil { + return x.TrainVideos + } + return nil +} + +func (x *AccountInfo) GetOperator() *Operator { + if x != nil { + return x.Operator + } + return nil +} + +func (x *AccountInfo) GetUpdatedAt() string { + if x != nil { + return x.UpdatedAt + } + return "" +} + +func (x *AccountInfo) GetSecurityCode() string { + if x != nil { + return x.SecurityCode + } + return "" +} + +func (x *AccountInfo) GetBlockAddr() string { + if x != nil { + return x.BlockAddr + } + return "" +} + +type UserInfoV2 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID uint64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + Account string `protobuf:"bytes,2,opt,name=Account,proto3" json:"Account,omitempty"` + NickName string `protobuf:"bytes,3,opt,name=NickName,proto3" json:"NickName,omitempty"` + TelNum string `protobuf:"bytes,4,opt,name=TelNum,proto3" json:"TelNum,omitempty"` + Status string `protobuf:"bytes,5,opt,name=Status,proto3" json:"Status,omitempty"` + Avatar string `protobuf:"bytes,6,opt,name=Avatar,proto3" json:"Avatar,omitempty"` + CreateAt string `protobuf:"bytes,7,opt,name=CreateAt,proto3" json:"CreateAt,omitempty"` + RealName string `protobuf:"bytes,8,opt,name=RealName,proto3" json:"RealName,omitempty"` + IDNum string `protobuf:"bytes,9,opt,name=IDNum,proto3" json:"IDNum,omitempty"` + EnterDate string `protobuf:"bytes,10,opt,name=EnterDate,proto3" json:"EnterDate,omitempty"` + Extend *Extend `protobuf:"bytes,11,opt,name=Extend,proto3" json:"Extend,omitempty"` + JobNum string `protobuf:"bytes,12,opt,name=JobNum,proto3" json:"JobNum,omitempty"` + RecentImg string `protobuf:"bytes,13,opt,name=recentImg,proto3" json:"recentImg,omitempty"` + MailAccount string `protobuf:"bytes,14,opt,name=mailAccount,proto3" json:"mailAccount,omitempty"` + Operator *Operator `protobuf:"bytes,15,opt,name=operator,proto3" json:"operator,omitempty"` + UpdatedAt string `protobuf:"bytes,16,opt,name=updatedAt,proto3" json:"updatedAt,omitempty"` +} + +func (x *UserInfoV2) Reset() { + *x = UserInfoV2{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserInfoV2) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserInfoV2) ProtoMessage() {} + +func (x *UserInfoV2) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[70] + 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 UserInfoV2.ProtoReflect.Descriptor instead. +func (*UserInfoV2) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{70} +} + +func (x *UserInfoV2) GetID() uint64 { + if x != nil { + return x.ID + } + return 0 +} + +func (x *UserInfoV2) GetAccount() string { + if x != nil { + return x.Account + } + return "" +} + +func (x *UserInfoV2) GetNickName() string { + if x != nil { + return x.NickName + } + return "" +} + +func (x *UserInfoV2) GetTelNum() string { + if x != nil { + return x.TelNum + } + return "" +} + +func (x *UserInfoV2) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *UserInfoV2) GetAvatar() string { + if x != nil { + return x.Avatar + } + return "" +} + +func (x *UserInfoV2) GetCreateAt() string { + if x != nil { + return x.CreateAt + } + return "" +} + +func (x *UserInfoV2) GetRealName() string { + if x != nil { + return x.RealName + } + return "" +} + +func (x *UserInfoV2) GetIDNum() string { + if x != nil { + return x.IDNum + } + return "" +} + +func (x *UserInfoV2) GetEnterDate() string { + if x != nil { + return x.EnterDate + } + return "" +} + +func (x *UserInfoV2) GetExtend() *Extend { + if x != nil { + return x.Extend + } + return nil +} + +func (x *UserInfoV2) GetJobNum() string { + if x != nil { + return x.JobNum + } + return "" +} + +func (x *UserInfoV2) GetRecentImg() string { + if x != nil { + return x.RecentImg + } + return "" +} + +func (x *UserInfoV2) GetMailAccount() string { + if x != nil { + return x.MailAccount + } + return "" +} + +func (x *UserInfoV2) GetOperator() *Operator { + if x != nil { + return x.Operator + } + return nil +} + +func (x *UserInfoV2) GetUpdatedAt() string { + if x != nil { + return x.UpdatedAt + } + return "" +} + +type RefreshTokenRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RefreshToken string `protobuf:"bytes,1,opt,name=refreshToken,proto3" json:"refreshToken,omitempty"` + Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"` + Ip string `protobuf:"bytes,3,opt,name=ip,proto3" json:"ip,omitempty"` +} + +func (x *RefreshTokenRequest) Reset() { + *x = RefreshTokenRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RefreshTokenRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RefreshTokenRequest) ProtoMessage() {} + +func (x *RefreshTokenRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[71] + 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 RefreshTokenRequest.ProtoReflect.Descriptor instead. +func (*RefreshTokenRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{71} +} + +func (x *RefreshTokenRequest) GetRefreshToken() string { + if x != nil { + return x.RefreshToken + } + return "" +} + +func (x *RefreshTokenRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +func (x *RefreshTokenRequest) GetIp() string { + if x != nil { + return x.Ip + } + return "" +} + +type PositionUser struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PositionID uint64 `protobuf:"varint,1,opt,name=PositionID,json=positionID,proto3" json:"PositionID,omitempty"` + PositionName string `protobuf:"bytes,2,opt,name=PositionName,json=positionName,proto3" json:"PositionName,omitempty"` + DepartmentId uint64 `protobuf:"varint,3,opt,name=DepartmentId,json=departmentId,proto3" json:"DepartmentId,omitempty"` + DepartmentCode string `protobuf:"bytes,4,opt,name=DepartmentCode,json=departmentCode,proto3" json:"DepartmentCode,omitempty"` + DepartmentName string `protobuf:"bytes,5,opt,name=DepartmentName,json=departmentName,proto3" json:"DepartmentName,omitempty"` + UserId uint64 `protobuf:"varint,6,opt,name=UserId,json=userId,proto3" json:"UserId,omitempty"` + UserName string `protobuf:"bytes,7,opt,name=UserName,json=userName,proto3" json:"UserName,omitempty"` +} + +func (x *PositionUser) Reset() { + *x = PositionUser{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PositionUser) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PositionUser) ProtoMessage() {} + +func (x *PositionUser) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[72] + 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 PositionUser.ProtoReflect.Descriptor instead. +func (*PositionUser) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{72} +} + +func (x *PositionUser) GetPositionID() uint64 { + if x != nil { + return x.PositionID + } + return 0 +} + +func (x *PositionUser) GetPositionName() string { + if x != nil { + return x.PositionName + } + return "" +} + +func (x *PositionUser) GetDepartmentId() uint64 { + if x != nil { + return x.DepartmentId + } + return 0 +} + +func (x *PositionUser) GetDepartmentCode() string { + if x != nil { + return x.DepartmentCode + } + return "" +} + +func (x *PositionUser) GetDepartmentName() string { + if x != nil { + return x.DepartmentName + } + return "" +} + +func (x *PositionUser) GetUserId() uint64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *PositionUser) GetUserName() string { + if x != nil { + return x.UserName + } + return "" +} + +type JobNumGetInfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + JobNum string `protobuf:"bytes,1,opt,name=jobNum,proto3" json:"jobNum,omitempty"` + Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"` +} + +func (x *JobNumGetInfoRequest) Reset() { + *x = JobNumGetInfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JobNumGetInfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobNumGetInfoRequest) ProtoMessage() {} + +func (x *JobNumGetInfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[73] + 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 JobNumGetInfoRequest.ProtoReflect.Descriptor instead. +func (*JobNumGetInfoRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{73} +} + +func (x *JobNumGetInfoRequest) GetJobNum() string { + if x != nil { + return x.JobNum + } + return "" +} + +func (x *JobNumGetInfoRequest) GetDomain() string { + if x != nil { + return x.Domain + } + return "" +} + +type CreateClockDeviceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeviceNum string `protobuf:"bytes,1,opt,name=deviceNum,proto3" json:"deviceNum,omitempty"` + DeviceName string `protobuf:"bytes,2,opt,name=deviceName,proto3" json:"deviceName,omitempty"` + DeviceSite string `protobuf:"bytes,3,opt,name=deviceSite,proto3" json:"deviceSite,omitempty"` +} + +func (x *CreateClockDeviceRequest) Reset() { + *x = CreateClockDeviceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateClockDeviceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateClockDeviceRequest) ProtoMessage() {} + +func (x *CreateClockDeviceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[74] + 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 CreateClockDeviceRequest.ProtoReflect.Descriptor instead. +func (*CreateClockDeviceRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{74} +} + +func (x *CreateClockDeviceRequest) GetDeviceNum() string { + if x != nil { + return x.DeviceNum + } + return "" +} + +func (x *CreateClockDeviceRequest) GetDeviceName() string { + if x != nil { + return x.DeviceName + } + return "" +} + +func (x *CreateClockDeviceRequest) GetDeviceSite() string { + if x != nil { + return x.DeviceSite + } + return "" +} + +type UpdateClockDeviceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + DeviceNum string `protobuf:"bytes,2,opt,name=deviceNum,proto3" json:"deviceNum,omitempty"` + DeviceName string `protobuf:"bytes,3,opt,name=deviceName,proto3" json:"deviceName,omitempty"` + DeviceSite string `protobuf:"bytes,4,opt,name=deviceSite,proto3" json:"deviceSite,omitempty"` +} + +func (x *UpdateClockDeviceRequest) Reset() { + *x = UpdateClockDeviceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UpdateClockDeviceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateClockDeviceRequest) ProtoMessage() {} + +func (x *UpdateClockDeviceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[75] + 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 UpdateClockDeviceRequest.ProtoReflect.Descriptor instead. +func (*UpdateClockDeviceRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{75} +} + +func (x *UpdateClockDeviceRequest) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *UpdateClockDeviceRequest) GetDeviceNum() string { + if x != nil { + return x.DeviceNum + } + return "" +} + +func (x *UpdateClockDeviceRequest) GetDeviceName() string { + if x != nil { + return x.DeviceName + } + return "" +} + +func (x *UpdateClockDeviceRequest) GetDeviceSite() string { + if x != nil { + return x.DeviceSite + } + return "" +} + +type ClockDeviceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *ClockDeviceResponse) Reset() { + *x = ClockDeviceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockDeviceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockDeviceResponse) ProtoMessage() {} + +func (x *ClockDeviceResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[76] + 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 ClockDeviceResponse.ProtoReflect.Descriptor instead. +func (*ClockDeviceResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{76} +} + +func (x *ClockDeviceResponse) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +type RemoveClockDeviceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (x *RemoveClockDeviceRequest) Reset() { + *x = RemoveClockDeviceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RemoveClockDeviceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RemoveClockDeviceRequest) ProtoMessage() {} + +func (x *RemoveClockDeviceRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[77] + 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 RemoveClockDeviceRequest.ProtoReflect.Descriptor instead. +func (*RemoveClockDeviceRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{77} +} + +func (x *RemoveClockDeviceRequest) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +type ClockDeviceListRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + DeviceSite string `protobuf:"bytes,2,opt,name=deviceSite,proto3" json:"deviceSite,omitempty"` + DeviceNum string `protobuf:"bytes,3,opt,name=deviceNum,proto3" json:"deviceNum,omitempty"` + DeviceName string `protobuf:"bytes,4,opt,name=deviceName,proto3" json:"deviceName,omitempty"` + Page uint64 `protobuf:"varint,5,opt,name=page,proto3" json:"page,omitempty"` + PageSize uint64 `protobuf:"varint,6,opt,name=pageSize,proto3" json:"pageSize,omitempty"` + Ids []uint64 `protobuf:"varint,7,rep,packed,name=ids,proto3" json:"ids,omitempty"` +} + +func (x *ClockDeviceListRequest) Reset() { + *x = ClockDeviceListRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockDeviceListRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockDeviceListRequest) ProtoMessage() {} + +func (x *ClockDeviceListRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[78] + 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 ClockDeviceListRequest.ProtoReflect.Descriptor instead. +func (*ClockDeviceListRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{78} +} + +func (x *ClockDeviceListRequest) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ClockDeviceListRequest) GetDeviceSite() string { + if x != nil { + return x.DeviceSite + } + return "" +} + +func (x *ClockDeviceListRequest) GetDeviceNum() string { + if x != nil { + return x.DeviceNum + } + return "" +} + +func (x *ClockDeviceListRequest) GetDeviceName() string { + if x != nil { + return x.DeviceName + } + return "" +} + +func (x *ClockDeviceListRequest) GetPage() uint64 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ClockDeviceListRequest) GetPageSize() uint64 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ClockDeviceListRequest) GetIds() []uint64 { + if x != nil { + return x.Ids + } + return nil +} + +type ClockDeviceListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Count uint64 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` + Data []*ClockDeviceInfo `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"` +} + +func (x *ClockDeviceListResponse) Reset() { + *x = ClockDeviceListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[79] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockDeviceListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockDeviceListResponse) ProtoMessage() {} + +func (x *ClockDeviceListResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[79] + 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 ClockDeviceListResponse.ProtoReflect.Descriptor instead. +func (*ClockDeviceListResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{79} +} + +func (x *ClockDeviceListResponse) GetCount() uint64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *ClockDeviceListResponse) GetData() []*ClockDeviceInfo { + if x != nil { + return x.Data + } + return nil +} + +type ClockUser struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + CreatedAt string `protobuf:"bytes,2,opt,name=createdAt,proto3" json:"createdAt,omitempty"` + UpdatedAt string `protobuf:"bytes,3,opt,name=updatedAt,proto3" json:"updatedAt,omitempty"` + DeletedAt string `protobuf:"bytes,4,opt,name=deletedAt,proto3" json:"deletedAt,omitempty"` + DeviceID uint64 `protobuf:"varint,5,opt,name=deviceID,proto3" json:"deviceID,omitempty"` + UserId uint64 `protobuf:"varint,6,opt,name=userId,proto3" json:"userId,omitempty"` + Status uint64 `protobuf:"varint,7,opt,name=status,proto3" json:"status,omitempty"` + Device *ClockDeviceInfo `protobuf:"bytes,8,opt,name=device,proto3" json:"device,omitempty"` +} + +func (x *ClockUser) Reset() { + *x = ClockUser{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockUser) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockUser) ProtoMessage() {} + +func (x *ClockUser) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[80] + 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 ClockUser.ProtoReflect.Descriptor instead. +func (*ClockUser) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{80} +} + +func (x *ClockUser) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ClockUser) GetCreatedAt() string { + if x != nil { + return x.CreatedAt + } + return "" +} + +func (x *ClockUser) GetUpdatedAt() string { + if x != nil { + return x.UpdatedAt + } + return "" +} + +func (x *ClockUser) GetDeletedAt() string { + if x != nil { + return x.DeletedAt + } + return "" +} + +func (x *ClockUser) GetDeviceID() uint64 { + if x != nil { + return x.DeviceID + } + return 0 +} + +func (x *ClockUser) GetUserId() uint64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *ClockUser) GetStatus() uint64 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *ClockUser) GetDevice() *ClockDeviceInfo { + if x != nil { + return x.Device + } + return nil +} + +type ClockDeviceInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + CreateAt string `protobuf:"bytes,2,opt,name=createAt,proto3" json:"createAt,omitempty"` + UpdateAt string `protobuf:"bytes,3,opt,name=updateAt,proto3" json:"updateAt,omitempty"` + DeviceSite string `protobuf:"bytes,4,opt,name=deviceSite,proto3" json:"deviceSite,omitempty"` + DeviceNum string `protobuf:"bytes,5,opt,name=deviceNum,proto3" json:"deviceNum,omitempty"` + DeviceName string `protobuf:"bytes,6,opt,name=deviceName,proto3" json:"deviceName,omitempty"` + UserNum uint64 `protobuf:"varint,7,opt,name=userNum,proto3" json:"userNum,omitempty"` + Data []*ClockUserRel `protobuf:"bytes,8,rep,name=data,proto3" json:"data,omitempty"` +} + +func (x *ClockDeviceInfo) Reset() { + *x = ClockDeviceInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[81] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockDeviceInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockDeviceInfo) ProtoMessage() {} + +func (x *ClockDeviceInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[81] + 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 ClockDeviceInfo.ProtoReflect.Descriptor instead. +func (*ClockDeviceInfo) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{81} +} + +func (x *ClockDeviceInfo) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ClockDeviceInfo) GetCreateAt() string { + if x != nil { + return x.CreateAt + } + return "" +} + +func (x *ClockDeviceInfo) GetUpdateAt() string { + if x != nil { + return x.UpdateAt + } + return "" +} + +func (x *ClockDeviceInfo) GetDeviceSite() string { + if x != nil { + return x.DeviceSite + } + return "" +} + +func (x *ClockDeviceInfo) GetDeviceNum() string { + if x != nil { + return x.DeviceNum + } + return "" +} + +func (x *ClockDeviceInfo) GetDeviceName() string { + if x != nil { + return x.DeviceName + } + return "" +} + +func (x *ClockDeviceInfo) GetUserNum() uint64 { + if x != nil { + return x.UserNum + } + return 0 +} + +func (x *ClockDeviceInfo) GetData() []*ClockUserRel { + if x != nil { + return x.Data + } + return nil +} + +type ClockDeviceInfoResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Count uint64 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` + Data []*ClockUserRel `protobuf:"bytes,2,rep,name=data,proto3" json:"data,omitempty"` +} + +func (x *ClockDeviceInfoResponse) Reset() { + *x = ClockDeviceInfoResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[82] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockDeviceInfoResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockDeviceInfoResponse) ProtoMessage() {} + +func (x *ClockDeviceInfoResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[82] + 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 ClockDeviceInfoResponse.ProtoReflect.Descriptor instead. +func (*ClockDeviceInfoResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{82} +} + +func (x *ClockDeviceInfoResponse) GetCount() uint64 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *ClockDeviceInfoResponse) GetData() []*ClockUserRel { + if x != nil { + return x.Data + } + return nil +} + +type ClockUserRel struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + CreateAt string `protobuf:"bytes,2,opt,name=createAt,proto3" json:"createAt,omitempty"` + UpdateAt string `protobuf:"bytes,3,opt,name=updateAt,proto3" json:"updateAt,omitempty"` + NickName string `protobuf:"bytes,4,opt,name=nickName,proto3" json:"nickName,omitempty"` + JobNum string `protobuf:"bytes,5,opt,name=jobNum,proto3" json:"jobNum,omitempty"` + IcNum string `protobuf:"bytes,6,opt,name=icNum,proto3" json:"icNum,omitempty"` +} + +func (x *ClockUserRel) Reset() { + *x = ClockUserRel{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[83] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockUserRel) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockUserRel) ProtoMessage() {} + +func (x *ClockUserRel) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[83] + 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 ClockUserRel.ProtoReflect.Descriptor instead. +func (*ClockUserRel) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{83} +} + +func (x *ClockUserRel) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ClockUserRel) GetCreateAt() string { + if x != nil { + return x.CreateAt + } + return "" +} + +func (x *ClockUserRel) GetUpdateAt() string { + if x != nil { + return x.UpdateAt + } + return "" +} + +func (x *ClockUserRel) GetNickName() string { + if x != nil { + return x.NickName + } + return "" +} + +func (x *ClockUserRel) GetJobNum() string { + if x != nil { + return x.JobNum + } + return "" +} + +func (x *ClockUserRel) GetIcNum() string { + if x != nil { + return x.IcNum + } + return "" +} + +type ClockDeviceInfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Page uint64 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"` + PageSize uint64 `protobuf:"varint,3,opt,name=pageSize,proto3" json:"pageSize,omitempty"` +} + +func (x *ClockDeviceInfoRequest) Reset() { + *x = ClockDeviceInfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[84] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockDeviceInfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockDeviceInfoRequest) ProtoMessage() {} + +func (x *ClockDeviceInfoRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[84] + 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 ClockDeviceInfoRequest.ProtoReflect.Descriptor instead. +func (*ClockDeviceInfoRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{84} +} + +func (x *ClockDeviceInfoRequest) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ClockDeviceInfoRequest) GetPage() uint64 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ClockDeviceInfoRequest) GetPageSize() uint64 { + if x != nil { + return x.PageSize + } + return 0 +} + +type ClockBatchBindRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + UserId []uint64 `protobuf:"varint,2,rep,packed,name=userId,proto3" json:"userId,omitempty"` + DeviceId []uint64 `protobuf:"varint,3,rep,packed,name=deviceId,proto3" json:"deviceId,omitempty"` +} + +func (x *ClockBatchBindRequest) Reset() { + *x = ClockBatchBindRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[85] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockBatchBindRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockBatchBindRequest) ProtoMessage() {} + +func (x *ClockBatchBindRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[85] + 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 ClockBatchBindRequest.ProtoReflect.Descriptor instead. +func (*ClockBatchBindRequest) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{85} +} + +func (x *ClockBatchBindRequest) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ClockBatchBindRequest) GetUserId() []uint64 { + if x != nil { + return x.UserId + } + return nil +} + +func (x *ClockBatchBindRequest) GetDeviceId() []uint64 { + if x != nil { + return x.DeviceId + } + return nil +} + +type ClockBatchListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []*ClockUserDeviceBatch `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` +} + +func (x *ClockBatchListResponse) Reset() { + *x = ClockBatchListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[86] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockBatchListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockBatchListResponse) ProtoMessage() {} + +func (x *ClockBatchListResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[86] + 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 ClockBatchListResponse.ProtoReflect.Descriptor instead. +func (*ClockBatchListResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{86} +} + +func (x *ClockBatchListResponse) GetData() []*ClockUserDeviceBatch { + if x != nil { + return x.Data + } + return nil +} + +type ClockUserDeviceBatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId uint64 `protobuf:"varint,1,opt,name=userId,proto3" json:"userId,omitempty"` + DeviceId uint64 `protobuf:"varint,2,opt,name=deviceId,proto3" json:"deviceId,omitempty"` + JobNum string `protobuf:"bytes,3,opt,name=JobNum,proto3" json:"JobNum,omitempty"` + DeviceNum string `protobuf:"bytes,4,opt,name=deviceNum,proto3" json:"deviceNum,omitempty"` + DeviceName string `protobuf:"bytes,5,opt,name=deviceName,proto3" json:"deviceName,omitempty"` + WorkStatus string `protobuf:"bytes,6,opt,name=workStatus,proto3" json:"workStatus,omitempty"` +} + +func (x *ClockUserDeviceBatch) Reset() { + *x = ClockUserDeviceBatch{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockUserDeviceBatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockUserDeviceBatch) ProtoMessage() {} + +func (x *ClockUserDeviceBatch) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[87] + 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 ClockUserDeviceBatch.ProtoReflect.Descriptor instead. +func (*ClockUserDeviceBatch) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{87} +} + +func (x *ClockUserDeviceBatch) GetUserId() uint64 { + if x != nil { + return x.UserId + } + return 0 +} + +func (x *ClockUserDeviceBatch) GetDeviceId() uint64 { + if x != nil { + return x.DeviceId + } + return 0 +} + +func (x *ClockUserDeviceBatch) GetJobNum() string { + if x != nil { + return x.JobNum + } + return "" +} + +func (x *ClockUserDeviceBatch) GetDeviceNum() string { + if x != nil { + return x.DeviceNum + } + return "" +} + +func (x *ClockUserDeviceBatch) GetDeviceName() string { + if x != nil { + return x.DeviceName + } + return "" +} + +func (x *ClockUserDeviceBatch) GetWorkStatus() string { + if x != nil { + return x.WorkStatus + } + return "" +} + +type ClockLogInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Sn string `protobuf:"bytes,2,opt,name=sn,proto3" json:"sn,omitempty"` + UserId string `protobuf:"bytes,3,opt,name=userId,proto3" json:"userId,omitempty"` + RecogType string `protobuf:"bytes,4,opt,name=recogType,proto3" json:"recogType,omitempty"` + RecogTime string `protobuf:"bytes,5,opt,name=recogTime,proto3" json:"recogTime,omitempty"` + Gender float32 `protobuf:"fixed32,6,opt,name=gender,proto3" json:"gender,omitempty"` + Photo string `protobuf:"bytes,7,opt,name=photo,proto3" json:"photo,omitempty"` + PassStatus float32 `protobuf:"fixed32,8,opt,name=passStatus,proto3" json:"passStatus,omitempty"` + UserName string `protobuf:"bytes,9,opt,name=userName,proto3" json:"userName,omitempty"` + UserType float32 `protobuf:"fixed32,10,opt,name=userType,proto3" json:"userType,omitempty"` + Confidence string `protobuf:"bytes,11,opt,name=confidence,proto3" json:"confidence,omitempty"` + Reflectivity float32 `protobuf:"fixed32,12,opt,name=reflectivity,proto3" json:"reflectivity,omitempty"` + CardNumber string `protobuf:"bytes,13,opt,name=cardNumber,proto3" json:"cardNumber,omitempty"` + PassWord string `protobuf:"bytes,14,opt,name=passWord,proto3" json:"passWord,omitempty"` + QrCode string `protobuf:"bytes,15,opt,name=qrCode,proto3" json:"qrCode,omitempty"` + Tel string `protobuf:"bytes,16,opt,name=tel,proto3" json:"tel,omitempty"` + ReasonVisit string `protobuf:"bytes,17,opt,name=reasonVisit,proto3" json:"reasonVisit,omitempty"` + ReceiverTel string `protobuf:"bytes,18,opt,name=receiverTel,proto3" json:"receiverTel,omitempty"` + NumOfPeople uint64 `protobuf:"varint,19,opt,name=numOfPeople,proto3" json:"numOfPeople,omitempty"` +} + +func (x *ClockLogInfo) Reset() { + *x = ClockLogInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockLogInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockLogInfo) ProtoMessage() {} + +func (x *ClockLogInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[88] + 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 ClockLogInfo.ProtoReflect.Descriptor instead. +func (*ClockLogInfo) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{88} +} + +func (x *ClockLogInfo) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ClockLogInfo) GetSn() string { + if x != nil { + return x.Sn + } + return "" +} + +func (x *ClockLogInfo) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +func (x *ClockLogInfo) GetRecogType() string { + if x != nil { + return x.RecogType + } + return "" +} + +func (x *ClockLogInfo) GetRecogTime() string { + if x != nil { + return x.RecogTime + } + return "" +} + +func (x *ClockLogInfo) GetGender() float32 { + if x != nil { + return x.Gender + } + return 0 +} + +func (x *ClockLogInfo) GetPhoto() string { + if x != nil { + return x.Photo + } + return "" +} + +func (x *ClockLogInfo) GetPassStatus() float32 { + if x != nil { + return x.PassStatus + } + return 0 +} + +func (x *ClockLogInfo) GetUserName() string { + if x != nil { + return x.UserName + } + return "" +} + +func (x *ClockLogInfo) GetUserType() float32 { + if x != nil { + return x.UserType + } + return 0 +} + +func (x *ClockLogInfo) GetConfidence() string { + if x != nil { + return x.Confidence + } + return "" +} + +func (x *ClockLogInfo) GetReflectivity() float32 { + if x != nil { + return x.Reflectivity + } + return 0 +} + +func (x *ClockLogInfo) GetCardNumber() string { + if x != nil { + return x.CardNumber + } + return "" +} + +func (x *ClockLogInfo) GetPassWord() string { + if x != nil { + return x.PassWord + } + return "" +} + +func (x *ClockLogInfo) GetQrCode() string { + if x != nil { + return x.QrCode + } + return "" +} + +func (x *ClockLogInfo) GetTel() string { + if x != nil { + return x.Tel + } + return "" +} + +func (x *ClockLogInfo) GetReasonVisit() string { + if x != nil { + return x.ReasonVisit + } + return "" +} + +func (x *ClockLogInfo) GetReceiverTel() string { + if x != nil { + return x.ReceiverTel + } + return "" +} + +func (x *ClockLogInfo) GetNumOfPeople() uint64 { + if x != nil { + return x.NumOfPeople + } + return 0 +} + +type ClockLogReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Page uint64 `protobuf:"varint,2,opt,name=page,proto3" json:"page,omitempty"` + PageSize uint64 `protobuf:"varint,3,opt,name=pageSize,proto3" json:"pageSize,omitempty"` + UserName string `protobuf:"bytes,4,opt,name=userName,proto3" json:"userName,omitempty"` + RecogType string `protobuf:"bytes,5,opt,name=recogType,proto3" json:"recogType,omitempty"` + DeviceNum string `protobuf:"bytes,6,opt,name=deviceNum,proto3" json:"deviceNum,omitempty"` + RecogDate string `protobuf:"bytes,7,opt,name=recogDate,proto3" json:"recogDate,omitempty"` + UserId uint64 `protobuf:"varint,8,opt,name=userId,proto3" json:"userId,omitempty"` +} + +func (x *ClockLogReq) Reset() { + *x = ClockLogReq{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockLogReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockLogReq) ProtoMessage() {} + +func (x *ClockLogReq) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[89] + 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 ClockLogReq.ProtoReflect.Descriptor instead. +func (*ClockLogReq) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{89} +} + +func (x *ClockLogReq) GetId() uint64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *ClockLogReq) GetPage() uint64 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *ClockLogReq) GetPageSize() uint64 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *ClockLogReq) GetUserName() string { + if x != nil { + return x.UserName + } + return "" +} + +func (x *ClockLogReq) GetRecogType() string { + if x != nil { + return x.RecogType + } + return "" +} + +func (x *ClockLogReq) GetDeviceNum() string { + if x != nil { + return x.DeviceNum + } + return "" +} + +func (x *ClockLogReq) GetRecogDate() string { + if x != nil { + return x.RecogDate + } + return "" +} + +func (x *ClockLogReq) GetUserId() uint64 { + if x != nil { + return x.UserId + } + return 0 +} + +type ClockLogListResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Data []*ClockLogInfo `protobuf:"bytes,1,rep,name=data,proto3" json:"data,omitempty"` + Count uint64 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *ClockLogListResponse) Reset() { + *x = ClockLogListResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_account_account_proto_msgTypes[90] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClockLogListResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClockLogListResponse) ProtoMessage() {} + +func (x *ClockLogListResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_account_account_proto_msgTypes[90] + 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 ClockLogListResponse.ProtoReflect.Descriptor instead. +func (*ClockLogListResponse) Descriptor() ([]byte, []int) { + return file_api_account_account_proto_rawDescGZIP(), []int{90} +} + +func (x *ClockLogListResponse) GetData() []*ClockLogInfo { + if x != nil { + return x.Data + } + return nil +} + +func (x *ClockLogListResponse) GetCount() uint64 { + if x != nil { + return x.Count + } + return 0 +} + +var File_api_account_account_proto protoreflect.FileDescriptor + +var file_api_account_account_proto_rawDesc = []byte{ + 0x0a, 0x19, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2f, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6d, 0x77, 0x69, 0x74, 0x6b, 0x6f, 0x77, 0x2f, 0x67, 0x6f, 0x2d, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x40, 0x76, 0x30, 0x2e, + 0x33, 0x2e, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x3f, 0x0a, 0x15, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x61, 0x6c, + 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x22, 0x62, 0x0a, 0x14, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x61, + 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x70, 0x61, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x70, 0x61, 0x73, 0x73, + 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x50, 0x61, 0x73, 0x73, 0x52, 0x65, 0x6d, 0x61, 0x72, + 0x6b, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, 0x6f, 0x74, 0x50, 0x61, 0x73, + 0x73, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x10, 0x55, 0x73, 0x65, + 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x31, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x22, 0xfc, 0x03, 0x0a, 0x0c, 0x55, 0x73, 0x65, 0x72, 0x4c, + 0x69, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x6f, 0x63, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x63, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x63, 0x65, + 0x4f, 0x66, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x10, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, + 0x6e, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x68, 0x6f, 0x74, + 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x68, + 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, + 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, + 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x10, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x64, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x64, 0x69, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x75, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x75, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x50, 0x61, 0x73, 0x73, + 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, + 0x6f, 0x74, 0x50, 0x61, 0x73, 0x73, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, + 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x22, 0x83, 0x02, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x75, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x73, 0x75, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x61, + 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x4f, 0x72, 0x4e, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0d, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x4f, 0x72, 0x4e, 0x6f, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x75, 0x64, + 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, + 0x61, 0x75, 0x64, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, + 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x9e, 0x03, 0x0a, 0x10, + 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x73, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x20, + 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, 0x79, + 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x12, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x69, 0x63, + 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x69, 0x74, 0x79, + 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x52, 0x65, 0x73, 0x69, 0x64, + 0x65, 0x6e, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x4f, 0x66, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1e, 0x0a, 0x0a, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, + 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x75, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x75, + 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x50, 0x61, 0x73, 0x73, 0x52, + 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, 0x6f, + 0x74, 0x50, 0x61, 0x73, 0x73, 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x73, 0x22, 0x3a, 0x0a, 0x10, + 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xc5, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x61, + 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x73, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x73, + 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x69, 0x74, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x64, 0x6f, 0x63, 0x75, + 0x6d, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x69, 0x74, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x52, + 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, + 0x70, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x66, 0x52, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x50, 0x68, 0x6f, 0x74, 0x6f, + 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, + 0x22, 0x50, 0x0a, 0x10, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x22, 0x46, 0x0a, 0x14, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x4a, 0x6f, 0x62, + 0x4e, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x06, 0x6a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x22, 0x6c, 0x0a, 0x24, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x6e, 0x65, 0x6c, 0x57, 0x69, 0x74, 0x68, + 0x54, 0x68, 0x65, 0x53, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x53, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x6e, 0x65, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x54, 0x68, + 0x65, 0x53, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xcc, 0x04, + 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x25, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0d, 0xe2, 0xdf, 0x1f, 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x31, 0x58, 0x01, 0x52, 0x06, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x4e, + 0x75, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, + 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x45, 0x6e, 0x74, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, + 0x64, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x22, + 0x0a, 0x0c, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x61, + 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x65, + 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x10, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0d, 0x64, + 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x73, 0x22, 0xe4, 0x01, 0x0a, + 0x18, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6e, 0x57, 0x65, 0x63, 0x68, + 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x6f, + 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, + 0x6f, 0x63, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x67, 0x68, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x67, + 0x68, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x6c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6c, 0x6f, + 0x67, 0x49, 0x64, 0x22, 0x82, 0x01, 0x0a, 0x1c, 0x4d, 0x61, 0x69, 0x6c, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x42, 0x79, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, + 0x31, 0x58, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x2b, 0x0a, 0x08, 0x4e, + 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0f, 0xe2, + 0xdf, 0x1f, 0x0b, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x35, 0x58, 0x01, 0x78, 0x14, 0x52, 0x08, + 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x49, 0x44, 0x22, 0x5d, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x4d, 0x61, 0x69, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x02, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x58, 0x0a, 0x12, 0x4d, 0x61, 0x69, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x20, 0x0a, + 0x0b, 0x65, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x22, 0xac, 0x01, 0x0a, 0x14, 0x46, 0x64, 0x64, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, + 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, + 0x65, 0x6e, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x65, 0x6e, + 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x78, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x77, 0x78, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1e, + 0x0a, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, + 0x22, 0x42, 0x0a, 0x14, 0x57, 0x78, 0x42, 0x6f, 0x78, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, 0x65, 0x6e, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x67, 0x68, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x67, 0x68, 0x49, 0x64, 0x22, 0x58, 0x0a, 0x18, 0x57, 0x78, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, + 0x6e, 0x49, 0x64, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x68, + 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x67, 0x68, 0x49, 0x64, 0x22, 0x33, + 0x0a, 0x19, 0x57, 0x78, 0x47, 0x65, 0x74, 0x4f, 0x70, 0x65, 0x6e, 0x49, 0x64, 0x42, 0x79, 0x43, + 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6f, + 0x70, 0x65, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x65, + 0x6e, 0x49, 0x64, 0x22, 0x33, 0x0a, 0x19, 0x57, 0x78, 0x42, 0x6f, 0x78, 0x54, 0x65, 0x6c, 0x4e, + 0x75, 0x6d, 0x42, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x22, 0xb8, 0x01, 0x0a, 0x0d, 0x57, 0x78, 0x42, + 0x6f, 0x78, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x70, + 0x65, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x65, 0x6e, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x68, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x67, 0x68, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x73, 0x4e, 0x65, 0x77, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x73, 0x4e, 0x65, 0x77, 0x12, 0x25, 0x0a, 0x04, + 0x75, 0x73, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x75, + 0x73, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x77, 0x78, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x77, 0x78, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x22, 0x0a, 0x03, 0x66, 0x64, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x46, 0x64, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x03, + 0x66, 0x64, 0x64, 0x22, 0x7b, 0x0a, 0x07, 0x46, 0x64, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1e, + 0x0a, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, + 0x22, 0xea, 0x02, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, + 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1a, 0x0a, + 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, + 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, + 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x41, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x49, 0x44, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x6c, 0x4e, + 0x61, 0x6d, 0x65, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x44, 0x4e, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x69, 0x44, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, + 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x6c, 0x49, 0x44, 0x49, 0x6d, 0x67, 0x41, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x6c, 0x49, 0x44, 0x49, 0x6d, 0x67, 0x41, 0x12, + 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x61, 0x6c, 0x49, 0x44, 0x49, 0x6d, 0x67, 0x42, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x6c, 0x49, 0x44, 0x49, 0x6d, 0x67, 0x42, 0x12, + 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x44, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x49, 0x44, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x69, 0x64, 0x65, 0x6f, + 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x22, 0x1f, 0x0a, + 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x22, 0x20, + 0x0a, 0x0c, 0x57, 0x78, 0x41, 0x70, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, + 0x0a, 0x04, 0x47, 0x68, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, + 0x22, 0x43, 0x0a, 0x0d, 0x57, 0x78, 0x41, 0x70, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x41, 0x70, 0x70, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x61, 0x70, 0x70, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x41, 0x70, 0x70, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x70, 0x53, + 0x65, 0x63, 0x72, 0x65, 0x74, 0x22, 0x5b, 0x0a, 0x13, 0x57, 0x78, 0x55, 0x73, 0x65, 0x72, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x04, + 0x77, 0x78, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x18, 0xe2, 0xdf, 0x1f, 0x14, + 0x2a, 0x10, 0xe7, 0xbc, 0xba, 0xe5, 0xb0, 0x91, 0xe5, 0x8f, 0x82, 0xe6, 0x95, 0xb0, 0x77, 0x78, + 0x49, 0x44, 0x58, 0x01, 0x52, 0x04, 0x77, 0x78, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, + 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x44, 0x22, 0x73, 0x0a, 0x15, 0x57, 0x78, 0x55, 0x73, 0x65, 0x72, 0x4f, 0x72, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x4f, + 0x70, 0x65, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xe2, 0xdf, 0x1f, + 0x10, 0x2a, 0x0c, 0xe7, 0xbc, 0xba, 0xe5, 0xb0, 0x91, 0x6f, 0x70, 0x65, 0x6e, 0x69, 0x64, 0x58, + 0x01, 0x52, 0x06, 0x6f, 0x70, 0x65, 0x6e, 0x49, 0x44, 0x12, 0x2c, 0x0a, 0x04, 0x47, 0x68, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xe2, 0xdf, 0x1f, 0x14, 0x2a, 0x10, 0xe7, + 0xbc, 0xba, 0xe5, 0xb0, 0x91, 0xe5, 0x8f, 0x82, 0xe6, 0x95, 0xb0, 0x67, 0x68, 0x69, 0x64, 0x58, + 0x01, 0x52, 0x04, 0x67, 0x68, 0x49, 0x44, 0x22, 0x80, 0x01, 0x0a, 0x0e, 0x57, 0x78, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x4f, 0x70, + 0x65, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x70, 0x65, 0x6e, + 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x47, 0x68, + 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x67, 0x68, 0x49, 0x44, 0x12, 0x1a, + 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x41, 0x75, 0x74, 0x68, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x49, 0x44, 0x22, 0x3a, 0x0a, 0x11, 0x4c, 0x6f, + 0x67, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x25, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4c, 0x6f, 0x67, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9c, 0x02, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x6e, + 0x4c, 0x6f, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x55, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x44, 0x61, 0x74, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x44, 0x61, 0x74, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x61, 0x73, 0x74, 0x44, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x3e, 0x0a, 0x14, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x4c, + 0x6f, 0x67, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x02, 0x49, 0x44, 0x22, 0x4b, 0x0a, 0x19, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x22, 0xca, 0x01, 0x0a, 0x17, 0x53, 0x65, 0x6e, 0x64, 0x4e, 0x65, 0x77, 0x54, 0x65, + 0x6c, 0x4e, 0x75, 0x6d, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, + 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, + 0xe2, 0xdf, 0x1f, 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x31, 0x58, 0x01, 0x52, 0x06, 0x64, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x42, 0x14, 0xe2, 0xdf, 0x1f, 0x10, 0x2a, 0x0c, 0xe7, 0xbc, 0xba, 0xe5, 0xb0, 0x91, 0xe5, + 0x8f, 0x82, 0xe6, 0x95, 0xb0, 0x58, 0x01, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x4e, + 0x65, 0x77, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6e, 0x65, 0x77, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x43, 0x6f, 0x64, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x4e, + 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x4e, 0x6f, 0x22, + 0x4b, 0x0a, 0x10, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x54, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x31, + 0x58, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x65, + 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x65, 0x6c, 0x22, 0x10, 0x0a, 0x0e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, + 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x54, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x31, + 0x58, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x65, + 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x6c, 0x73, 0x22, 0xdd, + 0x01, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x31, + 0x58, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x49, 0x44, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, 0x52, 0x03, 0x49, 0x44, 0x73, 0x12, 0x1c, 0x0a, 0x09, + 0x4f, 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, + 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x50, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, + 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, + 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, + 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x22, 0xc1, + 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x25, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x31, 0x58, 0x01, + 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x54, 0x65, 0x6c, 0x4e, + 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x16, 0xe2, 0xdf, 0x1f, 0x12, 0x0a, 0x09, + 0x5e, 0x31, 0x5c, 0x64, 0x7b, 0x31, 0x30, 0x7d, 0x24, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x32, + 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x4e, 0x6f, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x4e, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x49, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, + 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, + 0x70, 0x65, 0x22, 0xed, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x44, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, + 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x31, 0x58, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x16, 0xe2, 0xdf, 0x1f, 0x12, 0x0a, 0x09, 0x5e, 0x31, 0x5c, 0x64, 0x7b, 0x31, + 0x30, 0x7d, 0x24, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x32, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, + 0x75, 0x6d, 0x12, 0x18, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x55, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x72, 0x6c, 0x12, 0x0e, + 0x0a, 0x02, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x10, + 0x0a, 0x03, 0x4d, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6d, 0x49, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, + 0x53, 0x69, 0x67, 0x4e, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x69, 0x67, + 0x4e, 0x6f, 0x22, 0xa1, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4d, 0x73, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, 0x09, 0x2a, 0x05, 0x37, 0x30, + 0x30, 0x30, 0x31, 0x58, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x2e, 0x0a, + 0x06, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x16, 0xe2, + 0xdf, 0x1f, 0x12, 0x0a, 0x09, 0x5e, 0x31, 0x5c, 0x64, 0x7b, 0x31, 0x30, 0x7d, 0x24, 0x2a, 0x05, + 0x37, 0x30, 0x30, 0x30, 0x32, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x21, 0x0a, + 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, + 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x33, 0x58, 0x01, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, + 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x69, 0x0a, 0x0d, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x25, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0d, 0xe2, 0xdf, 0x1f, 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x31, 0x58, 0x01, 0x52, + 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1d, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, 0x09, 0x10, 0x00, 0x2a, 0x05, 0x37, 0x30, 0x30, + 0x30, 0x34, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x93, 0x03, 0x0a, 0x0f, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x74, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x74, 0x65, 0x6c, + 0x12, 0x16, 0x0a, 0x06, 0x6a, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x6a, 0x6f, 0x6e, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, + 0x74, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x69, 0x74, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x69, 0x74, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x74, 0x65, 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x73, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x75, + 0x74, 0x68, 0x55, 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x75, 0x74, + 0x68, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, 0x61, 0x74, 0x65, 0x18, 0x0f, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x44, 0x61, 0x74, 0x65, + 0x22, 0xd5, 0x01, 0x0a, 0x13, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, + 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x74, 0x65, 0x49, 0x64, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x40, 0x0a, 0x16, 0x57, 0x72, 0x69, 0x74, + 0x65, 0x4f, 0x66, 0x66, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x6a, 0x0a, 0x14, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x4f, 0x66, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x3c, 0x0a, 0x0c, 0x77, 0x72, 0x69, 0x74, + 0x65, 0x4f, 0x66, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x4f, 0x66, + 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4f, + 0x66, 0x66, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x10, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xef, 0x05, 0x0a, 0x0d, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x25, 0x0a, 0x06, 0x44, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, 0x09, + 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x31, 0x58, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x76, 0x61, + 0x74, 0x61, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, + 0x72, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x65, 0x6c, + 0x4e, 0x75, 0x6d, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, + 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x65, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x65, 0x12, + 0x27, 0x0a, 0x06, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, + 0x52, 0x06, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x69, 0x74, 0x6c, + 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x16, + 0x0a, 0x06, 0x4a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x6a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x69, 0x72, 0x74, 0x68, 0x44, + 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x69, 0x72, 0x74, 0x68, + 0x44, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x53, 0x65, 0x78, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x64, 0x4e, 0x75, 0x6d, 0x18, + 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x1a, 0x0a, 0x08, + 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x65, 0x66, 0x74, 0x44, 0x61, 0x74, 0x65, 0x18, 0x19, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6c, 0x65, 0x66, 0x74, 0x44, 0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x52, 0x65, 0x6d, 0x61, 0x72, 0x6b, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, + 0x6d, 0x61, 0x72, 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x52, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x49, 0x6d, + 0x67, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x49, + 0x6d, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x43, 0x4e, 0x75, 0x6d, 0x18, 0x1c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x72, 0x61, 0x69, + 0x6e, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x12, 0x20, + 0x0a, 0x0b, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x1e, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x12, 0x35, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x73, 0x18, + 0x1f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, + 0x74, 0x72, 0x61, 0x69, 0x6e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x69, + 0x6e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x73, 0x12, 0x2d, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, + 0x74, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x21, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, + 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x2e, 0x0a, 0x08, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x0a, 0x74, + 0x72, 0x61, 0x69, 0x6e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x72, 0x61, + 0x69, 0x6e, 0x55, 0x55, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72, + 0x61, 0x69, 0x6e, 0x55, 0x55, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x69, 0x6e, + 0x44, 0x65, 0x73, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72, 0x61, 0x69, + 0x6e, 0x44, 0x65, 0x73, 0x63, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x12, 0x22, 0x0a, 0x0c, 0x53, + 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x1f, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x22, + 0x10, 0x0a, 0x0e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x6f, 0x0a, 0x12, 0x50, 0x72, 0x69, 0x76, 0x61, 0x63, 0x79, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x25, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, 0x09, 0x2a, 0x05, 0x37, + 0x30, 0x30, 0x30, 0x31, 0x58, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x22, + 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, + 0x64, 0x65, 0x22, 0xf2, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x31, 0x58, + 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x67, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x61, 0x67, + 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x50, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x26, 0x0a, 0x0e, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x72, 0x74, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x44, + 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x6e, 0x64, 0x45, 0x6e, + 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x14, 0x0a, 0x05, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x1a, 0x0a, 0x08, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x5a, 0x0a, 0x0b, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x44, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, + 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x31, 0x58, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x22, 0x71, 0x0a, 0x0c, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x2f, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x49, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x45, 0x78, 0x69, 0x73, 0x74, 0x22, 0x90, 0x01, 0x0a, 0x12, + 0x44, 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x49, 0x73, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x4f, 0x66, 0x66, 0x6c, 0x69, 0x6e, 0x65, 0x22, 0x41, + 0x0a, 0x11, 0x44, 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x22, 0x43, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x77, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x67, 0x0a, 0x15, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, + 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x49, 0x44, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0e, 0xe2, 0xdf, 0x1f, 0x0a, 0x2a, 0x05, 0x37, 0x30, 0x30, 0x30, 0x36, 0x80, + 0x01, 0x12, 0x52, 0x05, 0x69, 0x64, 0x4e, 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, + 0x51, 0x0a, 0x0d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x45, 0x78, + 0x69, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x22, 0x8f, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, + 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x65, 0x6c, 0x41, 0x72, 0x65, 0x61, 0x43, 0x6f, 0x64, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x65, 0x6c, 0x41, 0x72, 0x65, 0x61, + 0x43, 0x6f, 0x64, 0x65, 0x22, 0xc7, 0x01, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xe2, 0xdf, 0x1f, 0x09, 0x2a, 0x05, 0x37, 0x30, 0x30, + 0x30, 0x31, 0x58, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x2e, 0x0a, 0x06, + 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x16, 0xe2, 0xdf, + 0x1f, 0x12, 0x0a, 0x09, 0x5e, 0x31, 0x5c, 0x64, 0x7b, 0x31, 0x30, 0x7d, 0x24, 0x2a, 0x05, 0x37, + 0x30, 0x30, 0x30, 0x32, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x12, 0x0a, 0x04, + 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x12, 0x20, 0x0a, 0x0b, + 0x70, 0x61, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0b, 0x70, 0x61, 0x73, 0x73, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x70, 0x22, 0xc2, + 0x01, 0x0a, 0x09, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x0b, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0c, 0x52, 0x65, + 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x12, 0x28, 0x0a, 0x0f, 0x49, 0x73, 0x53, + 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0f, 0x69, 0x73, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x6f, 0x77, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x6f, 0x77, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x22, 0x78, 0x0a, 0x06, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x12, 0x16, 0x0a, + 0x06, 0x4a, 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6a, + 0x75, 0x6d, 0x70, 0x54, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x4c, 0x61, 0x6e, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x43, 0x61, 0x6e, + 0x53, 0x63, 0x61, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, 0x53, + 0x63, 0x61, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x72, 0x65, + 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x22, 0x30, 0x0a, + 0x0a, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x4e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, + 0xa1, 0x0a, 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x69, 0x63, + 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x69, 0x63, + 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x65, 0x6c, + 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6c, 0x4e, 0x75, + 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x76, 0x61, + 0x74, 0x61, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, + 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x1e, 0x0a, + 0x0a, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x44, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x44, 0x12, 0x1a, 0x0a, + 0x08, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x72, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x44, 0x4e, + 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x44, 0x4e, 0x75, 0x6d, 0x12, + 0x24, 0x0a, 0x0d, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x57, 0x6f, 0x72, 0x64, 0x73, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, + 0x57, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x49, 0x73, 0x4e, 0x65, 0x65, 0x64, 0x43, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x69, 0x73, 0x4e, + 0x65, 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x45, 0x6e, 0x74, + 0x65, 0x72, 0x44, 0x61, 0x74, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x59, + 0x65, 0x61, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x02, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x59, + 0x65, 0x61, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x06, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x52, 0x06, 0x65, 0x78, + 0x74, 0x65, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x1d, 0x0a, 0x09, + 0x42, 0x69, 0x72, 0x74, 0x68, 0x44, 0x61, 0x74, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x62, 0x69, 0x72, 0x74, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x41, + 0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x61, 0x67, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x53, 0x65, 0x78, 0x18, 0x15, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x73, 0x65, 0x78, 0x12, + 0x14, 0x0a, 0x05, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x35, 0x0a, 0x0b, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x52, + 0x0b, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x0e, 0x0a, 0x02, + 0x49, 0x70, 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x12, 0x1c, 0x0a, 0x09, + 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x61, 0x74, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x49, 0x6e, + 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x1a, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4e, 0x6f, 0x77, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x18, 0x1b, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6e, 0x6f, 0x77, 0x4c, 0x6f, 0x67, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x43, 0x61, 0x6e, 0x53, 0x63, 0x61, 0x6e, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x63, 0x61, 0x6e, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x4c, 0x65, 0x66, 0x74, + 0x44, 0x61, 0x74, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x65, 0x66, 0x74, + 0x44, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x09, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x1e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x09, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x52, 0x65, 0x6d, + 0x61, 0x72, 0x6b, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x61, 0x72, + 0x6b, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x49, 0x6d, 0x67, 0x18, 0x20, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x49, 0x6d, 0x67, 0x12, + 0x2a, 0x0a, 0x06, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x55, + 0x73, 0x65, 0x72, 0x52, 0x06, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6d, + 0x61, 0x69, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x22, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x49, 0x43, 0x4e, 0x75, 0x6d, 0x18, 0x23, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x63, + 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x65, 0x6e, 0x67, 0x6c, 0x69, 0x73, 0x68, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x6e, 0x67, 0x6c, 0x69, 0x73, + 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x18, 0x25, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x43, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x26, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, + 0x0b, 0x54, 0x72, 0x61, 0x69, 0x6e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x73, 0x18, 0x27, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x74, 0x72, 0x61, + 0x69, 0x6e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x56, 0x69, + 0x64, 0x65, 0x6f, 0x73, 0x12, 0x2d, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x64, + 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x41, 0x64, + 0x64, 0x72, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x41, + 0x64, 0x64, 0x72, 0x22, 0xd4, 0x03, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x56, 0x32, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x54, 0x65, 0x6c, 0x4e, + 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, + 0x12, 0x16, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x41, 0x76, 0x61, 0x74, + 0x61, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x41, 0x76, 0x61, 0x74, 0x61, 0x72, + 0x12, 0x1a, 0x0a, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x49, 0x44, 0x4e, 0x75, + 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x49, 0x44, 0x4e, 0x75, 0x6d, 0x12, 0x1c, + 0x0a, 0x09, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x45, 0x6e, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x06, + 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x52, 0x06, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, + 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x1c, 0x0a, + 0x09, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x49, 0x6d, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x49, 0x6d, 0x67, 0x12, 0x20, 0x0a, 0x0b, 0x6d, + 0x61, 0x69, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, + 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x1c, 0x0a, 0x09, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x61, 0x0a, 0x13, 0x52, 0x65, + 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x70, 0x22, 0xfa, 0x01, + 0x0a, 0x0c, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1e, + 0x0a, 0x0a, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x22, + 0x0a, 0x0c, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, + 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x26, + 0x0a, 0x0e, 0x44, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x70, 0x61, 0x72, 0x74, 0x6d, 0x65, + 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x46, 0x0a, 0x14, 0x4a, 0x6f, + 0x62, 0x4e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x6a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x22, 0x78, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x63, + 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x69, 0x74, 0x65, 0x22, 0x88, 0x01, 0x0a, + 0x18, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x53, 0x69, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x53, 0x69, 0x74, 0x65, 0x22, 0x25, 0x0a, 0x13, 0x43, 0x6c, 0x6f, 0x63, 0x6b, + 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2a, + 0x0a, 0x18, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x76, + 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc8, 0x01, 0x0a, 0x16, 0x43, + 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, + 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, + 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x04, + 0x52, 0x03, 0x69, 0x64, 0x73, 0x22, 0x5d, 0x0a, 0x17, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, + 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x43, + 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, + 0x64, 0x61, 0x74, 0x61, 0x22, 0xf3, 0x01, 0x0a, 0x09, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, + 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x1a, 0x0a, 0x08, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x30, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0xfc, 0x01, 0x0a, 0x0f, 0x43, + 0x6c, 0x6f, 0x63, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, + 0x0a, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x53, 0x69, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x53, 0x69, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x4e, 0x75, 0x6d, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x75, 0x6d, 0x12, 0x29, + 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, + 0x52, 0x65, 0x6c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x5a, 0x0a, 0x17, 0x43, 0x6c, 0x6f, + 0x63, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x6c, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa0, 0x01, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x55, + 0x73, 0x65, 0x72, 0x52, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x41, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x41, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x6e, 0x69, 0x63, 0x6b, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6a, 0x6f, + 0x62, 0x4e, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6a, 0x6f, 0x62, 0x4e, + 0x75, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x69, 0x63, 0x4e, 0x75, 0x6d, 0x22, 0x58, 0x0a, 0x16, 0x43, 0x6c, 0x6f, 0x63, + 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x22, 0x5b, 0x0a, 0x15, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x61, 0x74, 0x63, 0x68, + 0x42, 0x69, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, + 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x04, 0x52, 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x22, + 0x4b, 0x0a, 0x16, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc0, 0x01, 0x0a, + 0x14, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4a, 0x6f, 0x62, + 0x4e, 0x75, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x4a, 0x6f, 0x62, 0x4e, 0x75, + 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x12, + 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x1e, 0x0a, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0x98, 0x04, 0x0a, 0x0c, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x0e, 0x0a, 0x02, 0x73, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x73, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x6f, + 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, + 0x6f, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x67, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, + 0x70, 0x68, 0x6f, 0x74, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x6f, + 0x74, 0x6f, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x70, 0x61, 0x73, 0x73, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, + 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x0c, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x1e, + 0x0a, 0x0a, 0x63, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x63, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x57, 0x6f, 0x72, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x57, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x71, 0x72, + 0x43, 0x6f, 0x64, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x71, 0x72, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x65, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x74, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x56, 0x69, + 0x73, 0x69, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x61, 0x73, 0x6f, + 0x6e, 0x56, 0x69, 0x73, 0x69, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x54, 0x65, 0x6c, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x54, 0x65, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x75, 0x6d, 0x4f, + 0x66, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6e, + 0x75, 0x6d, 0x4f, 0x66, 0x50, 0x65, 0x6f, 0x70, 0x6c, 0x65, 0x22, 0xdb, 0x01, 0x0a, 0x0b, 0x43, + 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, + 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x67, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x75, + 0x6d, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x4e, + 0x75, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x63, 0x6f, 0x67, 0x44, 0x61, 0x74, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x57, 0x0a, 0x14, 0x43, 0x6c, 0x6f, 0x63, + 0x6b, 0x4c, 0x6f, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x29, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x43, 0x6c, 0x6f, 0x63, 0x6b, 0x4c, 0x6f, + 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x32, 0xe4, 0x13, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, + 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x15, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x49, 0x6e, 0x66, + 0x6f, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x0c, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x52, 0x65, + 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x12, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, + 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3c, 0x0a, 0x07, 0x4f, 0x66, 0x66, 0x4c, + 0x69, 0x6e, 0x65, 0x12, 0x16, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4d, 0x0a, 0x09, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, + 0x4c, 0x6f, 0x67, 0x12, 0x22, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x6f, + 0x67, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x42, 0x79, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0d, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x4c, + 0x6f, 0x67, 0x42, 0x79, 0x49, 0x64, 0x12, 0x1d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x2e, 0x4f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x4c, 0x6f, 0x67, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, + 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x4c, 0x6f, 0x67, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x08, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x50, 0x77, 0x64, 0x12, 0x18, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x50, 0x77, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x17, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x07, 0x53, + 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x12, 0x17, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, + 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4d, + 0x73, 0x67, 0x12, 0x1d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x6e, + 0x64, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x6e, 0x64, + 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x45, 0x78, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x4d, 0x73, 0x67, 0x12, 0x1d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x4d, 0x73, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, + 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x4d, + 0x73, 0x67, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x17, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x53, 0x65, + 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x08, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4d, 0x73, + 0x67, 0x12, 0x18, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x56, 0x0a, + 0x10, 0x53, 0x65, 0x6e, 0x64, 0x4e, 0x65, 0x77, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x4d, 0x73, + 0x67, 0x12, 0x20, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x6e, 0x64, + 0x4e, 0x65, 0x77, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x53, 0x65, + 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, + 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x12, 0x20, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, + 0x53, 0x65, 0x6e, 0x64, 0x4e, 0x65, 0x77, 0x54, 0x65, 0x6c, 0x4e, 0x75, 0x6d, 0x4d, 0x73, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0e, 0x41, 0x75, 0x74, + 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0a, 0x44, 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x4a, 0x77, 0x74, 0x12, 0x1a, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x44, 0x65, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1b, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x44, 0x65, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, + 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0d, 0x4a, 0x6f, 0x62, + 0x4e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x47, 0x65, 0x74, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x35, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x15, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x08, 0x52, 0x61, 0x6e, + 0x64, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x79, 0x49, 0x44, + 0x73, 0x12, 0x19, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x42, 0x79, 0x49, 0x44, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, + 0x16, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x16, 0x2e, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x41, 0x0a, 0x0a, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x54, 0x65, 0x6c, 0x12, 0x1a, 0x2e, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x54, + 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, 0x54, 0x65, 0x6c, 0x12, + 0x19, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x42, 0x79, + 0x54, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x48, 0x0a, 0x0b, 0x4f, 0x6e, 0x6c, 0x79, 0x53, 0x65, 0x6e, 0x64, 0x4d, + 0x73, 0x67, 0x12, 0x17, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x6e, + 0x64, 0x4d, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4a, 0x0a, + 0x0c, 0x4f, 0x6e, 0x6c, 0x79, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4d, 0x73, 0x67, 0x12, 0x18, 0x2e, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x4d, 0x73, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x73, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5d, 0x0a, 0x15, 0x4d, 0x61, 0x69, + 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x79, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x25, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x69, + 0x6c, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x79, 0x4e, 0x69, 0x63, 0x6b, 0x4e, 0x61, + 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x2e, 0x4d, 0x61, 0x69, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x06, 0x4c, 0x69, 0x73, 0x74, + 0x56, 0x32, 0x12, 0x16, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x65, 0x72, + 0x73, 0x6f, 0x6e, 0x6e, 0x65, 0x6c, 0x57, 0x69, 0x74, 0x68, 0x54, 0x68, 0x65, 0x53, 0x61, 0x6d, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x6e, 0x65, 0x6c, 0x57, 0x69, + 0x74, 0x68, 0x54, 0x68, 0x65, 0x53, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x6e, 0x65, 0x6c, 0x57, 0x69, 0x74, + 0x68, 0x54, 0x68, 0x65, 0x53, 0x61, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x47, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, + 0x79, 0x4a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x12, 0x1d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x73, 0x42, 0x79, 0x4a, 0x6f, 0x62, 0x4e, 0x75, 0x6d, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x41, 0x0a, 0x08, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x2e, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, + 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x3f, 0x0a, 0x08, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x16, + 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x18, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x0d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, + 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x0c, 0x5a, 0x0a, 0x2e, 0x2f, 0x3b, 0x61, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_api_account_account_proto_rawDescOnce sync.Once + file_api_account_account_proto_rawDescData = file_api_account_account_proto_rawDesc +) + +func file_api_account_account_proto_rawDescGZIP() []byte { + file_api_account_account_proto_rawDescOnce.Do(func() { + file_api_account_account_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_account_account_proto_rawDescData) + }) + return file_api_account_account_proto_rawDescData +} + +var file_api_account_account_proto_msgTypes = make([]protoimpl.MessageInfo, 91) +var file_api_account_account_proto_goTypes = []interface{}{ + (*CheckRealNameResponse)(nil), // 0: account.CheckRealNameResponse + (*CheckRealNameRequest)(nil), // 1: account.CheckRealNameRequest + (*UserListResponse)(nil), // 2: account.UserListResponse + (*UserListInfo)(nil), // 3: account.UserListInfo + (*UserListRequest)(nil), // 4: account.UserListRequest + (*UserInfoResponse)(nil), // 5: account.UserInfoResponse + (*RealNameResponse)(nil), // 6: account.RealNameResponse + (*RealNameRequest)(nil), // 7: account.RealNameRequest + (*RegisterResponse)(nil), // 8: account.RegisterResponse + (*UsersByJobNumRequest)(nil), // 9: account.UsersByJobNumRequest + (*QueryPersonnelWithTheSameNameRequest)(nil), // 10: account.QueryPersonnelWithTheSameNameRequest + (*QueryPersonnelWithTheSameNameResponse)(nil), // 11: account.QueryPersonnelWithTheSameNameResponse + (*ListV2Request)(nil), // 12: account.ListV2Request + (*SendClockInWechatRequest)(nil), // 13: account.SendClockInWechatRequest + (*MailAccountByNickNameRequest)(nil), // 14: account.MailAccountByNickNameRequest + (*CreateMaiAccountRequest)(nil), // 15: account.CreateMaiAccountRequest + (*MaiAccountResponse)(nil), // 16: account.MaiAccountResponse + (*FddCreateUserRequest)(nil), // 17: account.FddCreateUserRequest + (*WxBoxUserInfoRequest)(nil), // 18: account.WxBoxUserInfoRequest + (*WxGetOpenIdByCodeRequest)(nil), // 19: account.WxGetOpenIdByCodeRequest + (*WxGetOpenIdByCodeResponse)(nil), // 20: account.WxGetOpenIdByCodeResponse + (*WxBoxTelNumByCodeResponse)(nil), // 21: account.WxBoxTelNumByCodeResponse + (*WxBoxUserInfo)(nil), // 22: account.WxBoxUserInfo + (*FddInfo)(nil), // 23: account.FddInfo + (*UserInfo)(nil), // 24: account.UserInfo + (*CommonRequest)(nil), // 25: account.CommonRequest + (*WxAppRequest)(nil), // 26: account.WxAppRequest + (*WxAppResponse)(nil), // 27: account.WxAppResponse + (*WxUserUpdateRequest)(nil), // 28: account.WxUserUpdateRequest + (*WxUserOrCreateRequest)(nil), // 29: account.WxUserOrCreateRequest + (*WxUserResponse)(nil), // 30: account.WxUserResponse + (*LoginLogsResponse)(nil), // 31: account.LoginLogsResponse + (*LoginLog)(nil), // 32: account.LoginLog + (*OnlineLogByIdRequest)(nil), // 33: account.OnlineLogByIdRequest + (*LoginInfosByUserIdRequest)(nil), // 34: account.LoginInfosByUserIdRequest + (*SendNewTelNumMsgRequest)(nil), // 35: account.SendNewTelNumMsgRequest + (*UserByTelRequest)(nil), // 36: account.UserByTelRequest + (*CommonResponse)(nil), // 37: account.CommonResponse + (*UsersByTelRequest)(nil), // 38: account.UsersByTelRequest + (*ListByIDsRequest)(nil), // 39: account.ListByIDsRequest + (*SendMsgRequest)(nil), // 40: account.SendMsgRequest + (*SendCustomMsgRequest)(nil), // 41: account.SendCustomMsgRequest + (*CheckMsgRequest)(nil), // 42: account.CheckMsgRequest + (*SendMsgStatusResponse)(nil), // 43: account.SendMsgStatusResponse + (*RemoveRequest)(nil), // 44: account.RemoveRequest + (*WriteOffRequest)(nil), // 45: account.WriteOffRequest + (*WriteOffListRequest)(nil), // 46: account.WriteOffListRequest + (*WriteOffApproveRequest)(nil), // 47: account.WriteOffApproveRequest + (*WriteOffListResponse)(nil), // 48: account.WriteOffListResponse + (*RemoveResponse)(nil), // 49: account.RemoveResponse + (*UpdateRequest)(nil), // 50: account.UpdateRequest + (*Operator)(nil), // 51: account.Operator + (*TrainVideo)(nil), // 52: account.trainVideo + (*UpdateResponse)(nil), // 53: account.UpdateResponse + (*PrivacyInfoRequest)(nil), // 54: account.PrivacyInfoRequest + (*ListRequest)(nil), // 55: account.ListRequest + (*ListResponse)(nil), // 56: account.ListResponse + (*InfoRequest)(nil), // 57: account.InfoRequest + (*InfoResponse)(nil), // 58: account.InfoResponse + (*DecryptJwtResponse)(nil), // 59: account.DecryptJwtResponse + (*DecryptJwtRequest)(nil), // 60: account.DecryptJwtRequest + (*CheckPwdRequest)(nil), // 61: account.CheckPwdRequest + (*AuthenticationRequest)(nil), // 62: account.AuthenticationRequest + (*RequestStatus)(nil), // 63: account.RequestStatus + (*RegistRequest)(nil), // 64: account.RegistRequest + (*LoginRequest)(nil), // 65: account.LoginRequest + (*TokenInfo)(nil), // 66: account.TokenInfo + (*Extend)(nil), // 67: account.Extend + (*Department)(nil), // 68: account.Department + (*AccountInfo)(nil), // 69: account.AccountInfo + (*UserInfoV2)(nil), // 70: account.UserInfoV2 + (*RefreshTokenRequest)(nil), // 71: account.RefreshTokenRequest + (*PositionUser)(nil), // 72: account.PositionUser + (*JobNumGetInfoRequest)(nil), // 73: account.JobNumGetInfoRequest + (*CreateClockDeviceRequest)(nil), // 74: account.CreateClockDeviceRequest + (*UpdateClockDeviceRequest)(nil), // 75: account.UpdateClockDeviceRequest + (*ClockDeviceResponse)(nil), // 76: account.ClockDeviceResponse + (*RemoveClockDeviceRequest)(nil), // 77: account.RemoveClockDeviceRequest + (*ClockDeviceListRequest)(nil), // 78: account.ClockDeviceListRequest + (*ClockDeviceListResponse)(nil), // 79: account.ClockDeviceListResponse + (*ClockUser)(nil), // 80: account.ClockUser + (*ClockDeviceInfo)(nil), // 81: account.ClockDeviceInfo + (*ClockDeviceInfoResponse)(nil), // 82: account.ClockDeviceInfoResponse + (*ClockUserRel)(nil), // 83: account.ClockUserRel + (*ClockDeviceInfoRequest)(nil), // 84: account.ClockDeviceInfoRequest + (*ClockBatchBindRequest)(nil), // 85: account.ClockBatchBindRequest + (*ClockBatchListResponse)(nil), // 86: account.ClockBatchListResponse + (*ClockUserDeviceBatch)(nil), // 87: account.ClockUserDeviceBatch + (*ClockLogInfo)(nil), // 88: account.ClockLogInfo + (*ClockLogReq)(nil), // 89: account.ClockLogReq + (*ClockLogListResponse)(nil), // 90: account.ClockLogListResponse +} +var file_api_account_account_proto_depIdxs = []int32{ + 3, // 0: account.UserListResponse.userList:type_name -> account.UserListInfo + 24, // 1: account.WxBoxUserInfo.user:type_name -> account.UserInfo + 23, // 2: account.WxBoxUserInfo.fdd:type_name -> account.FddInfo + 32, // 3: account.LoginLogsResponse.Data:type_name -> account.LoginLog + 45, // 4: account.WriteOffListResponse.writeOffList:type_name -> account.WriteOffRequest + 67, // 5: account.UpdateRequest.Extend:type_name -> account.Extend + 52, // 6: account.UpdateRequest.TrainVideos:type_name -> account.trainVideo + 51, // 7: account.UpdateRequest.operator:type_name -> account.Operator + 69, // 8: account.ListResponse.Data:type_name -> account.AccountInfo + 69, // 9: account.InfoResponse.Info:type_name -> account.AccountInfo + 69, // 10: account.TokenInfo.AccountInfo:type_name -> account.AccountInfo + 67, // 11: account.AccountInfo.Extend:type_name -> account.Extend + 68, // 12: account.AccountInfo.Departments:type_name -> account.Department + 72, // 13: account.AccountInfo.Positions:type_name -> account.PositionUser + 80, // 14: account.AccountInfo.clocks:type_name -> account.ClockUser + 52, // 15: account.AccountInfo.TrainVideos:type_name -> account.trainVideo + 51, // 16: account.AccountInfo.operator:type_name -> account.Operator + 67, // 17: account.UserInfoV2.Extend:type_name -> account.Extend + 51, // 18: account.UserInfoV2.operator:type_name -> account.Operator + 81, // 19: account.ClockDeviceListResponse.data:type_name -> account.ClockDeviceInfo + 81, // 20: account.ClockUser.device:type_name -> account.ClockDeviceInfo + 83, // 21: account.ClockDeviceInfo.data:type_name -> account.ClockUserRel + 83, // 22: account.ClockDeviceInfoResponse.data:type_name -> account.ClockUserRel + 87, // 23: account.ClockBatchListResponse.data:type_name -> account.ClockUserDeviceBatch + 88, // 24: account.ClockLogListResponse.data:type_name -> account.ClockLogInfo + 65, // 25: account.Account.Login:input_type -> account.LoginRequest + 71, // 26: account.Account.RefreshToken:input_type -> account.RefreshTokenRequest + 60, // 27: account.Account.Logout:input_type -> account.DecryptJwtRequest + 25, // 28: account.Account.OffLine:input_type -> account.CommonRequest + 34, // 29: account.Account.OnlineLog:input_type -> account.LoginInfosByUserIdRequest + 33, // 30: account.Account.OnlineLogById:input_type -> account.OnlineLogByIdRequest + 61, // 31: account.Account.CheckPwd:input_type -> account.CheckPwdRequest + 40, // 32: account.Account.SendMsg:input_type -> account.SendMsgRequest + 41, // 33: account.Account.SendCustomMsg:input_type -> account.SendCustomMsgRequest + 41, // 34: account.Account.SendExCustomMsg:input_type -> account.SendCustomMsgRequest + 40, // 35: account.Account.SendMsgRegister:input_type -> account.SendMsgRequest + 42, // 36: account.Account.CheckMsg:input_type -> account.CheckMsgRequest + 35, // 37: account.Account.SendNewTelNumMsg:input_type -> account.SendNewTelNumMsgRequest + 35, // 38: account.Account.UpdateTelNum:input_type -> account.SendNewTelNumMsgRequest + 62, // 39: account.Account.Authentication:input_type -> account.AuthenticationRequest + 60, // 40: account.Account.DecryptJwt:input_type -> account.DecryptJwtRequest + 57, // 41: account.Account.Info:input_type -> account.InfoRequest + 73, // 42: account.Account.JobNumGetInfo:input_type -> account.JobNumGetInfoRequest + 55, // 43: account.Account.List:input_type -> account.ListRequest + 55, // 44: account.Account.RandList:input_type -> account.ListRequest + 39, // 45: account.Account.ListByIDs:input_type -> account.ListByIDsRequest + 44, // 46: account.Account.Remove:input_type -> account.RemoveRequest + 50, // 47: account.Account.Update:input_type -> account.UpdateRequest + 38, // 48: account.Account.UsersByTel:input_type -> account.UsersByTelRequest + 36, // 49: account.Account.UserByTel:input_type -> account.UserByTelRequest + 40, // 50: account.Account.OnlySendMsg:input_type -> account.SendMsgRequest + 42, // 51: account.Account.OnlyCheckMsg:input_type -> account.CheckMsgRequest + 14, // 52: account.Account.MailAccountByNickName:input_type -> account.MailAccountByNickNameRequest + 12, // 53: account.Account.ListV2:input_type -> account.ListV2Request + 10, // 54: account.Account.QueryPersonnelWithTheSameName:input_type -> account.QueryPersonnelWithTheSameNameRequest + 9, // 55: account.Account.UsersByJobNum:input_type -> account.UsersByJobNumRequest + 7, // 56: account.Account.RealName:input_type -> account.RealNameRequest + 64, // 57: account.Account.Register:input_type -> account.RegistRequest + 4, // 58: account.Account.UserList:input_type -> account.UserListRequest + 1, // 59: account.Account.CheckRealName:input_type -> account.CheckRealNameRequest + 66, // 60: account.Account.Login:output_type -> account.TokenInfo + 66, // 61: account.Account.RefreshToken:output_type -> account.TokenInfo + 37, // 62: account.Account.Logout:output_type -> account.CommonResponse + 37, // 63: account.Account.OffLine:output_type -> account.CommonResponse + 31, // 64: account.Account.OnlineLog:output_type -> account.LoginLogsResponse + 32, // 65: account.Account.OnlineLogById:output_type -> account.LoginLog + 53, // 66: account.Account.CheckPwd:output_type -> account.UpdateResponse + 43, // 67: account.Account.SendMsg:output_type -> account.SendMsgStatusResponse + 43, // 68: account.Account.SendCustomMsg:output_type -> account.SendMsgStatusResponse + 43, // 69: account.Account.SendExCustomMsg:output_type -> account.SendMsgStatusResponse + 43, // 70: account.Account.SendMsgRegister:output_type -> account.SendMsgStatusResponse + 43, // 71: account.Account.CheckMsg:output_type -> account.SendMsgStatusResponse + 43, // 72: account.Account.SendNewTelNumMsg:output_type -> account.SendMsgStatusResponse + 43, // 73: account.Account.UpdateTelNum:output_type -> account.SendMsgStatusResponse + 63, // 74: account.Account.Authentication:output_type -> account.RequestStatus + 59, // 75: account.Account.DecryptJwt:output_type -> account.DecryptJwtResponse + 5, // 76: account.Account.Info:output_type -> account.UserInfoResponse + 58, // 77: account.Account.JobNumGetInfo:output_type -> account.InfoResponse + 56, // 78: account.Account.List:output_type -> account.ListResponse + 56, // 79: account.Account.RandList:output_type -> account.ListResponse + 56, // 80: account.Account.ListByIDs:output_type -> account.ListResponse + 49, // 81: account.Account.Remove:output_type -> account.RemoveResponse + 53, // 82: account.Account.Update:output_type -> account.UpdateResponse + 56, // 83: account.Account.UsersByTel:output_type -> account.ListResponse + 58, // 84: account.Account.UserByTel:output_type -> account.InfoResponse + 43, // 85: account.Account.OnlySendMsg:output_type -> account.SendMsgStatusResponse + 43, // 86: account.Account.OnlyCheckMsg:output_type -> account.SendMsgStatusResponse + 16, // 87: account.Account.MailAccountByNickName:output_type -> account.MaiAccountResponse + 56, // 88: account.Account.ListV2:output_type -> account.ListResponse + 11, // 89: account.Account.QueryPersonnelWithTheSameName:output_type -> account.QueryPersonnelWithTheSameNameResponse + 56, // 90: account.Account.UsersByJobNum:output_type -> account.ListResponse + 6, // 91: account.Account.RealName:output_type -> account.RealNameResponse + 8, // 92: account.Account.Register:output_type -> account.RegisterResponse + 2, // 93: account.Account.UserList:output_type -> account.UserListResponse + 0, // 94: account.Account.CheckRealName:output_type -> account.CheckRealNameResponse + 60, // [60:95] is the sub-list for method output_type + 25, // [25:60] is the sub-list for method input_type + 25, // [25:25] is the sub-list for extension type_name + 25, // [25:25] is the sub-list for extension extendee + 0, // [0:25] is the sub-list for field type_name +} + +func init() { file_api_account_account_proto_init() } +func file_api_account_account_proto_init() { + if File_api_account_account_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_api_account_account_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckRealNameResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckRealNameRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserListResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserListInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserInfoResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RealNameResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RealNameRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegisterResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UsersByJobNumRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryPersonnelWithTheSameNameRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryPersonnelWithTheSameNameResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListV2Request); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendClockInWechatRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MailAccountByNickNameRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateMaiAccountRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MaiAccountResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FddCreateUserRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WxBoxUserInfoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WxGetOpenIdByCodeRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WxGetOpenIdByCodeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WxBoxTelNumByCodeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WxBoxUserInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FddInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommonRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WxAppRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WxAppResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WxUserUpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WxUserOrCreateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WxUserResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LoginLogsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LoginLog); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OnlineLogByIdRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LoginInfosByUserIdRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendNewTelNumMsgRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserByTelRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommonResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UsersByTelRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListByIDsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendMsgRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendCustomMsgRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckMsgRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendMsgStatusResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RemoveRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WriteOffRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WriteOffListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WriteOffApproveRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WriteOffListResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RemoveResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Operator); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TrainVideo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PrivacyInfoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ListResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InfoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*InfoResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DecryptJwtResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DecryptJwtRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckPwdRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuthenticationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RequestStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegistRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LoginRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TokenInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Extend); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Department); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AccountInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserInfoV2); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RefreshTokenRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PositionUser); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JobNumGetInfoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateClockDeviceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UpdateClockDeviceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockDeviceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RemoveClockDeviceRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockDeviceListRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockDeviceListResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockUser); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockDeviceInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockDeviceInfoResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockUserRel); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockDeviceInfoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockBatchBindRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockBatchListResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockUserDeviceBatch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockLogInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockLogReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_account_account_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClockLogListResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_api_account_account_proto_rawDesc, + NumEnums: 0, + NumMessages: 91, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_api_account_account_proto_goTypes, + DependencyIndexes: file_api_account_account_proto_depIdxs, + MessageInfos: file_api_account_account_proto_msgTypes, + }.Build() + File_api_account_account_proto = out.File + file_api_account_account_proto_rawDesc = nil + file_api_account_account_proto_goTypes = nil + file_api_account_account_proto_depIdxs = nil +} diff --git a/api/account/account.proto b/api/account/account.proto new file mode 100644 index 0000000..6a6af3c --- /dev/null +++ b/api/account/account.proto @@ -0,0 +1,778 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; +package account; +import "github.com/mwitkow/go-proto-validators@v0.3.2/validator.proto"; + +option go_package = "./;account"; + +service Account { + rpc Login (LoginRequest) returns (TokenInfo) {} + rpc RefreshToken (RefreshTokenRequest) returns (TokenInfo) {} //刷新token + rpc Logout (DecryptJwtRequest) returns (CommonResponse) {} + rpc OffLine (CommonRequest) returns (CommonResponse) {} + rpc OnlineLog (LoginInfosByUserIdRequest) returns (LoginLogsResponse) {}//根据用户id获取登录的信息 + rpc OnlineLogById (OnlineLogByIdRequest) returns (LoginLog) {}//根据用户id获取登录的信息 + rpc CheckPwd (CheckPwdRequest) returns (UpdateResponse) {}//检测密码是否正确 +// rpc RegisterOrExist (RegistRequest) returns (RequestStatus) {} + rpc SendMsg (SendMsgRequest) returns (SendMsgStatusResponse) {} //登陆发送验证码 + rpc SendCustomMsg (SendCustomMsgRequest) returns (SendMsgStatusResponse) {}//定制化发送内容 + rpc SendExCustomMsg (SendCustomMsgRequest) returns (SendMsgStatusResponse) {}//定制化发送内容 + rpc SendMsgRegister (SendMsgRequest) returns (SendMsgStatusResponse) {}//注册发送 + rpc CheckMsg (CheckMsgRequest) returns (SendMsgStatusResponse) {} + rpc SendNewTelNumMsg (SendNewTelNumMsgRequest) returns (SendMsgStatusResponse) {}//发送新账号验证码,不携带新号码 + rpc UpdateTelNum (SendNewTelNumMsgRequest) returns (SendMsgStatusResponse) {}//更新新手机号,校验新号码验证码 + rpc Authentication (AuthenticationRequest) returns (RequestStatus) {} + rpc DecryptJwt (DecryptJwtRequest) returns (DecryptJwtResponse) {}//最好放在调用方 + rpc Info (InfoRequest) returns (UserInfoResponse) {} + rpc JobNumGetInfo (JobNumGetInfoRequest) returns (InfoResponse) {} + rpc List (ListRequest) returns (ListResponse) {} + rpc RandList (ListRequest) returns (ListResponse) {} + rpc ListByIDs (ListByIDsRequest) returns (ListResponse) {} + rpc Remove (RemoveRequest) returns (RemoveResponse) {} + rpc Update (UpdateRequest) returns (UpdateResponse) {} + rpc UsersByTel (UsersByTelRequest) returns (ListResponse) {} + rpc UserByTel (UserByTelRequest) returns (InfoResponse) {} + rpc OnlySendMsg (SendMsgRequest) returns (SendMsgStatusResponse) {} //仅发验证码 + rpc OnlyCheckMsg (CheckMsgRequest) returns (SendMsgStatusResponse) {}//仅校验之前发送的验证码 + rpc MailAccountByNickName(MailAccountByNickNameRequest) returns(MaiAccountResponse){} //根据昵称姓名获取昵称的邮箱和拼音名称 + rpc ListV2 (ListV2Request) returns (ListResponse) {}// 新版列表 查询 + rpc QueryPersonnelWithTheSameName (QueryPersonnelWithTheSameNameRequest) returns (QueryPersonnelWithTheSameNameResponse) {}// 查询同名的员工 + rpc UsersByJobNum (UsersByJobNumRequest) returns (ListResponse) {} + rpc RealName (RealNameRequest) returns (RealNameResponse) {}//实名认证 + rpc Register (RegistRequest) returns (RegisterResponse) {}//注册 + rpc UserList (UserListRequest) returns (UserListResponse) {}//用户列表 + rpc CheckRealName (CheckRealNameRequest) returns (CheckRealNameResponse) {}//审核实名 +} +message CheckRealNameResponse{ + uint64 id =1; + string status =2; +} +message CheckRealNameRequest{ + uint64 id = 1; + bool pass = 2; + string notPassRemarks = 3; +} +message UserListResponse{ + uint64 count = 1; + uint64 page = 2; + uint64 pageSize = 3; + repeated UserListInfo userList = 4; +} +message UserListInfo{ + uint64 id = 1; + int32 status = 2; + string name = 3; + int32 sex = 4; + string nationality = 5; + int32 documentType =6; + string certificatePicture = 7; + string validity = 8; + string placeOfResidence = 9; + string groupPhoto = 10; + string attachment = 11; + string registrationTime = 12; + string auditTime = 13; + string subNum = 14; + string notPassRemarks = 15; + string telNum = 16; +} +message UserListRequest{ + string domain = 1; + string subNum = 2; + int32 realNameOrNot = 3; + string name = 4; + int32 sex = 5; + int32 documentType = 6; + int32 auditStatus = 7; + uint64 page = 8; + uint64 pageSize = 9; +} +message UserInfoResponse{ + uint64 id = 1; + int32 status = 2; + string name = 3; + int32 sex = 4; + string nationality = 5; + int32 documentType =6; + string certificatePicture = 7; + string validity = 8; + string placeOfResidence = 9; + string groupPhoto = 10; + string attachment = 11; + string subNum = 12; + string notPassRemarks = 13; +} +message RealNameResponse{ + uint64 id = 1; + string status = 2; +} +message RealNameRequest{ + uint64 id = 1; + string name = 2; + int32 sex = 3; + string nationality = 4; + int32 documentType = 5; + string certificatePicture = 6; + string validity = 7; + string placeOfResidence = 8; + string groupPhoto = 9; + string attachment = 10; +} +message RegisterResponse{ + uint64 ID = 1; + uint64 status = 2; + string token = 3; +} +message UsersByJobNumRequest{ + string domain = 1 ; + repeated string jobNum =2 ; +} +message QueryPersonnelWithTheSameNameRequest{ + repeated string names = 1 ; + string domain = 2 ; + string status = 3 ; +} +message QueryPersonnelWithTheSameNameResponse{ + repeated string names = 1 ; + uint64 count = 2 ; +} +message ListV2Request { + string domain = 1 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + uint64 pageSize = 2 ; + uint64 page = 3 ; + string key = 4 ; + string nickName = 5; + string telNum = 6 ; + string status = 7 ; + string positionName = 8 ; + string jobNum = 9 ; + string mailAccount = 10 ; + string startEnterDate = 11 ; + string endEnterDate = 12 ; + uint32 positionId = 13 ; + uint32 departmentId = 14 ; + string departmentName =15 ; + repeated string departmentNames =16 ; + repeated uint32 positionIds =17 ; + repeated uint32 departmentIds =18 ; +} + +message SendClockInWechatRequest { + string domain = 1; + string telNum =2; + string operatedAt =3; + string clockType =4; + uint32 userId =5; + string ghId =6; + string address =7; + uint64 logId = 8; +} +message MailAccountByNickNameRequest { + string Domain = 1 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"}]; + string NickName = 2 [json_name = "nickName",(validator.field) = {length_lt: 20,string_not_empty: true,human_error: "70005"}]; + uint32 ID = 3 ; +} + +message CreateMaiAccountRequest { + uint32 ID = 1 ; + string nickName = 2; + string domain = 3 ; +} + +message MaiAccountResponse { + string englishName = 1 ; + string mailAccount = 2; +} + +message FddCreateUserRequest { + string openid = 1 ; + uint32 wxUserId = 2; + //string UserId = 3; + string customerId = 4; + bool isVerify = 5; + string transactionNo = 6; +} + +message WxBoxUserInfoRequest { + string openid = 2 ; + string ghId = 3; +} + +message WxGetOpenIdByCodeRequest { + string code = 1 ; + string state = 2 ; + string ghId = 3; +} + +message WxGetOpenIdByCodeResponse { + string openId = 1 ; +} + +message WxBoxTelNumByCodeResponse { + string telNum = 1 ; +} + +message WxBoxUserInfo { + string openId = 1 ; + string ghId = 2 ; + bool isNew = 3 ; + UserInfo user = 4 ; + uint32 wxUserId = 5 ; + FddInfo fdd = 6 ; +} + +message FddInfo { + uint64 ID = 1 ; + string customerId = 2 ; + bool isVerify = 3 ; + string transactionNo = 4; +} + +message UserInfo { + uint64 ID = 1 ; + string nickName = 3 ; + string telNum = 5 ; + string avatar = 7 ; + string createAt = 8 ; + uint64 realNameID = 9 ; + string realName = 10; + string iDNum = 11; + string domain = 12; + string realIDImgA = 17; + string realIDImgB = 18; + string realNameIDName = 19; + string video = 20; +} + +message CommonRequest { + uint64 ID = 1 [json_name = "ID"]; +} + +message WxAppRequest { + string GhId = 1 [json_name = "ID"]; +} + +message WxAppResponse { + string AppID = 1 [json_name = "appID"]; + string AppSecret = 2 [json_name = "appSecret"]; +} + +message WxUserUpdateRequest { + uint32 wxID = 1 [json_name = "wxId" ,(validator.field) = {string_not_empty: true,human_error: "缺少参数wxID"} ]; + uint32 userID = 2 [json_name = "userID"]; +} + +message WxUserOrCreateRequest { + string OpenID = 1 [json_name = "openID" ,(validator.field) = {string_not_empty: true,human_error: "缺少openid"} ]; + string GhID = 2 [json_name = "ghID" ,(validator.field) = {string_not_empty: true,human_error: "缺少参数ghid"} ]; +} + +message WxUserResponse { + string OpenID = 1 [json_name = "openID"]; + uint32 UserID = 2 [json_name = "userID"]; + string GhID = 3 [json_name = "ghID"]; + string RoleAuth = 4 [json_name = "roleAuth"]; + uint32 ID = 5 [json_name = "ID"]; +} + + +message LoginLogsResponse { + repeated LoginLog Data = 1 [json_name = "data"]; +} + +message LoginLog { + string Domain = 1 [json_name = "domain"]; + uint64 ID = 2 [json_name = "ID"]; + uint64 UserId = 3 [json_name = "userId"]; + string Ip = 4 [json_name = "ip"]; + string Token = 5 [json_name = "token"]; + uint64 Status = 6 [json_name = "status"]; + string ExpireDate = 7 [json_name = "expireDate"]; + string LastDate = 8 [json_name = "lastDate"]; + string LogoutDate = 9 [json_name = "logoutDate"]; + string CreatedAt = 10 [json_name = "createdAt"]; + string Address = 11 [json_name = "address"]; +} + +message OnlineLogByIdRequest { + string Domain = 1 [json_name = "domain"]; + uint64 ID = 2 [json_name = "ID"]; +} + +message LoginInfosByUserIdRequest { + string Domain = 1 [json_name = "domain"]; + uint64 UserId = 2 [json_name = "userId"]; +} + +message SendNewTelNumMsgRequest { + string Domain = 1 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + uint64 ID = 2 [json_name = "ID",(validator.field) = {string_not_empty: true,human_error: "缺少参数"} ]; + string NewTelNum = 3 [json_name = "newTelNum"]; + string Code = 4 [json_name = "code"]; + string Project = 5 [json_name = "project"]; + uint32 signNo = 6 ; +} + +message UserByTelRequest { + string Domain = 1 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + string Tel =2 [json_name = "tel"]; +} + +message CommonResponse { +} + +message UsersByTelRequest { + string Domain = 1 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + repeated string Tels =2 [json_name = "tels"]; +} + +message ListByIDsRequest { + string Domain = 1 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + repeated uint64 IDs = 2 [json_name = "IDs"]; + uint64 OrderType = 3 [json_name = "OrderType"]; + uint64 Page = 4 [json_name = "page"]; + uint64 PageSize = 5 [json_name = "pageSize"]; + string NickName = 6 [json_name = "nickName"]; + repeated string InvitationCode = 7 [json_name = "invitationCode"]; + +} + +message SendMsgRequest { + string Domain = 1 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + string TelNum = 2 [json_name = "telNum",(validator.field) = {regex: "^1\\d{10}$",human_error: "70002"}]; + string Project = 3 [json_name = "project"]; + uint32 signNo = 4; + uint32 mId = 5; + string scope = 6;//标记模块 +} + +message SendCustomMsgRequest { + string Domain = 1 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + string TelNum = 2 [json_name = "telNum",(validator.field) = {regex: "^1\\d{10}$",human_error: "70002"}]; + string Project = 3 [json_name = "project"]; + string Url = 4 [json_name = "Url"]; + uint64 ID = 5 [json_name = "ID"]; + uint64 MId = 6 [json_name = "mId"]; + uint64 Location = 7 [json_name = "location"]; + uint32 SigNo = 8 [json_name = "sigNo"]; +} + +message CheckMsgRequest { + string Domain = 1 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + string TelNum = 2 [json_name = "telNum",(validator.field) = {regex: "^1\\d{10}$",human_error: "70002"}]; + string Code = 3 [json_name = "code",(validator.field) = {string_not_empty: true,human_error: "70003"} ]; + string scope = 4;//标记模块 +} + +message SendMsgStatusResponse { +} + +message RemoveRequest { + string Domain = 1 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + uint64 ID = 2 [json_name = "ID",(validator.field) = {int_gt: 0,human_error: "70004"} ]; + string code = 3; +} +message WriteOffRequest{ + uint64 id = 1; + string domain = 2; + uint64 userId = 3; + string tel = 4; + string jonNum = 5; + string userName = 6; + string enterDate = 7; + string positionName =8; + uint64 positionId = 9; + string siteName = 10; + uint64 siteId =11; + string authUrl =12; + string type =13; + uint32 status =14; + string submitDate=15; +} +message WriteOffListRequest{ + uint64 page = 1; + uint64 pageSize =2; + string domain = 3; + string userName =4; + uint64 userId = 5; + uint64 siteId =6; + string type =7; + uint32 status =8; +} +message WriteOffApproveRequest{ + uint64 id = 1; + uint32 status = 2; +} +message WriteOffListResponse{ + int64 total = 1; + repeated WriteOffRequest writeOffList = 2; +} +message RemoveResponse { +} + +message UpdateRequest { + uint64 ID = 1 [json_name = "ID"]; //ID + string Domain = 2 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + string NickName = 3 [json_name = "nickName"]; + string Password = 4 [json_name = "password"]; //密码 + string Avatar = 5 [json_name = "avatar"]; //头像 + string Status = 7 [json_name = "status"]; + string TelNum = 8 [json_name = "telNum"]; + string EnterDate = 14 [json_name = "enterDate"]; + Extend Extend = 17 [json_name = "extend"]; + string Title = 18 [json_name = "title"]; + string JobNum = 19 [json_name = "jobNum"]; + string BirthDate = 20 [json_name = "birthDate"]; + uint64 Sex = 21 [json_name = "sex"]; + string IdNum = 22 [json_name = "idNum"]; + string RealName = 23 [json_name = "realName"]; + string InvitationCode = 24 [json_name = "invitationCode"]; + string LeftDate = 25 [json_name = "leftDate"]; + string Remark = 26 [json_name = "remark"]; + string RecentImg = 27 [json_name = "recentImg"]; + string ICNum = 28 [json_name = "icNum"]; + string Train = 29 [json_name = "train"]; + string Certificate = 30 [json_name = "certificate"]; + repeated trainVideo TrainVideos = 31 [json_name = "trainVideos"]; + Operator operator = 32; + string SecurityCode = 33 [json_name = "securityCode"]; +} + +message Operator { + uint32 ID = 1; + string Name = 2; +} + +message trainVideo { + string trainUUID = 1 [json_name = "trainUUID"]; + string trainDesc = 2 [json_name = "trainDesc"]; + string video = 3 [json_name = "video"]; + string SecurityCode = 31 [json_name = "securityCode"]; +} + +message UpdateResponse { +} + +message PrivacyInfoRequest { + uint64 ID = 1 [json_name = "ID"]; //ID + string Domain = 2 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + string SecurityCode = 3 [json_name = "securityCode"]; +} + +message ListRequest { + string Domain = 1 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + uint64 PageSize = 2 [json_name = "pageSize"]; + uint64 Page = 3 [json_name = "page"]; + string key = 4 [json_name = "key"]; + string status = 5 ; + string telNum = 6; + string startEnterDate = 7; + string endEnterDate = 8; +} + +message ListResponse { + string Status = 1 [json_name = "status"]; + uint64 Count = 2 [json_name = "count"]; + repeated AccountInfo Data = 3 [json_name = "data"]; + uint64 AllCount = 4 [json_name = "allCount"]; +} + +message InfoRequest { + string Domain = 1 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + uint64 ID = 2 [json_name = "id"]; + string scene = 3 ;//场景值 base-默认仅仅user数据 +} + +message InfoResponse { + string Status = 1 [json_name = "status"]; + AccountInfo Info = 2 [json_name = "accountInfo"]; + bool IsExist = 3 [json_name = "isExist"]; +} + +message DecryptJwtResponse { + string Domain = 1 [json_name = "status"]; + uint64 ID = 2 [json_name = "id"]; + string Account = 3 [json_name = "account"]; + string NickName = 4 [json_name = "nickName"]; + bool IsOffline = 5 [json_name = "isOffline"]; +} + +message DecryptJwtRequest { + string token = 1 [json_name = "token"]; + string Domain = 2 [json_name = "Domain"]; +} + +message CheckPwdRequest { + string Token = 1 [json_name = "token"]; + string Password = 2 [json_name = "password"]; +} + +message AuthenticationRequest { + string Name = 1 [json_name = "name"]; + string IDNum = 2 [json_name = "idNum",(validator.field) = {length_eq: 18,human_error: "70006"}]; + string Token = 3 [json_name = "token"]; +} + +message RequestStatus { + string Status = 1 [json_name = "status"]; + uint64 ID = 2 [json_name = "ID"]; + bool isExist = 3; +} + +message RegistRequest { + string domain = 1; + string telNum = 2; + string code = 3; + string address = 4; + string telAreaCode = 5; +} + +message LoginRequest { + string Domain = 1 [json_name = "domain",(validator.field) = {string_not_empty: true,human_error: "70001"} ]; + string TelNum = 2 [json_name = "telNum",(validator.field) = {regex: "^1\\d{10}$",human_error: "70002"}]; + string Code = 3 [json_name = "code"]; + string Password = 4 [json_name = "password"]; + string Ip = 5 [json_name = "ip"]; + bool passCheckIp = 6 ; +} + +message TokenInfo { + AccountInfo AccountInfo = 1 [json_name = "accountInfo"]; + string Token = 2 [json_name = "token"]; + string RefreshToken = 4 [json_name = "refresh"]; + bool IsSampleAddress = 3 [json_name = "isSampleAddress"]; + string nowAddress = 5 [json_name = "nowAddress"]; +} + +message Extend { + string JumpTo = 1 [json_name = "jumpTo"]; + string Lang = 2 [json_name = "lang"]; + bool CanScan = 3 [json_name = "canScan"]; + bool ResolutionRatio = 4 [json_name = "resolutionRatio"]; +} + +message Department { + uint64 ID = 1 [json_name = "ID"]; + string Name = 2 [json_name = "name"]; +} + +// The response message containing the greetings +message AccountInfo { + uint64 ID = 1 [json_name = "id"]; + string Account = 2 [json_name = "account"]; + string NickName = 3 [json_name = "nickName"]; + int64 Type = 4 [json_name = "type"]; + string TelNum = 5 [json_name = "telNum"]; + int32 Status = 6 [json_name = "status"]; + string Avatar = 7 [json_name = "avatar"]; + string CreateAt = 8 [json_name = "createAt"]; + uint64 RealNameID = 9 [json_name = "realNameID"]; + string RealName = 10 [json_name = "realName"]; + string IDNum = 11 [json_name = "iDNum"]; + string MnemonicWords = 12 [json_name = "mnemonicWords"]; + uint64 IsNeedChange = 13 [json_name = "isNeedChange"]; + string EnterDate = 14 [json_name = "enterDate"]; + float WorkYear = 15 [json_name = "workYear"]; + string Domain = 16 [json_name = "domain"]; + Extend Extend = 17 [json_name = "extend"]; + string JobNum = 18 [json_name = "jobNum"]; + string BirthDate = 19 [json_name = "birth_date"]; + uint64 Age = 20 [json_name = "age"]; + uint64 Sex = 21 [json_name = "sex"]; + string Title = 22 [json_name = "title"]; + repeated Department Departments = 23 [json_name = "departments"]; + string Ip = 24 [json_name = "ip"]; + string LoginDate = 25 [json_name = "loginDate"]; + string InvitationCode = 26 [json_name = "invitationCode"]; + uint64 NowLogId = 27 [json_name = "nowLogId"]; + bool CanScan = 28 [json_name = "canScan"]; + string LeftDate = 29 [json_name = "leftDate"]; + repeated PositionUser Positions = 30 [json_name = "positions"]; + string Remark = 31 [json_name = "remark"]; + string recentImg =32; + repeated ClockUser clocks = 33; + string mailAccount = 34; + string ICNum = 35 [json_name = "icNum"]; + string englishName = 36; + string Train = 37 [json_name = "train"]; + string Certificate = 38 [json_name = "certificate"]; + repeated trainVideo TrainVideos = 39 [json_name = "trainVideos"]; + Operator operator = 40; + string updatedAt = 41; + string SecurityCode = 42 [json_name = "securityCode"]; + string BlockAddr = 43 [json_name = "blockAddr"]; +} + +message UserInfoV2 { + uint64 ID = 1 ; + string Account = 2 ; + string NickName = 3 ; + string TelNum = 4 ; + string Status = 5 ; + string Avatar = 6 ; + string CreateAt = 7 ; + string RealName = 8; + string IDNum = 9; + string EnterDate = 10; + Extend Extend = 11; + string JobNum = 12; + string recentImg = 13; + string mailAccount = 14; + Operator operator = 15; + string updatedAt = 16; +} + +message RefreshTokenRequest { + string refreshToken = 1 ; + string domain = 2; + string ip = 3 ; +} + +message PositionUser { + uint64 PositionID = 1 [json_name = "positionID"]; + string PositionName = 2 [json_name = "positionName"]; + uint64 DepartmentId = 3 [json_name = "departmentId"]; + string DepartmentCode = 4 [json_name = "departmentCode"]; + string DepartmentName = 5 [json_name = "departmentName"]; + uint64 UserId = 6 [json_name = "userId"]; + string UserName = 7 [json_name = "userName"]; +} +message JobNumGetInfoRequest{ + string jobNum = 1; + string domain = 2; +} +message CreateClockDeviceRequest{ + string deviceNum =1; + string deviceName =2; + string deviceSite = 3; +} +message UpdateClockDeviceRequest{ + uint64 id = 1; + string deviceNum =2; + string deviceName =3; + string deviceSite = 4; +} +message ClockDeviceResponse{ + uint64 id = 1; +} +message RemoveClockDeviceRequest{ + uint64 id = 1; +} +message ClockDeviceListRequest{ + uint64 id =1; + string deviceSite = 2; + string deviceNum = 3; + string deviceName = 4; + uint64 page = 5 ; + uint64 pageSize = 6 ; + repeated uint64 ids = 7; +} +message ClockDeviceListResponse{ + uint64 count =1; + repeated ClockDeviceInfo data = 2; +} +message ClockUser{ + uint64 id =1; + string createdAt =2; + string updatedAt =3; + string deletedAt =4; + uint64 deviceID =5; + uint64 userId =6; + uint64 status =7; + ClockDeviceInfo device = 8; +} +message ClockDeviceInfo { + uint64 id = 1 ; + string createAt = 2 ; + string updateAt = 3 ; + string deviceSite = 4; + string deviceNum = 5; + string deviceName = 6; + uint64 userNum = 7; + repeated ClockUserRel data = 8 ; +} + +message ClockDeviceInfoResponse{ + uint64 count = 1; + repeated ClockUserRel data = 2 ; +} +message ClockUserRel { + uint64 id = 1 ; + string createAt = 2 ; + string updateAt = 3; + string nickName = 4 ; + string jobNum = 5 ; + string icNum = 6; +} +message ClockDeviceInfoRequest{ + uint64 id = 1; + uint64 page = 2 ; + uint64 pageSize = 3 ; +} +message ClockBatchBindRequest{ + uint64 id = 1; + repeated uint64 userId = 2; + repeated uint64 deviceId =3; +} +message ClockBatchListResponse{ + repeated ClockUserDeviceBatch data = 1; +} +message ClockUserDeviceBatch{ + uint64 userId = 1; + uint64 deviceId = 2; + string JobNum = 3; + string deviceNum = 4; + string deviceName = 5; + string workStatus = 6; +} +message ClockLogInfo{ + uint64 id = 1; + string sn = 2; + string userId =3; + string recogType =4; + string recogTime =5; + float gender =6; + string photo =7; + float passStatus =8; + string userName =9; + float userType =10; + string confidence =11; + float reflectivity =12; + string cardNumber =13; + string passWord =14; + string qrCode =15; + string tel = 16; + string reasonVisit = 17; + string receiverTel = 18; + uint64 numOfPeople = 19; +} +message ClockLogReq{ + uint64 id = 1; + uint64 page = 2; + uint64 pageSize = 3; + string userName = 4; + string recogType = 5; + string deviceNum = 6; + string recogDate = 7; + uint64 userId = 8; +} +message ClockLogListResponse{ + repeated ClockLogInfo data =1; + uint64 count = 2; +} \ No newline at end of file diff --git a/api/account/account.validator.pb.go b/api/account/account.validator.pb.go new file mode 100644 index 0000000..783dde6 --- /dev/null +++ b/api/account/account.validator.pb.go @@ -0,0 +1,535 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: api/account/account.proto + +package account + +import ( + fmt "fmt" + math "math" + proto "github.com/golang/protobuf/proto" + _ "github.com/mwitkow/go-proto-validators" + regexp "regexp" + github_com_mwitkow_go_proto_validators "github.com/mwitkow/go-proto-validators" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +func (this *CheckRealNameResponse) Validate() error { + return nil +} +func (this *CheckRealNameRequest) Validate() error { + return nil +} +func (this *UserListResponse) Validate() error { + for _, item := range this.UserList { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("UserList", err) + } + } + } + return nil +} +func (this *UserListInfo) Validate() error { + return nil +} +func (this *UserListRequest) Validate() error { + return nil +} +func (this *UserInfoResponse) Validate() error { + return nil +} +func (this *RealNameResponse) Validate() error { + return nil +} +func (this *RealNameRequest) Validate() error { + return nil +} +func (this *RegisterResponse) Validate() error { + return nil +} +func (this *UsersByJobNumRequest) Validate() error { + return nil +} +func (this *QueryPersonnelWithTheSameNameRequest) Validate() error { + return nil +} +func (this *QueryPersonnelWithTheSameNameResponse) Validate() error { + return nil +} +func (this *ListV2Request) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + return nil +} +func (this *SendClockInWechatRequest) Validate() error { + return nil +} +func (this *MailAccountByNickNameRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + if this.NickName == "" { + return github_com_mwitkow_go_proto_validators.FieldError("NickName", fmt.Errorf(`70005`)) + } + if !(len(this.NickName) < 20) { + return github_com_mwitkow_go_proto_validators.FieldError("NickName", fmt.Errorf(`70005`)) + } + return nil +} +func (this *CreateMaiAccountRequest) Validate() error { + return nil +} +func (this *MaiAccountResponse) Validate() error { + return nil +} +func (this *FddCreateUserRequest) Validate() error { + return nil +} +func (this *WxBoxUserInfoRequest) Validate() error { + return nil +} +func (this *WxGetOpenIdByCodeRequest) Validate() error { + return nil +} +func (this *WxGetOpenIdByCodeResponse) Validate() error { + return nil +} +func (this *WxBoxTelNumByCodeResponse) Validate() error { + return nil +} +func (this *WxBoxUserInfo) Validate() error { + if this.User != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.User); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("User", err) + } + } + if this.Fdd != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Fdd); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Fdd", err) + } + } + return nil +} +func (this *FddInfo) Validate() error { + return nil +} +func (this *UserInfo) Validate() error { + return nil +} +func (this *CommonRequest) Validate() error { + return nil +} +func (this *WxAppRequest) Validate() error { + return nil +} +func (this *WxAppResponse) Validate() error { + return nil +} +func (this *WxUserUpdateRequest) Validate() error { + return nil +} +func (this *WxUserOrCreateRequest) Validate() error { + if this.OpenID == "" { + return github_com_mwitkow_go_proto_validators.FieldError("OpenID", fmt.Errorf(`缺少openid`)) + } + if this.GhID == "" { + return github_com_mwitkow_go_proto_validators.FieldError("GhID", fmt.Errorf(`缺少参数ghid`)) + } + return nil +} +func (this *WxUserResponse) Validate() error { + return nil +} +func (this *LoginLogsResponse) Validate() error { + for _, item := range this.Data { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Data", err) + } + } + } + return nil +} +func (this *LoginLog) Validate() error { + return nil +} +func (this *OnlineLogByIdRequest) Validate() error { + return nil +} +func (this *LoginInfosByUserIdRequest) Validate() error { + return nil +} +func (this *SendNewTelNumMsgRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + return nil +} +func (this *UserByTelRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + return nil +} +func (this *CommonResponse) Validate() error { + return nil +} +func (this *UsersByTelRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + return nil +} +func (this *ListByIDsRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + return nil +} + +var _regex_SendMsgRequest_TelNum = regexp.MustCompile(`^1\d{10}$`) + +func (this *SendMsgRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + if !_regex_SendMsgRequest_TelNum.MatchString(this.TelNum) { + return github_com_mwitkow_go_proto_validators.FieldError("TelNum", fmt.Errorf(`70002`)) + } + return nil +} + +var _regex_SendCustomMsgRequest_TelNum = regexp.MustCompile(`^1\d{10}$`) + +func (this *SendCustomMsgRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + if !_regex_SendCustomMsgRequest_TelNum.MatchString(this.TelNum) { + return github_com_mwitkow_go_proto_validators.FieldError("TelNum", fmt.Errorf(`70002`)) + } + return nil +} + +var _regex_CheckMsgRequest_TelNum = regexp.MustCompile(`^1\d{10}$`) + +func (this *CheckMsgRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + if !_regex_CheckMsgRequest_TelNum.MatchString(this.TelNum) { + return github_com_mwitkow_go_proto_validators.FieldError("TelNum", fmt.Errorf(`70002`)) + } + if this.Code == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Code", fmt.Errorf(`70003`)) + } + return nil +} +func (this *SendMsgStatusResponse) Validate() error { + return nil +} +func (this *RemoveRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + if !(this.ID > 0) { + return github_com_mwitkow_go_proto_validators.FieldError("ID", fmt.Errorf(`70004`)) + } + return nil +} +func (this *WriteOffRequest) Validate() error { + return nil +} +func (this *WriteOffListRequest) Validate() error { + return nil +} +func (this *WriteOffApproveRequest) Validate() error { + return nil +} +func (this *WriteOffListResponse) Validate() error { + for _, item := range this.WriteOffList { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("WriteOffList", err) + } + } + } + return nil +} +func (this *RemoveResponse) Validate() error { + return nil +} +func (this *UpdateRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + if this.Extend != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Extend); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Extend", err) + } + } + for _, item := range this.TrainVideos { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("TrainVideos", err) + } + } + } + if this.Operator != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Operator); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Operator", err) + } + } + return nil +} +func (this *Operator) Validate() error { + return nil +} +func (this *TrainVideo) Validate() error { + return nil +} +func (this *UpdateResponse) Validate() error { + return nil +} +func (this *PrivacyInfoRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + return nil +} +func (this *ListRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + return nil +} +func (this *ListResponse) Validate() error { + for _, item := range this.Data { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Data", err) + } + } + } + return nil +} +func (this *InfoRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + return nil +} +func (this *InfoResponse) Validate() error { + if this.Info != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Info); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Info", err) + } + } + return nil +} +func (this *DecryptJwtResponse) Validate() error { + return nil +} +func (this *DecryptJwtRequest) Validate() error { + return nil +} +func (this *CheckPwdRequest) Validate() error { + return nil +} +func (this *AuthenticationRequest) Validate() error { + if !(len(this.IDNum) == 18) { + return github_com_mwitkow_go_proto_validators.FieldError("IDNum", fmt.Errorf(`70006`)) + } + return nil +} +func (this *RequestStatus) Validate() error { + return nil +} +func (this *RegistRequest) Validate() error { + return nil +} + +var _regex_LoginRequest_TelNum = regexp.MustCompile(`^1\d{10}$`) + +func (this *LoginRequest) Validate() error { + if this.Domain == "" { + return github_com_mwitkow_go_proto_validators.FieldError("Domain", fmt.Errorf(`70001`)) + } + if !_regex_LoginRequest_TelNum.MatchString(this.TelNum) { + return github_com_mwitkow_go_proto_validators.FieldError("TelNum", fmt.Errorf(`70002`)) + } + return nil +} +func (this *TokenInfo) Validate() error { + if this.AccountInfo != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.AccountInfo); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("AccountInfo", err) + } + } + return nil +} +func (this *Extend) Validate() error { + return nil +} +func (this *Department) Validate() error { + return nil +} +func (this *AccountInfo) Validate() error { + if this.Extend != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Extend); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Extend", err) + } + } + for _, item := range this.Departments { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Departments", err) + } + } + } + for _, item := range this.Positions { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Positions", err) + } + } + } + for _, item := range this.Clocks { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Clocks", err) + } + } + } + for _, item := range this.TrainVideos { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("TrainVideos", err) + } + } + } + if this.Operator != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Operator); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Operator", err) + } + } + return nil +} +func (this *UserInfoV2) Validate() error { + if this.Extend != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Extend); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Extend", err) + } + } + if this.Operator != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Operator); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Operator", err) + } + } + return nil +} +func (this *RefreshTokenRequest) Validate() error { + return nil +} +func (this *PositionUser) Validate() error { + return nil +} +func (this *JobNumGetInfoRequest) Validate() error { + return nil +} +func (this *CreateClockDeviceRequest) Validate() error { + return nil +} +func (this *UpdateClockDeviceRequest) Validate() error { + return nil +} +func (this *ClockDeviceResponse) Validate() error { + return nil +} +func (this *RemoveClockDeviceRequest) Validate() error { + return nil +} +func (this *ClockDeviceListRequest) Validate() error { + return nil +} +func (this *ClockDeviceListResponse) Validate() error { + for _, item := range this.Data { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Data", err) + } + } + } + return nil +} +func (this *ClockUser) Validate() error { + if this.Device != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.Device); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Device", err) + } + } + return nil +} +func (this *ClockDeviceInfo) Validate() error { + for _, item := range this.Data { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Data", err) + } + } + } + return nil +} +func (this *ClockDeviceInfoResponse) Validate() error { + for _, item := range this.Data { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Data", err) + } + } + } + return nil +} +func (this *ClockUserRel) Validate() error { + return nil +} +func (this *ClockDeviceInfoRequest) Validate() error { + return nil +} +func (this *ClockBatchBindRequest) Validate() error { + return nil +} +func (this *ClockBatchListResponse) Validate() error { + for _, item := range this.Data { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Data", err) + } + } + } + return nil +} +func (this *ClockUserDeviceBatch) Validate() error { + return nil +} +func (this *ClockLogInfo) Validate() error { + return nil +} +func (this *ClockLogReq) Validate() error { + return nil +} +func (this *ClockLogListResponse) Validate() error { + for _, item := range this.Data { + if item != nil { + if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(item); err != nil { + return github_com_mwitkow_go_proto_validators.FieldError("Data", err) + } + } + } + return nil +} diff --git a/api/account/account_triple.pb.go b/api/account/account_triple.pb.go new file mode 100644 index 0000000..c1e2b78 --- /dev/null +++ b/api/account/account_triple.pb.go @@ -0,0 +1,1679 @@ +// Code generated by protoc-gen-go-triple. DO NOT EDIT. +// versions: +// - protoc-gen-go-triple v1.0.8 +// - protoc v4.24.0--rc1 +// source: api/account/account.proto + +package account + +import ( + context "context" + protocol "dubbo.apache.org/dubbo-go/v3/protocol" + dubbo3 "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3" + invocation "dubbo.apache.org/dubbo-go/v3/protocol/invocation" + grpc_go "github.com/dubbogo/grpc-go" + codes "github.com/dubbogo/grpc-go/codes" + metadata "github.com/dubbogo/grpc-go/metadata" + status "github.com/dubbogo/grpc-go/status" + common "github.com/dubbogo/triple/pkg/common" + constant "github.com/dubbogo/triple/pkg/common/constant" + triple "github.com/dubbogo/triple/pkg/triple" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc_go.SupportPackageIsVersion7 + +// AccountClient is the client API for Account 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 AccountClient interface { + Login(ctx context.Context, in *LoginRequest, opts ...grpc_go.CallOption) (*TokenInfo, common.ErrorWithAttachment) + RefreshToken(ctx context.Context, in *RefreshTokenRequest, opts ...grpc_go.CallOption) (*TokenInfo, common.ErrorWithAttachment) + Logout(ctx context.Context, in *DecryptJwtRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) + OffLine(ctx context.Context, in *CommonRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) + OnlineLog(ctx context.Context, in *LoginInfosByUserIdRequest, opts ...grpc_go.CallOption) (*LoginLogsResponse, common.ErrorWithAttachment) + OnlineLogById(ctx context.Context, in *OnlineLogByIdRequest, opts ...grpc_go.CallOption) (*LoginLog, common.ErrorWithAttachment) + CheckPwd(ctx context.Context, in *CheckPwdRequest, opts ...grpc_go.CallOption) (*UpdateResponse, common.ErrorWithAttachment) + // rpc RegisterOrExist (RegistRequest) returns (RequestStatus) {} + SendMsg(ctx context.Context, in *SendMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) + SendCustomMsg(ctx context.Context, in *SendCustomMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) + SendExCustomMsg(ctx context.Context, in *SendCustomMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) + SendMsgRegister(ctx context.Context, in *SendMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) + CheckMsg(ctx context.Context, in *CheckMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) + SendNewTelNumMsg(ctx context.Context, in *SendNewTelNumMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) + UpdateTelNum(ctx context.Context, in *SendNewTelNumMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) + Authentication(ctx context.Context, in *AuthenticationRequest, opts ...grpc_go.CallOption) (*RequestStatus, common.ErrorWithAttachment) + DecryptJwt(ctx context.Context, in *DecryptJwtRequest, opts ...grpc_go.CallOption) (*DecryptJwtResponse, common.ErrorWithAttachment) + Info(ctx context.Context, in *InfoRequest, opts ...grpc_go.CallOption) (*UserInfoResponse, common.ErrorWithAttachment) + JobNumGetInfo(ctx context.Context, in *JobNumGetInfoRequest, opts ...grpc_go.CallOption) (*InfoResponse, common.ErrorWithAttachment) + List(ctx context.Context, in *ListRequest, opts ...grpc_go.CallOption) (*ListResponse, common.ErrorWithAttachment) + RandList(ctx context.Context, in *ListRequest, opts ...grpc_go.CallOption) (*ListResponse, common.ErrorWithAttachment) + ListByIDs(ctx context.Context, in *ListByIDsRequest, opts ...grpc_go.CallOption) (*ListResponse, common.ErrorWithAttachment) + Remove(ctx context.Context, in *RemoveRequest, opts ...grpc_go.CallOption) (*RemoveResponse, common.ErrorWithAttachment) + Update(ctx context.Context, in *UpdateRequest, opts ...grpc_go.CallOption) (*UpdateResponse, common.ErrorWithAttachment) + UsersByTel(ctx context.Context, in *UsersByTelRequest, opts ...grpc_go.CallOption) (*ListResponse, common.ErrorWithAttachment) + UserByTel(ctx context.Context, in *UserByTelRequest, opts ...grpc_go.CallOption) (*InfoResponse, common.ErrorWithAttachment) + OnlySendMsg(ctx context.Context, in *SendMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) + OnlyCheckMsg(ctx context.Context, in *CheckMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) + MailAccountByNickName(ctx context.Context, in *MailAccountByNickNameRequest, opts ...grpc_go.CallOption) (*MaiAccountResponse, common.ErrorWithAttachment) + ListV2(ctx context.Context, in *ListV2Request, opts ...grpc_go.CallOption) (*ListResponse, common.ErrorWithAttachment) + QueryPersonnelWithTheSameName(ctx context.Context, in *QueryPersonnelWithTheSameNameRequest, opts ...grpc_go.CallOption) (*QueryPersonnelWithTheSameNameResponse, common.ErrorWithAttachment) + UsersByJobNum(ctx context.Context, in *UsersByJobNumRequest, opts ...grpc_go.CallOption) (*ListResponse, common.ErrorWithAttachment) + RealName(ctx context.Context, in *RealNameRequest, opts ...grpc_go.CallOption) (*RealNameResponse, common.ErrorWithAttachment) + Register(ctx context.Context, in *RegistRequest, opts ...grpc_go.CallOption) (*RegisterResponse, common.ErrorWithAttachment) + UserList(ctx context.Context, in *UserListRequest, opts ...grpc_go.CallOption) (*UserListResponse, common.ErrorWithAttachment) + CheckRealName(ctx context.Context, in *CheckRealNameRequest, opts ...grpc_go.CallOption) (*CheckRealNameResponse, common.ErrorWithAttachment) +} + +type accountClient struct { + cc *triple.TripleConn +} + +type AccountClientImpl struct { + Login func(ctx context.Context, in *LoginRequest) (*TokenInfo, error) + RefreshToken func(ctx context.Context, in *RefreshTokenRequest) (*TokenInfo, error) + Logout func(ctx context.Context, in *DecryptJwtRequest) (*CommonResponse, error) + OffLine func(ctx context.Context, in *CommonRequest) (*CommonResponse, error) + OnlineLog func(ctx context.Context, in *LoginInfosByUserIdRequest) (*LoginLogsResponse, error) + OnlineLogById func(ctx context.Context, in *OnlineLogByIdRequest) (*LoginLog, error) + CheckPwd func(ctx context.Context, in *CheckPwdRequest) (*UpdateResponse, error) + SendMsg func(ctx context.Context, in *SendMsgRequest) (*SendMsgStatusResponse, error) + SendCustomMsg func(ctx context.Context, in *SendCustomMsgRequest) (*SendMsgStatusResponse, error) + SendExCustomMsg func(ctx context.Context, in *SendCustomMsgRequest) (*SendMsgStatusResponse, error) + SendMsgRegister func(ctx context.Context, in *SendMsgRequest) (*SendMsgStatusResponse, error) + CheckMsg func(ctx context.Context, in *CheckMsgRequest) (*SendMsgStatusResponse, error) + SendNewTelNumMsg func(ctx context.Context, in *SendNewTelNumMsgRequest) (*SendMsgStatusResponse, error) + UpdateTelNum func(ctx context.Context, in *SendNewTelNumMsgRequest) (*SendMsgStatusResponse, error) + Authentication func(ctx context.Context, in *AuthenticationRequest) (*RequestStatus, error) + DecryptJwt func(ctx context.Context, in *DecryptJwtRequest) (*DecryptJwtResponse, error) + Info func(ctx context.Context, in *InfoRequest) (*UserInfoResponse, error) + JobNumGetInfo func(ctx context.Context, in *JobNumGetInfoRequest) (*InfoResponse, error) + List func(ctx context.Context, in *ListRequest) (*ListResponse, error) + RandList func(ctx context.Context, in *ListRequest) (*ListResponse, error) + ListByIDs func(ctx context.Context, in *ListByIDsRequest) (*ListResponse, error) + Remove func(ctx context.Context, in *RemoveRequest) (*RemoveResponse, error) + Update func(ctx context.Context, in *UpdateRequest) (*UpdateResponse, error) + UsersByTel func(ctx context.Context, in *UsersByTelRequest) (*ListResponse, error) + UserByTel func(ctx context.Context, in *UserByTelRequest) (*InfoResponse, error) + OnlySendMsg func(ctx context.Context, in *SendMsgRequest) (*SendMsgStatusResponse, error) + OnlyCheckMsg func(ctx context.Context, in *CheckMsgRequest) (*SendMsgStatusResponse, error) + MailAccountByNickName func(ctx context.Context, in *MailAccountByNickNameRequest) (*MaiAccountResponse, error) + ListV2 func(ctx context.Context, in *ListV2Request) (*ListResponse, error) + QueryPersonnelWithTheSameName func(ctx context.Context, in *QueryPersonnelWithTheSameNameRequest) (*QueryPersonnelWithTheSameNameResponse, error) + UsersByJobNum func(ctx context.Context, in *UsersByJobNumRequest) (*ListResponse, error) + RealName func(ctx context.Context, in *RealNameRequest) (*RealNameResponse, error) + Register func(ctx context.Context, in *RegistRequest) (*RegisterResponse, error) + UserList func(ctx context.Context, in *UserListRequest) (*UserListResponse, error) + CheckRealName func(ctx context.Context, in *CheckRealNameRequest) (*CheckRealNameResponse, error) +} + +func (c *AccountClientImpl) GetDubboStub(cc *triple.TripleConn) AccountClient { + return NewAccountClient(cc) +} + +func (c *AccountClientImpl) XXX_InterfaceName() string { + return "account.Account" +} + +func NewAccountClient(cc *triple.TripleConn) AccountClient { + return &accountClient{cc} +} + +func (c *accountClient) Login(ctx context.Context, in *LoginRequest, opts ...grpc_go.CallOption) (*TokenInfo, common.ErrorWithAttachment) { + out := new(TokenInfo) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Login", in, out) +} + +func (c *accountClient) RefreshToken(ctx context.Context, in *RefreshTokenRequest, opts ...grpc_go.CallOption) (*TokenInfo, common.ErrorWithAttachment) { + out := new(TokenInfo) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/RefreshToken", in, out) +} + +func (c *accountClient) Logout(ctx context.Context, in *DecryptJwtRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) { + out := new(CommonResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Logout", in, out) +} + +func (c *accountClient) OffLine(ctx context.Context, in *CommonRequest, opts ...grpc_go.CallOption) (*CommonResponse, common.ErrorWithAttachment) { + out := new(CommonResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/OffLine", in, out) +} + +func (c *accountClient) OnlineLog(ctx context.Context, in *LoginInfosByUserIdRequest, opts ...grpc_go.CallOption) (*LoginLogsResponse, common.ErrorWithAttachment) { + out := new(LoginLogsResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/OnlineLog", in, out) +} + +func (c *accountClient) OnlineLogById(ctx context.Context, in *OnlineLogByIdRequest, opts ...grpc_go.CallOption) (*LoginLog, common.ErrorWithAttachment) { + out := new(LoginLog) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/OnlineLogById", in, out) +} + +func (c *accountClient) CheckPwd(ctx context.Context, in *CheckPwdRequest, opts ...grpc_go.CallOption) (*UpdateResponse, common.ErrorWithAttachment) { + out := new(UpdateResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CheckPwd", in, out) +} + +func (c *accountClient) SendMsg(ctx context.Context, in *SendMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) { + out := new(SendMsgStatusResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/SendMsg", in, out) +} + +func (c *accountClient) SendCustomMsg(ctx context.Context, in *SendCustomMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) { + out := new(SendMsgStatusResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/SendCustomMsg", in, out) +} + +func (c *accountClient) SendExCustomMsg(ctx context.Context, in *SendCustomMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) { + out := new(SendMsgStatusResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/SendExCustomMsg", in, out) +} + +func (c *accountClient) SendMsgRegister(ctx context.Context, in *SendMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) { + out := new(SendMsgStatusResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/SendMsgRegister", in, out) +} + +func (c *accountClient) CheckMsg(ctx context.Context, in *CheckMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) { + out := new(SendMsgStatusResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CheckMsg", in, out) +} + +func (c *accountClient) SendNewTelNumMsg(ctx context.Context, in *SendNewTelNumMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) { + out := new(SendMsgStatusResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/SendNewTelNumMsg", in, out) +} + +func (c *accountClient) UpdateTelNum(ctx context.Context, in *SendNewTelNumMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) { + out := new(SendMsgStatusResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UpdateTelNum", in, out) +} + +func (c *accountClient) Authentication(ctx context.Context, in *AuthenticationRequest, opts ...grpc_go.CallOption) (*RequestStatus, common.ErrorWithAttachment) { + out := new(RequestStatus) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Authentication", in, out) +} + +func (c *accountClient) DecryptJwt(ctx context.Context, in *DecryptJwtRequest, opts ...grpc_go.CallOption) (*DecryptJwtResponse, common.ErrorWithAttachment) { + out := new(DecryptJwtResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/DecryptJwt", in, out) +} + +func (c *accountClient) Info(ctx context.Context, in *InfoRequest, opts ...grpc_go.CallOption) (*UserInfoResponse, common.ErrorWithAttachment) { + out := new(UserInfoResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Info", in, out) +} + +func (c *accountClient) JobNumGetInfo(ctx context.Context, in *JobNumGetInfoRequest, opts ...grpc_go.CallOption) (*InfoResponse, common.ErrorWithAttachment) { + out := new(InfoResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/JobNumGetInfo", in, out) +} + +func (c *accountClient) List(ctx context.Context, in *ListRequest, opts ...grpc_go.CallOption) (*ListResponse, common.ErrorWithAttachment) { + out := new(ListResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/List", in, out) +} + +func (c *accountClient) RandList(ctx context.Context, in *ListRequest, opts ...grpc_go.CallOption) (*ListResponse, common.ErrorWithAttachment) { + out := new(ListResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/RandList", in, out) +} + +func (c *accountClient) ListByIDs(ctx context.Context, in *ListByIDsRequest, opts ...grpc_go.CallOption) (*ListResponse, common.ErrorWithAttachment) { + out := new(ListResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/ListByIDs", in, out) +} + +func (c *accountClient) Remove(ctx context.Context, in *RemoveRequest, opts ...grpc_go.CallOption) (*RemoveResponse, common.ErrorWithAttachment) { + out := new(RemoveResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Remove", in, out) +} + +func (c *accountClient) Update(ctx context.Context, in *UpdateRequest, opts ...grpc_go.CallOption) (*UpdateResponse, common.ErrorWithAttachment) { + out := new(UpdateResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Update", in, out) +} + +func (c *accountClient) UsersByTel(ctx context.Context, in *UsersByTelRequest, opts ...grpc_go.CallOption) (*ListResponse, common.ErrorWithAttachment) { + out := new(ListResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UsersByTel", in, out) +} + +func (c *accountClient) UserByTel(ctx context.Context, in *UserByTelRequest, opts ...grpc_go.CallOption) (*InfoResponse, common.ErrorWithAttachment) { + out := new(InfoResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UserByTel", in, out) +} + +func (c *accountClient) OnlySendMsg(ctx context.Context, in *SendMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) { + out := new(SendMsgStatusResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/OnlySendMsg", in, out) +} + +func (c *accountClient) OnlyCheckMsg(ctx context.Context, in *CheckMsgRequest, opts ...grpc_go.CallOption) (*SendMsgStatusResponse, common.ErrorWithAttachment) { + out := new(SendMsgStatusResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/OnlyCheckMsg", in, out) +} + +func (c *accountClient) MailAccountByNickName(ctx context.Context, in *MailAccountByNickNameRequest, opts ...grpc_go.CallOption) (*MaiAccountResponse, common.ErrorWithAttachment) { + out := new(MaiAccountResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/MailAccountByNickName", in, out) +} + +func (c *accountClient) ListV2(ctx context.Context, in *ListV2Request, opts ...grpc_go.CallOption) (*ListResponse, common.ErrorWithAttachment) { + out := new(ListResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/ListV2", in, out) +} + +func (c *accountClient) QueryPersonnelWithTheSameName(ctx context.Context, in *QueryPersonnelWithTheSameNameRequest, opts ...grpc_go.CallOption) (*QueryPersonnelWithTheSameNameResponse, common.ErrorWithAttachment) { + out := new(QueryPersonnelWithTheSameNameResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/QueryPersonnelWithTheSameName", in, out) +} + +func (c *accountClient) UsersByJobNum(ctx context.Context, in *UsersByJobNumRequest, opts ...grpc_go.CallOption) (*ListResponse, common.ErrorWithAttachment) { + out := new(ListResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UsersByJobNum", in, out) +} + +func (c *accountClient) RealName(ctx context.Context, in *RealNameRequest, opts ...grpc_go.CallOption) (*RealNameResponse, common.ErrorWithAttachment) { + out := new(RealNameResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/RealName", in, out) +} + +func (c *accountClient) Register(ctx context.Context, in *RegistRequest, opts ...grpc_go.CallOption) (*RegisterResponse, common.ErrorWithAttachment) { + out := new(RegisterResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/Register", in, out) +} + +func (c *accountClient) UserList(ctx context.Context, in *UserListRequest, opts ...grpc_go.CallOption) (*UserListResponse, common.ErrorWithAttachment) { + out := new(UserListResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UserList", in, out) +} + +func (c *accountClient) CheckRealName(ctx context.Context, in *CheckRealNameRequest, opts ...grpc_go.CallOption) (*CheckRealNameResponse, common.ErrorWithAttachment) { + out := new(CheckRealNameResponse) + interfaceKey := ctx.Value(constant.InterfaceKey).(string) + return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CheckRealName", in, out) +} + +// AccountServer is the server API for Account service. +// All implementations must embed UnimplementedAccountServer +// for forward compatibility +type AccountServer interface { + Login(context.Context, *LoginRequest) (*TokenInfo, error) + RefreshToken(context.Context, *RefreshTokenRequest) (*TokenInfo, error) + Logout(context.Context, *DecryptJwtRequest) (*CommonResponse, error) + OffLine(context.Context, *CommonRequest) (*CommonResponse, error) + OnlineLog(context.Context, *LoginInfosByUserIdRequest) (*LoginLogsResponse, error) + OnlineLogById(context.Context, *OnlineLogByIdRequest) (*LoginLog, error) + CheckPwd(context.Context, *CheckPwdRequest) (*UpdateResponse, error) + // rpc RegisterOrExist (RegistRequest) returns (RequestStatus) {} + SendMsg(context.Context, *SendMsgRequest) (*SendMsgStatusResponse, error) + SendCustomMsg(context.Context, *SendCustomMsgRequest) (*SendMsgStatusResponse, error) + SendExCustomMsg(context.Context, *SendCustomMsgRequest) (*SendMsgStatusResponse, error) + SendMsgRegister(context.Context, *SendMsgRequest) (*SendMsgStatusResponse, error) + CheckMsg(context.Context, *CheckMsgRequest) (*SendMsgStatusResponse, error) + SendNewTelNumMsg(context.Context, *SendNewTelNumMsgRequest) (*SendMsgStatusResponse, error) + UpdateTelNum(context.Context, *SendNewTelNumMsgRequest) (*SendMsgStatusResponse, error) + Authentication(context.Context, *AuthenticationRequest) (*RequestStatus, error) + DecryptJwt(context.Context, *DecryptJwtRequest) (*DecryptJwtResponse, error) + Info(context.Context, *InfoRequest) (*UserInfoResponse, error) + JobNumGetInfo(context.Context, *JobNumGetInfoRequest) (*InfoResponse, error) + List(context.Context, *ListRequest) (*ListResponse, error) + RandList(context.Context, *ListRequest) (*ListResponse, error) + ListByIDs(context.Context, *ListByIDsRequest) (*ListResponse, error) + Remove(context.Context, *RemoveRequest) (*RemoveResponse, error) + Update(context.Context, *UpdateRequest) (*UpdateResponse, error) + UsersByTel(context.Context, *UsersByTelRequest) (*ListResponse, error) + UserByTel(context.Context, *UserByTelRequest) (*InfoResponse, error) + OnlySendMsg(context.Context, *SendMsgRequest) (*SendMsgStatusResponse, error) + OnlyCheckMsg(context.Context, *CheckMsgRequest) (*SendMsgStatusResponse, error) + MailAccountByNickName(context.Context, *MailAccountByNickNameRequest) (*MaiAccountResponse, error) + ListV2(context.Context, *ListV2Request) (*ListResponse, error) + QueryPersonnelWithTheSameName(context.Context, *QueryPersonnelWithTheSameNameRequest) (*QueryPersonnelWithTheSameNameResponse, error) + UsersByJobNum(context.Context, *UsersByJobNumRequest) (*ListResponse, error) + RealName(context.Context, *RealNameRequest) (*RealNameResponse, error) + Register(context.Context, *RegistRequest) (*RegisterResponse, error) + UserList(context.Context, *UserListRequest) (*UserListResponse, error) + CheckRealName(context.Context, *CheckRealNameRequest) (*CheckRealNameResponse, error) + mustEmbedUnimplementedAccountServer() +} + +// UnimplementedAccountServer must be embedded to have forward compatible implementations. +type UnimplementedAccountServer struct { + proxyImpl protocol.Invoker +} + +func (UnimplementedAccountServer) Login(context.Context, *LoginRequest) (*TokenInfo, error) { + return nil, status.Errorf(codes.Unimplemented, "method Login not implemented") +} +func (UnimplementedAccountServer) RefreshToken(context.Context, *RefreshTokenRequest) (*TokenInfo, error) { + return nil, status.Errorf(codes.Unimplemented, "method RefreshToken not implemented") +} +func (UnimplementedAccountServer) Logout(context.Context, *DecryptJwtRequest) (*CommonResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Logout not implemented") +} +func (UnimplementedAccountServer) OffLine(context.Context, *CommonRequest) (*CommonResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method OffLine not implemented") +} +func (UnimplementedAccountServer) OnlineLog(context.Context, *LoginInfosByUserIdRequest) (*LoginLogsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method OnlineLog not implemented") +} +func (UnimplementedAccountServer) OnlineLogById(context.Context, *OnlineLogByIdRequest) (*LoginLog, error) { + return nil, status.Errorf(codes.Unimplemented, "method OnlineLogById not implemented") +} +func (UnimplementedAccountServer) CheckPwd(context.Context, *CheckPwdRequest) (*UpdateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CheckPwd not implemented") +} +func (UnimplementedAccountServer) SendMsg(context.Context, *SendMsgRequest) (*SendMsgStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendMsg not implemented") +} +func (UnimplementedAccountServer) SendCustomMsg(context.Context, *SendCustomMsgRequest) (*SendMsgStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendCustomMsg not implemented") +} +func (UnimplementedAccountServer) SendExCustomMsg(context.Context, *SendCustomMsgRequest) (*SendMsgStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendExCustomMsg not implemented") +} +func (UnimplementedAccountServer) SendMsgRegister(context.Context, *SendMsgRequest) (*SendMsgStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendMsgRegister not implemented") +} +func (UnimplementedAccountServer) CheckMsg(context.Context, *CheckMsgRequest) (*SendMsgStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CheckMsg not implemented") +} +func (UnimplementedAccountServer) SendNewTelNumMsg(context.Context, *SendNewTelNumMsgRequest) (*SendMsgStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendNewTelNumMsg not implemented") +} +func (UnimplementedAccountServer) UpdateTelNum(context.Context, *SendNewTelNumMsgRequest) (*SendMsgStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateTelNum not implemented") +} +func (UnimplementedAccountServer) Authentication(context.Context, *AuthenticationRequest) (*RequestStatus, error) { + return nil, status.Errorf(codes.Unimplemented, "method Authentication not implemented") +} +func (UnimplementedAccountServer) DecryptJwt(context.Context, *DecryptJwtRequest) (*DecryptJwtResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DecryptJwt not implemented") +} +func (UnimplementedAccountServer) Info(context.Context, *InfoRequest) (*UserInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Info not implemented") +} +func (UnimplementedAccountServer) JobNumGetInfo(context.Context, *JobNumGetInfoRequest) (*InfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method JobNumGetInfo not implemented") +} +func (UnimplementedAccountServer) List(context.Context, *ListRequest) (*ListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method List not implemented") +} +func (UnimplementedAccountServer) RandList(context.Context, *ListRequest) (*ListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RandList not implemented") +} +func (UnimplementedAccountServer) ListByIDs(context.Context, *ListByIDsRequest) (*ListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListByIDs not implemented") +} +func (UnimplementedAccountServer) Remove(context.Context, *RemoveRequest) (*RemoveResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Remove not implemented") +} +func (UnimplementedAccountServer) Update(context.Context, *UpdateRequest) (*UpdateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Update not implemented") +} +func (UnimplementedAccountServer) UsersByTel(context.Context, *UsersByTelRequest) (*ListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UsersByTel not implemented") +} +func (UnimplementedAccountServer) UserByTel(context.Context, *UserByTelRequest) (*InfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UserByTel not implemented") +} +func (UnimplementedAccountServer) OnlySendMsg(context.Context, *SendMsgRequest) (*SendMsgStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method OnlySendMsg not implemented") +} +func (UnimplementedAccountServer) OnlyCheckMsg(context.Context, *CheckMsgRequest) (*SendMsgStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method OnlyCheckMsg not implemented") +} +func (UnimplementedAccountServer) MailAccountByNickName(context.Context, *MailAccountByNickNameRequest) (*MaiAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method MailAccountByNickName not implemented") +} +func (UnimplementedAccountServer) ListV2(context.Context, *ListV2Request) (*ListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ListV2 not implemented") +} +func (UnimplementedAccountServer) QueryPersonnelWithTheSameName(context.Context, *QueryPersonnelWithTheSameNameRequest) (*QueryPersonnelWithTheSameNameResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method QueryPersonnelWithTheSameName not implemented") +} +func (UnimplementedAccountServer) UsersByJobNum(context.Context, *UsersByJobNumRequest) (*ListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UsersByJobNum not implemented") +} +func (UnimplementedAccountServer) RealName(context.Context, *RealNameRequest) (*RealNameResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RealName not implemented") +} +func (UnimplementedAccountServer) Register(context.Context, *RegistRequest) (*RegisterResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Register not implemented") +} +func (UnimplementedAccountServer) UserList(context.Context, *UserListRequest) (*UserListResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UserList not implemented") +} +func (UnimplementedAccountServer) CheckRealName(context.Context, *CheckRealNameRequest) (*CheckRealNameResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CheckRealName not implemented") +} +func (s *UnimplementedAccountServer) XXX_SetProxyImpl(impl protocol.Invoker) { + s.proxyImpl = impl +} + +func (s *UnimplementedAccountServer) XXX_GetProxyImpl() protocol.Invoker { + return s.proxyImpl +} + +func (s *UnimplementedAccountServer) XXX_ServiceDesc() *grpc_go.ServiceDesc { + return &Account_ServiceDesc +} +func (s *UnimplementedAccountServer) XXX_InterfaceName() string { + return "account.Account" +} + +func (UnimplementedAccountServer) mustEmbedUnimplementedAccountServer() {} + +// UnsafeAccountServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to AccountServer will +// result in compilation errors. +type UnsafeAccountServer interface { + mustEmbedUnimplementedAccountServer() +} + +func RegisterAccountServer(s grpc_go.ServiceRegistrar, srv AccountServer) { + s.RegisterService(&Account_ServiceDesc, srv) +} + +func _Account_Login_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(LoginRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Login", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_RefreshToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(RefreshTokenRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("RefreshToken", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_Logout_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(DecryptJwtRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Logout", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_OffLine_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(CommonRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("OffLine", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_OnlineLog_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(LoginInfosByUserIdRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("OnlineLog", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_OnlineLogById_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(OnlineLogByIdRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("OnlineLogById", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_CheckPwd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckPwdRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("CheckPwd", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_SendMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(SendMsgRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("SendMsg", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_SendCustomMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(SendCustomMsgRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("SendCustomMsg", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_SendExCustomMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(SendCustomMsgRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("SendExCustomMsg", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_SendMsgRegister_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(SendMsgRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("SendMsgRegister", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_CheckMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckMsgRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("CheckMsg", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_SendNewTelNumMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(SendNewTelNumMsgRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("SendNewTelNumMsg", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_UpdateTelNum_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(SendNewTelNumMsgRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("UpdateTelNum", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_Authentication_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthenticationRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Authentication", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_DecryptJwt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(DecryptJwtRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("DecryptJwt", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_Info_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(InfoRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Info", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_JobNumGetInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(JobNumGetInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("JobNumGetInfo", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(ListRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("List", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_RandList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(ListRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("RandList", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_ListByIDs_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(ListByIDsRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("ListByIDs", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_Remove_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(RemoveRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Remove", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_Update_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Update", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_UsersByTel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(UsersByTelRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("UsersByTel", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_UserByTel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(UserByTelRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("UserByTel", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_OnlySendMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(SendMsgRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("OnlySendMsg", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_OnlyCheckMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckMsgRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("OnlyCheckMsg", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_MailAccountByNickName_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(MailAccountByNickNameRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("MailAccountByNickName", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_ListV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(ListV2Request) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("ListV2", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_QueryPersonnelWithTheSameName_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPersonnelWithTheSameNameRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("QueryPersonnelWithTheSameName", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_UsersByJobNum_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(UsersByJobNumRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("UsersByJobNum", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_RealName_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(RealNameRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("RealName", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_Register_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(RegistRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("Register", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_UserList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(UserListRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("UserList", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +func _Account_CheckRealName_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) { + in := new(CheckRealNameRequest) + if err := dec(in); err != nil { + return nil, err + } + base := srv.(dubbo3.Dubbo3GrpcService) + args := []interface{}{} + args = append(args, in) + md, _ := metadata.FromIncomingContext(ctx) + invAttachment := make(map[string]interface{}, len(md)) + for k, v := range md { + invAttachment[k] = v + } + invo := invocation.NewRPCInvocation("CheckRealName", args, invAttachment) + if interceptor == nil { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + info := &grpc_go.UnaryServerInfo{ + Server: srv, + FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string), + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + result := base.XXX_GetProxyImpl().Invoke(ctx, invo) + return result, result.Error() + } + return interceptor(ctx, in, info, handler) +} + +// Account_ServiceDesc is the grpc_go.ServiceDesc for Account service. +// It's only intended for direct use with grpc_go.RegisterService, +// and not to be introspected or modified (even as a copy) +var Account_ServiceDesc = grpc_go.ServiceDesc{ + ServiceName: "account.Account", + HandlerType: (*AccountServer)(nil), + Methods: []grpc_go.MethodDesc{ + { + MethodName: "Login", + Handler: _Account_Login_Handler, + }, + { + MethodName: "RefreshToken", + Handler: _Account_RefreshToken_Handler, + }, + { + MethodName: "Logout", + Handler: _Account_Logout_Handler, + }, + { + MethodName: "OffLine", + Handler: _Account_OffLine_Handler, + }, + { + MethodName: "OnlineLog", + Handler: _Account_OnlineLog_Handler, + }, + { + MethodName: "OnlineLogById", + Handler: _Account_OnlineLogById_Handler, + }, + { + MethodName: "CheckPwd", + Handler: _Account_CheckPwd_Handler, + }, + { + MethodName: "SendMsg", + Handler: _Account_SendMsg_Handler, + }, + { + MethodName: "SendCustomMsg", + Handler: _Account_SendCustomMsg_Handler, + }, + { + MethodName: "SendExCustomMsg", + Handler: _Account_SendExCustomMsg_Handler, + }, + { + MethodName: "SendMsgRegister", + Handler: _Account_SendMsgRegister_Handler, + }, + { + MethodName: "CheckMsg", + Handler: _Account_CheckMsg_Handler, + }, + { + MethodName: "SendNewTelNumMsg", + Handler: _Account_SendNewTelNumMsg_Handler, + }, + { + MethodName: "UpdateTelNum", + Handler: _Account_UpdateTelNum_Handler, + }, + { + MethodName: "Authentication", + Handler: _Account_Authentication_Handler, + }, + { + MethodName: "DecryptJwt", + Handler: _Account_DecryptJwt_Handler, + }, + { + MethodName: "Info", + Handler: _Account_Info_Handler, + }, + { + MethodName: "JobNumGetInfo", + Handler: _Account_JobNumGetInfo_Handler, + }, + { + MethodName: "List", + Handler: _Account_List_Handler, + }, + { + MethodName: "RandList", + Handler: _Account_RandList_Handler, + }, + { + MethodName: "ListByIDs", + Handler: _Account_ListByIDs_Handler, + }, + { + MethodName: "Remove", + Handler: _Account_Remove_Handler, + }, + { + MethodName: "Update", + Handler: _Account_Update_Handler, + }, + { + MethodName: "UsersByTel", + Handler: _Account_UsersByTel_Handler, + }, + { + MethodName: "UserByTel", + Handler: _Account_UserByTel_Handler, + }, + { + MethodName: "OnlySendMsg", + Handler: _Account_OnlySendMsg_Handler, + }, + { + MethodName: "OnlyCheckMsg", + Handler: _Account_OnlyCheckMsg_Handler, + }, + { + MethodName: "MailAccountByNickName", + Handler: _Account_MailAccountByNickName_Handler, + }, + { + MethodName: "ListV2", + Handler: _Account_ListV2_Handler, + }, + { + MethodName: "QueryPersonnelWithTheSameName", + Handler: _Account_QueryPersonnelWithTheSameName_Handler, + }, + { + MethodName: "UsersByJobNum", + Handler: _Account_UsersByJobNum_Handler, + }, + { + MethodName: "RealName", + Handler: _Account_RealName_Handler, + }, + { + MethodName: "Register", + Handler: _Account_Register_Handler, + }, + { + MethodName: "UserList", + Handler: _Account_UserList_Handler, + }, + { + MethodName: "CheckRealName", + Handler: _Account_CheckRealName_Handler, + }, + }, + Streams: []grpc_go.StreamDesc{}, + Metadata: "api/account/account.proto", +} diff --git a/cmd/app.go b/cmd/app.go new file mode 100644 index 0000000..0f201d7 --- /dev/null +++ b/cmd/app.go @@ -0,0 +1,199 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package main + +import ( + "dubbo.apache.org/dubbo-go/v3/common/logger" + "dubbo.apache.org/dubbo-go/v3/config" + _ "dubbo.apache.org/dubbo-go/v3/imports" + "fmt" + appconfig "github.com/fonchain_enterprise/micro-account/cmd/config" + "github.com/fonchain_enterprise/micro-account/pkg/blockchain" + "github.com/fonchain_enterprise/micro-account/pkg/cache" + "github.com/fonchain_enterprise/micro-account/pkg/common/dingding" + _ "github.com/fonchain_enterprise/micro-account/pkg/common/filter" + msgconfig "github.com/fonchain_enterprise/micro-account/pkg/config" + "github.com/fonchain_enterprise/micro-account/pkg/infrsatructure/external" + "github.com/fonchain_enterprise/micro-account/pkg/m" + "github.com/fonchain_enterprise/micro-account/pkg/model" + "github.com/fonchain_enterprise/micro-account/pkg/service" + "github.com/fonchain_enterprise/utils/zap_log" + "github.com/nacos-group/nacos-sdk-go/clients" + "github.com/nacos-group/nacos-sdk-go/common/constant" + "github.com/nacos-group/nacos-sdk-go/vo" + "os" +) + +func main() { + + //启动新日志 + if err := bootstrap(); err != nil { + panic(err) + } + + //注册服务 + config.SetProviderService(&service.AccountProvider{}) + //config.SetProviderService(&service.CoinProvider{}) + if err := config.Load(); err != nil { + panic(err) + } + + //logger.SetLogger(log.GetFakeLogger()) + logger.SetLogger(zap_log.GetFakeLogger()) + + //dubbo日志 + logger.Info("帐号微服务启动成功,git commit:", os.Getenv("GIT_COMMIT")) + + select {} +} + +func bootstrap() (err error) { + + aliConfig, err := appconfig.LoadAliEnv(m.SERVER_CONFIG) + if err != nil { + return err + } + + var configEnv *appconfig.Config + if aliConfig.System.Nacos == true { + fmt.Println("使用nacos") + configEnv, err = appconfig.LoadEnvFromFileInfo(loadAli(aliConfig)) + } else { + fmt.Println("使用配置文件") + configEnv, err = appconfig.LoadEnv(m.SERVER_CONFIG) + } + + if err != nil { + return err + } + + fmt.Printf("\n当前环境%s,版本号:%s\n", configEnv.System.Mode, configEnv.System.Version) + + err = zap_log.InitZapLog("../conf/log.yaml") + + if err != nil { + return err + } + + //数据库 + mysqlConfig := model.MysqlConfig{ + Db: configEnv.Mysql.Db, + DbHost: configEnv.Mysql.DbHost, + DbPort: configEnv.Mysql.DbPort, + DbUser: configEnv.Mysql.DbUser, + DbPassWord: configEnv.Mysql.DbPassWord, + DbName: configEnv.Mysql.DbName, + } + + model.LoadEnv(mysqlConfig) + + //redis + redisConfig := cache.RedisConfig{ + RedisDB: configEnv.Redis.RedisDB, + RedisAddr: configEnv.Redis.RedisAddr, + RedisPw: configEnv.Redis.RedisPW, + RedisDbName: configEnv.Redis.RedisDBNAme, + } + + cache.LoadRedis(redisConfig) + + //chain + chainConfig := blockchain.ChainConfig{ + IP: configEnv.Chain.IP, + AdminMnemonicWords: configEnv.Chain.AdminMnemonicWords, + AdminContractAccount: configEnv.Chain.AdminContractAccount, + ContractName: configEnv.Chain.ContractName, + ContractType: configEnv.Chain.ContractType, + } + + blockchain.LoadEnv(chainConfig) + + if err != nil { + return err + } + + msgInfo := msgconfig.MobileConfigTemplate{ + AK: configEnv.Mobile.AK, + SK: configEnv.Mobile.SK, + URL: configEnv.Mobile.URL, + } + + aliInfo := msgconfig.AliMessage{ + AK: configEnv.AlMobile.AK, + AS: configEnv.AlMobile.AS, + URL: configEnv.AlMobile.URL, + } + + fmt.Println("飞鸽短信配置", msgInfo) + fmt.Println("阿里短信配置", aliInfo) + msgconfig.LoadData(msgInfo, aliInfo) + + dingding.LoadAccessToken(configEnv.Mobile.DingDingKey) + + //logger.SetLogger() + model.SetSendPhoneNUm(configEnv.System.Mode == "prod") + + fmt.Println("是否创建邮箱", configEnv.Mail.IsProd) + external.LoadEnv(configEnv.Mail.Username, configEnv.Mail.Password, configEnv.Mail.Domain, configEnv.Mail.IsProd) + + return nil +} + +func loadAli(aliConfig *appconfig.AliConfig) string { + fmt.Println("ali", aliConfig) + clientConfig := constant.ClientConfig{ + NamespaceId: aliConfig.Nacos.NamespaceId, // 如果需要支持多namespace,我们可以场景多个client,它们有不同的NamespaceId。当namespace是public时,此处填空字符串。 + TimeoutMs: 5000, + NotLoadCacheAtStart: true, + LogDir: "/tmp/nacos/log", + CacheDir: "/tmp/nacos/cache", + Username: aliConfig.Nacos.Username, + Password: aliConfig.Nacos.Password, + LogLevel: "debug", + } + //配置连接信息 + serverConfigs := []constant.ServerConfig{ + { + IpAddr: aliConfig.Nacos.IpAddr, + ContextPath: "/nacos", + Port: 80, + Scheme: "http", + }, + } + + // Create naming client for service discovery + configClient, err := clients.CreateConfigClient(map[string]interface{}{ + "serverConfigs": serverConfigs, + "clientConfig": clientConfig, + }) + if err != nil { + logger.Fatal(err) + } + + //读取文件 + content, err := configClient.GetConfig(vo.ConfigParam{ + DataId: aliConfig.Nacos.DataId, //此处对应之前的网页配置的名称 + Group: aliConfig.Nacos.Group, //此处对应之前的网页配置的分组 + }) + + if err != nil { + logger.Fatal(err) + } + + return content +} diff --git a/cmd/config/config.go b/cmd/config/config.go new file mode 100644 index 0000000..cf40c92 --- /dev/null +++ b/cmd/config/config.go @@ -0,0 +1,105 @@ +package config + +import ( + "errors" + "fmt" + "github.com/BurntSushi/toml" + "os" +) + +/********start-配置信息*********/ + +//Baiduco 百度上链 +type Mysql struct { + Db string + DbHost string + DbPort string + DbUser string + DbPassWord string + DbName string +} + +type Redis struct { + RedisDB string + RedisAddr string + RedisPW string + RedisDBNAme string +} + +type Chain struct { + IP string + AdminMnemonicWords string `toml:"MnemonicWords"` + AdminContractAccount string `toml:"ContractAccount"` + ContractName string + ContractType string +} +type System struct { + Mode string + Version string + Nacos bool +} + +type Mobile struct { + SK string + AK string + URL string + DingDingKey string +} +type Mail struct { + IsProd bool + Username string + Password string + Domain string +} + +type Config struct { + Mysql Mysql `toml:"mysql"` + Redis Redis `toml:"redis"` + Chain Chain `toml:"chain"` + System System `toml:"system"` + Mobile Mobile `toml:"mobile"` + Mail Mail `toml:"mail"` + AlMobile AlMobile `toml:"almobile"` +} +type AlMobile struct { + AS string + AK string + URL string +} + +/********start-配置信息*********/ + +var AppConfig *Config + +func newConfig() *Config { + return new(Config) +} + +func LoadEnv(path string) (*Config, error) { + _, err := os.Stat(path) + if err != nil { + return nil, err + } + + AppConfig = newConfig() + if _, err := toml.DecodeFile(path, AppConfig); err != nil { + return nil, err + } + + return AppConfig, nil +} + +func LoadEnvFromFileInfo(data string) (*Config, error) { + + fmt.Println(data) + if data == "" { + return nil, errors.New("nacos 配置文件为空") + } + + AppConfig = newConfig() + if _, err := toml.Decode(data, AppConfig); err != nil { + return nil, err + } + + return AppConfig, nil +} diff --git a/cmd/config/nacos.go b/cmd/config/nacos.go new file mode 100644 index 0000000..8bfcf59 --- /dev/null +++ b/cmd/config/nacos.go @@ -0,0 +1,47 @@ +package config + +import ( + "github.com/BurntSushi/toml" + "io/ioutil" + "os" +) + +/********start-配置信息*********/ +type Nacos struct { + NamespaceId string + Username string + Password string + IpAddr string + DataId string + Group string +} + +type AliConfig struct { + System System `toml:"system"` + Nacos Nacos `toml:"Nacos"` +} + +/********start-配置信息*********/ + +var AliAppConfig *AliConfig + +func newAliConfig() *AliConfig { + return new(AliConfig) +} + +func LoadAliEnv(path string) (*AliConfig, error) { + data, err := ioutil.ReadFile(path) + if err != nil { + return nil, err + } + + configStr := os.ExpandEnv(string(data)) + + AliAppConfig = newAliConfig() + + if _, err := toml.Decode(configStr, AliAppConfig); err != nil { + return nil, err + } + + return AliAppConfig, nil +} diff --git a/conf/.gitignore b/conf/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/docs/account.sql b/docs/account.sql new file mode 100644 index 0000000..ef2b808 --- /dev/null +++ b/docs/account.sql @@ -0,0 +1,68 @@ +-- -------------------------------------------------------- +-- 主机: 127.0.0.1 +-- 服务器版本: 5.7.38 - MySQL Community Server (GPL) +-- 服务器操作系统: Linux +-- HeidiSQL 版本: 12.0.0.6468 +-- -------------------------------------------------------- + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET NAMES utf8 */; +/*!50503 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- 导出 表 fontree-account.real_name 结构 +CREATE TABLE IF NOT EXISTS `real_name` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `created_at` datetime DEFAULT NULL, + `updated_at` datetime DEFAULT NULL, + `deleted_at` int(11) DEFAULT NULL, + `name` varchar(256) NOT NULL, + `id_num` varchar(256) NOT NULL, + PRIMARY KEY (`id`) USING BTREE, + KEY `idx_real_name_deleted_at` (`deleted_at`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; +CREATE TABLE `user` ( + `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `created_at` DATETIME NULL DEFAULT NULL, + `updated_at` DATETIME NULL DEFAULT NULL, + `deleted_at` INT(11) NULL DEFAULT '0' COMMENT '删除标志', + `account` VARCHAR(256) NULL DEFAULT NULL COLLATE 'utf8_general_ci', + `mnemonic_words` VARCHAR(256) NULL DEFAULT NULL COLLATE 'utf8_general_ci', + `tel_num` VARCHAR(256) NULL DEFAULT NULL COLLATE 'utf8_general_ci', + `password_digest` VARCHAR(256) NULL DEFAULT NULL COLLATE 'utf8_general_ci', + `nickname` VARCHAR(256) NOT NULL COLLATE 'utf8_general_ci', + `status` VARCHAR(256) NULL DEFAULT NULL COLLATE 'utf8_general_ci', + `avatar` VARCHAR(1000) NULL DEFAULT NULL COLLATE 'utf8_general_ci', + `real_name_id` BIGINT(20) UNSIGNED NULL DEFAULT NULL, + `auth` BIGINT(20) UNSIGNED NULL DEFAULT NULL, + `theme_id` BIGINT(20) UNSIGNED NULL DEFAULT NULL, + `domain` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci', + `public_key` VARCHAR(256) NULL DEFAULT NULL COLLATE 'utf8_general_ci', + `is_need_change` TINYINT(4) NULL DEFAULT '1' COMMENT '是否强制重置密码', + `enter_date` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci', + `work_year` FLOAT(3,1) NULL DEFAULT NULL, + `extend` JSON NULL DEFAULT NULL COMMENT '扩展属性', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `unqiue_tel` (`domain`, `tel_num`, `deleted_at`) USING BTREE, + UNIQUE INDEX `account` (`account`, `id`, `deleted_at`) USING BTREE, + INDEX `idx_user_deleted_at` (`deleted_at`) USING BTREE +) + COLLATE='utf8_general_ci' +ENGINE=InnoDB +AUTO_INCREMENT=41 +; + + + +-- 数据导出被取消选择。 + +/*!40103 SET TIME_ZONE=IFNULL(@OLD_TIME_ZONE, 'system') */; +/*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; +/*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */; +INSERT INTO `user` (`id`, `created_at`, `updated_at`, `deleted_at`, `account`, `mnemonic_words`, `tel_num`, `password_digest`, `nickname`, `status`, `avatar`, `real_name_id`, `auth`, `theme_id`, `domain`, `public_key`) VALUES (40, '2022-08-03 06:06:17', '2022-08-04 02:42:17', 0, 'TenaGe8oL5KqsbJgmLFaD1zsyXU6k3Lgs', 'Fe9V/pftKfajtmR55FpMKJuI/9NsCc5Nnfgsxnb9E/IZOK76YGmz2BKDy9v2qqrA', '12233445566', '$2a$12$7C8drxzbuO3jbeMBkmzRfeQYPVJTUWByQcLmG/tljjnhokDEq79RC', '超级管理', 'notactive', '', 0, 0, NULL, 'fontree', '{"Curvname":"P-256","X":78545775124824610215124063665621548167623667204728303094007555226201575072468,"Y":50472501812965014802492291779217782793101961009658062700069826283252860388199}'); diff --git a/docs/env/ali/conf.ini b/docs/env/ali/conf.ini new file mode 100644 index 0000000..ebf6473 --- /dev/null +++ b/docs/env/ali/conf.ini @@ -0,0 +1,12 @@ +[system] +Mode = "prod" +Version = "1.0.1" +Nacos = true + +[Nacos] +NamespaceId = "${NamespaceId}" +Username = "${Username}" +Password = "${Password}" +IpAddr = "${IpAddr}" +Group = "${Group}" +DataId = "micro-account-conf" diff --git a/docs/env/ali/dubbogo.yaml b/docs/env/ali/dubbogo.yaml new file mode 100644 index 0000000..f8b667f --- /dev/null +++ b/docs/env/ali/dubbogo.yaml @@ -0,0 +1,34 @@ +dubbo: + registries: + demoZK: + protocol: zookeeper + address: zookeeper:2181 + protocols: + triple: + name: tri + port: 20001 + provider: + services: + AccountProvider: + interface: com.fontree.microservices.common.Account # must be compatible with grpc or dubbo-java + auth: "true" + filter: echo,metrics,token,accesslog,tps,generic_service,execute,pshutdown,auth,fonValidateFilter + params: + .accessKeyId: "Accountksl" + .secretAccessKey: "BSDY-FDF1-Fontree_account" + CoinProvider: + interface: com.fontree.microservices.common.coin # must be compatible with grpc or dubbo-java + auth: "true" + filter: echo,metrics,token,accesslog,tps,generic_service,execute,pshutdown,auth,fonValidateFilter + params: + .accessKeyId: "Accountksl" + .secretAccessKey: "BSDY-FDF1-Fontree_account" + + logger: + lumberjack-config: + filename: logs.log + maxsize: 1 + maxage: 3 + maxbackups: 5 + localtime: true + compress: true \ No newline at end of file diff --git a/docs/env/ali/log.yaml b/docs/env/ali/log.yaml new file mode 100644 index 0000000..8c4348d --- /dev/null +++ b/docs/env/ali/log.yaml @@ -0,0 +1,46 @@ +logger: + zap-config: + level: info # 日志级别 + development: false + disableCaller: false + disableStacktrace: false + encoding: "json" + # zap encoder 配置 + encoderConfig: + messageKey: "message" + levelKey: "level" + timeKey: "time" + nameKey: "logger" + callerKey: "caller" + stacktraceKey: "stacktrace" + lineEnding: "" + levelEncoder: "capital" + timeEncoder: "iso8601" + durationEncoder: "seconds" + callerEncoder: "short" + nameEncoder: "" + EncodeDuration: zapcore.SecondsDurationEncoder, + params: + service: "my-service" + version: "1.0.0" + outputPaths: + - "stderr" + initialFields: + app: "account" + errorOutputPaths: + - "stderr" + lumberjack-config: + # 写日志的文件名称 + filename: "logs/main.log" + # 每个日志文件长度的最大大小,单位是 MiB。默认 100MiB + maxSize: 10 + # 日志保留的最大天数(只保留最近多少天的日志) + maxAge: 15 + # 只保留最近多少个日志文件,用于控制程序总日志的大小 + maxBackups: 10 + # 是否使用本地时间,默认使用 UTC 时间 + localTime: true + # 是否压缩日志文件,压缩方法 gzip + compress: false + CallerSkip: 4 + diff --git a/docs/env/ali/sdk.yaml b/docs/env/ali/sdk.yaml new file mode 100644 index 0000000..b6c1ebe --- /dev/null +++ b/docs/env/ali/sdk.yaml @@ -0,0 +1,18 @@ +# endorseService Info +# testNet addrs +# endorseServiceHost: "120.48.24.223:37101" +endorseServiceHost: "127.0.0.1:37101" +complianceCheck: + # 是否需要进行合规性背书 + isNeedComplianceCheck: false + # 是否需要支付合规性背书费用 + isNeedComplianceCheckFee: false + # 合规性背书费用 + complianceCheckEndorseServiceFee: 400 + # 支付合规性背书费用的收款地址 + complianceCheckEndorseServiceFeeAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42 + # 如果通过合规性检查,签发认证签名的地址 + complianceCheckEndorseServiceAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42 +#创建平行链所需要的最低费用 +minNewChainAmount: "100" +crypto: "xchain" diff --git a/docs/env/dev/conf.ini b/docs/env/dev/conf.ini new file mode 100644 index 0000000..da5c1d2 --- /dev/null +++ b/docs/env/dev/conf.ini @@ -0,0 +1,37 @@ +[system] +Mode = "dev" +Version = "1.0.2" + + +[mail] +IsProd = false +Username = "postmaster@fontree.cn" +Password = "Zaq12wsx" +Domain = "fontree.cn" + +[mysql] +Db = "mysql" +DbHost = "172.16.100.30" +DbPort = "3306" +DbUser = "root" +DbPassWord = "IhQmhg8HZjDmU=Ove5PnA^D" +DbName = "fontree-account" + +[redis] +RedisDB = "1" +RedisAddr = "172.16.100.114:6379" +RedisPW = "kP6tW4tS3qB2dW4aE6uI5cX2" +RedisDBNAme = "1" + +[chain] +IP="127.0.0.1:37101" +MnemonicWords="知 睡 迷 纤 纲 耀 镜 婆 渡 考 拔 百" +ContractAccount="XC8214684261867838@xuper" +ContractName="fp001" +ContractType="wasm" + +[mobile] +URL="https://api.4321.sh/sms/template" +AK="N7469940cf" +SK="74699ca8e1ea8f80" +DingDingKey="1a4e4b18d9aa35368450c980ceb8def2f11fa0ebb2dc0a3cfd970cd3b8efc6fb" diff --git a/docs/env/dev/dubbogo.yaml b/docs/env/dev/dubbogo.yaml new file mode 100644 index 0000000..7bbbbbb --- /dev/null +++ b/docs/env/dev/dubbogo.yaml @@ -0,0 +1,34 @@ +dubbo: + registries: + demoZK: + protocol: zookeeper + address: 172.16.100.93:2181 + protocols: + triple: + name: tri + port: 20001 + provider: + services: + AccountProvider: + interface: com.fontree.microservices.common.Account # must be compatible with grpc or dubbo-java + auth: "true" + filter: echo,metrics,token,accesslog,sign,tps,generic_service,execute,pshutdown,auth,fonValidateFilter + params: + .accessKeyId: "Accountksl" + .secretAccessKey: "BSDY-FDF1-Fontree_account" + CoinProvider: + interface: com.fontree.microservices.common.coin # must be compatible with grpc or dubbo-java + auth: "true" + filter: echo,metrics,token,accesslog,tps,generic_service,execute,pshutdown,auth,fonValidateFilter + params: + .accessKeyId: "Accountksl" + .secretAccessKey: "BSDY-FDF1-Fontree_account" + + # logger: + # lumberjack-config: + # filename: logs.log + # maxsize: 1 + # maxage: 3 + # maxbackups: 5 + # localtime: true + # compress: true \ No newline at end of file diff --git a/docs/env/dev/log.yaml b/docs/env/dev/log.yaml new file mode 100644 index 0000000..680336e --- /dev/null +++ b/docs/env/dev/log.yaml @@ -0,0 +1,32 @@ +logger: + CallerSkip: 4 + zap-config: + level: info # 日志级别 + development: false + disableCaller: false + disableStacktrace: false + encoding: "console" + # zap encoder 配置 + encoderConfig: + messageKey: "message" + levelKey: "level" + timeKey: "time" + nameKey: "logger" + callerKey: "caller" + stacktraceKey: "stacktrace" + lineEnding: "" + levelEncoder: "capitalColor" + timeEncoder: "iso8601" + durationEncoder: "seconds" + callerEncoder: "short" + nameEncoder: "" + EncodeDuration: zapcore.SecondsDurationEncoder, + params: + service: "my-service" + version: "1.0.0" + outputPaths: + - "stderr" + initialFields: + app: "account" + errorOutputPaths: + - "stderr" diff --git a/docs/env/dev/sdk.yaml b/docs/env/dev/sdk.yaml new file mode 100644 index 0000000..b6c1ebe --- /dev/null +++ b/docs/env/dev/sdk.yaml @@ -0,0 +1,18 @@ +# endorseService Info +# testNet addrs +# endorseServiceHost: "120.48.24.223:37101" +endorseServiceHost: "127.0.0.1:37101" +complianceCheck: + # 是否需要进行合规性背书 + isNeedComplianceCheck: false + # 是否需要支付合规性背书费用 + isNeedComplianceCheckFee: false + # 合规性背书费用 + complianceCheckEndorseServiceFee: 400 + # 支付合规性背书费用的收款地址 + complianceCheckEndorseServiceFeeAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42 + # 如果通过合规性检查,签发认证签名的地址 + complianceCheckEndorseServiceAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42 +#创建平行链所需要的最低费用 +minNewChainAmount: "100" +crypto: "xchain" diff --git a/docs/env/local/conf.ini b/docs/env/local/conf.ini new file mode 100644 index 0000000..9a1a926 --- /dev/null +++ b/docs/env/local/conf.ini @@ -0,0 +1,29 @@ +[system] +Mode = "dev" +Version = "1.0.1" + +[mysql] +Db = "mysql" +DbHost = "127.0.0.1" +DbPort = "3306" +DbUser = "root" +DbPassWord = "123456" +DbName = "fontree-account-v2" + +[redis] +RedisDB = "2" +RedisAddr = "127.0.0.1:6379" +RedisPW = "" +RedisDBNAme = "2" + +[chain] +IP="127.0.0.1:37101" +MnemonicWords="知 睡 迷 纤 纲 耀 镜 婆 渡 考 拔 百" +ContractAccount="XC8214684261867838@xuper" +ContractName="fp001" +ContractType="wasm" + +[mobile] +URL="https://api.4321.sh/sms/template" +AK="N7469940cf" +SK="74699ca8e1ea8f80" diff --git a/docs/env/local/dubbogo.yaml b/docs/env/local/dubbogo.yaml new file mode 100644 index 0000000..6e07bdf --- /dev/null +++ b/docs/env/local/dubbogo.yaml @@ -0,0 +1,34 @@ +dubbo: + registries: + demoZK: + protocol: zookeeper + address: 127.0.0.1:2181 + protocols: + triple: + name: tri + port: 20000 + provider: + services: + AccountProvider: + interface: com.fontree.microservices.common.Account # must be compatible with grpc or dubbo-java + auth: "true" + filter: echo,metrics,token,accesslog,tps,generic_service,execute,pshutdown,auth,fonValidateFilter + params: + .accessKeyId: "Accountksl" + .secretAccessKey: "BSDY-FDF1-Fontree_account" + CoinProvider: + interface: com.fontree.microservices.common.coin # must be compatible with grpc or dubbo-java + auth: "true" + filter: echo,metrics,token,accesslog,tps,generic_service,execute,pshutdown,auth,fonValidateFilter + params: + .accessKeyId: "Accountksl" + .secretAccessKey: "BSDY-FDF1-Fontree_account" + + # logger: + # lumberjack-config: + # filename: logs.log + # maxsize: 1 + # maxage: 3 + # maxbackups: 5 + # localtime: true + # compress: true \ No newline at end of file diff --git a/docs/env/local/log.yaml b/docs/env/local/log.yaml new file mode 100644 index 0000000..680336e --- /dev/null +++ b/docs/env/local/log.yaml @@ -0,0 +1,32 @@ +logger: + CallerSkip: 4 + zap-config: + level: info # 日志级别 + development: false + disableCaller: false + disableStacktrace: false + encoding: "console" + # zap encoder 配置 + encoderConfig: + messageKey: "message" + levelKey: "level" + timeKey: "time" + nameKey: "logger" + callerKey: "caller" + stacktraceKey: "stacktrace" + lineEnding: "" + levelEncoder: "capitalColor" + timeEncoder: "iso8601" + durationEncoder: "seconds" + callerEncoder: "short" + nameEncoder: "" + EncodeDuration: zapcore.SecondsDurationEncoder, + params: + service: "my-service" + version: "1.0.0" + outputPaths: + - "stderr" + initialFields: + app: "account" + errorOutputPaths: + - "stderr" diff --git a/docs/env/local/sdk.yaml b/docs/env/local/sdk.yaml new file mode 100644 index 0000000..b6c1ebe --- /dev/null +++ b/docs/env/local/sdk.yaml @@ -0,0 +1,18 @@ +# endorseService Info +# testNet addrs +# endorseServiceHost: "120.48.24.223:37101" +endorseServiceHost: "127.0.0.1:37101" +complianceCheck: + # 是否需要进行合规性背书 + isNeedComplianceCheck: false + # 是否需要支付合规性背书费用 + isNeedComplianceCheckFee: false + # 合规性背书费用 + complianceCheckEndorseServiceFee: 400 + # 支付合规性背书费用的收款地址 + complianceCheckEndorseServiceFeeAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42 + # 如果通过合规性检查,签发认证签名的地址 + complianceCheckEndorseServiceAddr: WwLgfAatHyKx2mCJruRaML4oVf7Chzp42 +#创建平行链所需要的最低费用 +minNewChainAmount: "100" +crypto: "xchain" diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..11f8bcf --- /dev/null +++ b/go.mod @@ -0,0 +1,223 @@ +module github.com/fonchain_enterprise/micro-account + +go 1.18 + +replace ( + github.com/fonchain_enterprise/utils/aes => ../utils/aes + github.com/fonchain_enterprise/utils/baidu => ../utils/baidu + github.com/fonchain_enterprise/utils/chain => ../utils/chain + github.com/fonchain_enterprise/utils/feie => ../utils/feie + github.com/fonchain_enterprise/utils/jwt => ../utils/jwt + github.com/fonchain_enterprise/utils/mobile => ../utils/mobile + github.com/fonchain_enterprise/utils/rand => ../utils/rand + github.com/fonchain_enterprise/utils/zap_log => ../utils/zap_log +) + +require ( + dubbo.apache.org/dubbo-go/v3 v3.0.2 + github.com/BurntSushi/toml v1.3.2 + github.com/PuerkitoBio/goquery v1.8.1 + github.com/alibaba/sentinel-golang v1.0.4 + github.com/dgrijalva/jwt-go v3.2.0+incompatible + github.com/dubbogo/grpc-go v1.42.9 + github.com/dubbogo/triple v1.1.8 + github.com/fonchain_enterprise/utils/aes v0.0.0-00010101000000-000000000000 + github.com/fonchain_enterprise/utils/baidu v0.0.0-00010101000000-000000000000 + github.com/fonchain_enterprise/utils/chain v0.0.0-00010101000000-000000000000 + github.com/fonchain_enterprise/utils/feie v0.0.0-00010101000000-000000000000 + github.com/fonchain_enterprise/utils/mobile v0.0.0-00010101000000-000000000000 + github.com/fonchain_enterprise/utils/rand v0.0.0-00010101000000-000000000000 + github.com/fonchain_enterprise/utils/zap_log v0.0.0-00010101000000-000000000000 + github.com/go-redis/redis v6.15.9+incompatible + github.com/golang/protobuf v1.5.2 + github.com/google/uuid v1.3.0 + github.com/mozillazg/go-pinyin v0.20.0 + github.com/mwitkow/go-proto-validators v0.3.2 + github.com/nacos-group/nacos-sdk-go v1.1.1 + github.com/natefinch/lumberjack v2.0.0+incompatible + github.com/pkg/errors v0.9.1 + github.com/shopspring/decimal v1.4.0 + go.uber.org/zap v1.21.0 + golang.org/x/crypto v0.10.0 + golang.org/x/text v0.10.0 + google.golang.org/protobuf v1.28.0 + gopkg.in/yaml.v2 v2.4.0 + gorm.io/driver/mysql v1.3.5 + gorm.io/gorm v1.25.5 + gorm.io/plugin/soft_delete v1.2.0 +) + +require ( + cloud.google.com/go v0.65.0 // indirect + contrib.go.opencensus.io/exporter/prometheus v0.4.1 // indirect + github.com/ChainSafe/go-schnorrkel v0.0.0-20200626160457-b38283118816 // indirect + github.com/RoaringBitmap/roaring v1.1.0 // indirect + github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect + github.com/Workiva/go-datastructures v1.0.52 // indirect + github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 // indirect + github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 // indirect + github.com/alibabacloud-go/darabonba-openapi v0.2.1 // indirect + github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect + github.com/alibabacloud-go/dysmsapi-20170525/v2 v2.0.18 // indirect + github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect + github.com/alibabacloud-go/openapi-util v0.0.11 // indirect + github.com/alibabacloud-go/tea v1.2.1 // indirect + github.com/alibabacloud-go/tea-console v1.0.0 // indirect + github.com/alibabacloud-go/tea-utils v1.4.5 // indirect + github.com/alibabacloud-go/tea-xml v1.1.2 // indirect + github.com/aliyun/alibaba-cloud-sdk-go v1.61.18 // indirect + github.com/aliyun/credentials-go v1.1.2 // indirect + github.com/andybalholm/cascadia v1.3.1 // indirect + github.com/apache/dubbo-getty v1.4.8 // indirect + github.com/apache/dubbo-go-hessian2 v1.11.0 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bits-and-blooms/bitset v1.2.0 // indirect + github.com/btcsuite/btcd v0.20.1-beta // indirect + github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d // indirect + github.com/buger/jsonparser v1.1.1 // indirect + github.com/census-instrumentation/opencensus-proto v0.2.1 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/clbanning/mxj/v2 v2.5.6 // indirect + github.com/cloudflare/bn256 v0.0.0-20200818021822-8aba7cd1ae4c // indirect + github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4 // indirect + github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1 // indirect + github.com/consensys/gnark v0.2.1-alpha // indirect + github.com/consensys/gurvy v0.1.2-0.20200512111154-1662e289e29b // indirect + github.com/coreos/go-semver v0.3.0 // indirect + github.com/coreos/go-systemd/v22 v22.3.2 // indirect + github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d // indirect + github.com/creasty/defaults v1.5.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5 // indirect + github.com/dubbogo/gost v1.11.25 // indirect + github.com/emicklei/go-restful/v3 v3.7.4 // indirect + github.com/emirpasic/gods v1.12.1-0.20201118132343-79df803e554c // indirect + github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1 // indirect + github.com/envoyproxy/protoc-gen-validate v0.1.0 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/ghodss/yaml v1.0.0 // indirect + github.com/go-co-op/gocron v1.9.0 // indirect + github.com/go-errors/errors v1.0.1 // indirect + github.com/go-kit/kit v0.10.0 // indirect + github.com/go-kit/log v0.1.0 // indirect + github.com/go-logfmt/logfmt v0.5.0 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.2.4 // indirect + github.com/go-playground/locales v0.14.0 // indirect + github.com/go-playground/universal-translator v0.18.0 // indirect + github.com/go-playground/validator/v10 v10.11.0 // indirect + github.com/go-resty/resty/v2 v2.7.0 // indirect + github.com/go-sql-driver/mysql v1.6.0 // indirect + github.com/go-stack/stack v1.8.0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/mock v1.5.0 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/gorilla/websocket v1.4.2 // indirect + github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect + github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect + github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f // indirect + github.com/gtank/ristretto255 v0.1.2 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hashicorp/vault/sdk v0.3.0 // indirect + github.com/hyperledger/burrow v0.30.5 // indirect + github.com/ipfs/go-cid v0.0.7 // indirect + github.com/ipfs/go-ipfs-addr v0.0.1 // indirect + github.com/ipfs/go-log v1.0.4 // indirect + github.com/ipfs/go-log/v2 v2.1.1 // indirect + github.com/jinzhu/copier v0.3.5 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/k0kubun/pp v3.0.1+incompatible // indirect + github.com/knadh/koanf v1.4.1 // indirect + github.com/leodido/go-urn v1.2.1 // indirect + github.com/libp2p/go-buffer-pool v0.0.2 // indirect + github.com/libp2p/go-libp2p-core v0.6.1 // indirect + github.com/libp2p/go-libp2p-crypto v0.1.0 // indirect + github.com/libp2p/go-libp2p-peer v0.2.0 // indirect + github.com/libp2p/go-openssl v0.0.7 // indirect + github.com/magiconair/properties v1.8.6 // indirect + github.com/mattn/go-colorable v0.1.7 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect + github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect + github.com/minio/sha256-simd v0.1.1 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mr-tron/base58 v1.2.0 // indirect + github.com/mschoch/smat v0.2.0 // indirect + github.com/multiformats/go-base32 v0.0.3 // indirect + github.com/multiformats/go-base36 v0.1.0 // indirect + github.com/multiformats/go-multiaddr v0.3.1 // indirect + github.com/multiformats/go-multibase v0.0.3 // indirect + github.com/multiformats/go-multihash v0.0.14 // indirect + github.com/multiformats/go-varint v0.0.6 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/patrickmn/go-cache v2.1.0+incompatible // indirect + github.com/pelletier/go-toml v1.7.0 // indirect + github.com/pierrec/lz4 v2.5.2+incompatible // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/polarismesh/polaris-go v1.1.0 // indirect + github.com/prometheus/client_golang v1.12.2 // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.32.1 // indirect + github.com/prometheus/procfs v0.7.3 // indirect + github.com/prometheus/statsd_exporter v0.21.0 // indirect + github.com/robfig/cron/v3 v3.0.1 // indirect + github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect + github.com/shirou/gopsutil v3.20.11+incompatible // indirect + github.com/shirou/gopsutil/v3 v3.21.6 // indirect + github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/spf13/afero v1.2.2 // indirect + github.com/spf13/cast v1.3.0 // indirect + github.com/spf13/jwalterweatherman v1.0.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/viper v1.7.1 // indirect + github.com/stretchr/testify v1.8.1 // indirect + github.com/subosito/gotenv v1.2.0 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca // indirect + github.com/tendermint/go-amino v0.14.1 // indirect + github.com/tendermint/tendermint v0.33.1 // indirect + github.com/tjfoc/gmsm v1.3.2 // indirect + github.com/tklauser/go-sysconf v0.3.6 // indirect + github.com/tklauser/numcpus v0.2.2 // indirect + github.com/tmthrgd/go-hex v0.0.0-20190303111820-0bdcb15db631 // indirect + github.com/uber/jaeger-client-go v2.29.1+incompatible // indirect + github.com/uber/jaeger-lib v2.4.1+incompatible // indirect + github.com/ugorji/go/codec v1.2.7 // indirect + github.com/xuperchain/crypto v0.0.0-20201028025054-4d560674bcd6 // indirect + github.com/xuperchain/log15 v0.0.0-20190620081506-bc88a9198230 // indirect + github.com/xuperchain/xuper-sdk-go/v2 v2.0.0 // indirect + github.com/xuperchain/xuperchain v0.0.0-20210708031936-951e4ade7bdd // indirect + github.com/xuperchain/xupercore v0.0.0-20210608021245-b15f81dd9ecf // indirect + github.com/zouyx/agollo/v3 v3.4.5 // indirect + go.etcd.io/etcd/api/v3 v3.5.4 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.4 // indirect + go.etcd.io/etcd/client/v3 v3.5.4 // indirect + go.opencensus.io v0.23.0 // indirect + go.opentelemetry.io/otel v1.7.0 // indirect + go.opentelemetry.io/otel/trace v1.7.0 // indirect + go.uber.org/atomic v1.9.0 // indirect + go.uber.org/multierr v1.6.0 // indirect + golang.org/x/net v0.11.0 // indirect + golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.9.0 // indirect + google.golang.org/appengine v1.6.6 // indirect + google.golang.org/genproto v0.0.0-20211104193956-4c6863e31247 // indirect + google.golang.org/grpc v1.47.0 // indirect + gopkg.in/ini.v1 v1.56.0 // indirect + gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..bb89ea6 --- /dev/null +++ b/go.sum @@ -0,0 +1,2001 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= +cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +contrib.go.opencensus.io/exporter/prometheus v0.4.1 h1:oObVeKo2NxpdF/fIfrPsNj6K0Prg0R0mHM+uANlYMiM= +contrib.go.opencensus.io/exporter/prometheus v0.4.1/go.mod h1:t9wvfitlUjGXG2IXAZsuFq26mDGid/JwCEXp+gTG/9U= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +dubbo.apache.org/dubbo-go/v3 v3.0.2 h1:+WuMFN6RSjXHT41QS1Xi5tFfaPuczIVoeQuKq7pISYI= +dubbo.apache.org/dubbo-go/v3 v3.0.2/go.mod h1:bODgByAf72kzG/5YIfZIODXx81pY3gaAdIQ8B4mN/Yk= +github.com/AndreasBriese/bbloom v0.0.0-20180913140656-343706a395b7/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200102211924-4bcbc698314f/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200626160457-b38283118816 h1:X5jJ3e/jgFSnSoYOep/mf6pF1RuLZfvF1ts8NZIyzqE= +github.com/ChainSafe/go-schnorrkel v0.0.0-20200626160457-b38283118816/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 h1:ygIc8M6trr62pF5DucadTWGdEB4mEyvzi0e2nbcmcyA= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/hcsshim v0.8.7-0.20191101173118-65519b62243c h1:YMP6olTU903X3gxQJckdmiP8/zkSMq4kN3uipsU9XjU= +github.com/Microsoft/hcsshim v0.8.7-0.20191101173118-65519b62243c/go.mod h1:7xhjOwRV2+0HXGmM0jxaEu+ZiXJFoVZOTfL/dmqbrD8= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= +github.com/PuerkitoBio/goquery v1.8.1 h1:uQxhNlArOIdbrH1tr0UXwdVFgDcZDrZVdcpygAcwmWM= +github.com/PuerkitoBio/goquery v1.8.1/go.mod h1:Q8ICL1kNUJ2sXGoAhPGUdYDJvgQgHzJsnnd3H7Ho5jQ= +github.com/RoaringBitmap/roaring v1.1.0 h1:b10lZrZXaY6Q6EKIRrmOF519FIyQQ5anPgGr3niw2yY= +github.com/RoaringBitmap/roaring v1.1.0/go.mod h1:icnadbWcNyfEHlYdr+tDlOTih1Bf/h+rzPpv4sbomAA= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= +github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/Workiva/go-datastructures v1.0.50/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= +github.com/Workiva/go-datastructures v1.0.52 h1:PLSK6pwn8mYdaoaCZEMsXBpBotr4HHn9abU0yMQt0NI= +github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw= +github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/alecthomas/jsonschema v0.0.0-20190122210438-a6952de1bbe6/go.mod h1:qpebaTNSsyUn5rPSJMsfqEtDw71TTggXM6stUDI16HA= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alibaba/sentinel-golang v1.0.4 h1:i0wtMvNVdy7vM4DdzYrlC4r/Mpk1OKUUBurKKkWhEo8= +github.com/alibaba/sentinel-golang v1.0.4/go.mod h1:Lag5rIYyJiPOylK8Kku2P+a23gdKMMqzQS7wTnjWEpk= +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 h1:iC9YFYKDGEy3n/FtqJnOkZsene9olVspKmkX5A2YBEo= +github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc= +github.com/alibabacloud-go/darabonba-openapi v0.1.18/go.mod h1:PB4HffMhJVmAgNKNq3wYbTUlFvPgxJpTzd1F5pTuUsc= +github.com/alibabacloud-go/darabonba-openapi v0.2.1 h1:WyzxxKvhdVDlwpAMOHgAiCJ+NXa6g5ZWPFEzaK/ewwY= +github.com/alibabacloud-go/darabonba-openapi v0.2.1/go.mod h1:zXOqLbpIqq543oioL9IuuZYOQgHQ5B8/n5OPrnko8aY= +github.com/alibabacloud-go/darabonba-string v1.0.0/go.mod h1:93cTfV3vuPhhEwGGpKKqhVW4jLe7tDpo3LUM0i0g6mA= +github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 h1:NqugFkGxx1TXSh/pBcU00Y6bljgDPaFdh5MUSeJ7e50= +github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6pb/Qy8c+lqua8cFpEy7g39NRRqOWc3rOwAy8m5Y2BY= +github.com/alibabacloud-go/dysmsapi-20170525/v2 v2.0.18 h1:hfZA4cgIl6frNdsRmAyj8sn9J1bihQpYbzIVv2T/+Cs= +github.com/alibabacloud-go/dysmsapi-20170525/v2 v2.0.18/go.mod h1:di54xjBFHvKiQQo7st3TUmiMy0ywne5TOHup786Rhes= +github.com/alibabacloud-go/endpoint-util v1.1.0 h1:r/4D3VSw888XGaeNpP994zDUaxdgTSHBbVfZlzf6b5Q= +github.com/alibabacloud-go/endpoint-util v1.1.0/go.mod h1:O5FuCALmCKs2Ff7JFJMudHs0I5EBgecXXxZRyswlEjE= +github.com/alibabacloud-go/openapi-util v0.0.11 h1:iYnqOPR5hyEEnNZmebGyRMkkEJRWUEjDiiaOHZ5aNhA= +github.com/alibabacloud-go/openapi-util v0.0.11/go.mod h1:sQuElr4ywwFRlCCberQwKRFhRzIyG4QTP/P4y1CJ6Ws= +github.com/alibabacloud-go/tea v1.1.0/go.mod h1:IkGyUSX4Ba1V+k4pCtJUc6jDpZLFph9QMy2VUPTwukg= +github.com/alibabacloud-go/tea v1.1.2/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= +github.com/alibabacloud-go/tea v1.1.7/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= +github.com/alibabacloud-go/tea v1.1.8/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= +github.com/alibabacloud-go/tea v1.1.11/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4= +github.com/alibabacloud-go/tea v1.1.17/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.1.19/go.mod h1:nXxjm6CIFkBhwW4FQkNrolwbfon8Svy6cujmKFUq98A= +github.com/alibabacloud-go/tea v1.2.1 h1:rFF1LnrAdhaiPmKwH5xwYOKlMh66CqRwPUTzIK74ask= +github.com/alibabacloud-go/tea v1.2.1/go.mod h1:qbzof29bM/IFhLMtJPrgTGK3eauV5J2wSyEUo4OEmnA= +github.com/alibabacloud-go/tea-console v1.0.0 h1:F1mFWYcadVNzyDWgX14kVvOqT/Rg4U6Q3rkkWaGaSVc= +github.com/alibabacloud-go/tea-console v1.0.0/go.mod h1:M71UmDlZJUjWvX9HVrpqghyQRE7D4RoX6BZjuAB17bo= +github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE= +github.com/alibabacloud-go/tea-utils v1.4.3/go.mod h1:KNcT0oXlZZxOXINnZBs6YvgOd5aYp9U67G+E3R8fcQw= +github.com/alibabacloud-go/tea-utils v1.4.5 h1:h0/6Xd2f3bPE4XHTvkpjwxowIwRCJAJOqY6Eq8f3zfA= +github.com/alibabacloud-go/tea-utils v1.4.5/go.mod h1:KNcT0oXlZZxOXINnZBs6YvgOd5aYp9U67G+E3R8fcQw= +github.com/alibabacloud-go/tea-xml v1.1.2 h1:oLxa7JUXm2EDFzMg+7oRsYc+kutgCVwm+bZlhhmvW5M= +github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8= +github.com/aliyun/alibaba-cloud-sdk-go v1.61.18 h1:zOVTBdCKFd9JbCKz9/nt+FovbjPFmb7mUnp8nH9fQBA= +github.com/aliyun/alibaba-cloud-sdk-go v1.61.18/go.mod h1:v8ESoHo4SyHmuB4b1tJqDHxfTGEciD+yhvOU/5s1Rfk= +github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY= +github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw= +github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c= +github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/dubbo-getty v1.4.8 h1:Q9WKXmVu4Dm16cMJHamegRbxpDiYaGIU+MnPGhJhNyk= +github.com/apache/dubbo-getty v1.4.8/go.mod h1:cPJlbcHUTNTpiboMQjMHhE9XBni11LiBiG8FdrDuVzk= +github.com/apache/dubbo-go-hessian2 v1.9.1/go.mod h1:xQUjE7F8PX49nm80kChFvepA/AvqAZ0oh/UaB6+6pBE= +github.com/apache/dubbo-go-hessian2 v1.9.3/go.mod h1:xQUjE7F8PX49nm80kChFvepA/AvqAZ0oh/UaB6+6pBE= +github.com/apache/dubbo-go-hessian2 v1.11.0 h1:VTdT6NStuEqNmyT3AdSN2DLDBqhXvAAyAAAoh9hLavk= +github.com/apache/dubbo-go-hessian2 v1.11.0/go.mod h1:7rEw9guWABQa6Aqb8HeZcsYPHsOS7XT1qtJvkmI6c5w= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.32.4 h1:J2OMvipVB5dPIn+VH7L5rOqM4WoTsBxOqv+I06sjYOM= +github.com/aws/aws-sdk-go v1.32.4/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.9.2/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= +github.com/aws/aws-sdk-go-v2/config v1.8.3/go.mod h1:4AEiLtAb8kLs7vgw2ZV3p2VZ1+hBavOc84hqxVNpCyw= +github.com/aws/aws-sdk-go-v2/credentials v1.4.3/go.mod h1:FNNC6nQZQUuyhq5aE5c7ata8o9e4ECGmS4lAXC7o1mQ= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.6.0/go.mod h1:gqlclDEZp4aqJOancXK6TN24aKhT0W0Ae9MHk3wzTMM= +github.com/aws/aws-sdk-go-v2/internal/ini v1.2.4/go.mod h1:ZcBrrI3zBKlhGFNYWvju0I3TR93I7YIgAfy82Fh4lcQ= +github.com/aws/aws-sdk-go-v2/service/appconfig v1.4.2/go.mod h1:FZ3HkCe+b10uFZZkFdvf98LHW21k49W8o8J366lqVKY= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.2/go.mod h1:72HRZDLMtmVQiLG2tLfQcaWLCssELvGl+Zf2WVxMmR8= +github.com/aws/aws-sdk-go-v2/service/sso v1.4.2/go.mod h1:NBvT9R1MEF+Ud6ApJKM0G+IkPchKS7p7c2YPKwHmBOk= +github.com/aws/aws-sdk-go-v2/service/sts v1.7.2/go.mod h1:8EzeIqfWt2wWT4rJVu3f21TfrhJ8AEMzVybRNSb/b4g= +github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA= +github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= +github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= +github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= +github.com/btcsuite/btcd v0.0.0-20190824003749-130ea5bddde3/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= +github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d h1:yJzD/yFppdVCf6ApMkVy8cUxV0XrxdP9rVf6D87/Mng= +github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= +github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cep21/xdgbasedir v0.0.0-20170329171747-21470bfc93b9/go.mod h1:6R3C29d3JonDKVjnlzFv5BGL/bfZP+0I7rKHKwiqKP8= +github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= +github.com/clbanning/mxj/v2 v2.5.6 h1:Jm4VaCI/+Ug5Q57IzEoZbwx4iQFA6wkXv72juUSeK+g= +github.com/clbanning/mxj/v2 v2.5.6/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/bn256 v0.0.0-20200818021822-8aba7cd1ae4c h1:RGh+ACnmFpxIwfd0iTmNN0duV6KrTV4wRnZta6Eh7QA= +github.com/cloudflare/bn256 v0.0.0-20200818021822-8aba7cd1ae4c/go.mod h1:T2+nZA01wQim4HFBaXa1hieVkC7OL4fNhiyrX1yMkIE= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4 h1:hzAQntlaYRkVSFEfj9OTWlVV1H155FMD8BTKktLv0QI= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1 h1:zH8ljVhhq7yC0MIeUL/IviMtY8hx2mK8cN9wEYb8ggw= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= +github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/consensys/bavard v0.1.1/go.mod h1:ffZkLPNQSN3E6u+zpArQSleJ/lsraMwKPCHQymPQJtM= +github.com/consensys/bavard v0.1.2-0.20200424125854-c0225aa55321/go.mod h1:ffZkLPNQSN3E6u+zpArQSleJ/lsraMwKPCHQymPQJtM= +github.com/consensys/gnark v0.2.1-alpha h1:vbclGUGm9SRwiVmXSlyQ3qmlf+GFRfO8lIODVc08/9M= +github.com/consensys/gnark v0.2.1-alpha/go.mod h1:J3HGfqVSLI433zUEgJwNoHR+E1Jc2QHjEpmAlwegvfw= +github.com/consensys/goff v0.2.3-0.20200423152648-e4125d01b786/go.mod h1:CsKD9nM1/fD0gqJs0vRCyQ/wocVjex+wa3mVEjC6h+s= +github.com/consensys/gurvy v0.1.2-0.20200512111154-1662e289e29b h1:FneaQrE9CbIvYfIAneIhVsG2/PZisMdTUWM3fXj+y5E= +github.com/consensys/gurvy v0.1.2-0.20200512111154-1662e289e29b/go.mod h1:H9Bcci7d4S6yyjSEhqBytgAZq2UGgu43AV9Xe4uqpTk= +github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0 h1:xjvXQWABwS2uiv3TWgQt5Uth60Gu86LTGZXMJkjc7rY= +github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc h1:TP+534wVlf61smEIq1nwLLAjQVEK2EADoW3CX9AuT+8= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d h1:49RLWk1j44Xu4fjHb6JFYmeUnDORVwHNkDxaQ0ctCVU= +github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creasty/defaults v1.5.2 h1:/VfB6uxpyp6h0fr7SPp7n8WJBoV8jfxQXPCnkVSjyls= +github.com/creasty/defaults v1.5.2/go.mod h1:FPZ+Y0WNrbqOVw+c6av63eyHUAl6pMHZwqLPvXUZGfY= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0= +github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= +github.com/dgraph-io/badger v1.5.5-0.20190226225317-8115aed38f8f/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= +github.com/dgraph-io/badger v1.6.0-rc1/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= +github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= +github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlNV5bjgnuU= +github.com/dgraph-io/badger/v2 v2.0.0-rc.2/go.mod h1:jUaIjOV835xZ/mCLG/8P/38ZxiT4bG/K1khDNZJxuwU= +github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-farm v0.0.0-20180109070241-2de33835d102/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.4.2-0.20191101170500-ac7306503d23 h1:oqgGT9O61YAYvI41EBsLePOr+LE6roB0xY4gpkZuFSE= +github.com/docker/docker v1.4.2-0.20191101170500-ac7306503d23/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-connections v0.4.1-0.20180821093606-97c2040d34df h1:cGbd/ECh4QPOc6+Tbvdk5NjCcOYESiwc1RjXp0XciVg= +github.com/docker/go-connections v0.4.1-0.20180821093606-97c2040d34df/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dterei/gotsc v0.0.0-20160722215413-e78f872945c6/go.mod h1:P4N3xGqi52atrdlMBXpsAGTqRnLgZ8uDhlkQ7HEYGgo= +github.com/dubbogo/go-zookeeper v1.0.3/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c= +github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5 h1:XoR8SSVziXe698dt4uZYDfsmHpKLemqAgFyndQsq5Kw= +github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5/go.mod h1:fn6n2CAEer3novYgk9ULLwAjuV8/g4DdC2ENwRb6E+c= +github.com/dubbogo/gost v1.9.0/go.mod h1:pPTjVyoJan3aPxBPNUX0ADkXjPibLo+/Ib0/fADXSG8= +github.com/dubbogo/gost v1.11.18/go.mod h1:vIcP9rqz2KsXHPjsAwIUtfJIJjppQLQDcYaZTy/61jI= +github.com/dubbogo/gost v1.11.23/go.mod h1:PhJ8+qZJx+Txjx1KthNPuVkCvUca0jRLgKWj/noGgeI= +github.com/dubbogo/gost v1.11.25 h1:jFxE+YPh+ajrkHz7AxaaqYNMdKMDf/yfI1D+ZFoxfW0= +github.com/dubbogo/gost v1.11.25/go.mod h1:iovrPhv0hyakhQGVr4jwiECBL9HXNuBY4VV3HWK5pM0= +github.com/dubbogo/grpc-go v1.42.9 h1:nTuglkH9rTJzQfardU4b0OJ0Imd2169dMNLBTNhTdlc= +github.com/dubbogo/grpc-go v1.42.9/go.mod h1:F1T9hnUvYGW4JLK1QNriavpOkhusU677ovPzLkk6zHM= +github.com/dubbogo/jsonparser v1.0.1/go.mod h1:tYAtpctvSP/tWw4MeelsowSPgXQRVHHWbqL6ynps8jU= +github.com/dubbogo/net v0.0.4/go.mod h1:1CGOnM7X3he+qgGNqjeADuE5vKZQx/eMSeUkpU3ujIc= +github.com/dubbogo/triple v1.0.9/go.mod h1:1t9me4j4CTvNDcsMZy6/OGarbRyAUSY0tFXGXHCp7Iw= +github.com/dubbogo/triple v1.1.8 h1:yE+J3W1NTZCEPa1FoX+VWZH6UF1c0+A2MGfERlU2zbI= +github.com/dubbogo/triple v1.1.8/go.mod h1:9pgEahtmsY/avYJp3dzUQE8CMMVe1NtGBmUhfICKLJk= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/channels v1.1.0/go.mod h1:jMm2qB5Ubtg9zLd+inMZd2/NUvXgzmWXsDaLyQIGfH0= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/elgs/gojq v0.0.0-20160421194050-81fa9a608a13/go.mod h1:rQELVIqRXpraeUryHOBadz99ePvEVQmTVpGr8M9QQ4Q= +github.com/elgs/gosplitargs v0.0.0-20161028071935-a491c5eeb3c8/go.mod h1:o4DgpccPNAQAlPSxo7I4L/LWNh2oyr/BBGSynrLTmZM= +github.com/emicklei/go-restful/v3 v3.7.4 h1:PVGUqKvvMzQYiO89TdXrH9EMks+okTaRIMQ3jgMdZ30= +github.com/emicklei/go-restful/v3 v3.7.4/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emirpasic/gods v1.12.1-0.20201118132343-79df803e554c h1:0UJv1hUc3hYQm3FcNllANDKSURIzoax4RVpkj8Gniz4= +github.com/emirpasic/gods v1.12.1-0.20201118132343-79df803e554c/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.0/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1 h1:xvqufLtNVwAhN8NMyWklVgxnWohi+wtMGQMhtxexlm0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= +github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= +github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= +github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw= +github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6 h1:u/UEqS66A5ckRmS4yNpjmVH56sVtS/RfclBAYocb4as= +github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6/go.mod h1:1i71OnUq3iUe1ma7Lr6yG6/rjvM3emb6yoL7xLFzcVQ= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.10.0 h1:Gfh+GAJZOAoKZsIZeZbdn2JF10kN1XHNvjsvQK8gVkE= +github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsouza/go-dockerclient v1.6.0 h1:f7j+AX94143JL1H3TiqSMkM4EcLDI0De1qD4GGn3Hig= +github.com/fsouza/go-dockerclient v1.6.0/go.mod h1:YWwtNPuL4XTX1SKJQk86cWPmmqwx+4np9qfPbb+znGc= +github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= +github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= +github.com/go-co-op/gocron v1.9.0 h1:+V+DDenw3ryB7B+tK1bAIC5p0ruw4oX9IqAsdRnGIf0= +github.com/go-co-op/gocron v1.9.0/go.mod h1:DbJm9kdgr1sEvWpHCA7dFFs/PGHPMil9/97EXCRPr4k= +github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= +github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-interpreter/wagon v0.6.0/go.mod h1:5+b/MBYkclRZngKF5s6qrgWxSLgE9F5dFdO1hAueZLc= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/log v0.1.0 h1:DGJh0Sm43HbOeYDNnVZFl8BvcYVvjD5bqYJvp0REbwQ= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= +github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +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/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= +github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= +github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= +github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= +github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-playground/validator/v10 v10.11.0 h1:0W+xRM511GY47Yy3bZUbJVitCNg2BOGlCyvTqsp/xIw= +github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= +github.com/go-redis/redis v6.15.9+incompatible h1:K0pv1D7EQUjfyoMql+r/jZqCLizCGKFlFgcHWWmHQjg= +github.com/go-redis/redis v6.15.9+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= +github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= +github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da 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= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0 h1:jlYHihg//f7RRwuPfptm04yp4s7O6Kw8EZiVYIGcH0g= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +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/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.2-0.20200707131729-196ae77b8a26/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= +github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= +github.com/gonum/integrate v0.0.0-20181209220457-a422b5c0fdf2/go.mod h1:pDgmNM6seYpwvPos3q+zxlXMsbve6mOIPucUnUOrI7Y= +github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= +github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= +github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= +github.com/gonum/stat v0.0.0-20181125101827-41a0da705a5b/go.mod h1:Z4GIJBJO3Wa4gD4vbwQxXXZ+WHmW6E9ixmNrwvs0iZs= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa h1:Q75Upo5UN4JbPFURXZ8nLKYUvF85dyFRop/vQ0Rv+64= +github.com/google/gofuzz v1.1.1-0.20200604201612-c04b05f3adfa/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gopacket v1.1.17 h1:rMrlX2ZY2UbvT+sdz3+6J+pp2z+msCq9MxTU6ymxbBY= +github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= +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= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0= +github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 h1:FlFbCRLd5Jr4iYXZufAvgWN6Ao0JrI5chLINnUXDDr0= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f h1:8N8XWLZelZNibkhM1FuF+3Ad3YIbgirjdMiVA0eUkaM= +github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= +github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= +github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= +github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= +github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= +github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= +github.com/hashicorp/go-plugin v1.4.3/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= +github.com/hashicorp/go-secure-stdlib/mlock v0.1.1/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= +github.com/hashicorp/go-secure-stdlib/password v0.1.1/go.mod h1:9hH302QllNwu1o2TGYtSk8I8kTAN0ca1EHpwhm5Mmzo= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U= +github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1/go.mod h1:l8slYwnJA26yBz+ErHpp2IRCLr0vuOMGBORIz4rRiAs= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= +github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= +github.com/hashicorp/vault/sdk v0.3.0 h1:kR3dpxNkhh/wr6ycaJYqp6AFT/i2xaftbfnwZduTKEY= +github.com/hashicorp/vault/sdk v0.3.0/go.mod h1:aZ3fNuL5VNydQk8GcLJ2TV8YCRVvyaakYkhZRoVuhj0= +github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo= +github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= +github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= +github.com/hyperledger/burrow v0.30.5 h1:DHUUIkRQIEyN4uAYlqNnkhTZfowDP25Qa6laNtQWHrA= +github.com/hyperledger/burrow v0.30.5/go.mod h1:ll86BjptGSd24apjKypG189UBzkaw4GPVRKDWvoOkn0= +github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365/go.mod h1:SK73tn/9oHe+/Y0h39VT4UCxmurVJkR5NA7kMEAOgSE= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= +github.com/ipfs/go-cid v0.0.4/go.mod h1:4LLaPOQwmk5z9LBgQnpkivrx8BJjUyGwTXCd5Xfj6+M= +github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= +github.com/ipfs/go-cid v0.0.6/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= +github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= +github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= +github.com/ipfs/go-datastore v0.0.1/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= +github.com/ipfs/go-datastore v0.1.0/go.mod h1:d4KVXhMt913cLBEI/PXAy6ko+W7e9AhyAKBGh803qeE= +github.com/ipfs/go-datastore v0.1.1/go.mod h1:w38XXW9kVFNp57Zj5knbKWM2T+KOZCGDRVNdgPHtbHw= +github.com/ipfs/go-datastore v0.4.0/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= +github.com/ipfs/go-datastore v0.4.1/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= +github.com/ipfs/go-datastore v0.4.4 h1:rjvQ9+muFaJ+QZ7dN5B1MSDNQ0JVZKkkES/rMZmA8X8= +github.com/ipfs/go-datastore v0.4.4/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= +github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= +github.com/ipfs/go-ds-badger v0.0.2/go.mod h1:Y3QpeSFWQf6MopLTiZD+VT6IC1yZqaGmjvRcKeSGij8= +github.com/ipfs/go-ds-badger v0.0.5/go.mod h1:g5AuuCGmr7efyzQhLL8MzwqcauPojGPUaHzfGTzuE3s= +github.com/ipfs/go-ds-badger v0.0.7/go.mod h1:qt0/fWzZDoPW6jpQeqUjR5kBfhDNB65jd9YlmAvpQBk= +github.com/ipfs/go-ds-badger v0.2.1/go.mod h1:Tx7l3aTph3FMFrRS838dcSJh+jjA7cX9DrGVwx/NOwE= +github.com/ipfs/go-ds-badger v0.2.3/go.mod h1:pEYw0rgg3FIrywKKnL+Snr+w/LjJZVMTBRn4FS6UHUk= +github.com/ipfs/go-ds-leveldb v0.0.1/go.mod h1:feO8V3kubwsEF22n0YRQCffeb79OOYIykR4L04tMOYc= +github.com/ipfs/go-ds-leveldb v0.1.0/go.mod h1:hqAW8y4bwX5LWcCtku2rFNX3vjDZCy5LZCg+cSZvYb8= +github.com/ipfs/go-ds-leveldb v0.4.1/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= +github.com/ipfs/go-ds-leveldb v0.4.2/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= +github.com/ipfs/go-ipfs-addr v0.0.1 h1:DpDFybnho9v3/a1dzJ5KnWdThWD1HrFLpQ+tWIyBaFI= +github.com/ipfs/go-ipfs-addr v0.0.1/go.mod h1:uKTDljHT3Q3SUWzDLp3aYUi8MrY32fgNgogsIa0npjg= +github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= +github.com/ipfs/go-ipfs-util v0.0.1/go.mod h1:spsl5z8KUnrve+73pOhSVZND1SIxPW5RyBCNzQxlJBc= +github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8= +github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= +github.com/ipfs/go-ipns v0.0.2 h1:oq4ErrV4hNQ2Eim257RTYRgfOSV/s8BDaf9iIl4NwFs= +github.com/ipfs/go-ipns v0.0.2/go.mod h1:WChil4e0/m9cIINWLxZe1Jtf77oz5L05rO2ei/uKJ5U= +github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= +github.com/ipfs/go-log v1.0.2/go.mod h1:1MNjMxe0u6xvJZgeqbJ8vdo2TKaGwZ1a0Bpza+sr2Sk= +github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A= +github.com/ipfs/go-log v1.0.4 h1:6nLQdX4W8P9yZZFH7mO+X/PzjN8Laozm/lMJ6esdgzY= +github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= +github.com/ipfs/go-log/v2 v2.0.2/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= +github.com/ipfs/go-log/v2 v2.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= +github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= +github.com/ipfs/go-log/v2 v2.1.1 h1:G4TtqN+V9y9HY9TA6BwbCVyyBZ2B9MbCjR2MtGx8FR0= +github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= +github.com/jackpal/gateway v1.0.5/go.mod h1:lTpwd4ACLXmpyiCTRtfiNyVnUmqT9RivzCDQetPfnjA= +github.com/jackpal/go-nat-pmp v1.0.1/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jawher/mow.cli v1.1.0/go.mod h1:aNaQlc7ozF3vw6IJ2dHjp2ZFiA4ozMIYY6PyuRJwlUg= +github.com/jbenet/go-cienv v0.0.0-20150120210510-1bb1476777ec/go.mod h1:rGaEvXB4uRSZMmzKNLoXvTu1sfx+1kv/DojUlPrSZGs= +github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= +github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs= +github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= +github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= +github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY= +github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= +github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= +github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= +github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= +github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg= +github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a/go.mod h1:UJSiEoRfvx3hP73CvoARgeLjaIOjybY9vj8PUPPFGeU= +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/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 h1:uC1QfSlInpQF+M0ao65imhwqKnz3Q2z/d8PWZRMQvDM= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= +github.com/k0kubun/pp v3.0.1+incompatible h1:3tqvf7QgUnZ5tXO6pNAZlrvHgl6DvifjDrd9g2S9Z40= +github.com/k0kubun/pp v3.0.1+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg= +github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/knadh/koanf v1.4.1 h1:Z0VGW/uo8NJmjd+L1Dc3S5frq6c62w5xQ9Yf4Mg3wFQ= +github.com/knadh/koanf v1.4.1/go.mod h1:1cfH5223ZeZUOs8FU2UdTmaNfHpqgtjV0+NHjRO43gs= +github.com/koding/multiconfig v0.0.0-20171124222453-69c27309b2d7/go.mod h1:Y2SaZf2Rzd0pXkLVhLlCiAXFCLSXAIbTKDivVgff/AM= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d h1:68u9r4wEvL3gYg2jvAOgROwZ3H+Y3hIDk4tbbmIjcYQ= +github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570/go.mod h1:BLt8L9ld7wVsvEWQbuLrUZnCMnUmLZ+CGDzKtclrTlE= +github.com/lestrrat/go-file-rotatelogs v0.0.0-20180223000712-d3151e2a480f/go.mod h1:UGmTpUd3rjbtfIpwAPrcfmGf/Z1HS95TATB+m57TPB8= +github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042/go.mod h1:TPpsiPUEh0zFL1Snz4crhMlBe60PYxRHr5oFF3rRYg0= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/libp2p/go-addr-util v0.0.1/go.mod h1:4ac6O7n9rIAKB1dnd+s8IbbMXkt+oBpzX4/+RACcnlQ= +github.com/libp2p/go-addr-util v0.0.2 h1:7cWK5cdA5x72jX0g8iLrQWm5TRJZ6CzGdPEhWj7plWU= +github.com/libp2p/go-addr-util v0.0.2/go.mod h1:Ecd6Fb3yIuLzq4bD7VcywcVSBtefcAwnUISBM3WG15E= +github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= +github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= +github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= +github.com/libp2p/go-conn-security-multistream v0.1.0/go.mod h1:aw6eD7LOsHEX7+2hJkDxw1MteijaVcI+/eP2/x3J1xc= +github.com/libp2p/go-conn-security-multistream v0.2.0 h1:uNiDjS58vrvJTg9jO6bySd1rMKejieG7v45ekqHbZ1M= +github.com/libp2p/go-conn-security-multistream v0.2.0/go.mod h1:hZN4MjlNetKD3Rq5Jb/P5ohUnFLNzEAR4DLSzpn2QLU= +github.com/libp2p/go-eventbus v0.1.0/go.mod h1:vROgu5cs5T7cv7POWlWxBaVLxfSegC5UGQf8A2eEmx4= +github.com/libp2p/go-eventbus v0.2.1 h1:VanAdErQnpTioN2TowqNcOijf6YwhuODe4pPKSDpxGc= +github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= +github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= +github.com/libp2p/go-flow-metrics v0.0.2/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= +github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM= +github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= +github.com/libp2p/go-libp2p v0.6.1/go.mod h1:CTFnWXogryAHjXAKEbOf1OWY+VeAP3lDMZkfEI5sT54= +github.com/libp2p/go-libp2p v0.7.0/go.mod h1:hZJf8txWeCduQRDC/WSqBGMxaTHCOYHt2xSU1ivxn0k= +github.com/libp2p/go-libp2p v0.7.4/go.mod h1:oXsBlTLF1q7pxr+9w6lqzS1ILpyHsaBPniVO7zIHGMw= +github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qDKwXujH5o= +github.com/libp2p/go-libp2p v0.8.2/go.mod h1:NQDA/F/qArMHGe0J7sDScaKjW8Jh4y/ozQqBbYJ+BnA= +github.com/libp2p/go-libp2p v0.11.0 h1:jb5mqdqYEBAybTEhD8io43Cz5LzVKuWxOK7znSN69jE= +github.com/libp2p/go-libp2p v0.11.0/go.mod h1:3/ogJDXsbbepEfqtZKBR/DedzxJXCeK17t2Z9RE9bEE= +github.com/libp2p/go-libp2p-autonat v0.1.1/go.mod h1:OXqkeGOY2xJVWKAGV2inNF5aKN/djNA3fdpCWloIudE= +github.com/libp2p/go-libp2p-autonat v0.2.0/go.mod h1:DX+9teU4pEEoZUqR1PiMlqliONQdNbfzE1C718tcViI= +github.com/libp2p/go-libp2p-autonat v0.2.1/go.mod h1:MWtAhV5Ko1l6QBsHQNSuM6b1sRkXrpk0/LqCr+vCVxI= +github.com/libp2p/go-libp2p-autonat v0.2.2/go.mod h1:HsM62HkqZmHR2k1xgX34WuWDzk/nBwNHoeyyT4IWV6A= +github.com/libp2p/go-libp2p-autonat v0.3.2 h1:OhDSwVVaq7liTaRIsFFYvsaPp0pn2yi0WazejZ4DUmo= +github.com/libp2p/go-libp2p-autonat v0.3.2/go.mod h1:0OzOi1/cVc7UcxfOddemYD5vzEqi4fwRbnZcJGLi68U= +github.com/libp2p/go-libp2p-blankhost v0.1.1/go.mod h1:pf2fvdLJPsC1FsVrNP3DUUvMzUts2dsLLBEpo1vW1ro= +github.com/libp2p/go-libp2p-blankhost v0.1.4/go.mod h1:oJF0saYsAXQCSfDq254GMNmLNz6ZTHTOvtF4ZydUvwU= +github.com/libp2p/go-libp2p-blankhost v0.2.0 h1:3EsGAi0CBGcZ33GwRuXEYJLLPoVWyXJ1bcJzAJjINkk= +github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= +github.com/libp2p/go-libp2p-circuit v0.1.4/go.mod h1:CY67BrEjKNDhdTk8UgBX1Y/H5c3xkAcs3gnksxY7osU= +github.com/libp2p/go-libp2p-circuit v0.2.1/go.mod h1:BXPwYDN5A8z4OEY9sOfr2DUQMLQvKt/6oku45YUmjIo= +github.com/libp2p/go-libp2p-circuit v0.3.1 h1:69ENDoGnNN45BNDnBd+8SXSetDuw0eJFcGmOvvtOgBw= +github.com/libp2p/go-libp2p-circuit v0.3.1/go.mod h1:8RMIlivu1+RxhebipJwFDA45DasLx+kkrp4IlJj53F4= +github.com/libp2p/go-libp2p-core v0.0.1/go.mod h1:g/VxnTZ/1ygHxH3dKok7Vno1VfpvGcGip57wjTU4fco= +github.com/libp2p/go-libp2p-core v0.0.4/go.mod h1:jyuCQP356gzfCFtRKyvAbNkyeuxb7OlyhWZ3nls5d2I= +github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= +github.com/libp2p/go-libp2p-core v0.2.2/go.mod h1:8fcwTbsG2B+lTgRJ1ICZtiM5GWCWZVoVrLaDRvIRng0= +github.com/libp2p/go-libp2p-core v0.2.4/go.mod h1:STh4fdfa5vDYr0/SzYYeqnt+E6KfEV5VxfIrm0bcI0g= +github.com/libp2p/go-libp2p-core v0.2.5/go.mod h1:6+5zJmKhsf7yHn1RbmYDu08qDUpIUxGdqHuEZckmZOA= +github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= +github.com/libp2p/go-libp2p-core v0.3.1/go.mod h1:thvWy0hvaSBhnVBaW37BvzgVV68OUhgJJLAa6almrII= +github.com/libp2p/go-libp2p-core v0.4.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= +github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= +github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= +github.com/libp2p/go-libp2p-core v0.5.2/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= +github.com/libp2p/go-libp2p-core v0.5.3/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= +github.com/libp2p/go-libp2p-core v0.5.4/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= +github.com/libp2p/go-libp2p-core v0.5.5/go.mod h1:vj3awlOr9+GMZJFH9s4mpt9RHHgGqeHCopzbYKZdRjM= +github.com/libp2p/go-libp2p-core v0.5.6/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= +github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= +github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= +github.com/libp2p/go-libp2p-core v0.6.1 h1:XS+Goh+QegCDojUZp00CaPMfiEADCrLjNZskWE7pvqs= +github.com/libp2p/go-libp2p-core v0.6.1/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= +github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE= +github.com/libp2p/go-libp2p-crypto v0.1.0 h1:k9MFy+o2zGDNGsaoZl0MA3iZ75qXxr9OOoAZF+sD5OQ= +github.com/libp2p/go-libp2p-crypto v0.1.0/go.mod h1:sPUokVISZiy+nNuTTH/TY+leRSxnFj/2GLjtOTW90hI= +github.com/libp2p/go-libp2p-discovery v0.2.0/go.mod h1:s4VGaxYMbw4+4+tsoQTqh7wfxg97AEdo4GYBt6BadWg= +github.com/libp2p/go-libp2p-discovery v0.3.0/go.mod h1:o03drFnz9BVAZdzC/QUQ+NeQOu38Fu7LJGEOK2gQltw= +github.com/libp2p/go-libp2p-discovery v0.5.0 h1:Qfl+e5+lfDgwdrXdu4YNCWyEo3fWuP+WgN9mN0iWviQ= +github.com/libp2p/go-libp2p-discovery v0.5.0/go.mod h1:+srtPIU9gDaBNu//UHvcdliKBIcr4SfDcm0/PfPJLug= +github.com/libp2p/go-libp2p-kad-dht v0.8.2 h1:s7y38B+hdj1AkNR3PCTpvNqBsZHxOf7hoUy7+fNlSZQ= +github.com/libp2p/go-libp2p-kad-dht v0.8.2/go.mod h1:u3rbYbp3CSraAHD5s81CJ3hHozKTud/UOXfAgh93Gek= +github.com/libp2p/go-libp2p-kbucket v0.4.2 h1:wg+VPpCtY61bCasGRexCuXOmEmdKjN+k1w+JtTwu9gA= +github.com/libp2p/go-libp2p-kbucket v0.4.2/go.mod h1:7sCeZx2GkNK1S6lQnGUW5JYZCFPnXzAZCCBBS70lytY= +github.com/libp2p/go-libp2p-loggables v0.1.0 h1:h3w8QFfCt2UJl/0/NW4K829HX/0S4KD31PQ7m8UXXO8= +github.com/libp2p/go-libp2p-loggables v0.1.0/go.mod h1:EyumB2Y6PrYjr55Q3/tiJ/o3xoDasoRYM7nOzEpoa90= +github.com/libp2p/go-libp2p-mplex v0.2.0/go.mod h1:Ejl9IyjvXJ0T9iqUTE1jpYATQ9NM3g+OtR+EMMODbKo= +github.com/libp2p/go-libp2p-mplex v0.2.1/go.mod h1:SC99Rxs8Vuzrf/6WhmH41kNn13TiYdAWNYHrwImKLnE= +github.com/libp2p/go-libp2p-mplex v0.2.2/go.mod h1:74S9eum0tVQdAfFiKxAyKzNdSuLqw5oadDq7+L/FELo= +github.com/libp2p/go-libp2p-mplex v0.2.3/go.mod h1:CK3p2+9qH9x+7ER/gWWDYJ3QW5ZxWDkm+dVvjfuG3ek= +github.com/libp2p/go-libp2p-mplex v0.2.4 h1:XFFXaN4jhqnIuJVjYOR3k6bnRj0mFfJOlIuDVww+4Zo= +github.com/libp2p/go-libp2p-mplex v0.2.4/go.mod h1:mI7iOezdWFOisvUwaYd3IDrJ4oVmgoXK8H331ui39CE= +github.com/libp2p/go-libp2p-nat v0.0.5/go.mod h1:1qubaE5bTZMJE+E/uu2URroMbzdubFz1ChgiN79yKPE= +github.com/libp2p/go-libp2p-nat v0.0.6 h1:wMWis3kYynCbHoyKLPBEMu4YRLltbm8Mk08HGSfvTkU= +github.com/libp2p/go-libp2p-nat v0.0.6/go.mod h1:iV59LVhB3IkFvS6S6sauVTSOrNEANnINbI/fkaLimiw= +github.com/libp2p/go-libp2p-netutil v0.1.0/go.mod h1:3Qv/aDqtMLTUyQeundkKsA+YCThNdbQD54k3TqjpbFU= +github.com/libp2p/go-libp2p-noise v0.1.1 h1:vqYQWvnIcHpIoWJKC7Al4D6Hgj0H012TuXRhPwSMGpQ= +github.com/libp2p/go-libp2p-noise v0.1.1/go.mod h1:QDFLdKX7nluB7DEnlVPbz7xlLHdwHFA9HiohJRr3vwM= +github.com/libp2p/go-libp2p-peer v0.0.1/go.mod h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J0AMzcDUVruVoo= +github.com/libp2p/go-libp2p-peer v0.2.0 h1:EQ8kMjaCUwt/Y5uLgjT8iY2qg0mGUT0N1zUjer50DsY= +github.com/libp2p/go-libp2p-peer v0.2.0/go.mod h1:RCffaCvUyW2CJmG2gAWVqwePwW7JMgxjsHm7+J5kjWY= +github.com/libp2p/go-libp2p-peerstore v0.1.0/go.mod h1:2CeHkQsr8svp4fZ+Oi9ykN1HBb6u0MOvdJ7YIsmcwtY= +github.com/libp2p/go-libp2p-peerstore v0.1.3/go.mod h1:BJ9sHlm59/80oSkpWgr1MyY1ciXAXV397W6h1GH/uKI= +github.com/libp2p/go-libp2p-peerstore v0.1.4/go.mod h1:+4BDbDiiKf4PzpANZDAT+knVdLxvqh7hXOujessqdzs= +github.com/libp2p/go-libp2p-peerstore v0.2.0/go.mod h1:N2l3eVIeAitSg3Pi2ipSrJYnqhVnMNQZo9nkSCuAbnQ= +github.com/libp2p/go-libp2p-peerstore v0.2.1/go.mod h1:NQxhNjWxf1d4w6PihR8btWIRjwRLBr4TYKfNgrUkOPA= +github.com/libp2p/go-libp2p-peerstore v0.2.2/go.mod h1:NQxhNjWxf1d4w6PihR8btWIRjwRLBr4TYKfNgrUkOPA= +github.com/libp2p/go-libp2p-peerstore v0.2.3/go.mod h1:K8ljLdFn590GMttg/luh4caB/3g0vKuY01psze0upRw= +github.com/libp2p/go-libp2p-peerstore v0.2.4/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= +github.com/libp2p/go-libp2p-peerstore v0.2.6 h1:2ACefBX23iMdJU9Ke+dcXt3w86MIryes9v7In4+Qq3U= +github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= +github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= +github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= +github.com/libp2p/go-libp2p-record v0.1.2 h1:M50VKzWnmUrk/M5/Dz99qO9Xh4vs8ijsK+7HkJvRP+0= +github.com/libp2p/go-libp2p-record v0.1.2/go.mod h1:pal0eNcT5nqZaTV7UGhqeGqxFgGdsU/9W//C8dqjQDk= +github.com/libp2p/go-libp2p-routing-helpers v0.2.3/go.mod h1:795bh+9YeoFl99rMASoiVgHdi5bjack0N1+AFAdbvBw= +github.com/libp2p/go-libp2p-secio v0.1.0/go.mod h1:tMJo2w7h3+wN4pgU2LSYeiKPrfqBgkOsdiKK77hE7c8= +github.com/libp2p/go-libp2p-secio v0.2.0/go.mod h1:2JdZepB8J5V9mBp79BmwsaPQhRPNN2NrnB2lKQcdy6g= +github.com/libp2p/go-libp2p-secio v0.2.1/go.mod h1:cWtZpILJqkqrSkiYcDBh5lA3wbT2Q+hz3rJQq3iftD8= +github.com/libp2p/go-libp2p-secio v0.2.2 h1:rLLPvShPQAcY6eNurKNZq3eZjPWfU9kXF2eI9jIYdrg= +github.com/libp2p/go-libp2p-secio v0.2.2/go.mod h1:wP3bS+m5AUnFA+OFO7Er03uO1mncHG0uVwGrwvjYlNY= +github.com/libp2p/go-libp2p-swarm v0.1.0/go.mod h1:wQVsCdjsuZoc730CgOvh5ox6K8evllckjebkdiY5ta4= +github.com/libp2p/go-libp2p-swarm v0.2.2/go.mod h1:fvmtQ0T1nErXym1/aa1uJEyN7JzaTNyBcHImCxRpPKU= +github.com/libp2p/go-libp2p-swarm v0.2.3/go.mod h1:P2VO/EpxRyDxtChXz/VPVXyTnszHvokHKRhfkEgFKNM= +github.com/libp2p/go-libp2p-swarm v0.2.8 h1:cIUUvytBzNQmGSjnXFlI6UpoBGsaud82mJPIJVfkDlg= +github.com/libp2p/go-libp2p-swarm v0.2.8/go.mod h1:JQKMGSth4SMqonruY0a8yjlPVIkb0mdNSwckW7OYziM= +github.com/libp2p/go-libp2p-testing v0.0.2/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= +github.com/libp2p/go-libp2p-testing v0.0.3/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= +github.com/libp2p/go-libp2p-testing v0.0.4/go.mod h1:gvchhf3FQOtBdr+eFUABet5a4MBLK8jM3V4Zghvmi+E= +github.com/libp2p/go-libp2p-testing v0.1.0/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= +github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= +github.com/libp2p/go-libp2p-tls v0.1.3 h1:twKMhMu44jQO+HgQK9X8NHO5HkeJu2QbhLzLJpa8oNM= +github.com/libp2p/go-libp2p-tls v0.1.3/go.mod h1:wZfuewxOndz5RTnCAxFliGjvYSDA40sKitV4c50uI1M= +github.com/libp2p/go-libp2p-transport-upgrader v0.1.1/go.mod h1:IEtA6or8JUbsV07qPW4r01GnTenLW4oi3lOPbUMGJJA= +github.com/libp2p/go-libp2p-transport-upgrader v0.2.0/go.mod h1:mQcrHj4asu6ArfSoMuyojOdjx73Q47cYD7s5+gZOlns= +github.com/libp2p/go-libp2p-transport-upgrader v0.3.0 h1:q3ULhsknEQ34eVDhv4YwKS8iet69ffs9+Fir6a7weN4= +github.com/libp2p/go-libp2p-transport-upgrader v0.3.0/go.mod h1:i+SKzbRnvXdVbU3D1dwydnTmKRPXiAR/fyvi1dXuL4o= +github.com/libp2p/go-libp2p-yamux v0.2.0/go.mod h1:Db2gU+XfLpm6E4rG5uGCFX6uXA8MEXOxFcRoXUODaK8= +github.com/libp2p/go-libp2p-yamux v0.2.2/go.mod h1:lIohaR0pT6mOt0AZ0L2dFze9hds9Req3OfS+B+dv4qw= +github.com/libp2p/go-libp2p-yamux v0.2.5/go.mod h1:Zpgj6arbyQrmZ3wxSZxfBmbdnWtbZ48OpsfmQVTErwA= +github.com/libp2p/go-libp2p-yamux v0.2.7/go.mod h1:X28ENrBMU/nm4I3Nx4sZ4dgjZ6VhLEn0XhIoZ5viCwU= +github.com/libp2p/go-libp2p-yamux v0.2.8 h1:0s3ELSLu2O7hWKfX1YjzudBKCP0kZ+m9e2+0veXzkn4= +github.com/libp2p/go-libp2p-yamux v0.2.8/go.mod h1:/t6tDqeuZf0INZMTgd0WxIRbtK2EzI2h7HbFm9eAKI4= +github.com/libp2p/go-maddr-filter v0.0.4/go.mod h1:6eT12kSQMA9x2pvFQa+xesMKUBlj9VImZbj3B9FBH/Q= +github.com/libp2p/go-maddr-filter v0.0.5/go.mod h1:Jk+36PMfIqCJhAnaASRH83bdAvfDRp/w6ENFaC9bG+M= +github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= +github.com/libp2p/go-mplex v0.0.3/go.mod h1:pK5yMLmOoBR1pNCqDlA2GQrdAVTMkqFalaTWe7l4Yd0= +github.com/libp2p/go-mplex v0.1.0/go.mod h1:SXgmdki2kwCUlCCbfGLEgHjC4pFqhTp0ZoV6aiKgxDU= +github.com/libp2p/go-mplex v0.1.1/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= +github.com/libp2p/go-mplex v0.1.2 h1:qOg1s+WdGLlpkrczDqmhYzyk3vCfsQ8+RxRTQjOZWwI= +github.com/libp2p/go-mplex v0.1.2/go.mod h1:Xgz2RDCi3co0LeZfgjm4OgUF15+sVR8SRcu3SFXI1lk= +github.com/libp2p/go-msgio v0.0.2/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= +github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= +github.com/libp2p/go-msgio v0.0.6 h1:lQ7Uc0kS1wb1EfRxO2Eir/RJoHkHn7t6o+EiwsYIKJA= +github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= +github.com/libp2p/go-nat v0.0.4/go.mod h1:Nmw50VAvKuk38jUBcmNh6p9lUJLoODbJRvYAa/+KSDo= +github.com/libp2p/go-nat v0.0.5 h1:qxnwkco8RLKqVh1NmjQ+tJ8p8khNLFxuElYG/TwqW4Q= +github.com/libp2p/go-nat v0.0.5/go.mod h1:B7NxsVNPZmRLvMOwiEO1scOSyjA56zxYAGv1yQgRkEU= +github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= +github.com/libp2p/go-netroute v0.1.3 h1:1ngWRx61us/EpaKkdqkMjKk/ufr/JlIFYQAxV2XX8Ig= +github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= +github.com/libp2p/go-openssl v0.0.2/go.mod h1:v8Zw2ijCSWBQi8Pq5GAixw6DbFfa9u6VIYDXnvOXkc0= +github.com/libp2p/go-openssl v0.0.3/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= +github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-reuseport v0.0.1/go.mod h1:jn6RmB1ufnQwl0Q1f+YxAj8isJgDCQzaaxIFYDhcYEA= +github.com/libp2p/go-reuseport v0.0.2 h1:XSG94b1FJfGA01BUrT82imejHQyTxO4jEWqheyCXYvU= +github.com/libp2p/go-reuseport v0.0.2/go.mod h1:SPD+5RwGC7rcnzngoYC86GjPzjSywuQyMVAheVBD9nQ= +github.com/libp2p/go-reuseport-transport v0.0.2/go.mod h1:YkbSDrvjUVDL6b8XqriyA20obEtsW9BLkuOUyQAOCbs= +github.com/libp2p/go-reuseport-transport v0.0.3/go.mod h1:Spv+MPft1exxARzP2Sruj2Wb5JSyHNncjf1Oi2dEbzM= +github.com/libp2p/go-reuseport-transport v0.0.4 h1:OZGz0RB620QDGpv300n1zaOcKGGAoGVf8h9txtt/1uM= +github.com/libp2p/go-reuseport-transport v0.0.4/go.mod h1:trPa7r/7TJK/d+0hdBLOCGvpQQVOU74OXbNCIMkufGw= +github.com/libp2p/go-sockaddr v0.0.2 h1:tCuXfpA9rq7llM/v834RKc/Xvovy/AqM9kHvTV/jY/Q= +github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= +github.com/libp2p/go-stream-muxer v0.0.1/go.mod h1:bAo8x7YkSpadMTbtTaxGVHWUQsR/l5MEaHbKaliuT14= +github.com/libp2p/go-stream-muxer-multistream v0.2.0/go.mod h1:j9eyPol/LLRqT+GPLSxvimPhNph4sfYfMoDPd7HkzIc= +github.com/libp2p/go-stream-muxer-multistream v0.3.0 h1:TqnSHPJEIqDEO7h1wZZ0p3DXdvDSiLHQidKKUGZtiOY= +github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= +github.com/libp2p/go-tcp-transport v0.1.0/go.mod h1:oJ8I5VXryj493DEJ7OsBieu8fcg2nHGctwtInJVpipc= +github.com/libp2p/go-tcp-transport v0.1.1/go.mod h1:3HzGvLbx6etZjnFlERyakbaYPdfjg2pWP97dFZworkY= +github.com/libp2p/go-tcp-transport v0.2.0/go.mod h1:vX2U0CnWimU4h0SGSEsg++AzvBcroCGYw28kh94oLe0= +github.com/libp2p/go-tcp-transport v0.2.1 h1:ExZiVQV+h+qL16fzCWtd1HSzPsqWottJ8KXwWaVi8Ns= +github.com/libp2p/go-tcp-transport v0.2.1/go.mod h1:zskiJ70MEfWz2MKxvFB/Pv+tPIB1PpPUrHIWQ8aFw7M= +github.com/libp2p/go-ws-transport v0.2.0/go.mod h1:9BHJz/4Q5A9ludYWKoGCFC5gUElzlHoKzu0yY9p/klM= +github.com/libp2p/go-ws-transport v0.3.0/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= +github.com/libp2p/go-ws-transport v0.3.1 h1:ZX5rWB8nhRRJVaPO6tmkGI/Xx8XNboYX20PW5hXIscw= +github.com/libp2p/go-ws-transport v0.3.1/go.mod h1:bpgTJmRZAvVHrgHybCVyqoBmyLQ1fiZuEaBYusP5zsk= +github.com/libp2p/go-yamux v1.2.2/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.3.0/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.3.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.3.5/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow= +github.com/libp2p/go-yamux v1.3.7 h1:v40A1eSPJDIZwz2AvrV3cxpTZEGDP11QJbukmEhYyQI= +github.com/libp2p/go-yamux v1.3.7/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/lunixbochs/vtclean v0.0.0-20180621232353-2d01aacdc34a/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= +github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/manifoldco/promptui v0.7.0/go.mod h1:n4zTdgP0vr0S3w7/O/g98U+e0gwLScEXGwov2nIKuGQ= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw= +github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.14.3 h1:j7a/xn1U6TKA/PHHxqZuzh64CdtRc7rU9M+AvkOl5bA= +github.com/mattn/go-sqlite3 v1.14.3/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.28/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= +github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= +github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= +github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= +github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= +github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +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/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/monax/relic v2.0.0+incompatible/go.mod h1:ZJcXg8m9tYkd2h6VeEZruhRUQPklFKbzFaTxyXrXxVk= +github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c h1:nXxl5PrvVm2L/wCy8dQu6DMTwH4oIuGN8GJDAlqDdVE= +github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mozillazg/go-pinyin v0.20.0 h1:BtR3DsxpApHfKReaPO1fCqF4pThRwH9uwvXzm+GnMFQ= +github.com/mozillazg/go-pinyin v0.20.0/go.mod h1:iR4EnMMRXkfpFVV5FMi4FNB6wGq9NV6uDWbUuPhP4Yc= +github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= +github.com/mr-tron/base58 v1.1.1/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= +github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM= +github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= +github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= +github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= +github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= +github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= +github.com/multiformats/go-multiaddr v0.0.1/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= +github.com/multiformats/go-multiaddr v0.0.2/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= +github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= +github.com/multiformats/go-multiaddr v0.1.0/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= +github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= +github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= +github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= +github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= +github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= +github.com/multiformats/go-multiaddr v0.3.1 h1:1bxa+W7j9wZKTZREySx1vPMs2TqrYWjVZ7zE6/XLG1I= +github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= +github.com/multiformats/go-multiaddr-dns v0.0.1/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= +github.com/multiformats/go-multiaddr-dns v0.0.2/go.mod h1:9kWcqw/Pj6FwxAwW38n/9403szc57zJPs45fmnznu3Q= +github.com/multiformats/go-multiaddr-dns v0.2.0 h1:YWJoIDwLePniH7OU5hBnDZV6SWuvJqJ0YtN6pLeH9zA= +github.com/multiformats/go-multiaddr-dns v0.2.0/go.mod h1:TJ5pr5bBO7Y1B18djPuRsVkduhQH2YqYSbxWJzYGdK0= +github.com/multiformats/go-multiaddr-fmt v0.0.1/go.mod h1:aBYjqL4T/7j4Qx+R73XSv/8JsgnRFlf0w2KGLCmXl3Q= +github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= +github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= +github.com/multiformats/go-multiaddr-net v0.0.1/go.mod h1:nw6HSxNmCIQH27XPGBuX+d1tnvM7ihcFwHMSstNAVUU= +github.com/multiformats/go-multiaddr-net v0.1.0/go.mod h1:5JNbcfBOP4dnhoZOv10JJVkJO0pCCEf8mTnipAo2UZQ= +github.com/multiformats/go-multiaddr-net v0.1.1/go.mod h1:5JNbcfBOP4dnhoZOv10JJVkJO0pCCEf8mTnipAo2UZQ= +github.com/multiformats/go-multiaddr-net v0.1.2/go.mod h1:QsWt3XK/3hwvNxZJp92iMQKME1qHfpYmyIjFVsSOY6Y= +github.com/multiformats/go-multiaddr-net v0.1.3/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= +github.com/multiformats/go-multiaddr-net v0.1.4/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= +github.com/multiformats/go-multiaddr-net v0.1.5/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= +github.com/multiformats/go-multiaddr-net v0.2.0 h1:MSXRGN0mFymt6B1yo/6BPnIRpLPEnKgQNvVfCX5VDJk= +github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= +github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= +github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= +github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= +github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= +github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= +github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= +github.com/multiformats/go-multihash v0.0.9/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= +github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= +github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= +github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= +github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= +github.com/multiformats/go-multistream v0.1.0/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg= +github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= +github.com/multiformats/go-multistream v0.1.2 h1:knyamLYMPFPngQjGQ0lhnlys3jtVR/3xV6TREUJr+fE= +github.com/multiformats/go-multistream v0.1.2/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= +github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= +github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.3.2 h1:qRlmpTzm2pstMKKzTdvwPCF5QfBNURSlAgN/R+qbKos= +github.com/mwitkow/go-proto-validators v0.3.2/go.mod h1:ej0Qp0qMgHN/KtDyUt+Q1/tA7a5VarXUOUxD+oeD30w= +github.com/nacos-group/nacos-sdk-go v1.0.8/go.mod h1:hlAPn3UdzlxIlSILAyOXKxjFSvDJ9oLzTJ9hLAK1KzA= +github.com/nacos-group/nacos-sdk-go v1.1.1 h1:beczWcOoTaVBMgCgikqvZflrN5Xbw7pWAWpxl+VJGIA= +github.com/nacos-group/nacos-sdk-go v1.1.1/go.mod h1:UHOtQNQY/qpk2dhg6gDq8u5+/CEIc3+lWmrmxEzX0/g= +github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM= +github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.1.1 h1:GlxAyO6x8rfZYN9Tt0Kti5a/cP41iuiO2yYT0IJGY8Y= +github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.7.0 h1:7utD74fnzVc/cpcyy8sjrlFr5vYpypUixARcHIMIGuI= +github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/perlin-network/life v0.0.0-20191203030451-05c0e0f7eaea/go.mod h1:3KEU5Dm8MAYWZqity880wOFJ9PhQjyKVZGwAEfc5Q4E= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= +github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/profile v1.4.0/go.mod h1:NWz/XGvpEW1FyYQ7fCx4dqYBLlfTcE+A9FLAkNKqjFE= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polarismesh/polaris-go v1.1.0 h1:nFvn3q3XaVFhzF7pBnIySrN0ZZBwvbbYXC5r2DpsQN0= +github.com/polarismesh/polaris-go v1.1.0/go.mod h1:tquawfjEKp1W3ffNJQSzhfditjjoZ7tvhOCElN7Efzs= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= +github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/statsd_exporter v0.21.0 h1:hA05Q5RFeIjgwKIYEdFd59xu5Wwaznf33yKI+pyX6T8= +github.com/prometheus/statsd_exporter v0.21.0/go.mod h1:rbT83sZq2V+p73lHhPZfMc3MLCHmSHelCh9hSGYNLTQ= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rcrowley/go-metrics v0.0.0-20180503174638-e2704e165165/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rhnvrm/simples3 v0.6.1/go.mod h1:Y+3vYm2V7Y4VijFoJHHTrja6OgPrJ2cBti8dPGkC3sA= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= +github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b h1:gQZ0qzfKHQIybLANtM3mBXNUtOfsCFXeTsnBqCsx1KM= +github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shirou/gopsutil v3.20.11+incompatible h1:LJr4ZQK4mPpIV5gOa4jCOKOGb4ty4DZO54I4FGqIpto= +github.com/shirou/gopsutil v3.20.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.21.6 h1:vU7jrp1Ic/2sHB7w6UNs7MIkn7ebVtTb5D9j45o9VYE= +github.com/shirou/gopsutil/v3 v3.21.6/go.mod h1:JfVbDpIBLVzT8oKbvMg9P3wEIMDDpVn+LwHTKj0ST88= +github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= +github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v1.1.0 h1:MkTeG1DMwsrdH7QtLXy5W+fUxWq+vmb6cLmyJ7aRtF0= +github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= +github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/soheilhy/cmux v0.1.5-0.20210205191134-5ec6847320e5 h1:GJTW+uNMIV1RKwox+T4aN0/sQlYRg78uHZf2H0aBcDw= +github.com/soheilhy/cmux v0.1.5-0.20210205191134-5ec6847320e5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= +github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.1/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v0.0.6/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= +github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk= +github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streadway/simpleuuid v0.0.0-20130420165545-6617b501e485/go.mod h1:fMlyZAyOBbIsA9SgKX9V3X8DvF+5ImkZ+Z1HZcmo8Ec= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +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= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= +github.com/syndtr/goleveldb v1.0.1-0.20190923125748-758128399b1d/go.mod h1:9OrXJhf154huy1nPWmuSrkgjPUtUNhA+Zmy+6AESzuA= +github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= +github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +github.com/tebeka/strftime v0.1.3/go.mod h1:7wJm3dZlpr4l/oVK0t1HYIc4rMzQ2XJlOMIUJUJH6XQ= +github.com/tecbot/gorocksdb v0.0.0-20191017175515-d217d93fd4c5/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= +github.com/tendermint/go-amino v0.14.1 h1:o2WudxNfdLNBwMyl2dqOJxiro5rfrEaU0Ugs6offJMk= +github.com/tendermint/go-amino v0.14.1/go.mod h1:i/UKE5Uocn+argJJBb12qTZsCDBcAYMbR92AaJVmKso= +github.com/tendermint/iavl v0.13.0/go.mod h1:7nSUPdrsHEZ2nNZa+9gaIrcJciWd1jCQZXtcyARU82k= +github.com/tendermint/tendermint v0.33.0/go.mod h1:s5UoymnPIY+GcA3mMte4P9gpMP8vS7UH7HBXikT1pHI= +github.com/tendermint/tendermint v0.33.1 h1:8f68LUBz8yhISZvaLFP4siXXrLWsWeoYfelbdNtmvm4= +github.com/tendermint/tendermint v0.33.1/go.mod h1:fBOKyrlXOETqQ+heL8x/TZgSdmItON54csyabvktBp0= +github.com/tendermint/tm-db v0.4.0/go.mod h1:+Cwhgowrf7NBGXmsqFMbwEtbo80XmyrlY5Jsk95JubQ= +github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= +github.com/tevid/gohamcrest v1.1.1 h1:ou+xSqlIw1xfGTg1uq1nif/htZ2S3EzRqLm2BP+tYU0= +github.com/tevid/gohamcrest v1.1.1/go.mod h1:3UvtWlqm8j5JbwYZh80D/PVBt0mJ1eJiYgZMibh0H/k= +github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM= +github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= +github.com/tklauser/go-sysconf v0.3.6 h1:oc1sJWvKkmvIxhDHeKWvZS4f6AW+YcoguSfRF2/Hmo4= +github.com/tklauser/go-sysconf v0.3.6/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= +github.com/tklauser/numcpus v0.2.2 h1:oyhllyrScuYI6g+h/zUvNXNp1wy7x8qQy3t/piefldA= +github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 h1:uruHq4dN7GR16kFc5fp3d1RIYzJW5onx8Ybykw2YQFA= +github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmthrgd/atomics v0.0.0-20190904060638-dc7a5fcc7e0d h1:2QXSQjy/gDm0QeP9G9NaO9Hm2Cl1LAle4ZV0JeYK7XY= +github.com/tmthrgd/atomics v0.0.0-20190904060638-dc7a5fcc7e0d/go.mod h1:J2+dTgaX/1g3PkyL6sLBglBWfaLmAp5bQbRhSfKw9XI= +github.com/tmthrgd/go-bitset v0.0.0-20190904054048-394d9a556c05 h1:5jOF3BEex8XyBKMbaDUN1SiPQJRAKVuP24/sbwC2aWA= +github.com/tmthrgd/go-bitset v0.0.0-20190904054048-394d9a556c05/go.mod h1:SooM96OIpihI7iMZhVGbpiiO9Qevqv8vXxHlwNtefd4= +github.com/tmthrgd/go-bitwise v0.0.0-20190904053232-1430ee983fca h1:Ns4/7EvYZ7FxKiKnEMkMMAPtoR/ifUgRsvk7lzlOtPY= +github.com/tmthrgd/go-bitwise v0.0.0-20190904053232-1430ee983fca/go.mod h1:Ba4ek/h+sJUzTQ03ZGD1r0lazhxd7CBoEQzFk/icxxU= +github.com/tmthrgd/go-byte-test v0.0.0-20190904060354-2794345b9929 h1:EV5x10oS2/QrR1RwniFQW1i22d/iyX/emvvMjHT32CA= +github.com/tmthrgd/go-byte-test v0.0.0-20190904060354-2794345b9929/go.mod h1:MEz1Lt0fxSL/ZgE7VN3yUJV0sP5I5aYecYLd9y/viEs= +github.com/tmthrgd/go-hex v0.0.0-20190303111820-0bdcb15db631 h1:IlK6taZBmMKDcGfMqIlD4la5BlekNrrLsdtCMSn6aJI= +github.com/tmthrgd/go-hex v0.0.0-20190303111820-0bdcb15db631/go.mod h1:bciPuU6GHm1iF1pBvUfxfsH0Wmnc2VbpgvbI9ZWuIRs= +github.com/tmthrgd/go-memset v0.0.0-20190904060434-6fb7a21f88f1 h1:KfSLDmc6rrLHr//urKbNApu51nt2AzdrwBCxqq0gRlk= +github.com/tmthrgd/go-memset v0.0.0-20190904060434-6fb7a21f88f1/go.mod h1:xUkvcKF3VBDKFmmqCtW333lognWBHzSScj4fgjVB0Ek= +github.com/tmthrgd/go-popcount v0.0.0-20190904054823-afb1ace8b04f h1:Phf2p9+twoHct5ZjSTrI8K7iWeSxO4x1p5pShTl0J00= +github.com/tmthrgd/go-popcount v0.0.0-20190904054823-afb1ace8b04f/go.mod h1:FcUQfrsAsSSqM3n9xf4EtPzB8tWzt58/y0AV+wNNM8Q= +github.com/toolkits/concurrent v0.0.0-20150624120057-a4371d70e3e3/go.mod h1:QDlpd3qS71vYtakd2hmdpqhJ9nwv6mD6A30bQ1BPBFE= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.0.0-20190126203739-365674df15fc h1:RTUQlKzoZZVG3umWNzOYeFecQLIh+dbxXvJp1zPQJTI= +github.com/twitchyliquid64/golang-asm v0.0.0-20190126203739-365674df15fc/go.mod h1:NoCfSFWosfqMqmmD7hApkirIK9ozpHjxRnRxs1l413A= +github.com/uber/jaeger-client-go v2.29.1+incompatible h1:R9ec3zO3sGpzs0abd43Y+fBZRJ9uiH6lXyR/+u6brW4= +github.com/uber/jaeger-client-go v2.29.1+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.2.6/go.mod h1:anCg0y61KIhDlPZmnH+so+RQbysYVyDko0IMgJv0Nn0= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ugorji/go/codec v1.2.6/go.mod h1:V6TCNZ4PHqoHGFZuSG1W8nrCzzdgA2DozYxWFFpvxTw= +github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= +github.com/wangjia184/sortedset v0.0.0-20160527075905-f5d03557ba30/go.mod h1:YkocrP2K2tcw938x9gCOmT5G5eCD6jsTz0SZuyAqwIE= +github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 h1:EKhdznlJHPMoKr0XTrX+IlJs1LH3lyx2nfr1dOlZ79k= +github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= +github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= +github.com/whyrusleeping/go-logging v0.0.1/go.mod h1:lDPYj54zutzG1XYfHAhcc7oNXEburHQBn+Iqd4yS4vE= +github.com/whyrusleeping/mafmt v1.2.8/go.mod h1:faQJFPbLSxzD9xpA02ttW/tS9vZykNvXwGvqIpk20FA= +github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= +github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= +github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= +github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/xeipuuv/gojsonschema v1.1.0/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/xuperchain/crypto v0.0.0-20201028025054-4d560674bcd6 h1:eq5iMYQob0mbPHw5juLan/bbn/PTy9FJAQ7s6H5jl2o= +github.com/xuperchain/crypto v0.0.0-20201028025054-4d560674bcd6/go.mod h1:mZKWz+SJRTH8W2OuCqZ+IgQ7vQE6nP49ysr2MuV9MPc= +github.com/xuperchain/log15 v0.0.0-20190620081506-bc88a9198230 h1:AWFZFbmLhY6VG6IIHD+9ZCgTCuvVRKoK+PRNaxqahl0= +github.com/xuperchain/log15 v0.0.0-20190620081506-bc88a9198230/go.mod h1:90Da9GDXy9Yle79ZHSJY1c7X+1meBKsoX0vkRy09xis= +github.com/xuperchain/wagon v0.6.1-0.20200313164333-db544e251599 h1:xh8MpzUZFmNOpeJyiiBCYOJq7gq7nRBU647y6e78Qms= +github.com/xuperchain/wagon v0.6.1-0.20200313164333-db544e251599/go.mod h1:PjShksGcTLuvtHxudQ7nOdlvlw2NdbZrTn8jvdY9Mkw= +github.com/xuperchain/xuper-sdk-go/v2 v2.0.0 h1:01sJXcwjhUX440U548X7IV7VRW1T4zDykt+vY67j5Ok= +github.com/xuperchain/xuper-sdk-go/v2 v2.0.0/go.mod h1:vxIMnU76cljMCVECbvJcboRNDpkHC1jITQ4FvwoEfwo= +github.com/xuperchain/xuperchain v0.0.0-20210708031936-951e4ade7bdd h1:3HX2DJeSCn8Ju6R7vy1Jv4T3axpLRtSSLOh5xkHAd80= +github.com/xuperchain/xuperchain v0.0.0-20210708031936-951e4ade7bdd/go.mod h1:6uzliENa2fKtT7l7QlkpwFiqd2ybZ7xVDbhbaMc6lZA= +github.com/xuperchain/xupercore v0.0.0-20210608021245-b15f81dd9ecf h1:kM+UGhXEXRx+z3Z5mH3gg5F//35GvPoSNqAItQExTlM= +github.com/xuperchain/xupercore v0.0.0-20210608021245-b15f81dd9ecf/go.mod h1:EGiBvEJUzLvzSQSj6npe+f5wsIu/Kwks9A2K7qEzlRU= +github.com/xuperchain/xvm v0.0.0-20210126142521-68fd016c56d7 h1:ARg101vOoX4N+6hbwtud6b0P/bb+7JtrCfVXAHa/xHU= +github.com/xuperchain/xvm v0.0.0-20210126142521-68fd016c56d7/go.mod h1:XTaJSLDGYlcAPFb5vWH4vVALckO3V5+wa4zl1mpKMjg= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/zouyx/agollo/v3 v3.4.5 h1:7YCxzY9ZYaH9TuVUBvmI6Tk0mwMggikah+cfbYogcHQ= +github.com/zouyx/agollo/v3 v3.4.5/go.mod h1:LJr3kDmm23QSW+F1Ol4TMHDa7HvJvscMdVxJ2IpUTVc= +gitlab.com/NebulousLabs/errors v0.0.0-20171229012116-7ead97ef90b8/go.mod h1:ZkMZ0dpQyWwlENaeZVBiQRjhMEZvk6VTXquzl3FOFP8= +gitlab.com/NebulousLabs/fastrand v0.0.0-20181126182046-603482d69e40/go.mod h1:rOnSnoRyxMI3fe/7KIbVcsHRGxe30OONv8dEgo+vCfA= +gitlab.com/NebulousLabs/merkletree v0.0.0-20200118113624-07fbf710afc4/go.mod h1:0cjDwhA+Pv9ZQXHED7HUSS3sCvo2zgsoaMgE7MeGBWo= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd/api/v3 v3.5.0-alpha.0/go.mod h1:mPcW6aZJukV6Aa81LSKpBjQXTWlXB5r74ymPoSWa3Sw= +go.etcd.io/etcd/api/v3 v3.5.4 h1:OHVyt3TopwtUQ2GKdd5wu3PmmipR4FTwCqoEjSyRdIc= +go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/client/pkg/v3 v3.5.4 h1:lrneYvz923dvC14R54XcA7FXoZ3mlGZAgmwhfm7HqOg= +go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0-alpha.0 h1:jZepGpOeJATxsbMNBZczDS2jHdK/QVHM1iPe9jURJ8o= +go.etcd.io/etcd/client/v2 v2.305.0-alpha.0/go.mod h1:kdV+xzCJ3luEBSIeQyB/OEKkWKd8Zkux4sbDeANrosU= +go.etcd.io/etcd/client/v3 v3.5.0-alpha.0/go.mod h1:wKt7jgDgf/OfKiYmCq5WFGxOFAkVMLxiiXgLDFhECr8= +go.etcd.io/etcd/client/v3 v3.5.4 h1:p83BUL3tAYS0OT/r0qglgc3M1JjhM0diV8DSWAhVXv4= +go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= +go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0 h1:3yLUEC0nFCxw/RArImOyRUI4OAFbg4PFpBbAhSNzKNY= +go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0/go.mod h1:tV31atvwzcybuqejDoY3oaNRTtlD2l/Ot78Pc9w7DMY= +go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0 h1:DvYJotxV9q1Lkn7pknzAbFO/CLtCVidCr2K9qRLJ8pA= +go.etcd.io/etcd/raft/v3 v3.5.0-alpha.0/go.mod h1:FAwse6Zlm5v4tEWZaTjmNhe17Int4Oxbu7+2r0DiD3w= +go.etcd.io/etcd/server/v3 v3.5.0-alpha.0 h1:fYv7CmmdyuIu27UmKQjS9K/1GtcCa+XnPKqiKBbQkrk= +go.etcd.io/etcd/server/v3 v3.5.0-alpha.0/go.mod h1:tsKetYpt980ZTpzl/gb+UOJj9RkIyCb1u4wjzMg90BQ= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/otel v1.7.0 h1:Z2lA3Tdch0iDcrhJXDIlC94XE+bxok1F9B+4Lz/lGsM= +go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= +go.opentelemetry.io/otel/trace v1.7.0 h1:O37Iogk1lEkMRXewVtZ1BBTVn5JEp8GrJvP92bJqC6o= +go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= +go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= +go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190225124518-7f87c0fbb88b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190513172903-22d7a77e9e5f/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200109152110-61a87790db17/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/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-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +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/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181217023233-e147a9138326/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +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-20211105192438-b53810dc28af/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= +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= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190306220234-b354f8bf4d9e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190526052359-791d8a0f4d09/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190825160603-fb81701db80f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200406155108-e3b113bbe6a4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200806125547-5acd03effb82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200824131525-c12d262b63d8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201223074533-0d417f636930/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/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-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-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211106132015-ebca88c72f68/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/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-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= +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= +golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.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.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE= +golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20201014170642-d1624618ad65/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +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.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210106152847-07624b53cd92/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20211104193956-4c6863e31247 h1:ZONpjmFT5e+I/0/xE3XXbG5OIvX2hRYzol04MhKBl2E= +google.golang.org/genproto v0.0.0-20211104193956-4c6863e31247/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.47.0 h1:9n77onPX5F3qfFCqjy9dhn8PbNQsIKeVU04J9G7umt8= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.56.0 h1:DPMeDvGTM54DXbPkVIZsp19fp/I2K7zwA/itHYHKo8Y= +gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= +gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/mysql v1.3.5 h1:iWBTVW/8Ij5AG4e0G/zqzaJblYkBI1VIL1LG2HUGsvY= +gorm.io/driver/mysql v1.3.5/go.mod h1:sSIebwZAVPiT+27jK9HIwvsqOGKx3YMPmrA3mBJR10c= +gorm.io/driver/sqlite v1.1.3 h1:BYfdVuZB5He/u9dt4qDpZqiqDJ6KhPqs5QUqsr/Eeuc= +gorm.io/driver/sqlite v1.1.3/go.mod h1:AKDgRWk8lcSQSw+9kxCJnX/yySj8G3rdwYlU57cB45c= +gorm.io/gorm v1.20.1/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= +gorm.io/gorm v1.23.0/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk= +gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls= +gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= +gorm.io/plugin/soft_delete v1.2.0 h1:txWHRMqLPqfXUFytXCdxb/jthRe3CrG4R5XOdagut6Q= +gorm.io/plugin/soft_delete v1.2.0/go.mod h1:Zv7vQctOJTGOsJ/bWgrN1n3od0GBAZgnLjEx+cApLGk= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/pkg/application/coin.go b/pkg/application/coin.go new file mode 100644 index 0000000..b584a8a --- /dev/null +++ b/pkg/application/coin.go @@ -0,0 +1 @@ +package application diff --git a/pkg/application/init.go b/pkg/application/init.go new file mode 100644 index 0000000..70fa499 --- /dev/null +++ b/pkg/application/init.go @@ -0,0 +1,5 @@ +package application + +func init() { + +} diff --git a/pkg/application/order.go b/pkg/application/order.go new file mode 100644 index 0000000..0cba559 --- /dev/null +++ b/pkg/application/order.go @@ -0,0 +1,255 @@ +package application + +import ( + "fmt" + "github.com/fonchain_enterprise/micro-account/api/account" + "github.com/fonchain_enterprise/micro-account/cmd/config" + "github.com/fonchain_enterprise/micro-account/pkg/cache" + "github.com/fonchain_enterprise/micro-account/pkg/common/jwt" + "github.com/fonchain_enterprise/micro-account/pkg/common/redis_key" + "github.com/fonchain_enterprise/micro-account/pkg/common/utils" + "github.com/fonchain_enterprise/micro-account/pkg/m" + "github.com/fonchain_enterprise/micro-account/pkg/model" + "net" + "time" +) + +// Logout 登出 +func Logout(in *account.DecryptJwtRequest, status uint8) error { + var loginLog *model.LoginLog + + //解析token + claims, err := jwt.ParseToken(in.Token, m.JWTSecret) + if err != nil { + return err + } + + //删除token信息 + tokenKey := redis_key.GetTokenInfo(in.Domain, in.Token) + fmt.Print("删除token", tokenKey) + if merr := cache.RedisClient.Del(tokenKey).Err(); merr != nil { + return merr + } + + //记录token信息 + if err := model.DB.Model(&model.LoginLog{}).Where(&model.LoginLog{Token: in.Token}).First(&loginLog).Error; err != nil { + loginLog = &model.LoginLog{ + UserId: claims.ID, + Token: in.Token, + Status: status, + ExpireDate: time.Now().Format("2006-01-02 15:04:05"), + LastDate: time.Now().Format("2006-01-02 15:04:05"), + LogoutDate: time.Now().Format("2006-01-02 15:04:05"), + } + model.DB.Model(&model.LoginLog{}).Create(loginLog) + } else { + //不存在 + updateLog := &model.LoginLog{ + Status: status, + LogoutDate: time.Now().Format("2006-01-02 15:04:05"), + } + + model.DB.Model(&model.LoginLog{}).Where(&model.LoginLog{ID: loginLog.ID}).Updates(&updateLog) + } + + return nil + +} + +// UpdateLastDate 更新最新操作时间 +func UpdateLastDate(token string) { + var loginLog *model.LoginLog + + if err := model.DB.Model(&model.LoginLog{}).Where(&model.LoginLog{Token: token}).First(&loginLog).Error; err != nil { + return + } + + updateObj := &model.LoginLog{LastDate: time.Now().Format("2006-01-02 15:04:05")} + + model.DB.Model(&model.LoginLog{}).Where(&model.LoginLog{Token: token}).Updates(updateObj) + + return +} + +// OffByLogId 踢下线 +func OffByLogId(id uint64) error { + var loginLog *model.LoginLog + + if err := model.DB.Model(&model.LoginLog{}).First(&loginLog, id).Error; err != nil { + return nil + } + + in := &account.DecryptJwtRequest{ + Token: loginLog.Token, + Domain: *loginLog.Domain, + } + + return Logout(in, model.Status_Off) +} + +func OnlineLogById(id uint64) (*account.LoginLog, error) { + var log *model.LoginLog + + //失效时间大于当前时间 + if err := model.DB.Model(&model.LoginLog{}). + First(&log, id).Error; err != nil { + return nil, err + } + + res := &account.LoginLog{ + ID: uint64(log.ID), + UserId: uint64(log.UserId), + Ip: log.Ip, + Status: uint64(log.Status), + ExpireDate: log.ExpireDate, + LastDate: log.LastDate, + LogoutDate: log.LogoutDate, + Address: log.Address, + CreatedAt: log.CreatedAt.Format("2006-01-02 15:04:05"), + } + + return res, nil + +} + +// OnlineLogList 获取用户当前的在线记录 +func OnlineLogList(in *account.LoginInfosByUserIdRequest) []*account.LoginLog { + var loginLogs []*model.LoginLog + var logs []*account.LoginLog + + //失效时间大于当前时间 + model.DB.Model(&model.LoginLog{}). + Where(&model.LoginLog{UserId: uint(in.UserId), Status: model.Status_In}). + Where("expire_date > ?", time.Now().Format("2006-01-02 15:04:05")). + Find(&loginLogs) + + for _, t := range loginLogs { + + temp := &account.LoginLog{ + ID: uint64(t.ID), + UserId: uint64(t.UserId), + Ip: t.Ip, + //Token: t.Token, + Status: uint64(t.Status), + ExpireDate: t.ExpireDate, + LastDate: t.LastDate, + LogoutDate: t.LogoutDate, + } + + logs = append(logs, temp) + } + + return logs + +} + +// IsSampleAddress 获取用户当前的在线记录 +func IsSampleAddress(nowIp string, userId uint64) (bool, error) { + var loginLog *model.LoginLog + + if config.AppConfig.System.Mode == "dev" { + return true, nil + } + + //失效时间大于当前时间 + if err := model.DB.Model(&model.LoginLog{}). + Where(&model.LoginLog{UserId: uint(userId)}). + Where("status in (?)", []uint8{model.Status_In, model.Status_Out}). + Order("id desc"). + First(&loginLog).Error; err != nil { + return false, err + } + + if loginLog.Ip == nowIp { //两个ip一样直接退出 + return true, nil + } + + location, err1 := utils.AliIpAddress(loginLog.Ip) + nowLocation, err2 := utils.AliIpAddress(nowIp) + + fmt.Println("查询ip地址:", err1, err2, location, nowIp, nowLocation) + if err1 == nil && err2 == nil { + if location == nowLocation { + return true, nil + } else { + return false, nil + } + } + + return true, nil +} + +// GetIpAddressByIp 根据ip获取时间 +func GetIpAddressByIp(nowIp string) string { + + tempKey := redis_key.GetIpAddressKey(nowIp) + cache.RedisClient.Get(redis_key.GetIpAddressKey(nowIp)) + val, _ := cache.RedisClient.Get(tempKey).Result() + + if val != "" { + return val + } + + /* + if err == redis.Nil { + fmt.Println("键 'mykey' 不存在") + } else if err != nil { + panic(err) + } else { + fmt.Println("键 'mykey' 的值为:", val) + } + */ + + location, _ := utils.AliIpAddress(nowIp) + + cache.RedisClient.Set(tempKey, location, 3*24*time.Hour) + + return location +} + +func IsPublicIp(ipString string) bool { + + ip := net.ParseIP(ipString) + if ip == nil { + fmt.Println("Invalid IP") + return false + } + + if ip.IsLoopback() { + fmt.Println("Loopback IP") + return false + } + + if ip.To4() != nil { + if ip[0] == 10 { + fmt.Println("Private network IP") + return false + } + + if ip[0] == 172 && (ip[1]&0xf0) == 16 { + return false + } + + if ip[0] == 192 && ip[1] == 168 { + return false + } + } + + return true + +} + +func GetAddressByID(domain string, userId uint64) string { + var loginLog *model.LoginLog + + //失效时间大于当前时间 + if err := model.DB.Model(&model.LoginLog{}). + Where(&model.LoginLog{UserId: uint(userId), Domain: &domain}). + Where("status in (?)", []uint8{model.Status_In, model.Status_Out}). + Order("id desc"). + First(&loginLog).Error; err != nil { + return "" + } + + return loginLog.Address +} diff --git a/pkg/application/order_test.go b/pkg/application/order_test.go new file mode 100644 index 0000000..f5d0fc8 --- /dev/null +++ b/pkg/application/order_test.go @@ -0,0 +1,36 @@ +package application + +import ( + "github.com/fonchain_enterprise/micro-account/pkg/cache" + "testing" +) + +func TestGetIpAddressByIp2(t *testing.T) { + config := cache.RedisConfig{ + RedisDB: "2", + RedisAddr: "127.0.0.1:6379", + RedisPw: "", + RedisDbName: "2", + } + + cache.LoadRedis(config) + + type args struct { + nowIp string + } + tests := []struct { + name string + args args + want string + }{ + {args: args{nowIp: "58.210.42.242"}}, + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := GetIpAddressByIp(tt.args.nowIp); got != tt.want { + t.Errorf("GetIpAddressByIp() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/pkg/application/token.go b/pkg/application/token.go new file mode 100644 index 0000000..1995e7c --- /dev/null +++ b/pkg/application/token.go @@ -0,0 +1,58 @@ +package application + +import ( + "errors" + "github.com/fonchain_enterprise/micro-account/pkg/m" + "github.com/fonchain_enterprise/micro-account/pkg/model" + "gorm.io/gorm" + "time" +) + +// AddRefreshToken 签发refreshtoken记录 +func AddRefreshToken(token string) error { + + var count int64 + model.DB.Model(&model.RefreshToken{}).Where(&model.RefreshToken{RefreshToken: token}).Count(&count) + + if count > 0 { + return nil + } + + //记录登录信息 + refreshToken := &model.RefreshToken{ + RefreshToken: token, + UseNum: 0, + LastUseDate: time.Now().Format("2006-01-02 15:04:05"), + IsForbid: model.IsForBid_No, + ExpireDate: time.Now().Add(time.Duration(m.RefreshTokenTime) * time.Hour).Format("2006-01-02 15:04:05"), //过期时间 + } + + return model.DB.Create(&refreshToken).Error +} + +func CheckRefreshToke(token string) error { + var refrshTokenObj *model.RefreshToken + + if err := model.DB.Model(&model.RefreshToken{}).Where(&model.RefreshToken{RefreshToken: token}).First(&refrshTokenObj).Error; err != nil { + if err == gorm.ErrRecordNotFound { + return errors.New("this refresh_token is not exist") + } + return err + } + + if refrshTokenObj.IsForbid == model.IsForBid_Yes { + return errors.New("this refresh_token is forbidden") + } + + if refrshTokenObj.UseNum > 0 { + return errors.New("this refresh_token is used") + } + + //记录登录信息 + updateLog := &model.RefreshToken{ + UseNum: refrshTokenObj.UseNum + 1, + LastUseDate: time.Now().Format("2006-01-02 15:04:05"), + } + + return model.DB.Model(&model.RefreshToken{}).Where(&model.RefreshToken{ID: refrshTokenObj.ID}).Updates(&updateLog).Error +} diff --git a/pkg/application/user.go b/pkg/application/user.go new file mode 100644 index 0000000..50e163d --- /dev/null +++ b/pkg/application/user.go @@ -0,0 +1,145 @@ +package application + +import ( + "fmt" + "github.com/fonchain_enterprise/micro-account/api/account" + "github.com/fonchain_enterprise/micro-account/pkg/m" + "github.com/fonchain_enterprise/micro-account/pkg/model" +) + +var ( + authDb = "fontree-auth_v1" +) + +func List(in *account.ListV2Request, limit int, offset int) ([]*model.User, int64) { + + var list []*model.User + var count int64 + + fmt.Println("进入查看测试测试车") + //获取自己领导的部门 + + //Select("a.*,a.id as tid"). + selectStr := + ` + ANY_VALUE(a.id) as id, + ANY_VALUE(a.created_at) as created_at, + ANY_VALUE(a.updated_at) as updated_at, + ANY_VALUE(a.deleted_at) as deleted_at, + ANY_VALUE(a.account) as account, + ANY_VALUE(a.mnemonic_words ) as mnemonic_words, + ANY_VALUE(a.tel_num) as tel_num, + ANY_VALUE(a.password_digest) as password_digest, + ANY_VALUE(a.nickname) as nickname, + ANY_VALUE(a.status) as status, + ANY_VALUE(a.avatar) as avatar, + ANY_VALUE(a.real_name_id) as real_name_id, + ANY_VALUE(a.auth) as auth, + ANY_VALUE(a.theme_id) as theme_id, + ANY_VALUE(a.domain) as domain, + ANY_VALUE(a.public_key) as public_key, + ANY_VALUE(a.is_need_change) as is_need_change, + ANY_VALUE(a.enter_date) as enter_date, + ANY_VALUE(a.extend) as extend, + ANY_VALUE(a.title) as title, + ANY_VALUE(a.job_num) as job_num, + ANY_VALUE(a.birth_date) as birth_date, + ANY_VALUE(a.sex) as sex, + ANY_VALUE(a.last_login_date) as last_login_date, + ANY_VALUE(a.ip) as ip, + ANY_VALUE(a.invitation_code) as invitation_code, + ANY_VALUE(a.left_date) as left_date, + ANY_VALUE(a.remark) as remark, + ANY_VALUE(a.recent_img) as recent_img, + ANY_VALUE(a.english_name) as english_name, + ANY_VALUE(a.mail_account) as mail_account, + ANY_VALUE(a.ic_num) as ic_num, + ANY_VALUE(a.train) as train, + ANY_VALUE(a.certificate) as certificate, + ANY_VALUE(a.operator) as operator +` + + searchObj := model.DB. + Table("user as a"). + Select(selectStr). + Joins("LEFT JOIN `"+authDb+"`.hierarchy_dep_position_user b ON b.user_id = a.id and b.deleted_at = 0"). + Joins("LEFT JOIN `"+authDb+"`.hierarchy_position c ON c.id = b.position_id and c.deleted_at = 0"). + Joins("LEFT JOIN `"+authDb+"`.hierarchy_hierarchy d ON d.id = b.department_id and d.deleted_at = 0"). + Where("a.domain = ?", in.Domain). + Where("a.deleted_at = 0"). + Order("a.id desc") + + if in.NickName != "" { + searchObj = searchObj.Where("a.nickname like ?", "%"+in.NickName+"%") + } + + if in.TelNum != "" { + searchObj = searchObj.Where("a.tel_num = ?", in.TelNum) + } + + if in.Status != "" { + searchObj = searchObj.Where("a.status = ?", in.Status) + } + + if in.PositionName != "" { + searchObj = searchObj.Where("c.name like ?", "%"+in.PositionName+"%") + } + + if in.PositionId != 0 { + searchObj = searchObj.Where("b.position_id = ?", in.PositionId) + } + + if in.DepartmentId != 0 { + searchObj = searchObj.Where("b.department_id = ?", in.DepartmentId) + } + if len(in.DepartmentIds) != 0 { + searchObj = searchObj.Where("b.department_id in (?)", in.DepartmentIds) + } + + if in.DepartmentName != "" { + searchObj = searchObj.Where("d.name like ?", "%"+in.DepartmentName+"%") + } + + if len(in.DepartmentNames) > 0 && len(in.DepartmentNames) <= 10 { + + nameQueries := model.DB + for _, k := range in.DepartmentNames { + nameQueries = nameQueries.Or("d.name like ?", "%"+k+"%") + } + + searchObj = searchObj.Where(nameQueries) + } + + if in.JobNum != "" { + searchObj = searchObj.Where("a.job_num = ?", in.JobNum) + //searchObj = searchObj.Where(model.User{JobNum: in.JobNum}) + } + + if in.MailAccount != "" { + searchObj = searchObj.Where("a.mail_account = ?", in.MailAccount) + //searchObj = searchObj.Where(model.User{JobNum: in.JobNum}) + } + + if in.StartEnterDate != "" { + searchObj = searchObj.Where("a.enter_date >= ?", in.StartEnterDate) + //searchObj = searchObj.Where(model.User{JobNum: in.JobNum}) + } + + if in.EndEnterDate != "" { + searchObj = searchObj.Where("a.enter_date <= ?", in.EndEnterDate) + } + + searchObj = searchObj.Where("a.deleted_at = 0") + searchObj.Select("COUNT(DISTINCT a.id)").Scan(&count) + searchObj.Select(selectStr).Group("a.id").Limit(limit).Offset(offset).Find(&list) + + fmt.Println("进入查看测试测试车结束") + + return list, count +} + +func SynNickName(in *account.UpdateRequest) { + if in.Domain == m.DefaultDomain { + model.DB.Table(authDb+".hierarchy_department_user").Where("user_id = ?", in.ID).Update("user_name", in.NickName) + } +} diff --git a/pkg/application/wechat.go b/pkg/application/wechat.go new file mode 100644 index 0000000..b584a8a --- /dev/null +++ b/pkg/application/wechat.go @@ -0,0 +1 @@ +package application diff --git a/pkg/blockchain/common.go b/pkg/blockchain/common.go new file mode 100644 index 0000000..de20b64 --- /dev/null +++ b/pkg/blockchain/common.go @@ -0,0 +1,25 @@ +package blockchain + +import ( + "fmt" + "github.com/fonchain_enterprise/utils/chain" +) + +//ChainClient 区块链单例 +var ( + ChainClient chain.BlockChain +) + +type ChainConfig struct { + IP string + AdminMnemonicWords string + AdminContractAccount string + ContractName string + ContractType string +} + +func LoadEnv(chainConfig ChainConfig) { + //从本地读取环境变量 + fmt.Println("1----", chainConfig) + ChainClient = chain.NewXuperChain(chainConfig.IP, chainConfig.AdminMnemonicWords, chainConfig.ContractName, chainConfig.ContractType, chainConfig.AdminContractAccount) +} diff --git a/pkg/cache/common.go b/pkg/cache/common.go new file mode 100644 index 0000000..b439375 --- /dev/null +++ b/pkg/cache/common.go @@ -0,0 +1,92 @@ +package cache + +import ( + "errors" + "fmt" + "github.com/fonchain_enterprise/utils/zap_log" + "strconv" + "time" + + "dubbo.apache.org/dubbo-go/v3/common/logger" + "github.com/go-redis/redis" +) + +// RedisClient Redis缓存客户端单例 +var ( + RedisClient *redis.Client +) +var deleteScript = ` +if redis.call("get",KEYS[1]) == ARGV[1] then + return redis.call("del",KEYS[1]) +else + return 0 +end +` + +type RedisConfig struct { + RedisDB string + RedisAddr string + RedisPw string + RedisDbName string +} + +//LoadRedis 在中间件中初始化redis链接 +func LoadRedis(configEnv RedisConfig) { + db, _ := strconv.ParseUint(configEnv.RedisDbName, 10, 64) + client := redis.NewClient(&redis.Options{ + Addr: configEnv.RedisAddr, + Password: configEnv.RedisPw, + DB: int(db), + }) + _, err := client.Ping().Result() + if err != nil { + logger.Info(err) + panic(err) + } + RedisClient = client +} + +//LockConcurrency 锁死并发 +func LockConcurrency(key string, value string, ms time.Duration) (bool, error) { + fmt.Println(ms) + setNx := RedisClient.SetNX(key, value, ms) + + result, err := setNx.Result() + + if err != nil { + zap_log.Error(fmt.Sprintf("锁死加解密的时候,redis 失效,err%s,%v", key, err)) + //panic(err) + return false, err + } + + if result { + zap_log.Info(fmt.Sprintf("新增key存在,设置成功%s", key)) + } else { + zap_log.Info(fmt.Sprintf("新增key已存在,设置失败%s", key)) + } + + zap_log.Info(fmt.Sprintf("日志%v%v%s", result, err, key)) + + if setNx.Val() == false { + return false, errors.New("已经被人锁定") + } + + return true, nil + +} + +func Release(key, value string) error { + result, err := RedisClient.Eval(deleteScript, []string{key}, value).Result() + if err != nil { + return err + } + + // 判断Lua脚本执行的结果 + if result == int64(1) { + fmt.Println("Lock released.") + return nil + } else { + fmt.Println("Failed to release lock, or lock was not held by this client.") + return errors.New("释放失败也可能是超时自动解锁了,请您刷新") + } +} diff --git a/pkg/cache/common_test.go b/pkg/cache/common_test.go new file mode 100644 index 0000000..a9589c5 --- /dev/null +++ b/pkg/cache/common_test.go @@ -0,0 +1,80 @@ +package cache + +import ( + "fmt" + "testing" + "time" +) + +func TestLockConcurrency(t *testing.T) { + config := RedisConfig{ + RedisDB: "2", + RedisAddr: "127.0.0.1:6379", + RedisPw: "", + RedisDbName: "2", + } + + LoadRedis(config) + + type args struct { + key string + value string + ms time.Duration + } + tests := []struct { + name string + args args + want bool + }{ + // TODO: Add test cases. + {args: args{key: "a:b:c", value: "1", ms: 10000 * time.Millisecond}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got, _ := LockConcurrency(tt.args.key, tt.args.value, tt.args.ms); got != tt.want { + t.Errorf("LockConcurrency() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestRelease(t *testing.T) { + + config := RedisConfig{ + RedisDB: "2", + RedisAddr: "127.0.0.1:6379", + RedisPw: "", + RedisDbName: "2", + } + + LoadRedis(config) + + key := "abe" + concurrency, err := LockConcurrency(key, "1", 10*time.Second) + fmt.Println(concurrency, err) + if err != nil { + return + } + + err = Release(key, "2") + fmt.Println(err) + + type args struct { + key string + value string + } + tests := []struct { + name string + args args + wantErr bool + }{ + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := Release(tt.args.key, tt.args.value); (err != nil) != tt.wantErr { + t.Errorf("Release() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/pkg/common/dingding/ding.go b/pkg/common/dingding/ding.go new file mode 100644 index 0000000..8b7ec0a --- /dev/null +++ b/pkg/common/dingding/ding.go @@ -0,0 +1,89 @@ +package dingding + +import ( + "encoding/json" + "fmt" + "net/http" + "strings" +) + +// DingClient +var ( +//DingClient *DingConfig +) + +type DingConfig struct { + AccessToken string + Url string +} + +type DingMsg struct { + project string + AppMode string + Url string + Info string + Err error +} +type DingText struct { + Content string `json:"content"` +} + +type DingMsgInfo struct { + Msgtype string `json:"msgtype"` + Text DingText `json:"text"` +} +var dingClient *DingConfig + +func LoadAccessToken(accessToken string) { + dingClient = &DingConfig{ + AccessToken: accessToken, + Url: "https://oapi.dingtalk.com/robot/send", + } +} + +func (d *DingConfig) SendMsg(text string) { + + url := d.Url + "?access_token=" + d.AccessToken + + dingMsgInfo := DingMsgInfo{ + Msgtype: "text", + Text: DingText{ + Content: text, + }, + } + + dingMsgInfoByte, _ := json.Marshal(dingMsgInfo) + + res, err := http.Post( + url, + "application/json", + strings.NewReader(string(dingMsgInfoByte))) + if err != nil { + fmt.Println("发送错误:", url, err, string(dingMsgInfoByte)) + } + + defer res.Body.Close() + + return +} + +func Send(info string) { + msg := DingMsg{ + Info: info, + } + + SendInfo(msg) +} + +func SendInfo(msg DingMsg) { + + text := "通知:\n" + msg.Info + + if msg.Err != nil { + text = text + "错误:" + msg.Err.Error() + "/n" + } + + dingClient.SendMsg(text) + + return +} diff --git a/pkg/common/encryption/encryption.go b/pkg/common/encryption/encryption.go new file mode 100644 index 0000000..7cb60ae --- /dev/null +++ b/pkg/common/encryption/encryption.go @@ -0,0 +1,68 @@ +package encryption + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/md5" + "encoding/hex" +) + +var ( + SALT string = "c-1ha$i#nfon901" +) + +func AesKey(id string) []byte { + var aesKey string + + h := md5.New() + h.Write([]byte(id + SALT)) + aesKey = hex.EncodeToString(h.Sum(nil)) + + return []byte(aesKey) +} + +func PKCS7Padding(ciphertext []byte, blockSize int) []byte { + padding := blockSize - len(ciphertext)%blockSize + padtext := bytes.Repeat([]byte{byte(padding)}, padding) + return append(ciphertext, padtext...) +} + +func PKCS7UnPadding(origData []byte) []byte { + length := len(origData) + unpadding := int(origData[length-1]) + return origData[:(length - unpadding)] +} + +//AES加密,CBC +func AesEncrypt(origData []byte, id string) ([]byte, error) { + + key := AesKey(id) + + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + blockSize := block.BlockSize() + origData = PKCS7Padding(origData, blockSize) + blockMode := cipher.NewCBCEncrypter(block, key[:blockSize]) + crypted := make([]byte, len(origData)) + blockMode.CryptBlocks(crypted, origData) + return crypted, nil +} + +//AES解密 +func AesDecrypt(crypted []byte, id string) ([]byte, error) { + key := AesKey(id) + + block, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + blockSize := block.BlockSize() + blockMode := cipher.NewCBCDecrypter(block, key[:blockSize]) + origData := make([]byte, len(crypted)) + blockMode.CryptBlocks(origData, crypted) + origData = PKCS7UnPadding(origData) + return origData, nil +} diff --git a/pkg/common/filter/filter.go b/pkg/common/filter/filter.go new file mode 100644 index 0000000..889075b --- /dev/null +++ b/pkg/common/filter/filter.go @@ -0,0 +1,70 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package filter + +import ( + "context" + "github.com/fonchain_enterprise/micro-account/pkg/e" + perrors "github.com/pkg/errors" + "regexp" + "strconv" +) + +import ( + "dubbo.apache.org/dubbo-go/v3/common/extension" + "dubbo.apache.org/dubbo-go/v3/filter" + "dubbo.apache.org/dubbo-go/v3/protocol" +) + +type validator interface { + Validate() error +} + +func init() { + extension.SetFilter("fonValidateFilter", NewFonValidateFilter) +} + +func NewFonValidateFilter() filter.Filter { + return &FonValidateFilter{} +} + +type FonValidateFilter struct { +} + +func (f *FonValidateFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result { + if len(invocation.Arguments()) > 0 { + if v, ok := invocation.Arguments()[0].(validator); ok { + if err := v.Validate(); err != nil { + errMsg := err.Error() + re3, _ := regexp.Compile(`^invalid(.*): `) + rep := re3.ReplaceAllString(errMsg, "") + if errCode, err := strconv.ParseInt(rep, 10, 64); err == nil { + return &protocol.RPCResult{Err: perrors.Errorf("%v", e.GetMsg(int(errCode)))} + } + + return &protocol.RPCResult{Err: perrors.Errorf("%v", rep)} + } + } + } + + return invoker.Invoke(ctx, invocation) +} + +func (f *FonValidateFilter) OnResponse(ctx context.Context, result protocol.Result, invoker protocol.Invoker, protocol protocol.Invocation) protocol.Result { + return result +} diff --git a/pkg/common/jwt/jwt.go b/pkg/common/jwt/jwt.go new file mode 100644 index 0000000..39f6eb1 --- /dev/null +++ b/pkg/common/jwt/jwt.go @@ -0,0 +1,100 @@ +package jwt + +import ( + "github.com/fonchain_enterprise/micro-account/pkg/m" + "math/rand" + "time" + + "github.com/dgrijalva/jwt-go" +) + +type Claims struct { + ID uint `json:"id"` + Account string `json:"account"` + Domain string `json:"domain"` + NickName string `json:"nickName"` + Phone string `json:"phone"` + jwt.StandardClaims +} + +type RefreshClaims struct { + ID uint `json:"id"` + RId int `json:"rid"` + jwt.StandardClaims +} + +func GenerateTotalToken(id uint, domain string, hour int, phone string, jwtSecret []byte) (string, string, error) { + token, err := GenerateToken(id, domain, hour, phone, jwtSecret) + if err != nil { + return "", "", err + } + refreshToken, err := GenerateRefreshToken(id, domain, m.RefreshTokenTime, jwtSecret) + if err != nil { + return "", "", err + } + + return token, refreshToken, err +} + +// GenerateToken 签发用户Token +func GenerateToken(id uint, domain string, hour int, phone string, jwtSecret []byte) (string, error) { + nowTime := time.Now() + expireTime := nowTime.Add(time.Duration(hour) * time.Hour) + claims := Claims{ + ID: id, + //Account: account, + Domain: domain, + //NickName: nickName, + Phone: phone, + StandardClaims: jwt.StandardClaims{ + ExpiresAt: expireTime.Unix(), + Issuer: "mall", + }, + } + tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + token, err := tokenClaims.SignedString(jwtSecret) + return token, err +} + +// ParseToken 验证用户token +func ParseToken(token string, jwtSecret []byte) (*Claims, error) { + tokenClaims, err := jwt.ParseWithClaims(token, &Claims{}, func(token *jwt.Token) (interface{}, error) { + return jwtSecret, nil + }) + if tokenClaims != nil { + if claims, ok := tokenClaims.Claims.(*Claims); ok && tokenClaims.Valid { + return claims, nil + } + } + return nil, err +} + +// GenerateRefreshToken 签发用户Token +func GenerateRefreshToken(id uint, domain string, hour int, jwtSecret []byte) (string, error) { + nowTime := time.Now() + expireTime := nowTime.Add(time.Duration(hour) * time.Hour) + claims := RefreshClaims{ + ID: id, + RId: rand.Intn(999), + StandardClaims: jwt.StandardClaims{ + ExpiresAt: expireTime.Unix(), + Issuer: domain, + }, + } + tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) + token, err := tokenClaims.SignedString(jwtSecret) + return token, err +} + +// ParseRefreshToken 验证用户token +func ParseRefreshToken(token string, jwtSecret []byte) (*RefreshClaims, error) { + tokenClaims, err := jwt.ParseWithClaims(token, &RefreshClaims{}, func(token *jwt.Token) (interface{}, error) { + return jwtSecret, nil + }) + if tokenClaims != nil { + if claims, ok := tokenClaims.Claims.(*RefreshClaims); ok && tokenClaims.Valid { + return claims, nil + } + } + return nil, err +} diff --git a/pkg/common/jwt/jwt_test.go b/pkg/common/jwt/jwt_test.go new file mode 100644 index 0000000..03b226c --- /dev/null +++ b/pkg/common/jwt/jwt_test.go @@ -0,0 +1,38 @@ +package jwt + +import ( + "fmt" + "github.com/fonchain_enterprise/micro-account/pkg/m" + "testing" + "time" +) + +func TestParseToken(t *testing.T) { + + str := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MjMzLCJhY2NvdW50IjoiVU1jektDWDVTRHpnZm43eDZkNTFLMTYxaThZNlhjdWVNIiwiZG9tYWluIjoiYXJ0aXN0aW5mbyIsIm5pY2tOYW1lIjoiMTM5NjIzMTA3NjUiLCJwaG9uZSI6IjEzOTYyMzEwNzY1IiwiZXhwIjoxNjg0NzYyMjY2LCJpc3MiOiJtYWxsIn0.8zG3OA9uRJnzxYorQ2_cK6FhQuMlsi7WF8zkIic1ggM" + str = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6NDAsImFjY291bnQiOiJUZW5hR2U4b0w1S3FzYkpnbUxGYUQxenN5WFU2azNMZ3MiLCJkb21haW4iOiJmb250cmVlIiwibmlja05hbWUiOiLotoXnuqfnrqHnkIYiLCJwaG9uZSI6IjEyMjMzNDQ1NTY2IiwiZXhwIjoxNjk3MTM3NTc0LCJpc3MiOiJtYWxsIn0.rHt4rYi8lgOhaHDscHjRsYBbSdcaz-uCXJyXroih62I" + + claims, err := ParseToken(str, m.JWTSecret) + fmt.Println(err) + fmt.Println(claims) +} + +func TestParseToken2(t *testing.T) { + t1 := time.Now() + fmt.Print(GenerateToken(70, "", "fontree", "耿阳"+ + "", -m.TokenTime, "18205052627", m.JWTSecret)) + + fmt.Println(time.Now().Sub(t1)) + +} + +func TestRefreshToken(t *testing.T) { + str1, err := GenerateRefreshToken(70, "fontree", 20, m.JWTSecret) + fmt.Println(str1, err) + + //str := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MjMzLCJhY2NvdW50IjoiVU1jektDWDVTRHpnZm43eDZkNTFLMTYxaThZNlhjdWVNIiwiZG9tYWluIjoiYXJ0aXN0aW5mbyIsIm5pY2tOYW1lIjoiMTM5NjIzMTA3NjUiLCJwaG9uZSI6IjEzOTYyMzEwNzY1IiwiZXhwIjoxNjg0NzYyMjY2LCJpc3MiOiJtYWxsIn0.8zG3OA9uRJnzxYorQ2_cK6FhQuMlsi7WF8zkIic1ggM" + claims, err := ParseRefreshToken(str1, m.JWTSecret) + fmt.Println(err) + fmt.Println(claims) + +} diff --git a/pkg/common/log/gorm.go b/pkg/common/log/gorm.go new file mode 100644 index 0000000..e858cbe --- /dev/null +++ b/pkg/common/log/gorm.go @@ -0,0 +1,44 @@ +package log + +import ( + "context" + "fmt" + "go.uber.org/zap" + "gorm.io/gorm/logger" + "time" +) + +func NewGormLogger() logger.Interface { + return &zapLogger{zapFakeLog.GetZapLogger()} +} + +type zapLogger struct { + logger *zap.Logger +} + +func (l *zapLogger) LogMode(level logger.LogLevel) logger.Interface { + newLogger := *l + return &newLogger +} + +func (l *zapLogger) Info(ctx context.Context, s string, args ...interface{}) { + l.logger.Info(fmt.Sprintf(s, args...)) +} + +func (l *zapLogger) Warn(ctx context.Context, s string, args ...interface{}) { + l.logger.Warn(fmt.Sprintf(s, args...)) +} + +func (l *zapLogger) Error(ctx context.Context, s string, args ...interface{}) { + l.logger.Error(fmt.Sprintf(s, args...)) +} + +func (l *zapLogger) Trace(ctx context.Context, begin time.Time, fc func() (string, int64), err error) { + if err != nil { + l.Error(ctx, "[%.3fms] [error] %v", time.Since(begin).Seconds()*1000, err) + return + } + + sql, rows := fc() + l.Info(ctx, "[%.3fms] [rows:%v] %s", time.Since(begin).Seconds()*1000, rows, sql) +} diff --git a/pkg/common/log/init.go b/pkg/common/log/init.go new file mode 100644 index 0000000..8948f3d --- /dev/null +++ b/pkg/common/log/init.go @@ -0,0 +1,35 @@ +package log + +import ( + "fmt" + "gopkg.in/yaml.v2" + "io/ioutil" + "os" +) + +func init() { + + bytes, err := getConfig() + var info *DuInfo + + if err = yaml.Unmarshal(bytes, &info); err != nil { + panic(err) + } + + InitLogger(info.Config) + return +} + +func getConfig() ([]byte, error) { + configFilePath := "../conf/log.yaml" + _, err := os.Stat(configFilePath) + if os.IsNotExist(err) { + fmt.Println("-----------不存在") + } else { + + fmt.Println("------------存在") + + } + + return ioutil.ReadFile(configFilePath) +} diff --git a/pkg/common/log/log.go b/pkg/common/log/log.go new file mode 100644 index 0000000..37a3b36 --- /dev/null +++ b/pkg/common/log/log.go @@ -0,0 +1,141 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package log + +import ( + "fmt" + "github.com/natefinch/lumberjack" + + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +var zapFakeLog *ZapLoggerFake + +type DuInfo struct { + Config *Config `yaml:"logger"` +} + +type Config struct { + LumberjackConfig *lumberjack.Logger `yaml:"lumberjack-config"` + ZapConfig *zap.Config `yaml:"zap-config"` + CallerSkip int +} + +type ZapLoggerFake struct { + logger *zap.Logger +} + +// InitLogger use for init logger by @conf +func InitLogger(conf *Config) { + var ( + _ *zap.Logger + config = &Config{} + ) + if conf == nil || conf.ZapConfig == nil { + zapLoggerEncoderConfig := zapcore.EncoderConfig{ + TimeKey: "time", + LevelKey: "level", + NameKey: "logger", + CallerKey: "caller", + MessageKey: "message", + StacktraceKey: "stacktrace", + EncodeLevel: zapcore.CapitalColorLevelEncoder, + EncodeTime: zapcore.ISO8601TimeEncoder, + EncodeDuration: zapcore.SecondsDurationEncoder, + EncodeCaller: zapcore.ShortCallerEncoder, + } + config.ZapConfig = &zap.Config{ + Level: zap.NewAtomicLevelAt(zap.InfoLevel), + Development: false, + Encoding: "console", + EncoderConfig: zapLoggerEncoderConfig, + OutputPaths: []string{"stderr"}, + ErrorOutputPaths: []string{"stderr"}, + } + } else { + config.ZapConfig = conf.ZapConfig + } + + if conf != nil { + config.CallerSkip = conf.CallerSkip + } + + if config.CallerSkip == 0 { //因为包装了两层,所以设置3次 + config.CallerSkip = 3 + } + + var zapLogger *zap.Logger + if conf == nil || conf.LumberjackConfig == nil { + zapLogger, _ = config.ZapConfig.Build(zap.AddCaller(), zap.AddCallerSkip(config.CallerSkip)) + } else { + config.LumberjackConfig = conf.LumberjackConfig + zapLogger = initZapLoggerWithSyncer(config) + } + + zapFakeLog = &ZapLoggerFake{logger: zapLogger} + + return +} + +func GetFakeLogger() *ZapLoggerFake { + return zapFakeLog +} + +func GetZapLog() *zap.Logger { + return zapFakeLog.logger +} + +// initZapLoggerWithSyncer init zap Logger with syncer +func initZapLoggerWithSyncer(conf *Config) *zap.Logger { + + var fields []zapcore.Field + + if len(conf.ZapConfig.InitialFields) > 0 { + for key, value := range conf.ZapConfig.InitialFields { + fields = append(fields, zap.Any(key, value)) + } + } + fmt.Println("配置lumber", conf.LumberjackConfig) + + core := zapcore.NewCore( + conf.getEncoder(), + conf.getLogWriter(), + zap.NewAtomicLevelAt(conf.ZapConfig.Level.Level()), + ) + if len(fields) >= 1 { + core = core.With(fields) + } + + return zap.New(core, zap.AddCaller(), zap.AddCallerSkip(conf.CallerSkip)) +} + +// getEncoder get encoder by config, zapcore support json and console encoder +func (c *Config) getEncoder() zapcore.Encoder { + if c.ZapConfig.Encoding == "json" { + return zapcore.NewJSONEncoder(c.ZapConfig.EncoderConfig) + } else if c.ZapConfig.Encoding == "console" { + return zapcore.NewConsoleEncoder(c.ZapConfig.EncoderConfig) + } + return nil +} + +// getLogWriter get Lumberjack writer by LumberjackConfig +func (c *Config) getLogWriter() zapcore.WriteSyncer { + return zapcore.AddSync(c.LumberjackConfig) +} diff --git a/pkg/common/log/logging.go b/pkg/common/log/logging.go new file mode 100644 index 0000000..f86bdfd --- /dev/null +++ b/pkg/common/log/logging.go @@ -0,0 +1,148 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package log + +import ( + "fmt" + "go.uber.org/zap" + "go.uber.org/zap/zapcore" +) + +func (s *ZapLoggerFake) GetZapLogger() *zap.Logger { + return s.logger +} + +// Debug uses fmt.Sprint to construct and log a message. +func (s *ZapLoggerFake) Debug(args ...interface{}) { + s.logAndZap(zap.DebugLevel, "", args) +} + +// Info uses fmt.Sprint to construct and log a message. +func (s *ZapLoggerFake) Info(args ...interface{}) { + s.logAndZap(zap.InfoLevel, "", args) +} + +// Warn uses fmt.Sprint to construct and log a message. +func (s *ZapLoggerFake) Warn(args ...interface{}) { + s.logAndZap(zap.WarnLevel, "", args) +} + +// Error uses fmt.Sprint to construct and log a message. +func (s *ZapLoggerFake) Error(args ...interface{}) { + s.logAndZap(zap.ErrorLevel, "", args) +} + +// Fatal uses fmt.Sprint to construct and log a message, then calls os.Exit. +func (s *ZapLoggerFake) Fatal(args ...interface{}) { + s.logAndZap(zap.FatalLevel, "", args) +} + +// Debugf uses fmt.Sprintf to log a templated message. +func (s *ZapLoggerFake) Debugf(template string, args ...interface{}) { + s.log(zap.DebugLevel, template, args, nil) +} + +// Infof uses fmt.Sprintf to log a templated message. +func (s *ZapLoggerFake) Infof(template string, args ...interface{}) { + s.log(zap.InfoLevel, template, args, nil) +} + +// Warnf uses fmt.Sprintf to log a templated message. +func (s *ZapLoggerFake) Warnf(template string, args ...interface{}) { + s.log(zap.WarnLevel, template, args, nil) +} + +// Errorf uses fmt.Sprintf to log a templated message. +func (s *ZapLoggerFake) Errorf(template string, args ...interface{}) { + s.log(zap.ErrorLevel, template, args, nil) +} + +// Fatalf uses fmt.Sprintf to log a templated message, then calls os.Exit. +func (s *ZapLoggerFake) Fatalf(template string, args ...interface{}) { + s.log(zap.FatalLevel, template, args, nil) +} + +func (s *ZapLoggerFake) logAndZap(lvl zapcore.Level, template string, fmtArgs []interface{}) { + s.realLogAndZap(lvl, template, fmtArgs) +} + +func (s *ZapLoggerFake) realLogAndZap(lvl zapcore.Level, template string, fmtArgs []interface{}) { + + if lvl < zap.DPanicLevel && !s.logger.Core().Enabled(lvl) { + return + } + args, context := s.sweetenFields(fmtArgs) + msg := getMessage(template, args) + if ce := s.logger.Check(lvl, msg); ce != nil { + ce.Write(context...) + } +} + +func (s *ZapLoggerFake) log(lvl zapcore.Level, template string, fmtArgs []interface{}, context []zap.Field) { + // If logging at this level is completely disabled, skip the overhead of + // string formatting. + if lvl < zap.DPanicLevel && !s.logger.Core().Enabled(lvl) { + return + } + + msg := getMessage(template, fmtArgs) + if ce := s.logger.Check(lvl, msg); ce != nil { + ce.Write(context...) + } +} + +// getMessage format with Sprint, Sprintf, or neither. +func getMessage(template string, fmtArgs []interface{}) string { + if len(fmtArgs) == 0 { + return template + } + + if template != "" { + return fmt.Sprintf(template, fmtArgs...) + } + + if len(fmtArgs) == 1 { + if str, ok := fmtArgs[0].(string); ok { + return str + } + } + return fmt.Sprint(fmtArgs...) +} + +func (s *ZapLoggerFake) sweetenFields(args []interface{}) ([]interface{}, []zap.Field) { + + if len(args) == 0 { + return nil, nil + } + + // Allocate enough space for the worst case; if users pass only structured + // fields, we shouldn't penalize them with extra allocations. + fields := make([]zap.Field, 0, len(args)) + var newArgs []interface{} + + for i := 0; i < len(args); i++ { + // This is a strongly-typed field. Consume it and move on. + if f, ok := args[i].(zap.Field); ok { + fields = append(fields, f) + } else { + newArgs = append(newArgs, args[i]) + } + } + + return newArgs, fields +} diff --git a/pkg/common/page/page.go b/pkg/common/page/page.go new file mode 100644 index 0000000..17b8867 --- /dev/null +++ b/pkg/common/page/page.go @@ -0,0 +1,10 @@ +package page + +func GetOffset(page uint64, pageSize uint64) int { + if page <= 0 { + return 0 + } + + return int((page - 1) * pageSize) +} + diff --git a/pkg/common/redis_key/redis_key.go b/pkg/common/redis_key/redis_key.go new file mode 100644 index 0000000..e8f9f3e --- /dev/null +++ b/pkg/common/redis_key/redis_key.go @@ -0,0 +1,94 @@ +package redis_key + +import ( + "fmt" + "github.com/alibaba/sentinel-golang/util" + "github.com/fonchain_enterprise/micro-account/pkg/common/utils" + "time" +) + +const ( + mobile = "mobile:" + token = "token:" +) + +func UserDailyGetCoinKey(userId uint32) string { + return fmt.Sprintf("coin:micro:user::id:%d:daily:%s", userId, time.Now().Format(util.DateFormat)) +} + +func UserRegisterGetCoinKey(userId uint32) string { + return fmt.Sprintf("coin:micro:user::id:%d:register", userId) +} + +func UserCoinLock(domain string, key uint32) string { + return fmt.Sprintf("%s:lock:user:%d", domain, key) +} + +func GetAccountKey(domain, key string) string { + return domain + ":" + mobile + key +} + +func VerityCode(domain, key string) string { + return domain + ":code:time:" + mobile + key +} + +func BlackListKey(domain string) string { + return domain + ":blackList:" + mobile +} + +func GetOnlyAccountKey(domain, key string) string { + return domain + ":only:" + mobile + key +} + +func GetTokenInfo(domain, key string) string { + return domain + ":" + token + "info:" + utils.Get16MD5Encode(key) +} + +func GetIpAddressKey(key string) string { + return "ip_address:" + key +} + +func GetTokenLogoutInfo(domain, key string) string { + return domain + ":" + token + "logout_err:" + key +} + +func GetAccountRegisterKey(domain, key string) string { + return domain + ":register:" + mobile + key +} + +func GetAccountKeyCountToday(domain, key string) string { + return domain + ":count:date:" + time.Now().Format("2006-01-02") + ":" + mobile + key +} + +func GetAccountKeyCountTodayHour(domain, telNum, scope string) string { + return domain + ":count:date:" + scope + ":" + time.Now().Format("2006-01-02 15") + ":" + telNum +} + +func MinLimit(domain, telNum, scope string) string { + return domain + ":count:min_limit:" + scope + ":" + telNum +} + +func GetChangeTelKey(domain, key string, id string) string { + return domain + ":changeTel:" + mobile + id + ":" + key +} + +func GetOneMinuteKey(domain, key string, id string) string { + return domain + ":minute:" + mobile + id + ":" + key +} + +func GetNowNewTelById(domain string, id string) string { + return domain + ":now_tel:" + id +} + +func GetBoxAccessToken(key string) string { + return "box:access_token:" + key +} + +func GetWxAccessToken(key string) string { + return "box:access_token:" + key +} + +// GetCheckPasswordRate 限制解密 频率 +func GetCheckPasswordRate(domain, tel string) string { + return domain + ":check:psd:" + mobile + tel +} diff --git a/pkg/common/utils/idnum/idnum.go b/pkg/common/utils/idnum/idnum.go new file mode 100644 index 0000000..d85c05a --- /dev/null +++ b/pkg/common/utils/idnum/idnum.go @@ -0,0 +1,220 @@ +package idnum + +import ( + "errors" + "strconv" + "time" +) + +var weight = [17]int{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2} +var valid_value = [11]byte{'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'} +var valid_province = []string{ + "11", // 北京市 + "12", // 天津市 + "13", // 河北省 + "14", // 山西省 + "15", // 内蒙古自治区 + "21", // 辽宁省 + "22", // 吉林省 + "23", // 黑龙江省 + "31", // 上海市 + "32", // 江苏省 + "33", // 浙江省 + "34", // 安徽省 + "35", // 福建省 + "36", // 山西省 + "37", // 山东省 + "41", // 河南省 + "42", // 湖北省 + "43", // 湖南省 + "44", // 广东省 + "45", // 广西壮族自治区 + "46", // 海南省 + "50", // 重庆市 + "51", // 四川省 + "52", // 贵州省 + "53", // 云南省 + "54", // 西藏自治区 + "61", // 陕西省 + "62", // 甘肃省 + "63", // 青海省 + "64", // 宁夏回族自治区 + "65", // 新疆维吾尔自治区 + "71", // 台湾省 + "81", // 香港特别行政区 + "91", // 澳门特别行政区 +} + +// Check citizen number 18 valid. +func IsValidCitizenNo18(citizenNo18 *[]byte) bool { + nLen := len(*citizenNo18) + if nLen != 18 { + return false + } + + nSum := 0 + for i := 0; i < nLen-1; i++ { + n, _ := strconv.Atoi(string((*citizenNo18)[i])) + nSum += n * weight[i] + } + mod := nSum % 11 + if valid_value[mod] == (*citizenNo18)[17] { + return true + } + + return false +} + +// Convert citizen 15 to 18. +func Citizen15To18(citizenNo15 []byte) []byte { + nLen := len(citizenNo15) + if nLen != 15 { + return nil + } + + citizenNo18 := make([]byte, 0) + citizenNo18 = append(citizenNo18, citizenNo15[:6]...) + citizenNo18 = append(citizenNo18, '1', '9') + citizenNo18 = append(citizenNo18, citizenNo15[6:]...) + + sum := 0 + for i, v := range citizenNo18 { + n, _ := strconv.Atoi(string(v)) + sum += n * weight[i] + } + mod := sum % 11 + citizenNo18 = append(citizenNo18, valid_value[mod]) + + return citizenNo18 +} + +func IsLeapYear(nYear int) bool { + if nYear <= 0 { + return false + } + + if (nYear%4 == 0 && nYear%100 != 0) || nYear%400 == 0 { + return true + } + + return false +} + +// Check birthday's year month day valid. +func CheckBirthdayValid(nYear, nMonth, nDay int) bool { + if nYear < 1900 || nMonth <= 0 || nMonth > 12 || nDay <= 0 || nDay > 31 { + return false + } + + curYear, curMonth, curDay := time.Now().Date() + if nYear == curYear { + if nMonth > int(curMonth) { + return false + } else if nMonth == int(curMonth) && nDay > curDay { + return false + } + } + + if 2 == nMonth { + if IsLeapYear(nYear) && nDay > 29 { + return false + } else if nDay > 28 { + return false + } + } else if 4 == nMonth || 6 == nMonth || 9 == nMonth || 11 == nMonth { + if nDay > 30 { + return false + } + } + + return true +} + +// Check province code valid. +func CheckProvinceValid(citizenNo []byte) bool { + provinceCode := make([]byte, 0) + provinceCode = append(provinceCode, citizenNo[:2]...) + provinceStr := string(provinceCode) + + for i, _ := range valid_province { + if provinceStr == valid_province[i] { + return true + } + } + + return false +} + +// Check citizen number valid. +func IsValidCitizenNo(citizenNo *[]byte) bool { + nLen := len(*citizenNo) + if nLen != 15 && nLen != 18 { + return false + } + + for i, v := range *citizenNo { + n, _ := strconv.Atoi(string(v)) + if n >= 0 && n <= 9 { + continue + } + + if v == 'X' && i == 16 { + continue + } + + return false + } + + if !CheckProvinceValid(*citizenNo) { + return false + } + + if nLen == 15 { + *citizenNo = Citizen15To18(*citizenNo) + if citizenNo == nil { + return false + } + } else if !IsValidCitizenNo18(citizenNo) { + return false + } + + nYear, _ := strconv.Atoi(string((*citizenNo)[6:10])) + nMonth, _ := strconv.Atoi(string((*citizenNo)[10:12])) + nDay, _ := strconv.Atoi(string((*citizenNo)[12:14])) + if !CheckBirthdayValid(nYear, nMonth, nDay) { + return false + } + + return true +} + +// Get information from citizen number. Birthday, gender, province mask. +func GetCitizenNoInfo(citizenNo []byte) (err error, birthday string, isMale bool, addrMask int) { + err = nil + birthday = "" + isMale = false + addrMask = 0 + if !IsValidCitizenNo(&citizenNo) { + err = errors.New("身份号错误,请重新录入") + return + } + + // Birthday information. + nYear, _ := strconv.Atoi(string(citizenNo[6:10])) + nMonth, _ := strconv.Atoi(string(citizenNo[10:12])) + nDay, _ := strconv.Atoi(string(citizenNo[12:14])) + birthday = time.Date(nYear, time.Month(nMonth), nDay, 0, 0, 0, 0, time.Local).Format("2006-01-02") + + // Gender information. + genderMask, _ := strconv.Atoi(string(citizenNo[16])) + if genderMask%2 == 0 { + isMale = false + } else { + isMale = true + } + + // Address code mask. + addrMask, _ = strconv.Atoi(string(citizenNo[:2])) + + return +} diff --git a/pkg/common/utils/idnum/idnum_net.go b/pkg/common/utils/idnum/idnum_net.go new file mode 100644 index 0000000..cb269d3 --- /dev/null +++ b/pkg/common/utils/idnum/idnum_net.go @@ -0,0 +1,172 @@ +package idnum + +import ( + "encoding/json" + "errors" + "fmt" + "github.com/fonchain_enterprise/micro-account/pkg/cache" + "io/ioutil" + "net/http" + "net/url" + "strings" + "time" +) + +var param = map[string]string{ + "grant_type": "client_credentials", + "client_id": "AlbWwhnZINIy1YqWP3agQA42", + "client_secret": "NL2nT4rnGHIcpopBI93a7G85WscluOEH", +} + +type IDCheckRes struct { + ErrorCode int `json:"error_code"` + ErrorMsg string `json:"error_msg"` + LogID int `json:"log_id"` + Timestamp int `json:"timestamp"` + Cached int `json:"cached"` + Result interface{} `json:"result"` +} +type TokenInfo struct { + RefreshToken string `json:"refresh_token"` + ExpiresIn int `json:"expires_in"` + Scope string `json:"scope"` + SessionKey string `json:"session_key"` + AccessToken string `json:"access_token"` + SessionSecret string `json:"session_secret"` +} + +/* +Tru89O1zosjSCIN2uUlEctbE +rLgGU2gwNvEQAo0UooTwArtvqBTaL3Y3 +25346530 +*/ + +func CheckIDNumFromNet(idNum string, name string) error { + var host = "https://aip.baidubce.com/rest/2.0/face/v3/person/idmatch" + accessToken, err := getAccessToken() + fmt.Println("1百度生成token---", accessToken, err) + if err != nil { + return err + } + + uri, err := url.Parse(host) + if err != nil { + fmt.Println(err) + return err + } + query := uri.Query() + query.Set("access_token", accessToken) + uri.RawQuery = query.Encode() + + var params = map[string]string{} + params["id_card_number"] = idNum + params["name"] = name + sendBody, err := json.Marshal(params) + if err != nil { + fmt.Println(err) + return err + } + sendData := string(sendBody) + client := &http.Client{} + request, err := http.NewRequest("POST", uri.String(), strings.NewReader(sendData)) + if err != nil { + fmt.Println(err) + return err + } + request.Header.Set("Content-Type", "application/json") + response, err := client.Do(request) + defer response.Body.Close() + result, err := ioutil.ReadAll(response.Body) + if err != nil { + fmt.Println(err) + return err + } + fmt.Println(string(result)) + var res IDCheckRes + + err = json.Unmarshal(result, &res) + + fmt.Println(string(result)) + if err != nil { + fmt.Println(err) + return err + } + + if res.ErrorCode != 0 { + if res.ErrorCode == 222351 { + return errors.New("不匹配或者身份证不存在") + } + return errors.New("实名认证未通过") + } + + return nil +} + +func getAccessToken() (string, error) { + + var tokenInfo TokenInfo + var err error + key := "baidu:Id:access_token" + param["client_id"] + strCmd := cache.RedisClient.Get(key) + + accessToken := strCmd.Val() + if accessToken != "" { + err := json.Unmarshal([]byte(accessToken), &tokenInfo) + if err != nil { + return "", err + } + return tokenInfo.AccessToken, nil + } + + accessToken, err = getNewAccessToken() + + if err != nil { + return "", err + } + + if merr := cache.RedisClient.Set(key, accessToken, 5*60*1000*time.Millisecond).Err(); merr != nil { + return "", merr + } + + err = json.Unmarshal([]byte(accessToken), &tokenInfo) + + if err != nil { + return "", err + } + + return tokenInfo.AccessToken, nil +} + +func getNewAccessToken() (string, error) { + accessToken := "" + + var host = "https://aip.baidubce.com/oauth/2.0/token" + + uri, err := url.Parse(host) + fmt.Println(uri) + if err != nil { + fmt.Println(err) + return accessToken, err + } + query := uri.Query() + for k, v := range param { + query.Set(k, v) + } + uri.RawQuery = query.Encode() + + response, err := http.Get(uri.String()) + + fmt.Println(response) + if err != nil { + fmt.Println(err) + return accessToken, err + } + result, err := ioutil.ReadAll(response.Body) + if err != nil { + fmt.Println(err) + return accessToken, err + } + fmt.Println(string(result)) + + return string(result), err +} diff --git a/pkg/common/utils/idnum/idnum_test.go b/pkg/common/utils/idnum/idnum_test.go new file mode 100644 index 0000000..54e59b7 --- /dev/null +++ b/pkg/common/utils/idnum/idnum_test.go @@ -0,0 +1,25 @@ +package idnum + +import ( + "fmt" + "testing" +) + +const ( + Status_1 = iota + 1 + Status_2 +) + +func Test_fb_recursion(t *testing.T) { + + citizenNo := []byte("370406199808220116") + err, birthday, isMale, add := GetCitizenNoInfo(citizenNo) + fmt.Println(birthday, isMale, add, err) + + citizenNo = []byte("370406199808220116") + err, birthday, isMale, add = GetCitizenNoInfo(citizenNo) + fmt.Println(birthday, isMale, add, err) + fmt.Println(Status_1) + fmt.Println(Status_2) + +} diff --git a/pkg/common/utils/ip.go b/pkg/common/utils/ip.go new file mode 100644 index 0000000..20a6ffd --- /dev/null +++ b/pkg/common/utils/ip.go @@ -0,0 +1,406 @@ +package utils + +import ( + "encoding/binary" + "encoding/json" + "errors" + "fmt" + "golang.org/x/text/encoding/simplifiedchinese" + "io/ioutil" + "net" + "net/http" + "os" + "path/filepath" + "strconv" + "strings" + "time" +) + +const ( + // DefaultDict 默认字典 + DefaultDict = "./conf/data.dat" + // IndexLen 索引长度 + IndexLen = 7 + // RedirectMode1 国家的类型, 指向另一个指向 + RedirectMode1 = 0x01 + // RedirectMode2 国家的类型, 指向一个指向 + RedirectMode2 = 0x02 +) + +type Result struct { + IP string `json:"ip"` + Location Location `json:"location"` + AdInfo AdInfo `json:"ad_info"` +} + +type ResultV2 struct { + IP string `json:"ip"` + City string `json:"city"` + Country string `json:"country"` +} + +type Location struct { + Lat float64 `json:"lat"` + Lng float64 `json:"lng"` +} + +type AdInfo struct { + Nation string `json:"nation"` + Province string `json:"province"` + City string `json:"city"` + District string `json:"district"` + AdcodE int `json:"adcode"` +} + +type IpResult struct { + Status int `json:"status"` + Message string `json:"message"` + RequestID string `json:"request_id"` + Result Result `json:"result"` +} + +type IpResultV2 struct { + Ret int `json:"ret"` + Msg string `json:"Msg"` + LogId string `json:"log_id"` + Result ResultV2 `json:"data"` +} + +type IPDict struct { + fileData []byte //文件数据 + offset uint32 //当前下标定位 + firstOffset uint32 //第一条IP记录的偏移地址 + lastOffset uint32 //最后一条IP记录的偏移地址 + totalIPNum uint32 //IP记录的总条数(不包含版本信息记录) +} + +type IPLocation struct { + IP string `json:"ip"` + BeginIP string `json:"begin_ip"` + EndIP string `json:"end_ip"` + Country string `json:"country"` + Area string `json:"area"` +} + +func NewIPDict() *IPDict { + return &IPDict{} +} + +func (q *IPDict) Load(fileName string) error { + filePath, err := dictPath(fileName) + if err != nil { + return err + } + dictFile, err := os.OpenFile(filePath, os.O_RDONLY, 0400) + if err != nil { + return err + } + defer dictFile.Close() + q.fileData, err = ioutil.ReadAll(dictFile) + if err != nil { + return err + } + buf := q.readBuf(8) + q.firstOffset = binary.LittleEndian.Uint32(buf[:4]) + q.lastOffset = binary.LittleEndian.Uint32(buf[4:]) + q.totalIPNum = (q.lastOffset - q.firstOffset) / IndexLen + return nil +} + +func (q *IPDict) FindIP(ip string) (*IPLocation, error) { + if false == checkIPv4(ip) { + return nil, errors.New("IP format error") + } + res := IPLocation{IP: ip} + if nil == q.fileData { + err := q.Load(DefaultDict) + if nil != err { + return nil, err + } + } + q.seekOffset(0) + index := q.findIndex(ip) + if index <= 0 { + return nil, errors.New("IP not fount") + } + q.seekOffset(index) + res.BeginIP = long2ip(q.getIPLong4()) //endIPOffset + endIPOffset := q.getRedirectOffset() + q.seekOffset(endIPOffset) + res.EndIP = long2ip(q.getIPLong4()) //endIPOffset + mode := q.readMode() // 标志字节 + var country, area []byte + enc := simplifiedchinese.GBK.NewDecoder() + switch mode { + case RedirectMode1: // 标志字节为1,表示国家和区域信息都被同时重定向 + countryOffset := q.getRedirectOffset() // 重定向地址 + q.seekOffset(countryOffset) + mode2 := q.readMode() // 标志字节 + switch mode2 { + case RedirectMode2: // 标志字节为2,表示国家信息又被重定向 + q.seekOffset(q.getRedirectOffset()) // 重定向地址 + country = q.readString(0) + q.seekOffset(countryOffset + 4) // 重定向地址 + area = q.readArea() + default: // 否则,表示国家信息没有被重定向 + country = q.readString(mode2) + area = q.readArea() + } + case RedirectMode2: // 标志字节为2,表示国家信息被重定向 + q.seekOffset(q.getRedirectOffset()) // 重定向地址 + country = q.readString(0) + q.seekOffset(endIPOffset + 8) + area = q.readArea() + default: + country = q.readString(mode) + area = q.readArea() + } + countryUTF8, _ := enc.String(string(country)) + if strings.Trim(countryUTF8, " ") == "CZ88.NET" { + res.Country = "" + } else { + res.Country = countryUTF8 + } + areaUTF8, _ := enc.String(string(area)) + if strings.Trim(areaUTF8, " ") == "CZ88.NET" { + res.Area = "" + } else { + res.Area = areaUTF8 + } + return &res, nil +} + +func (q *IPDict) findIndex(ip string) uint32 { + if false == checkIPv4(ip) { + return 0 + } + if nil == q.fileData { + err := q.Load(DefaultDict) + if nil != err { + return 0 + } + } + uIP := ip2long(ip) // 将输入的IP地址转化为可比较的IP地址 + min := uint32(0) // 搜索的下边界 + max := q.totalIPNum // 搜索的上边界 + findIndex := q.lastOffset // 如果没有找到就返回最后一条IP记录(IPDict.Dat的版本信息) + for min <= max { + // 当上边界小于下边界时,查找失败 + mid := (min + max) / 2 // 计算近似中间记录 + q.seekOffset(q.firstOffset + mid*IndexLen) + cBeginIP := q.getIPLong4() // 获取中间记录的开始IP地址 + if uIP < cBeginIP { // 用户的IP小于中间记录的开始IP地址时 + max = mid - 1 // 将搜索的上边界修改为中间记录减一 + } else { + q.seekOffset(q.getRedirectOffset()) + cEndIP := q.getIPLong4() // 获取中间记录的开始IP地址 + if uIP > cEndIP { // 用户的IP大于中间记录的结束IP地址时 + min = mid + 1 // 将搜索的下边界修改为中间记录加一 + } else { + // 用户的IP在中间记录的IP范围内时 + findIndex = q.firstOffset + mid*IndexLen + break // 则表示找到结果,退出循环 + } + } + } + return findIndex +} + +//模拟文件读取Seek +func (q *IPDict) seekOffset(offset uint32) { + q.offset = offset +} + +//模拟文件读取Read +func (q *IPDict) readBuf(length uint32) []byte { + q.offset = q.offset + length + return q.fileData[q.offset-length : q.offset] // 标志字节 +} + +//返回读取的长整型数 +func (q *IPDict) getIPLong4() uint32 { + buf := q.readBuf(4) + return binary.LittleEndian.Uint32(buf) +} + +//返回读取的3个字节的长整型数 +func (q *IPDict) getRedirectOffset() uint32 { + buf := q.readBuf(3) + return binary.LittleEndian.Uint32([]byte{buf[0], buf[1], buf[2], 0}) +} + +// readString 获取字符 +func (q *IPDict) readMode() byte { + return q.readBuf(1)[0] // 标志字节 +} + +// readString 获取字符串 +func (q *IPDict) readString(char byte) []byte { + data := make([]byte, 0, 30) + if char != 0 { + data = append(data, char) + } + buf := q.readBuf(1) + for buf[0] != 0 { + data = append(data, buf[0]) + buf = q.readBuf(1) + } + return data +} + +// readArea 获取地区字符串 +func (q *IPDict) readArea() []byte { + mode := q.readMode() + switch mode { // 标志字节 + case 0: // 结束标识 + return []byte{} + case RedirectMode1: + case RedirectMode2: // 标志字节为1或2,表示区域信息被重定向 + q.seekOffset(q.getRedirectOffset()) // 重定向地址 + return q.readString(0) + } + return q.readString(mode) +} + +//数值IP转换字符串IP +func long2ip(ipInt uint32) string { + // need to do two bit shifting and “0xff” masking + ipInt64 := int64(ipInt) + b0 := strconv.FormatInt((ipInt64>>24)&0xff, 10) + b1 := strconv.FormatInt((ipInt64>>16)&0xff, 10) + b2 := strconv.FormatInt((ipInt64>>8)&0xff, 10) + b3 := strconv.FormatInt(ipInt64&0xff, 10) + return b0 + "." + b1 + "." + b2 + "." + b3 +} + +//字符串IP转换数值IP +func ip2long(ip string) uint32 { + bIP := net.ParseIP(ip).To4() + if nil == bIP { + return 0 + } + return binary.BigEndian.Uint32(bIP) +} + +//返回字典绝对路径 +func dictPath(dictFileName string) (string, error) { + if filepath.IsAbs(dictFileName) { + return dictFileName, nil + } + var dictFilePath string + cwd, err := os.Getwd() + if err != nil { + return dictFilePath, err + } + dictFilePath = filepath.Clean(filepath.Join(cwd, dictFileName)) + return dictFilePath, nil +} + +//检查ip地址 +func checkIPv4(IP string) bool { + // 字符串这样切割 + strList := strings.Split(IP, ".") + if len(strList) != 4 { + return false + } + for _, s := range strList { + if len(s) == 0 || (len(s) > 1 && s[0] == '0') { + return false + } + // 直接访问字符串的值 + if s[0] < '0' || s[0] > '9' { + return false + } + // 字符串转数字 + n, err := strconv.Atoi(s) + if err != nil { + return false + } + if n < 0 || n > 255 { + return false + } + } + return true +} + +func GetIpAddress(ip string) (string, error) { + IPDict := NewIPDict() + //载入IP字典 + err := IPDict.Load("../conf/qqwry.dat") + if err != nil { + return "", err + } + //查询IP + res, err := IPDict.FindIP(ip) + if err != nil { + return "", err + } + return res.Country, nil +} + +func GetIpOnlyAddress(ip string) string { + IPDict := NewIPDict() + //载入IP字典 + err := IPDict.Load("../conf/qqwry.dat") + if err != nil { + return "" + } + //查询IP + res, err := IPDict.FindIP(ip) + if err != nil { + return "" + } + return res.Country +} + +func AliIpAddress(ip string) (string, error) { + + url := "https://c2ba.api.huachen.cn/ip?ip=" + ip + + client := &http.Client{ + Timeout: 1 * time.Second, + } + //提交请求 + reqest, err := http.NewRequest("GET", url, nil) + + //增加header选项 + reqest.Header.Add("Authorization", "APPCODE 89aaef07254149aabac798c911647673") + + if err != nil { + fmt.Println(err) + return "", err + //panic(err) + } + //处理返回结果 + response, err := client.Do(reqest) + if err != nil { + fmt.Println(err) + return "", err + } + + resByte, err := ioutil.ReadAll(response.Body) + + fmt.Println("1-------------", string(resByte)) + var result IpResultV2 + err = json.Unmarshal(resByte, &result) + fmt.Printf("1-------------%+v\n", result) + + defer response.Body.Close() + + return result.Result.Country + result.Result.City, nil +} + +func GetIpOnlyAddressFromAli(ip string) string { + IPDict := NewIPDict() + //载入IP字典 + err := IPDict.Load("../conf/qqwry.dat") + if err != nil { + return "" + } + //查询IP + res, err := IPDict.FindIP(ip) + if err != nil { + return "" + } + return res.Country +} diff --git a/pkg/common/utils/ip_test.go b/pkg/common/utils/ip_test.go new file mode 100644 index 0000000..9c9f1d4 --- /dev/null +++ b/pkg/common/utils/ip_test.go @@ -0,0 +1,11 @@ +package utils + +import ( + "fmt" + "testing" +) + +func TestAliIpAddress(t *testing.T) { + + fmt.Println(AliIpAddress("58.208.146.190")) +} diff --git a/pkg/common/utils/phone.go b/pkg/common/utils/phone.go new file mode 100644 index 0000000..3a79c38 --- /dev/null +++ b/pkg/common/utils/phone.go @@ -0,0 +1,19 @@ +package utils + +import "regexp" + +// CheckMobile 检验手机号 +func CheckMobile(phone string) bool { + // 匹配规则 + // ^1第一位为一 + // [345789]{1} 后接一位345789 的数字 + // \\d \d的转义 表示数字 {9} 接9位 + // $ 结束符 + regRuler := "^1[345789]{1}\\d{9}$" + + // 正则调用规则 + reg := regexp.MustCompile(regRuler) + + // 返回 MatchString 是否匹配 + return reg.MatchString(phone) +} diff --git a/pkg/common/utils/phone_test.go b/pkg/common/utils/phone_test.go new file mode 100644 index 0000000..8879b62 --- /dev/null +++ b/pkg/common/utils/phone_test.go @@ -0,0 +1,45 @@ +package utils + +import ( + "fmt" + "github.com/fonchain_enterprise/utils/feie" + "log" + "testing" +) + +func TestGet16MD5Encode(t *testing.T) { + + info := feie.PrintInfo{ + Num: "1829", + Date: "4/27", + DrinkName: "测试", + Tag: []string{"香草*5", "焦糖*5", "果子*10"}, + Code: "测试--徐嘉鸿 13834233425", + } + feie := &feie.Feie{ + User: "chenyao@taifeng.ltd", + Ukey: "8mxyRrjhCKzB4Pde", + Url: "http://api.feieyun.cn/Api/Open/", + } + res, err := feie.Print("960233232", info) + fmt.Println(res, err) + +} + +func TestDecimalToAny(t *testing.T) { + fmt.Println(DecimalToAny(69)) + IPDict := NewIPDict() + //载入IP字典 + err := IPDict.Load("../../../conf/qqwry.dat") + if err != nil { + log.Fatalln(err) + } + //查询IP + res, err := IPDict.FindIP("114.218.158.24") + if err != nil { + log.Fatalln(err) + } + log.Println(res) + log.Println(res.Area) + log.Println(res.Country) +} diff --git a/pkg/common/utils/time.go b/pkg/common/utils/time.go new file mode 100644 index 0000000..681f6aa --- /dev/null +++ b/pkg/common/utils/time.go @@ -0,0 +1,52 @@ +package utils + +import ( + "fmt" + "strconv" + "time" +) + +func SubYearFromNowBefore(t1 time.Time) float32 { + t2 := time.Now() + res := float64(SubMonth(t2, t1)) / 12.0 + value, err := strconv.ParseFloat(fmt.Sprintf("%.1f", res), 64) + if err != nil { + return 0 + } + + return float32(value) +} + +func SubYearFromStartAndEnd(start time.Time,end time.Time) float32 { + res := float64(SubMonth(end, start)) / 12.0 + value, err := strconv.ParseFloat(fmt.Sprintf("%.1f", res), 64) + if err != nil { + return 0 + } + + return float32(value) +} + +func SubMonth(t1, t2 time.Time) (month int) { + y1 := t1.Year() + y2 := t2.Year() + m1 := int(t1.Month()) + m2 := int(t2.Month()) + d1 := t1.Day() + d2 := t2.Day() + + yearInterval := y1 - y2 + // 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数 + if m1 < m2 || (m1 == m2 && d1 < d2) { + yearInterval-- + } + // 获取月数差值 + monthInterval := (m1 + 12) - m2 + + if d1 < d2 { + monthInterval-- + } + monthInterval %= 12 + month = yearInterval*12 + monthInterval + return +} diff --git a/pkg/common/utils/ucode.go b/pkg/common/utils/ucode.go new file mode 100644 index 0000000..918c549 --- /dev/null +++ b/pkg/common/utils/ucode.go @@ -0,0 +1,55 @@ +package utils + +import ( + "crypto/md5" + "encoding/hex" + "fmt" +) + +var tenToAny map[int]string = map[int]string{ + 0: "0", 1: "1", 2: "2", 3: "3", 4: "4", 5: "5", 6: "6", 7: "7", 8: "8", 9: "9", + 10: "a", 11: "b", 12: "c", 13: "d", 14: "e", 15: "f", 16: "g", 17: "h", 18: "i", 19: "j", 20: "k", 21: "l", 22: "m", 23: "n", 24: "o", 25: "p", 26: "q", 27: "r", 28: "s", 29: "t", 30: "u", 31: "v", 32: "w", 33: "x", 34: "y", 35: "z", + 36: "A", 37: "B", 38: "C", 39: "D", 40: "E", 41: "F", 42: "G", 43: "H", 44: "I", 45: "J", 46: "K", 47: "L", 48: "M", 49: "N", 50: "O", 51: "P", 52: "Q", 53: "R", 54: "S", 55: "T", 56: "U", 57: "V", 58: "W", 59: "X", 60: "Y", 61: "Z", +} + +//SetLangErr 设置英语 +func SetLangErr() float32 { + return float32(0) +} + +//返回一个16位md5加密后的字符串 +func Get16MD5Encode(data string) string { + return GetMD5Encode(data)[8:24] +} + +func GetMD5Encode(data string) string { + h := md5.New() + h.Write([]byte(data)) + return hex.EncodeToString(h.Sum(nil)) +} + +// DecimalToAny 10进制转任意进制 +func DecimalToAny(num int) string { + n := len(tenToAny) + fmt.Println("1----", n) + new_num_str := "" + var remainder int + var remainder_string string + for num != 0 { + remainder = num % n + fmt.Println(remainder) + + remainder_string = tenToAny[remainder] + new_num_str = remainder_string + new_num_str + num = num / n + } + + if len(new_num_str) < 8 { + j := 8 - len(new_num_str) + for i := 0; i < j; i++ { + new_num_str = "0" + new_num_str + } + } + + return new_num_str +} diff --git a/pkg/common/utils/utils.go b/pkg/common/utils/utils.go new file mode 100644 index 0000000..a49ffd4 --- /dev/null +++ b/pkg/common/utils/utils.go @@ -0,0 +1,82 @@ +package utils + +import ( + "github.com/shopspring/decimal" + "unicode" +) + +//HasEnglish 判断字符串是否包含英文 +func HasEnglish(s string) bool { + for _, r := range s { + if unicode.Is(unicode.Latin, r) { + return true + } + } + return false +} + +//HasChinese 判断字符串是否包含中文 +func HasChinese(s string) bool { + for _, r := range s { + if unicode.Is(unicode.Han, r) { + return true + } + } + return false +} + +//HasEnglishAndChinese 判断字符串是否同时包含英文和中文 +func HasEnglishAndChinese(s string) bool { + return HasEnglish(s) && HasChinese(s) +} + +//FirstIsBiggerOrEqualDec 比较两个string转化成数字对比大小 +func FirstIsBiggerOrEqualDec(dec1, dec2 decimal.Decimal) (bool, error) { + + // 比较 decimal.Decimal 值 + if dec1.LessThan(dec2) { + return false, nil + } + + return true, nil + +} + +//FirstIsBiggerOrEqual 比较两个string转化成数字对比大小 +func FirstIsBiggerOrEqual(dec1 decimal.Decimal, b string) (bool, error) { + + dec2, err := decimal.NewFromString(b) + if err != nil { + return false, err + } + + // 比较 decimal.Decimal 值 + if dec1.LessThan(dec2) { + return false, nil + } + + return true, nil + +} + +//FirstIsBiggerOrEqualString 比较两个string转化成数字对比大小 +func FirstIsBiggerOrEqualString(a, b string) (bool, error) { + + dec1, err := decimal.NewFromString(a) + if err != nil { + return false, err + } + + dec2, err := decimal.NewFromString(b) + if err != nil { + return false, err + } + + // 比较 decimal.Decimal 值 + if dec1.LessThan(dec2) { + return false, nil + } + + return true, nil + +} diff --git a/pkg/common/utils/utils_test.go b/pkg/common/utils/utils_test.go new file mode 100644 index 0000000..724cd7c --- /dev/null +++ b/pkg/common/utils/utils_test.go @@ -0,0 +1,66 @@ +package utils + +import "testing" + +func Test_hasEnglish(t *testing.T) { + type args struct { + s string + } + tests := []struct { + name string + args args + want bool + }{ + {args: args{s: "阿丽米罕·色依提"}, want: false}, + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := HasEnglish(tt.args.s); got != tt.want { + t.Errorf("hasEnglish() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_hasEnglishAndChinese(t *testing.T) { + type args struct { + s string + } + tests := []struct { + name string + args args + want bool + }{ + + {args: args{s: "阿丽米罕·色依提"}, want: false}, + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := HasEnglishAndChinese(tt.args.s); got != tt.want { + t.Errorf("hasEnglishAndChinese() = %v, want %v", got, tt.want) + } + }) + } +} + +func Test_hasEnglishAndChinese1(t *testing.T) { + type args struct { + s string + } + tests := []struct { + name string + args args + want bool + }{ + {args: args{s: "阿丽米罕·色依提"}, want: false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := HasEnglishAndChinese(tt.args.s); got != tt.want { + t.Errorf("hasEnglishAndChinese() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/pkg/common/verifica/mobile.go b/pkg/common/verifica/mobile.go new file mode 100644 index 0000000..4469ba9 --- /dev/null +++ b/pkg/common/verifica/mobile.go @@ -0,0 +1,141 @@ +package verifica + +import ( + "errors" + "fmt" + "github.com/fonchain_enterprise/micro-account/pkg/config" + "github.com/fonchain_enterprise/utils/mobile" +) + +const SIG_NO = 155123 +const SIG_NO_SELLER = 159789 + +func SendMsg(telNum string, project string) (string, error) { + + var sigNo uint + sigNo = SIG_NO + + if project == "seller" { + sigNo = SIG_NO_SELLER + } + + mobileTemplate := config.GetMobile() + if telNum == "" { + return "", errors.New("手机号不合法") + } + + code := mobile.RandCode() + //content := "验证码模板:尊敬的用户,您的验证码为$$,15分钟内有效,请勿泄露。" + fmt.Println("发送短信请求参数:", telNum, mobile.TMP1, sigNo, code) + + /** + TODO + */ + /* + if telNum == "15895559080" { + dingding.Send(fmt.Sprintf("尊敬的用户,您的验证码为%s,15分钟内有效,请勿泄露。", code)) + return code, nil + } + */ + + fmt.Println("发送短信请求参数:", telNum, mobile.TMP1, sigNo, code) + return code, mobileTemplate.Send(telNum, mobile.TMP1, sigNo, code) + +} + +func SendMsgV2(telNum string, project string, tempSignNo uint) (string, error) { + + var sigNo uint + sigNo = SIG_NO + if project == "seller" { + sigNo = SIG_NO_SELLER + } + + mobileTemplate := config.GetMobile() + //mobileTemplate := config.GetAlMobile() + if telNum == "" { + return "", errors.New("手机号不合法") + } + + code := mobile.RandCode() + //content := "验证码模板:尊敬的用户,您的验证码为$$,15分钟内有效,请勿泄露。" + + /** + TODO + */ + /* + if telNum == "15895559080" { + dingding.Send(fmt.Sprintf("尊敬的用户,您的验证码为%s,15分钟内有效,请勿泄露。", code)) + return code, nil + } + */ + + fmt.Println("发送短信请求参数:", telNum, mobile.TMP1, sigNo, code) + return code, mobileTemplate.Send(telNum, mobile.TMP1, sigNo, code) + //fmt.Println("发送短信请求参数:", telNum, mobile.Sign, mobile.AlTMP1, code) + //return code, mobileTemplate.SendAlSms(telNum, mobile.Sign, mobile.AlTMP1, code) + +} + +func SendCustomMsg(telNum string, url string, m uint) error { + + var sigNo uint + sigNo = SIG_NO + + mobileTemplate := config.GetMobile() + if telNum == "" { + return errors.New("手机号不合法") + } + + /** + TODO + if telNum == "15895559080" { + arr := strings.Split(url, "||") + if len(arr) <= 1 { + fmt.Println("解析失败") + return nil + } + if m == 134802 { + dingding.Send(fmt.Sprintf("尊敬的用户,您的帐号登陆地址(%s)异常,请点击下线该帐号%s", arr[0], arr[1])) + return nil + } else if m == 136784 { + dingding.Send(fmt.Sprintf("尊敬的用户,%s等待您的审批,请点击查看%s", arr[0], arr[1])) + return nil + } + + } + */ + + fmt.Println(telNum, m, sigNo, url) + + return mobileTemplate.Send(telNum, m, sigNo, url) +} + +func SendCustomCode(telNum string, templateId uint, sigNo uint) (string, error) { + + mobileTemplate := config.GetMobile() + //mobileTemplate := config.GetAlMobile() + + if telNum == "" { + return "", errors.New("手机号不合法") + } + + code := mobile.RandCode() + + fmt.Println("发送短信请求参数:", telNum, mobile.TMP1, sigNo, code) + //fmt.Println("发送短信请求参数:", telNum, mobile.Sign, mobile.AlTMP1, code) + + return code, mobileTemplate.Send(telNum, templateId, sigNo, code) + //return code, mobileTemplate.SendAlSms(telNum, mobile.Sign, mobile.AlTMP1, code) +} + +func SendCustomSignNoMsg(telNum string, url string, m uint, sigNo uint) error { + + mobileTemplate := config.GetMobile() + //mobileTemplate := config.GetAlMobile() + if telNum == "" { + return errors.New("手机号不合法") + } + return mobileTemplate.Send(telNum, m, sigNo, url) + //return mobileTemplate.SendAlSms(telNum, mobile.Sign, mobile.AlTMP1, url) +} diff --git a/pkg/common/verifica/mobile_test.go b/pkg/common/verifica/mobile_test.go new file mode 100644 index 0000000..6071198 --- /dev/null +++ b/pkg/common/verifica/mobile_test.go @@ -0,0 +1,28 @@ +package verifica + +import ( + "fmt" + "github.com/fonchain_enterprise/micro-account/pkg/config" + "testing" +) + +func TestSendCustomMsg(t *testing.T) { + + msgInfo := config.MobileConfigTemplate{ + AK: "N7469940cf", + SK: "74699ca8e1ea8f80", + URL: "https://api.4321.sh/sms/template", + } + almsgInfo := config.AliMessage{ + AK: "LTAI5tFLAxtbtTsD4xAEtWcr", + AS: "ooHMm6GuRs1InieHojZaTjEJAMquKX", + URL: "dysmsapi.aliyuncs.com", + } + fmt.Println("短信配置", msgInfo) + config.LoadData(msgInfo, almsgInfo) + + mobileTemplate := config.GetMobile() + + fmt.Println(mobileTemplate.Send("18362666451", 136784, 155123, "用印申请0||https://dwz.cn/gwc1q4D8")) + +} diff --git a/pkg/common/wechat/access_token.go b/pkg/common/wechat/access_token.go new file mode 100644 index 0000000..4da6e47 --- /dev/null +++ b/pkg/common/wechat/access_token.go @@ -0,0 +1,82 @@ +package wechat + +import ( + "encoding/json" + "errors" + "fmt" + "github.com/fonchain_enterprise/micro-account/pkg/cache" + "io/ioutil" + "net/http" + "time" +) + +type TokenInfo struct { + AccessToken string `json:"access_token"` + CreateDate string `json:"createDate"` + ErrCode int `json:"errcode"` +} + +func getNowAccessToken(appID, appSecret string) (openInfo *TokenInfo, err error) { + + str := "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s" + url := fmt.Sprintf(str, appID, appSecret) + + resp, err := http.Get(url) + if err != nil { + fmt.Println(err) + return nil, err + } + + body, err := ioutil.ReadAll(resp.Body) + + defer resp.Body.Close() + + if resp.StatusCode != 200 { + fmt.Printf("请求失败%d\n", resp.StatusCode) + return nil, errors.New(fmt.Sprintf("请求失败%d", resp.StatusCode)) + } + + fmt.Println("返回数据是", string(body)) + + err = json.Unmarshal(body, &openInfo) + if err != nil { + fmt.Println(err) + return nil, err + } + + if openInfo.ErrCode != 0 { + fmt.Println("微信提示错误", string(body)) + return nil, errors.New("微信提示错误:" + string(body)) + } + + return + +} + +func GetAccessToken(appID, appSecret string) (openInfo *TokenInfo, err error) { + + key := "wx:token:" + appID + + str := cache.RedisClient.Get(key) + if str.Val() != "" { //存在 + err := json.Unmarshal([]byte(str.Val()), &openInfo) + return openInfo, err + } + + //更新 + openInfo, err = getNowAccessToken(appID, appSecret) + if err != nil { + return nil, err + } + + openInfo.CreateDate = time.Now().Format("2006-01-02 15:04:05") + + r, err := json.Marshal(openInfo) + + fmt.Println(string(r)) + + _, err = cache.RedisClient.Set(key, string(r), 6500*time.Second).Result() + + return openInfo, err + +} diff --git a/pkg/common/wechat/tempate/template.go b/pkg/common/wechat/tempate/template.go new file mode 100644 index 0000000..e836a54 --- /dev/null +++ b/pkg/common/wechat/tempate/template.go @@ -0,0 +1,209 @@ +package tempate + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "github.com/fonchain_enterprise/micro-account/pkg/cache" + "github.com/fonchain_enterprise/micro-account/pkg/common/redis_key" + "github.com/fonchain_enterprise/micro-account/pkg/common/wechat" + "github.com/google/uuid" + "io/ioutil" + "net/http" + "strconv" +) + +type ClockInTemplate struct { + ToUser string `json:"touser"` + TemplateID string `json:"template_id"` + ClientMsgID string `json:"client_msg_id"` + ClockInMsgData ClockInMsgData `json:"data"` +} + +type StrangerClockInTemplate struct { + ToUser string `json:"touser"` + TemplateID string `json:"template_id"` + ClientMsgID string `json:"client_msg_id"` + Url string `json:"url"` + ClockInMsgData StrangerClockInMsgData `json:"data"` +} + +type Thing struct { + Value string `json:"value"` +} + +type ClockInMsgData struct { + Time3 Thing `json:"time3"` + Name Thing `json:"thing1"` + Const2 Thing `json:"const2"` + Thing5 Thing `json:"thing5"` +} + +type StrangerClockInMsgData struct { + Thing2 Thing `json:"thing2"` + PhoneNumber10 Thing `json:"phone_number10"` + CharacterString14 Thing `json:"character_string14"` + Thing6 Thing `json:"thing6"` + Const11 Thing `json:"const11"` +} + +type ClockInTemplateMsgInfo struct { + TemplateId string + OpenId string + OperatedAt string + Name string + Address string + ClockType string + VisitorSName string + VisitorSTel string + ReasonVisit string + NumberOfPeople uint64 +} + +func SendStrangerWechatTempMsg(wechatObj wechat.Wechat, info ClockInTemplateMsgInfo, logID uint64) error { + appID := wechatObj.Appid + appSecret := wechatObj.AppSecret + accessToken, err := wechat.GetAccessToken(appID, appSecret) + URL := fmt.Sprintf("https://material.szjixun.cn/#/pages/control-gate/index?sn=%v&id=%v", info.Address, logID) + + clockInTemplate := StrangerClockInTemplate{ + ToUser: info.OpenId, + TemplateID: info.TemplateId, + ClientMsgID: uuid.New().String(), + Url: URL, + ClockInMsgData: StrangerClockInMsgData{ + Thing2: Thing{info.VisitorSName}, //来访人员 + PhoneNumber10: Thing{info.VisitorSTel}, //联系电话 + CharacterString14: Thing{strconv.FormatUint(info.NumberOfPeople, 10)}, //随行人数 + Thing6: Thing{info.Name}, //拜访人 + Const11: Thing{info.ReasonVisit}, //拜访事由 + }, + } + msg, err := json.Marshal(clockInTemplate) + + openInfo, err := sendTemplateMsg(accessToken.AccessToken, msg) + fmt.Println("提示设呢么", openInfo, err) + + if err != nil { + return err + } + + fmt.Println("123123--123", openInfo) + fmt.Println(openInfo.Errmsg) + fmt.Println(openInfo.Errcode) + + if openInfo.Errcode != 40001 { + return nil + } + + fmt.Println("不顶用") + cache.RedisClient.Del(redis_key.GetWxAccessToken(appID)) + + return sendTemplateMsgAgain(appID, appSecret, msg) +} +func SendWechatTemplateMsg(wechatObj wechat.Wechat, info ClockInTemplateMsgInfo) error { + clockType := "上班" + appID := wechatObj.Appid + appSecret := wechatObj.AppSecret + templateId, openId, operatedAt, Name, address, _ := info.TemplateId, info.OpenId, info.OperatedAt, info.Name, info.Address, info.ClockType + + accessToken, err := wechat.GetAccessToken(appID, appSecret) + if err != nil { + return err + } + + if info.ClockType == "off" { + clockType = "下班" + } + + clockInTemplate := ClockInTemplate{ + ToUser: openId, + TemplateID: templateId, + ClientMsgID: uuid.New().String(), + ClockInMsgData: ClockInMsgData{ + Time3: Thing{Value: operatedAt}, + Name: Thing{Value: Name}, + Const2: Thing{Value: clockType}, + Thing5: Thing{Value: address}, + }, + } + msg, err := json.Marshal(clockInTemplate) + + openInfo, err := sendTemplateMsg(accessToken.AccessToken, msg) + fmt.Println("提示设呢么", openInfo, err) + + if err != nil { + return err + } + + fmt.Println("123123--123", openInfo) + fmt.Println(openInfo.Errmsg) + fmt.Println(openInfo.Errcode) + + if openInfo.Errcode != 40001 { + return nil + } + + fmt.Println("不顶用") + cache.RedisClient.Del(redis_key.GetWxAccessToken(appID)) + + return sendTemplateMsgAgain(appID, appSecret, msg) + +} + +func sendTemplateMsgAgain(appID, appSecret string, msg []byte) error { + accessToken, err := wechat.GetAccessToken(appID, appSecret) + if err != nil { + return err + } + + openInfo, err := sendTemplateMsg(accessToken.AccessToken, msg) + fmt.Println("提示设呢么", openInfo, err) + + if err != nil { + return err + } + + fmt.Println("123123--123", openInfo) + fmt.Println(openInfo.Errmsg) + fmt.Println(openInfo.Errcode) + if openInfo.Errcode != 40001 { + return nil + } + return errors.New(openInfo.Errmsg) +} + +// "errcode": 0, +// "errmsg": "ok", +func sendTemplateMsg(accessToken string, code []byte) (res *wechat.CommonRes, err error) { + url := "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken + + // 创建要发送的数据 + + // 发送POST请求 + resp, err := http.Post(url, "application/json", bytes.NewBuffer(code)) + if err != nil { + fmt.Println("发送请求失败:", err) + return + } + + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + + if resp.StatusCode != 200 { + fmt.Printf("请求失败%d\n", resp.StatusCode) + return nil, errors.New(fmt.Sprintf("请求失败%d", resp.StatusCode)) + } + + fmt.Println("2--返回数据是", string(body)) + + err = json.Unmarshal(body, &res) + if err != nil { + fmt.Println(err) + return nil, err + } + + return res, err +} diff --git a/pkg/common/wechat/tempate/template_test.go b/pkg/common/wechat/tempate/template_test.go new file mode 100644 index 0000000..0be3ad4 --- /dev/null +++ b/pkg/common/wechat/tempate/template_test.go @@ -0,0 +1,46 @@ +package tempate + +import ( + "github.com/fonchain_enterprise/micro-account/pkg/cache" + "github.com/fonchain_enterprise/micro-account/pkg/common/wechat" + "testing" +) + +func TestSendWechatTemplateMsg(t *testing.T) { + + redisConfig := cache.RedisConfig{ + RedisDB: "1", + RedisAddr: "r-bp1mjimyh1ejg1mxclpd.redis.rds.aliyuncs.com:6379", + RedisPw: "fonchain_opv:kP6tW4tS3qB2dW4aE6uI5cX2", + RedisDbName: "1", + } + + cache.LoadRedis(redisConfig) + + type args struct { + appID string + appSecret string + templateId string + openId string + operatedAt string + Name string + address string + clockType string + } + + tests := []struct { + name string + args args + wantErr bool + }{ + {args: args{appID: "wx72ffc6670d5ddb12", appSecret: "50bec0ef9a7883de5b2fb3a74b23aff4", templateId: "alklszCrWJsueAOFwdlrvo2rN-XXwHqE_oHl_55kQmo", openId: "o_ath6SpAdmfaLeZD8v1mc_c-XxU", operatedAt: "2023-07-18 13:48:12", Name: "耿阳", address: "顾廷龙", clockType: "off"}}, + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if err := SendWechatTemplateMsg(wechat.Wechat{Appid: tt.args.appID, AppSecret: tt.args.appSecret}, ClockInTemplateMsgInfo{TemplateId: tt.args.templateId, OpenId: tt.args.openId, OperatedAt: tt.args.operatedAt, Name: tt.args.Name, Address: tt.args.address, ClockType: tt.args.clockType}); (err != nil) != tt.wantErr { + t.Errorf("SendWechatTemplateMsg() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} diff --git a/pkg/common/wechat/wechat.go b/pkg/common/wechat/wechat.go new file mode 100644 index 0000000..783ae91 --- /dev/null +++ b/pkg/common/wechat/wechat.go @@ -0,0 +1,339 @@ +package wechat + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "github.com/fonchain_enterprise/micro-account/pkg/cache" + "github.com/fonchain_enterprise/micro-account/pkg/common/redis_key" + "io/ioutil" + "net/http" + "time" +) + +type Wechat struct { + Appid string + AppSecret string +} + +type OpenIDInfo struct { + AccessToken string `json:"access_token"` + ExpiresIn int `json:"expires_in"` + RefreshToken string `json:"refresh_token"` + Openid string `json:"openid"` + Scope string `json:"scope"` + IsSnapshotuser int `json:"is_snapshotuser"` + Unionid string `json:"unionid"` + Errmsg string `json:"errmsg"` + Errcode int `json:"errcode"` +} + +type PhoneRes struct { + PhoneInfo *PhoneInfo `json:"phone_info"` + Errmsg string `json:"errmsg"` + Errcode int `json:"errcode"` +} + +type CommonRes struct { + Errmsg string `json:"errmsg"` + Errcode int `json:"errcode"` +} + +type PhoneInfo struct { + PhoneNumber string `json:"phoneNumber"` + PurePhoneNumber string `json:"purePhoneNumber"` + Errcode int `json:"errcode"` +} + +type BoxOpenId struct { + Openid string `json:"openid"` + Errmsg string `json:"errmsg"` + Errcode int `json:"errcode"` +} + +type BoxAccessToken struct { + AccessToken string `json:"access_token"` + ExpiresIn int `json:"expires_in"` + RefreshToken string `json:"refresh_token"` + Errmsg string `json:"errmsg"` + Errcode int `json:"errcode"` +} + +func GetOpenID(appID, appSecret, code string) (openInfo *OpenIDInfo, err error) { + + var openIDInfo *OpenIDInfo + str := "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code" + url := fmt.Sprintf(str, appID, appSecret, code) + + resp, err := http.Get(url) + if err != nil { + fmt.Println(err) + return nil, err + } + + body, err := ioutil.ReadAll(resp.Body) + + defer resp.Body.Close() + + if resp.StatusCode != 200 { + fmt.Printf("请求失败%d\n", resp.StatusCode) + return nil, errors.New(fmt.Sprintf("请求失败%d", resp.StatusCode)) + } + + fmt.Println("返回数据是", string(body)) + + err = json.Unmarshal(body, &openInfo) + if err != nil { + fmt.Println(err) + return nil, err + } + fmt.Println(openIDInfo) + + return + +} + +func GetBoxPhone(appID, appSecret, code string) (string, error) { + accessToken, err := GetBoxAccessToken(appID, appSecret) + if err != nil { + return "", err + } + + openInfo, err := getBoxPhone(accessToken, code) + fmt.Println("提示设呢么", openInfo, err) + + if err != nil { + return "", err + } + + fmt.Println("123123--123", openInfo) + fmt.Println(openInfo.Errmsg) + fmt.Println(openInfo.Errcode) + + if openInfo.Errcode != 40001 && openInfo.PhoneInfo != nil { + return openInfo.PhoneInfo.PurePhoneNumber, nil + } + + fmt.Println("不顶用") + cache.RedisClient.Del(redis_key.GetBoxAccessToken(appID)) + + return getBoxPhoneAgain(appID, appSecret, code) + +} + +func getBoxPhoneAgain(appID, appSecret, code string) (string, error) { + accessToken, err := GetBoxAccessToken(appID, appSecret) + if err != nil { + return "", err + } + + openInfo, err := getBoxPhone(accessToken, code) + fmt.Println("提示设呢么", openInfo, err) + + if err != nil { + return "", err + } + + fmt.Println("123123--123", openInfo) + fmt.Println(openInfo.Errmsg) + fmt.Println(openInfo.Errcode) + if openInfo.Errcode != 40001 && openInfo.PhoneInfo != nil { + return openInfo.PhoneInfo.PurePhoneNumber, nil + } + return "", errors.New(openInfo.Errmsg) +} + +// GetBoxOpenID 获取小程序的openid +func GetBoxOpenID(appID, appSecret, code string) (string, error) { + + /* + accessToken, err := GetBoxAccessToken(appID, appSecret) + if err != nil { + return "", err + } + + */ + + openInfo, err := getLoginOpenIdByCode(appID, appSecret, code) + fmt.Println("提示设呢么", openInfo, err) + + if err != nil { + return "", err + } + + return openInfo, nil + //cache.RedisClient.Del(redis_key.GetBoxAccessToken(appID)) + + //return getBoxOpenIDAgain(appID, appSecret, code) +} + +func getBoxOpenIDAgain(appID, appSecret, code string) (string, error) { + + accessToken, err := GetBoxAccessToken(appID, appSecret) + if err != nil { + return "", err + } + + openInfo, err := getOpenIdByCode(accessToken, code) + + if err != nil { + return "", err + } + + if openInfo.Errcode != 0 { + return "", errors.New(openInfo.Errmsg) + } + + return openInfo.Openid, nil +} + +func getLoginOpenIdByCode(appId, appSecret, code string) (string, error) { + + str := "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code" + url := fmt.Sprintf(str, appId, appSecret, code) + + resp, err := http.Get(url) + if err != nil { + return "", err + } + + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + + if resp.StatusCode != 200 { + fmt.Printf("请求失败%d\n", resp.StatusCode) + return "", errors.New(fmt.Sprintf("请求失败%d", resp.StatusCode)) + } + + fmt.Println("2--返回数据是", string(body)) + + var openInfo OpenIDInfo + err = json.Unmarshal(body, &openInfo) + if err != nil { + fmt.Println(err) + return "", err + } + if openInfo.Errcode != 0 { + + return "", errors.New(openInfo.Errmsg) + + } + + return openInfo.Openid, err +} + +func getOpenIdByCode(accessToken, code string) (openInfo *OpenIDInfo, err error) { + + url := "https://api.weixin.qq.com/wxa/getpluginopenpid?access_token=" + accessToken + + // 创建要发送的数据 + + data := []byte(fmt.Sprintf(`{"code": "%s"}`, code)) + fmt.Println("1-------------", string(data)) + fmt.Println("1-------------", accessToken) + + // 发送POST请求 + resp, err := http.Post(url, "application/json", bytes.NewBuffer(data)) + if err != nil { + fmt.Println("发送请求失败:", err) + return + } + + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + + if resp.StatusCode != 200 { + fmt.Printf("请求失败%d\n", resp.StatusCode) + return nil, errors.New(fmt.Sprintf("请求失败%d", resp.StatusCode)) + } + + fmt.Println("2--返回数据是", string(body)) + + err = json.Unmarshal(body, &openInfo) + if err != nil { + fmt.Println(err) + return nil, err + } + + return openInfo, err +} + +// getBoxPhone 获取手机号 +func getBoxPhone(accessToken, code string) (res *PhoneRes, err error) { + url := "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + accessToken + + // 创建要发送的数据 + data := []byte(fmt.Sprintf(`{"code": "%s"}`, code)) + + // 发送POST请求 + resp, err := http.Post(url, "application/json", bytes.NewBuffer(data)) + if err != nil { + fmt.Println("发送请求失败:", err) + return + } + + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + + if resp.StatusCode != 200 { + fmt.Printf("请求失败%d\n", resp.StatusCode) + return nil, errors.New(fmt.Sprintf("请求失败%d", resp.StatusCode)) + } + + fmt.Println("2--返回数据是", string(body)) + + err = json.Unmarshal(body, &res) + if err != nil { + fmt.Println(err) + return nil, err + } + + return res, err +} + +func GetBoxAccessToken(appID, appSecret string) (string, error) { + + accessToken := cache.RedisClient.Get(redis_key.GetBoxAccessToken(appID)).Val() + + if accessToken != "" { + return accessToken, nil + } + + var openIDInfo *BoxAccessToken + + str := "https://api.weixin.qq.com/cgi-bin/token?appid=%s&secret=%s&grant_type=client_credential" + url := fmt.Sprintf(str, appID, appSecret) + + resp, err := http.Get(url) + if err != nil { + return "", err + } + + body, err := ioutil.ReadAll(resp.Body) + + defer resp.Body.Close() + + if resp.StatusCode != 200 { + fmt.Printf("请求失败%d\n", resp.StatusCode) + return "", errors.New(fmt.Sprintf("请求失败%d", resp.StatusCode)) + } + + fmt.Println("返回数据是", string(body)) + + err = json.Unmarshal(body, &openIDInfo) + if err != nil { + fmt.Println(err) + return "", err + } + //记录下 + fmt.Println("123123123", redis_key.GetBoxAccessToken(appID), openIDInfo.AccessToken) + fmt.Println(redis_key.GetBoxAccessToken(appID), openIDInfo.AccessToken) + cache.RedisClient.Set(redis_key.GetBoxAccessToken(appID), openIDInfo.AccessToken, 6000*time.Second) + + return openIDInfo.AccessToken, nil + +} diff --git a/pkg/common/wechat/wechat_test.go b/pkg/common/wechat/wechat_test.go new file mode 100644 index 0000000..990d85a --- /dev/null +++ b/pkg/common/wechat/wechat_test.go @@ -0,0 +1,84 @@ +package wechat + +import ( + "github.com/fonchain_enterprise/micro-account/pkg/cache" + "reflect" + "testing" +) + +func TestGetOpenID(t *testing.T) { + + redisConfig := cache.RedisConfig{ + RedisDB: "2", + RedisAddr: "127.0.0.1:6379", + RedisPw: "", + RedisDbName: "2", + } + + cache.LoadRedis(redisConfig) + + type args struct { + appID string + appSecret string + code string + } + tests := []struct { + name string + args args + wantOpenInfo *OpenIDInfo + wantErr bool + }{ + {name: "", args: args{appID: "wx2ab0adfa3346d44f", appSecret: "d85d38e7a055432254a09f00899971c8", code: "xxx"}, wantOpenInfo: &OpenIDInfo{}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + gotOpenInfo, err := GetBoxOpenID(tt.args.appID, tt.args.appSecret, tt.args.code) + if (err != nil) != tt.wantErr { + t.Errorf("GetOpenID() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(gotOpenInfo, tt.wantOpenInfo) { + t.Errorf("GetOpenID() gotOpenInfo = %v, want %v", gotOpenInfo, tt.wantOpenInfo) + } + }) + } +} + +func TestGetBoxPhone(t *testing.T) { + + redisConfig := cache.RedisConfig{ + RedisDB: "2", + RedisAddr: "127.0.0.1:6379", + RedisPw: "", + RedisDbName: "2", + } + + cache.LoadRedis(redisConfig) + type args struct { + appID string + appSecret string + code string + } + tests := []struct { + name string + args args + want string + wantErr bool + }{ + + {name: "", args: args{appID: "wx2ab0adfa3346d44f", appSecret: "d85d38e7a055432254a09f00899971c8", code: "xxx"}}, + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := GetBoxPhone(tt.args.appID, tt.args.appSecret, tt.args.code) + if (err != nil) != tt.wantErr { + t.Errorf("GetBoxPhone() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("GetBoxPhone() got = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/pkg/config/config.go b/pkg/config/config.go new file mode 100644 index 0000000..e93e5e2 --- /dev/null +++ b/pkg/config/config.go @@ -0,0 +1,33 @@ +package config + +import ( + "github.com/fonchain_enterprise/utils/mobile" +) + +var MobileConfig MobileConfigTemplate +var mobileTemplate mobile.Message +var mobileAlTemplate mobile.AliMessage + +type MobileConfigTemplate struct { + AK string + SK string + URL string +} +type AliMessage struct { + AK string + AS string + URL string +} + +func GetMobile() mobile.Message { + return mobileTemplate +} + +func GetAlMobile() mobile.AliMessage { + return mobileAlTemplate +} + +func LoadData(info MobileConfigTemplate, alInfo AliMessage) { + mobileTemplate = mobile.NewFeiGe(info.AK, info.SK, info.URL) + mobileAlTemplate = mobile.NewAli(alInfo.AK, alInfo.AS, alInfo.URL) +} diff --git a/pkg/domain/account.go b/pkg/domain/account.go new file mode 100644 index 0000000..4188b5a --- /dev/null +++ b/pkg/domain/account.go @@ -0,0 +1 @@ +package domain diff --git a/pkg/domain/coin.go b/pkg/domain/coin.go new file mode 100644 index 0000000..4188b5a --- /dev/null +++ b/pkg/domain/coin.go @@ -0,0 +1 @@ +package domain diff --git a/pkg/domain/msg_code.go b/pkg/domain/msg_code.go new file mode 100644 index 0000000..d7e642b --- /dev/null +++ b/pkg/domain/msg_code.go @@ -0,0 +1,203 @@ +package domain + +import ( + "errors" + "fmt" + "github.com/fonchain_enterprise/micro-account/pkg/cache" + "github.com/fonchain_enterprise/micro-account/pkg/common/redis_key" + "github.com/fonchain_enterprise/micro-account/pkg/m" + "time" +) + +func CheckMsg(key string) error { + + n, err := cache.RedisClient.Exists(key).Result() + fmt.Println("n", n) + if err != nil { + return err + } + + if n == 0 { + return nil + } + + str := cache.RedisClient.Get(key) + + num, err := str.Int() + + if err != nil { + return err + } + + if num > 30 { + return errors.New(m.Mobile_Send_Over) + } + + return nil +} + +// CheckMsgPre 检测短信发送限制 +func CheckMsgPre(domain string, telNum string, scope string) error { + + key := redis_key.GetAccountKeyCountTodayHour(domain, telNum, scope) + + //一分钟最多发一条 + minStr := cache.RedisClient.Get(redis_key.MinLimit(domain, telNum, scope)) + + if minStr.Val() != "" { + return errors.New(m.Mobile_Sended) + } + + //一个小时最多10次 + n, err := cache.RedisClient.Exists(key).Result() + fmt.Println("n", n) + if err != nil { + return err + } + + if n == 0 { + return nil + } + + str := cache.RedisClient.Get(key) + + num, err := str.Int() + + if err != nil { + return err + } + + if num > 10 { + return errors.New(m.Mobile_Send_Over) + } + + return nil +} + +// SetOnlyRecordTelMsgCode 记录验证码 +func SetOnlyRecordTelMsgCode(domain, tel, code, scope string) error { + + //发送验证码 + if merr := cache.RedisClient.Set(redis_key.GetOnlyAccountKey(domain, tel), code, 15*60*1000*time.Millisecond).Err(); merr != nil { + return merr + } + + //发送验证码 + if merr := cache.RedisClient.Set(redis_key.MinLimit(domain, tel, scope), code, 1*60*1000*time.Millisecond).Err(); merr != nil { + return merr + } + + return SetTodayNum(domain, tel) +} + +// InBlockList 黑名单 +func InBlockList(domain string, tel string) bool { + + isExist, err := cache.RedisClient.HExists(redis_key.BlackListKey(domain), tel).Result() //发送注册验证码 校验验证码时间限制 + + if err != nil { + panic(err) + return false + } + + if isExist == true { + fmt.Println("黑名单") + return true + } + + fmt.Println("白名单") + + return false +} + +// CodeLive 发送的验证码是否活着 +func CodeLive(domain string, tel string) error { + + str := cache.RedisClient.Get(redis_key.VerityCode(domain, tel)) //发送注册验证码 校验验证码时间限制 + + if str.Val() != "" { + return errors.New(m.Mobile_Sended) + } + + return nil +} + +// SetRecordTelMsgCode 发送短信成功之后记录部分信息 +func SetRecordTelMsgCode(domain string, tel string, code string) error { + + //发送验证码 + if merr := cache.RedisClient.Set(redis_key.GetAccountKey(domain, tel), code, 15*60*1000*time.Millisecond).Err(); merr != nil { + return merr + } + + //发送验证码 + if merr := cache.RedisClient.Set(redis_key.VerityCode(domain, tel), code, 55*1000*time.Millisecond).Err(); merr != nil { + return merr + } + + //注册的时候验证码 + if merr := cache.RedisClient.Set(redis_key.GetAccountRegisterKey(domain, tel), code, 60*60*1000*time.Millisecond).Err(); merr != nil { + return merr + } + + return SetTodayNum(domain, tel) +} + +// SetRecordTelMsgCodeLogin 登录之后发送的短信 +func SetRecordTelMsgCodeLogin(domain string, tel string, code string, id string) error { + + //一分钟之内的 + fmt.Println(redis_key.GetOneMinuteKey(domain, tel, id)) + if merr := cache.RedisClient.Set(redis_key.GetOneMinuteKey(domain, tel, id), code, 1*60*1000*time.Millisecond).Err(); merr != nil { + return merr + } + + //15分钟之内的 + if merr := cache.RedisClient.Set(redis_key.GetChangeTelKey(domain, tel, id), code, 15*60*1000*time.Millisecond).Err(); merr != nil { + return merr + } + + if merr := cache.RedisClient.Set(redis_key.GetNowNewTelById(domain, id), tel, 24*60*60*1000*time.Millisecond).Err(); merr != nil { + return merr + } + + return SetTodayNum(domain, tel) +} + +// DelRecordTelMsgCodeLogin 登录之后发送的短信 +func DelRecordTelMsgCodeLogin(domain string, tel string, id string) error { + + //15分钟之内的 + if merr := cache.RedisClient.Del(redis_key.GetChangeTelKey(domain, tel, id), redis_key.GetOneMinuteKey(domain, tel, id)).Err(); merr != nil { + return merr + } + + return SetTodayNum(domain, tel) +} + +// SetTodayNum 当日记录发送记录 +func SetTodayNum(domain string, tel string) error { + //当日记录发送记录 + telTodayNum := redis_key.GetAccountKeyCountToday(domain, tel) + cache.RedisClient.Incr(telTodayNum) + cache.RedisClient.Expire(telTodayNum, 24*60*60*1000*time.Millisecond) + + return nil +} + +func CheckRegisterCode(domain string, tel string, code string) error { + + str := cache.RedisClient.Get(redis_key.GetAccountRegisterKey(domain, tel)) + + cacheCode := str.Val() + + if cacheCode == "" { + return errors.New("没有发送数据") + } + + if code != cacheCode { + return errors.New("验证码错误") + } + + return nil +} diff --git a/pkg/domain/msg_code_test.go b/pkg/domain/msg_code_test.go new file mode 100644 index 0000000..aefd092 --- /dev/null +++ b/pkg/domain/msg_code_test.go @@ -0,0 +1,78 @@ +package domain + +import ( + "fmt" + "github.com/fonchain_enterprise/micro-account/pkg/cache" + "github.com/fonchain_enterprise/micro-account/pkg/common/redis_key" + "testing" +) + +func TestCheckMsg(t *testing.T) { + + config := cache.RedisConfig{ + RedisDB: "2", + RedisAddr: "127.0.0.1:6379", + RedisPw: "", + RedisDbName: "2", + } + + cache.LoadRedis(config) + + key := redis_key.GetAccountKeyCountTodayHour("test", "18205052627", "") + //key := redis_key.GetAccountKeyCountToday("test", "18205052627") + + //没有字段 + cache.RedisClient.Del(key) + + if err := CheckMsg(key); err != nil { + t.Errorf("验证不通过 :%s", err.Error()) + } + + //字段数字小于10 + /* + cache.RedisClient.Set(key, 8, 0) + if err := CheckMsg(key); err != nil { + t.Errorf("验证不通过: %s", err.Error()) + } + + */ + + cache.RedisClient.Set(key, 11, 0) + if err := CheckMsg(key); err == nil { + t.Errorf("验证不通过:超过设定参数,没有提示") + } + +} + +func TestInBlockList(t *testing.T) { + config := cache.RedisConfig{ + RedisDB: "2", + RedisAddr: "127.0.0.1:6379", + RedisPw: "", + RedisDbName: "2", + } + + cache.LoadRedis(config) + type args struct { + domain string + tel string + } + tests := []struct { + name string + args args + want bool + }{ + // TODO: Add test cases. + {args: args{domain: "test", tel: "18205052627"}, want: true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if InBlockList(tt.args.domain, tt.args.tel) == true { + fmt.Println("黑名单") + } else { + fmt.Println("白名单") + } + + }) + } +} diff --git a/pkg/e/code.go b/pkg/e/code.go new file mode 100644 index 0000000..fd4b81a --- /dev/null +++ b/pkg/e/code.go @@ -0,0 +1,90 @@ +package e + +var ( + JWTSecret = []byte("asdfqwer1234") +) +var ( + Acquire_Daily_Login = "daily_login" + Acquire_Register = "register" +) + +var ( + TimeFormatMin = "2006-01-02 15:04" +) + +const ( + Success = 200 + Error = 500 + ParamsError = 400 + InvalidToken = 501 +) + +const ( + Failed = 1 + Ok = 0 + NotLogin = 401 + SUCCESS = 200 + UpdatePasswordSuccess = 201 + DeleteSuccess = 204 + NotExistInentifier = 202 + ERROR = 500 + InvalidParams = 400 + + //成员错误 + ErrorExistNick = 10001 + ErrorExistUser = 10002 + ErrorNotExistUser = 10003 + ErrorNotCompare = 10004 + ErrorNotComparePassword = 10005 + ErrorFailEncryption = 10006 + ErrorNotExistProduct = 10007 + ErrorNotExistAddress = 10008 + ErrorExistFavorite = 10009 + + //店家错误 + ErrorBossCheckTokenFail = 20001 + ErrorBossCheckTokenTimeout = 20002 + ErrorBossToken = 20003 + ErrorBoss = 20004 + ErrorBossInsufficientAuthority = 20005 + ErrorBossProduct = 20006 + + //管理员错误 + ErrorAuthCheckTokenFail = 30001 //token 错误 + ErrorAuthCheckTokenTimeout = 30002 //token 过期 + ErrorAuthToken = 30003 + ErrorAuth = 30004 + ErrorAuthInsufficientAuthority = 30005 + ErrorReadFile = 30006 + ErrorSendEmail = 30007 + ErrorCallApi = 30008 + ErrorUnmarshalJson = 30009 + ErrorAdminFindUser = 30010 + //数据库错误 + ErrorDatabase = 40001 + + //对象存储错误 + ErrorOss = 50001 + ErrorUploadFile = 50002 + + //店铺错误 + ErrorExistShopName = 60001 + ErrorNotExistShopName = 60002 + ErrorNotAdmin = 60003 + + ErrNoDomain = 70001 + ErrTelNum = 70002 + ErrNoCode = 70003 + ErrNoID = 70004 + ErrNickName = 70005 + InvalidID = 70006 + InvalidPas = 70007 + ErrStatus = 70008 + ErrNoType = 70009 + ErrNoUserID = 70010 + ErrNoName = 70011 + ErrNoDepCode = 70012 + ErrNoTitle = 70013 + ErrNoUrl = 70014 + ErrNoMethod = 70015 +) diff --git a/pkg/e/msg.go b/pkg/e/msg.go new file mode 100644 index 0000000..0f2b6c3 --- /dev/null +++ b/pkg/e/msg.go @@ -0,0 +1,75 @@ +package e + +var MsgFlags = map[int]string{ + SUCCESS: "ok", + UpdatePasswordSuccess: "修改密码成功", + NotExistInentifier: "该第三方账号未绑定", + ERROR: "fail", + InvalidParams: "请求参数错误", + + ErrorExistNick: "已存在该昵称", + ErrorExistUser: "已存在该用户名", + ErrorNotExistUser: "该用户不存在", + ErrorNotCompare: "账号密码错误", + ErrorNotComparePassword: "两次密码输入不一致", + ErrorFailEncryption: "加密失败", + ErrorNotExistProduct: "该商品不存在", + ErrorNotExistAddress: "该收获地址不存在", + ErrorExistFavorite: "已收藏该商品", + + ErrorBossCheckTokenFail: "商家的Token鉴权失败", + ErrorBossCheckTokenTimeout: "商家TOken已超时", + ErrorBossToken: "商家的Token生成失败", + ErrorBoss: "商家Token错误", + ErrorBossInsufficientAuthority: "商家权限不足", + ErrorBossProduct: "商家读文件错误", + + ErrorAuthCheckTokenFail: "Token鉴权失败", + ErrorAuthCheckTokenTimeout: "TOken已超时", + ErrorAuthToken: "Token生成失败", + ErrorAuth: "Token错误", + ErrorAuthInsufficientAuthority: "权限不足", + ErrorReadFile: "读文件失败", + ErrorSendEmail: "发送邮件失败", + ErrorCallApi: "调用接口失败", + ErrorUnmarshalJson: "解码JSON失败", + + ErrorUploadFile: "上传失败", + ErrorAdminFindUser: "管理员查询用户失败", + + ErrorDatabase: "数据库操作出错,请重试", + + ErrorOss: "OSS配置错误", + + ErrorExistShopName: "店铺已被注册,请检查店铺名称和统一社会信用码", + ErrorNotExistShopName: "店铺不存在", + ErrorNotAdmin: "非管理员", + + InvalidToken: "Token验证失败", + + ErrNoDomain: "环境变量必须要有", + ErrTelNum: "手机号码错误", + ErrNoCode: "验证码必须要有", + ErrNoID: "ID缺少", + ErrNickName: "请填写正确的姓名项", + InvalidID: "身份证长度18位", + InvalidPas: "密码不小于6位", + + ErrStatus: "状态非法", + ErrNoType: "缺少类型", + ErrNoUserID: "缺少用户ID", + ErrNoName: "缺少名称", + ErrNoDepCode: "缺少部门code", + ErrNoTitle: "缺少标题", + ErrNoUrl: "缺少url", + ErrNoMethod: "缺少method", +} + +// GetMsg 获取状态码对应信息 +func GetMsg(code int) string { + msg, ok := MsgFlags[code] + if ok { + return msg + } + return MsgFlags[ERROR] +} diff --git a/pkg/infrsatructure/external/mail/webmail_account.go b/pkg/infrsatructure/external/mail/webmail_account.go new file mode 100644 index 0000000..0722593 --- /dev/null +++ b/pkg/infrsatructure/external/mail/webmail_account.go @@ -0,0 +1,331 @@ +package mail + +import ( + "crypto/tls" + "errors" + "fmt" + "github.com/PuerkitoBio/goquery" + "io" + "log" + "net/http" + "net/http/cookiejar" + "net/url" + "strings" + "time" +) + +const ( + //LoginSuccessUrl = "https://mail.fontree.cn/iredadmin/dashboard?checknew" //登录后的重定向地址 + CreateUrl = "http://106.12.56.142/admin/box/new?new=true" + LoginUrl = "http://106.12.56.142/admin/login" +) + +type iredCookie struct { + Cookie string + Name string + ExpireAt *time.Time +} + +type IRedMail struct { + IsProd bool `json:"isProd"` + Username string `json:"username"` + Password string `json:"password"` + Domain string + *iredCookie +} + +type CreateAccountInfo struct { + Username string + Password string + Cn string +} + +var ReadMail *IRedMail + +func LoadEnv(userName, psw, domain string, isProd bool) { + + ReadMail = &IRedMail{ + IsProd: isProd, + Username: userName, + Password: psw, + Domain: domain, + } + +} + +//CreateMailAccount 创建电子邮箱账号 +func (m *IRedMail) CreateMailAccount(new CreateAccountInfo) error { + + if m.IsProd != true { + fmt.Println("过滤创建邮箱帐号") + return nil + } + + //0 登陆 + cookies, err := m.login() + if err != nil { + return err + } + + /* + //1 先去解析csrf_token + csrfToken, err := m.getCsrfTokenBeforeAdd() + if err != nil { + return err + } + fmt.Println(csrfToken, err) + */ + //1 先去解析csrf_token + err = m.createAccount(cookies, new) + if err != nil { + return err + } + + return nil +} + +// login 登陆超管 +func (m *IRedMail) login() ([]*http.Cookie, error) { + + cookies, csrfToken, err := m.getCsrfTokenAndCookieBeforeLogin() + if err != nil { + return nil, err + } + fmt.Println(cookies, csrfToken) + + loginUrl := LoginUrl + values := url.Values{} + values.Set("email", m.Username) + values.Set("password", m.Password) + values.Set("_csrf_token", csrfToken) + // 忽略HTTPS证书验证 + tr := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + + tempCookieJar, _ := cookiejar.New(nil) + u, err := url.Parse("http://106.12.56.142") + if err != nil { + log.Fatal(err) + return nil, err + } + tempCookieJar.SetCookies(u, cookies) + + // 创建一个自定义Transport的HTTP客户端 + //client := &http.Client{Transport: tr, Jar:cookies } + client := &http.Client{Transport: tr, Jar: tempCookieJar} + + // 发起POST请求 + res, err := client.PostForm(loginUrl, values) + if err != nil { + log.Fatal(err) + return nil, err + } + + // 发送请求 + defer res.Body.Close() + //fmt.Println(res.) + str, err := io.ReadAll(res.Body) + if err != nil { + return nil, err + } + fmt.Println("成功") + fmt.Println(string(str)) + + /* + if res.Request.URL.String() != LoginSuccessUrl { + msg := res.Request.URL.Query().Get("msg") + return errors.New("超管登录失败提示:" + msg) + } + */ + + /* + for _, cookie := range res.Cookies() { + temp := &iredCookie{ + Cookie: cookie.Value, + Name: cookie.Name, + } + m.iredCookie = temp + } + */ + + return res.Cookies(), nil +} + +// getCsrfTokenAndCookieBeforeLogin 登陆前获取token +func (m *IRedMail) getCsrfTokenAndCookieBeforeLogin() ([]*http.Cookie, string, error) { + var csrfToken string + var isExist bool + cookieJar, _ := cookiejar.New(nil) + + tr := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + + // 创建一个HTTP客户端,并设置cookie jar + client := &http.Client{ + Jar: cookieJar, + Transport: tr, + } + + // 创建登录请求 + loginURL := LoginUrl + req, err := http.NewRequest("GET", loginURL, nil) + if err != nil { + fmt.Println("创建请求失败:", err) + return nil, "", err + } + + // 发送登录请求 + res, err := client.Do(req) + + if err != nil { + fmt.Println("请求错误", loginURL, err) + return nil, "", err + } + + defer res.Body.Close() + if err != nil { + return nil, "", err + } + str, err := io.ReadAll(res.Body) + if err != nil { + return nil, "", err + } + + // 解析HTML + doc, err := goquery.NewDocumentFromReader(strings.NewReader(string(str))) + if err != nil { + return nil, "", err + } + + doc.Find("input[name='_csrf_token']").Each(func(i int, s *goquery.Selection) { + csrfToken, isExist = s.Attr("value") + fmt.Println("查找1---", csrfToken, isExist) // 输出: testUser + }) + + if isExist == false { + return nil, "", errors.New("没有查找到csrf_token") + } + + return res.Cookies(), csrfToken, nil +} + +// getCsrfTokenBeforeAdd 登陆前获取token +func (m *IRedMail) getCsrfTokenBeforeAdd() (string, error) { + var csrfToken string + var isExist bool + cookieJar, _ := cookiejar.New(nil) + + tr := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + + // 创建一个HTTP客户端,并设置cookie jar + client := &http.Client{ + Jar: cookieJar, + Transport: tr, + } + + // 创建登录请求 + loginURL := CreateUrl + m.Domain + req, err := http.NewRequest("GET", loginURL, nil) + if err != nil { + fmt.Println("创建请求失败:", err) + return "", err + } + + // 向请求中添加cookie + cookie := &http.Cookie{ + Name: m.iredCookie.Name, + Value: m.iredCookie.Cookie, + } + req.AddCookie(cookie) + + // 发送登录请求 + res, err := client.Do(req) + + if err != nil { + fmt.Println("请求错误", loginURL, err) + return "", err + } + + defer res.Body.Close() + if err != nil { + return "", err + } + str, err := io.ReadAll(res.Body) + if err != nil { + return "", err + } + + // 解析HTML + doc, err := goquery.NewDocumentFromReader(strings.NewReader(string(str))) + if err != nil { + return "", err + } + + doc.Find("input[name='csrf_token']").Each(func(i int, s *goquery.Selection) { + csrfToken, isExist = s.Attr("value") + fmt.Println("查找1---", csrfToken, isExist) // 输出: testUser + }) + + if isExist == false { + return "", errors.New("没有查找到csrf_token") + } + + return csrfToken, nil +} + +// createAccount 创建用户mail +func (m *IRedMail) createAccount(cookies []*http.Cookie, info CreateAccountInfo) error { + cookieJar, _ := cookiejar.New(nil) + + values := url.Values{} + values.Set("name", info.Cn) + values.Set("user", info.Username) + values.Set("domain", m.Domain) + values.Set("passwordPlaintext", info.Password) + + tr := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + u, err := url.Parse("http://106.12.56.142") + if err != nil { + log.Fatal(err) + return err + } + + cookieJar.SetCookies(u, cookies) + + // 创建一个HTTP客户端,并设置cookie jar + client := &http.Client{ + Jar: cookieJar, + Transport: tr, + //CheckRedirect: + } + + // 创建登录请求 + loginURL := CreateUrl + req, err := http.NewRequest("POST", loginURL, strings.NewReader(values.Encode())) + if err != nil { + fmt.Println("创建请求失败:", err) + return err + } + req.Header.Set("content-type", "application/x-www-form-urlencoded") + + // 发送登录请求 + res, err := client.Do(req) + + if err != nil { + fmt.Println("请求错误", loginURL, err) + return err + } + + defer res.Body.Close() + + fmt.Println("状态码", res.StatusCode) + fmt.Println("状态码", res.Status) + + return nil +} diff --git a/pkg/infrsatructure/external/mail/webmail_account_test.go b/pkg/infrsatructure/external/mail/webmail_account_test.go new file mode 100644 index 0000000..630fcf7 --- /dev/null +++ b/pkg/infrsatructure/external/mail/webmail_account_test.go @@ -0,0 +1,125 @@ +package mail + +import ( + "fmt" + "net/http" + "reflect" + "testing" +) + +func TestIRedMail_getCsrfTokenAndCookieBeforeLogin(t *testing.T) { + type fields struct { + IsProd bool + Username string + Password string + Domain string + iredCookie *iredCookie + } + tests := []struct { + name string + fields fields + want []*http.Cookie + want1 string + wantErr bool + }{ + // TODO: Add test cases. + {fields: fields{Username: "admin@fontree.cn", Password: "fontree567"}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + m := &IRedMail{ + IsProd: tt.fields.IsProd, + Username: tt.fields.Username, + Password: tt.fields.Password, + Domain: tt.fields.Domain, + iredCookie: tt.fields.iredCookie, + } + got, got1, err := m.getCsrfTokenAndCookieBeforeLogin() + fmt.Println("1------", got, got1) + if (err != nil) != tt.wantErr { + t.Errorf("getCsrfTokenAndCookieBeforeLogin() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("getCsrfTokenAndCookieBeforeLogin() got = %v, want %v", got, tt.want) + } + if got1 != tt.want1 { + t.Errorf("getCsrfTokenAndCookieBeforeLogin() got1 = %v, want %v", got1, tt.want1) + } + }) + } +} + +func TestIRedMail_login(t *testing.T) { + type fields struct { + IsProd bool + Username string + Password string + Domain string + iredCookie *iredCookie + } + tests := []struct { + name string + fields fields + want []*http.Cookie + want1 string + wantErr bool + }{ + // TODO: Add test cases. + {fields: fields{Username: "admin@fontree.cn", Password: "fontree567", IsProd: true}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + m := &IRedMail{ + IsProd: tt.fields.IsProd, + Username: tt.fields.Username, + Password: tt.fields.Password, + Domain: tt.fields.Domain, + iredCookie: tt.fields.iredCookie, + } + _, err := m.login() + fmt.Println("1------", err) + if (err != nil) != tt.wantErr { + t.Errorf("login() error = %v, wantErr %v", err, tt.wantErr) + return + } + }) + } +} + +func TestIRedMail_CreateAccount(t *testing.T) { + type fields struct { + IsProd bool + Username string + Password string + Domain string + iredCookie *iredCookie + } + tests := []struct { + name string + fields fields + want []*http.Cookie + want1 string + wantErr bool + }{ + // TODO: Add test cases. + {fields: fields{Username: "admin@fontree.cn", Password: "fontree567", IsProd: true}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + m := &IRedMail{ + IsProd: tt.fields.IsProd, + Username: tt.fields.Username, + Password: tt.fields.Password, + Domain: tt.fields.Domain, + iredCookie: tt.fields.iredCookie, + } + err := m.CreateMailAccount(CreateAccountInfo{Cn: "耿阳", Username: "gengyang", Password: "Aa.123456"}) + fmt.Println("1------", err) + if (err != nil) != tt.wantErr { + t.Errorf("login() error = %v, wantErr %v", err, tt.wantErr) + return + } + }) + } +} diff --git a/pkg/infrsatructure/external/mail_account.go b/pkg/infrsatructure/external/mail_account.go new file mode 100644 index 0000000..1716776 --- /dev/null +++ b/pkg/infrsatructure/external/mail_account.go @@ -0,0 +1,254 @@ +package external + +import ( + "crypto/tls" + "errors" + "fmt" + "github.com/PuerkitoBio/goquery" + "io" + "log" + "net/http" + "net/http/cookiejar" + "net/url" + "strings" + "time" +) + +const ( + LoginSuccessUrl = "https://mail.fontree.cn/iredadmin/dashboard?checknew" //登录后的重定向地址 + CreateUrl = "https://mail.fontree.cn/iredadmin/create/user/" + LoginUrl = "https://mail.fontree.cn/iredadmin/login" +) + +type iredCookie struct { + Cookie string + Name string + ExpireAt *time.Time +} + +type IRedMail struct { + IsProd bool `json:"isProd"` + Username string `json:"username"` + Password string `json:"password"` + Domain string + *iredCookie +} + +type CreateAccountInfo struct { + Username string + Password string + Cn string +} + +var ReadMail *IRedMail + +func LoadEnv(userName, psw, domain string, isProd bool) { + + ReadMail = &IRedMail{ + IsProd: isProd, + Username: userName, + Password: psw, + Domain: domain, + } + +} + +//CreateMailAccount 创建电子邮箱账号 +func (m *IRedMail) CreateMailAccount(new CreateAccountInfo) error { + + if m.IsProd != true { + fmt.Println("过滤创建邮箱帐号") + return nil + } + + //0 登陆 + err := m.login() + if err != nil { + return err + } + + //1 先去解析csrf_token + csrfToken, err := m.getCsrfTokenBeforeAdd() + if err != nil { + return err + } + + fmt.Println(csrfToken, err) + //1 先去解析csrf_token + err = m.createAccount(csrfToken, new) + if err != nil { + return err + } + + return nil +} + +// login 登陆超管 +func (m *IRedMail) login() error { + + loginUrl := LoginUrl + values := url.Values{} + values.Set("username", m.Username) + values.Set("password", m.Password) + values.Set("form_login", "Login") + values.Set("lang", "en_US") + // 创建一个表单数据 + cookieJar, _ := cookiejar.New(nil) + // 忽略HTTPS证书验证 + tr := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + + // 创建一个自定义Transport的HTTP客户端 + client := &http.Client{Transport: tr, Jar: cookieJar} + + // 发起POST请求 + res, err := client.PostForm(loginUrl, values) + if err != nil { + log.Fatal(err) + } + + // 发送请求 + defer res.Body.Close() + + if res.Request.URL.String() != LoginSuccessUrl { + msg := res.Request.URL.Query().Get("msg") + return errors.New("超管登录失败提示:" + msg) + } + + for _, cookie := range res.Cookies() { + temp := &iredCookie{ + Cookie: cookie.Value, + Name: cookie.Name, + } + m.iredCookie = temp + } + + return nil +} + +// getCsrfTokenBeforeAdd 登陆前获取token +func (m *IRedMail) getCsrfTokenBeforeAdd() (string, error) { + var csrfToken string + var isExist bool + cookieJar, _ := cookiejar.New(nil) + + tr := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + + // 创建一个HTTP客户端,并设置cookie jar + client := &http.Client{ + Jar: cookieJar, + Transport: tr, + } + + // 创建登录请求 + loginURL := CreateUrl + m.Domain + req, err := http.NewRequest("GET", loginURL, nil) + if err != nil { + fmt.Println("创建请求失败:", err) + return "", err + } + + // 向请求中添加cookie + cookie := &http.Cookie{ + Name: m.iredCookie.Name, + Value: m.iredCookie.Cookie, + } + req.AddCookie(cookie) + + // 发送登录请求 + res, err := client.Do(req) + + if err != nil { + fmt.Println("请求错误", loginURL, err) + return "", err + } + + defer res.Body.Close() + if err != nil { + return "", err + } + str, err := io.ReadAll(res.Body) + if err != nil { + return "", err + } + + // 解析HTML + doc, err := goquery.NewDocumentFromReader(strings.NewReader(string(str))) + if err != nil { + return "", err + } + + doc.Find("input[name='csrf_token']").Each(func(i int, s *goquery.Selection) { + csrfToken, isExist = s.Attr("value") + fmt.Println("查找1---", csrfToken, isExist) // 输出: testUser + }) + + if isExist == false { + return "", errors.New("没有查找到csrf_token") + } + + return csrfToken, nil +} + +// createAccount 创建用户mail +func (m *IRedMail) createAccount(csrfToken string, info CreateAccountInfo) error { + cookieJar, _ := cookiejar.New(nil) + + values := url.Values{} + values.Set("csrf_token", csrfToken) + values.Set("domainName", m.Domain) + values.Set("username", info.Username) + values.Set("newpw", info.Password) + values.Set("confirmpw", info.Password) + values.Set("cn", info.Cn) + values.Set("preferredLanguage", "zh_CN") + values.Set("mailQuota", "1024") + values.Set("submit_add_user", "Add") + + tr := &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + } + + // 创建一个HTTP客户端,并设置cookie jar + client := &http.Client{ + Jar: cookieJar, + Transport: tr, + //CheckRedirect: + } + + // 创建登录请求 + loginURL := CreateUrl + m.Domain + req, err := http.NewRequest("POST", loginURL, strings.NewReader(values.Encode())) + if err != nil { + fmt.Println("创建请求失败:", err) + return err + } + req.Header.Set("content-type", "application/x-www-form-urlencoded") + + // 向请求中添加cookie + cookie := &http.Cookie{ + Name: m.Name, + Value: m.Cookie, + } + req.AddCookie(cookie) + + // 发送登录请求 + res, err := client.Do(req) + + if err != nil { + fmt.Println("请求错误", loginURL, err) + return err + } + + defer res.Body.Close() + + msg := res.Request.URL.Query().Get("msg") + if msg != "CREATED" { + return errors.New("生成mail账号失败:" + msg) + } + + return nil +} diff --git a/pkg/infrsatructure/external/mail_account_test.go b/pkg/infrsatructure/external/mail_account_test.go new file mode 100644 index 0000000..46542cc --- /dev/null +++ b/pkg/infrsatructure/external/mail_account_test.go @@ -0,0 +1,76 @@ +package external + +import ( + "testing" +) + +func TestIRedMail_login(t *testing.T) { + type fields struct { + Username string + Password string + } + tests := []struct { + name string + fields fields + want string + wantErr bool + }{ + // TODO: Add test cases. + {fields: fields{Username: "postmaster@fontree.cn", Password: "Zaq12wsx"}}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + m := &IRedMail{ + Username: tt.fields.Username, + Password: tt.fields.Password, + } + err := m.login() + if (err != nil) != tt.wantErr { + t.Errorf("login() error = %v, wantErr %v", err, tt.wantErr) + return + } + }) + } +} + +func TestIRedMail_CreateMailAccount(t *testing.T) { + + type fields struct { + Username string + Password string + Domain string + iredCookie *iredCookie + } + type args struct { + new CreateAccountInfo + } + tests := []struct { + name string + fields fields + args args + wantErr bool + }{ + // TODO: Add test cases. + {args: args{new: CreateAccountInfo{Username: "gengyang", Password: "Aa.123456", Cn: "耿阳"}}, fields: fields{ + Username: "postmaster@fontree.cn", + Password: "Zaq12wsx", + Domain: "fontree.cn", + }}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + m := &IRedMail{ + Username: tt.fields.Username, + Password: tt.fields.Password, + Domain: tt.fields.Domain, + iredCookie: tt.fields.iredCookie, + } + err := m.CreateMailAccount(tt.args.new) + if (err != nil) != tt.wantErr { + t.Errorf("CreateMailAccount() error = %v, wantErr %v", err, tt.wantErr) + return + } + }) + } +} diff --git a/pkg/m/msg.go b/pkg/m/msg.go new file mode 100644 index 0000000..0cce0bb --- /dev/null +++ b/pkg/m/msg.go @@ -0,0 +1,63 @@ +package m + +import "github.com/fonchain_enterprise/utils/aes" + +var Encryption aes.Encryption +var JWTSecret = []byte("asdfqwer1234") + +const ( + SERVER_CONFIG = "../conf/conf.ini" + DefaultDomain = "fontree" +) + +const ( + ArtistTokenTime = 720 + TokenTime = 12 + RefreshTokenTime = 720 +) +const ( + SUCCESS = "success" + FAILED = "failed" + ExistFAILED = "exist" +) +const ( + Unknown = 0 + Unnamed = 1 + UnderReview = 2 + AuditFailure = 3 + Pass = 4 +) +const ( + ERRORPWD = "账号或密码错误" + ERRORCODE = "账号或验证码错误" + ERRORCONFIG = "配置文件读取错误,请检查文件路径:" + ACCOUNT_EXIST = "账号已存在" + JOB_NUMBER_EXIST = "工号已存在" + Not_Found = "没有找到数据" + Not_Person_Verify = "您未进行实名认证" + Forbidden_Ip = "网络地址被禁用" + Mobile_Sended = "已经发送过,验证码尚可用" + Black_Mobile_Sended = "系统提示:已经发送过,验证码尚可用" + Mobile_Check_Pw_Over = "登陆频率过快,请稍候登陆" + Mobile_Send_Over = "您的手机号当天发送次数过多,请联系管理员通过密码登录" + Mobile_Code_Wrong = "您的手机号验证码错误,请确认之后注册" + Mobile_Wrong = "手机号不合法" + Mobile_Not_Change = "手机号未更改" + Mobile_New_Tel_Over = "新手机号过期" + Mobile_Wrong_Code = "验证码错误" + Mobile_Not_Send = "验证码未发送" + IdNum_Need_RealName = "身份证校验需要您的真实姓名" + EmailCreateWrong = "邮箱创建失败" + AccountDoesNotExist = "账号不存在" +) + +const ( + SEX_MAN = iota + 1 + SEX_WOMAN +) + +const ( + MailDomain = "fontree.cn" + MailRootUserName = "postmaster@fontree.cn" + MailRootPaw = "Zaq12wsx" +) diff --git a/pkg/model/init.go b/pkg/model/init.go new file mode 100644 index 0000000..6cb4612 --- /dev/null +++ b/pkg/model/init.go @@ -0,0 +1,72 @@ +package model + +import ( + "fmt" + "github.com/fonchain_enterprise/micro-account/cmd/config" + "github.com/fonchain_enterprise/utils/zap_log" + "gorm.io/gorm/logger" + "strings" + "time" + + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/schema" +) + +var DB *gorm.DB + +type MysqlConfig struct { + Db string + DbHost string + DbPort string + DbUser string + DbPassWord string + DbName string +} + +func LoadEnv(config MysqlConfig) { + + //MySQL数据库 + path := strings.Join([]string{config.DbUser, ":", config.DbPassWord, "@tcp(", config.DbHost, ":", + config.DbPort, ")/", config.DbName, "?charset=utf8&parseTime=true&loc=Local"}, "") + + fmt.Println(path) + //连接数据库 + Database(path) + +} + +func Database(conn string) { + + var ormLogger logger.Interface + if config.AppConfig.System.Mode != "prod" { + ormLogger = logger.Default.LogMode(logger.Info) + } else { + ormLogger = zap_log.NewGormLogger() + } + + db, err := gorm.Open(mysql.New(mysql.Config{ + DSN: conn, // DSN data source name + DefaultStringSize: 256, // string 类型字段的默认长度 + DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持 + DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引 + DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列 + SkipInitializeWithVersion: false, // 根据版本自动配置 + }), &gorm.Config{ + //Logger: log2.NewGormLogger(), + Logger: ormLogger, + + NamingStrategy: schema.NamingStrategy{ + SingularTable: true, + }, + }) + if err != nil { + panic(err) + } + sqlDB, _ := db.DB() + sqlDB.SetMaxIdleConns(20) //设置连接池,空闲 + sqlDB.SetMaxOpenConns(100) //打开 + sqlDB.SetConnMaxLifetime(time.Second * 30) + DB = db + migration() +} diff --git a/pkg/model/login_log.go b/pkg/model/login_log.go new file mode 100644 index 0000000..7b384d6 --- /dev/null +++ b/pkg/model/login_log.go @@ -0,0 +1,30 @@ +package model + +import ( + "gorm.io/plugin/soft_delete" + "time" +) + +const ( + Status_In = 1 + Status_Out = 2 + Status_Off = 3 +) + +//LoginLog 用户模型 +type LoginLog struct { + ID uint `gorm:"primarykey"` + Domain *string `gorm:"type:varchar(32);column:domain;default:'';comment:domain" json:"domian"` //过期时间 + CreatedAt time.Time + UpdatedAt time.Time + DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at;type:int(11)" json:"deletedAt"` + UserId uint `gorm:"type:int(11);column:user_id;default:0;comment:绑定的用户id" json:"userId"` //绑定的用户id + Uuid string `gorm:"type:char(16);column:uuid;default:'';comment:uuid" json:"uuid"` //绑定的用户id + Ip string `gorm:"type:varchar(50);column:ip;default:'';comment:ip地址" json:"Ip"` //登录的ip + Token string `gorm:"type:text;column:token;default:;comment:token信息" json:"token"` //token + Status uint8 `gorm:"type:tinyint;column:status;default:1;comment:状态(1-登陆中 2-登出)" json:"status"` //status状态 + ExpireDate string `gorm:"type:varchar(32);column:expire_date;default:'';comment:token过期日期" json:"expire_date"` //过期时间 + LastDate string `gorm:"type:varchar(32);column:last_date;default:'';comment:最后活跃时间" json:"lastDate"` //status状态 + LogoutDate string `gorm:"type:varchar(32);column:logout_date;default:'';comment:登出时间" json:"logoutDate"` //status状态 + Address string `gorm:"type:varchar(32);column:address;default:'';comment:地址" json:"address"` //status状态 +} diff --git a/pkg/model/migration.go b/pkg/model/migration.go new file mode 100644 index 0000000..8982b4a --- /dev/null +++ b/pkg/model/migration.go @@ -0,0 +1,80 @@ +package model + +import ( + "fmt" +) + +// 类型迁移 +func migration() { + + err := DB.AutoMigrate() + //err = DBOrder.AutoMigrate( + // &model.Pay{}, + //) + + if err != nil { + fmt.Println("register table fail") + panic(1) + } + + //自动迁移模式 + AddTable(&RefreshToken{}) + AddTable(&LoginLog{}) + AddTable(&User{}) + AddTable(&RealName{}) + + //增加字段 + AddColumn(&User{}, "title") + AddColumn(&User{}, "job_num") + AddColumn(&User{}, "birth_date") + AddColumn(&User{}, "sex") + AddColumn(&User{}, "operator") + + AddColumn(&User{}, "last_login_date") + AddColumn(&User{}, "ip") + AddColumn(&User{}, "invitation_code") + AddColumn(&User{}, "english_name") + AddColumn(&User{}, "mail_account") + + AddColumn(&LoginLog{}, "token") + AddColumn(&LoginLog{}, "status") + AddColumn(&LoginLog{}, "expire_date") + AddColumn(&LoginLog{}, "last_date") + AddColumn(&LoginLog{}, "logout_date") + AddColumn(&LoginLog{}, "address") + AddColumn(&LoginLog{}, "domain") + AddColumn(&LoginLog{}, "uuid") + AddColumn(&User{}, "domain") + AddColumn(&User{}, "left_date") + AddColumn(&User{}, "remark") + AddColumn(&User{}, "recent_img") + AddColumn(&RealName{}, "realid_img_a") + AddColumn(&RealName{}, "realid_img_b") + AddColumn(&RealName{}, "is_real") + AddColumn(&RealName{}, "video") + AddColumn(&User{}, "ic_num") + AddColumn(&User{}, "train") + AddColumn(&User{}, "certificate") + AddColumn(&User{}, "source") + AddColumn(&User{}, "security_code") + AddColumn(&User{}, "block_addr") +} + +// 数据迁移 +func AddColumn(dst interface{}, column string) { + if DB.Migrator().HasColumn(dst, column) == false { + if err := DB.Migrator().AddColumn(dst, column); err != nil { + fmt.Println(err) + } + } +} + +func AddTable(dst interface{}) { + if DB.Migrator().HasTable(dst) == false { + if err := DB.Migrator().CreateTable(dst); err != nil { + fmt.Println(err) + return + } + } + return +} diff --git a/pkg/model/real_name.go b/pkg/model/real_name.go new file mode 100644 index 0000000..1a1936f --- /dev/null +++ b/pkg/model/real_name.go @@ -0,0 +1,23 @@ +package model + +import ( + "gorm.io/plugin/soft_delete" + "time" +) + +// RealName 实名认证模型 +type RealName struct { + ID uint `gorm:"primarykey"` + CreatedAt time.Time + UpdatedAt time.Time + DeletedAt soft_delete.DeletedAt `gorm:"uniqueIndex:udx_name"` + Name string `gorm:"column:name;comment:姓名" json:"name"` + Sex int `gorm:"column:sex;comment:性别:1男 2女" json:"sex"` + Nationality string `gorm:"column:nationality;comment:国籍" json:"nationality"` + DocumentType int `gorm:"column:document_type;comment:证件类型:1护照 2身份证 3驾驶证 4居住证 5自拍照 6社保卡" json:"documentType"` + CertificatePicture string `gorm:"type:varchar(500);column:certificate_picture;comment:证件照片" json:"certificatePicture"` + Validity string `gorm:"column:validity;comment:证件有效期" json:"validity"` + PlaceOfResidence string `gorm:"column:place_of_residence;comment:居住地" json:"placeOfResidence"` + GroupPhoto string `gorm:"column:group_photo;comment:证件合影" json:"groupPhoto"` + Attachment string `gorm:"column:attachment;comment:附件" json:"attachment"` +} diff --git a/pkg/model/refresh_token.go b/pkg/model/refresh_token.go new file mode 100644 index 0000000..b261f0f --- /dev/null +++ b/pkg/model/refresh_token.go @@ -0,0 +1,23 @@ +package model + +import ( + "time" +) + +const ( + IsForBid_Yes = 1 + IsForBid_No = 2 + UseNum_Max = 15 +) + +//RefreshToken 长期有效刷新token +type RefreshToken struct { + ID uint `gorm:"primarykey"` + CreatedAt time.Time + UpdatedAt time.Time + RefreshToken string `gorm:"uniqueIndex:un_token;type:varchar(256);column:refresh_token;default:'';comment:refresh_token" json:"refreshToken"` + ExpireDate string `gorm:"type:varchar(32);column:expire_date;default:'';comment:token过期日期" json:"expire_date"` //过期时间 + UseNum uint8 `gorm:"type:tinyint;column:use_num;default:0;comment:使用次数" json:"useNum"` //使用次数 + LastUseDate string `gorm:"type:varchar(32);column:last_use_date;default:'';comment:上次使用的时间" json:"lastUseDate"` //使用次数 + IsForbid uint8 `gorm:"type:tinyint;column:status;default:1;comment:状态(1-禁用 2-可用)" json:"IsForbid"` //status状态 +} diff --git a/pkg/model/user.go b/pkg/model/user.go new file mode 100644 index 0000000..0e65bd1 --- /dev/null +++ b/pkg/model/user.go @@ -0,0 +1,298 @@ +package model + +import ( + "database/sql/driver" + "encoding/json" + "errors" + "fmt" + "github.com/fonchain_enterprise/micro-account/api/account" + "github.com/fonchain_enterprise/micro-account/pkg/cache" + "github.com/fonchain_enterprise/micro-account/pkg/common/redis_key" + "github.com/fonchain_enterprise/micro-account/pkg/common/utils" + "github.com/fonchain_enterprise/micro-account/pkg/common/verifica" + "github.com/fonchain_enterprise/micro-account/pkg/domain" + "github.com/fonchain_enterprise/micro-account/pkg/m" + "github.com/mozillazg/go-pinyin" + "golang.org/x/crypto/bcrypt" + "gorm.io/plugin/soft_delete" + "strconv" + "strings" + "time" +) + +type Extend struct { + JumpTo string + Lang string + CanScan bool //是否可以扫码 + ResolutionRatio bool //是否固定分辨率 +} + +type Operator struct { + ID uint32 `json:"ID"` + Name string `json:"name"` +} + +// User 用户模型 +type User struct { + ID uint `gorm:"primarykey"` + CreatedAt time.Time + UpdatedAt time.Time + DeletedAt soft_delete.DeletedAt `gorm:"column:deleted_at;type:int(11)" json:"deletedAt"` + Domain *string `gorm:"size:50"` + SubNum string `gorm:"column:sub_num;comment:用户编号" json:"subNum"` + TelNum string `gorm:"column:tel_num;comment:" json:"telNum"` + TelAreaCode string `gorm:"column:tel_area_code;comment:手机区号" json:"telAreaCode"` + Status int `gorm:"column:status;comment:状态 1:未实名 2:审核中 3:审核失败 4:审核通过" json:"status"` + RegistrationTime string `gorm:"column:registration_time;comment:注册时间" json:"registrationTime"` + AuditTime string `gorm:"column:audit_time;comment:审核时间" json:"auditTime"` + RealNameID uint + RealName *RealName `gorm:"foreignKey:RealNameID" json:"RealName"` + PasswordDigest string + NotPassRemarks string `gorm:"column:not_pass_remarks;comment:不通过备注" json:"notPassRemarks"` +} + +const ( + PassWordCost = 12 //密码加密难度 + Active string = "active" //激活用户 + NOTActive string = "notactive" //未激活用户 + USERLEFT string = "left" //离职 +) + +var SendPhoneNum = map[string]string{} + +func SetSendPhoneNUm(IsProd bool) { + + if IsProd == true { + SendPhoneNum["13788998899"] = "15895559080" + } else { + SendPhoneNum["13788998899"] = "18362666451" + } + + fmt.Println("是否是线上,同时手机号如何翻译", IsProd, SendPhoneNum) +} + +func (j *Operator) Scan(src interface{}) error { + return json.Unmarshal(src.([]byte), j) +} + +func (j Operator) Value() (driver.Value, error) { + v, err := json.Marshal(j) + return string(v), err +} + +func (j *Extend) Scan(src interface{}) error { + return json.Unmarshal(src.([]byte), j) +} + +func (j Extend) Value() (driver.Value, error) { + v, err := json.Marshal(j) + return string(v), err +} + +func FormatExtend(extend *account.Extend) Extend { + var res Extend + res.JumpTo = extend.JumpTo + res.Lang = extend.Lang + res.ResolutionRatio = extend.ResolutionRatio + res.CanScan = extend.CanScan + return res +} + +func FormatOperator(extend *account.Operator) Operator { + var res Operator + res.ID = extend.ID + res.Name = extend.Name + return res +} + +// SetPassword 设置密码 +//func (user *User) SetPassword(password string) error { +// bytes, err := bcrypt.GenerateFromPassword([]byte(password), PassWordCost) +// if err != nil { +// return err +// } +// user.PasswordDigest = string(bytes) +// return nil +//} +// +//// GetWorkYear 获取工作时间长度 +//func (user *User) GetWorkYear() float32 { +// if user.EnterDate == "" { +// return 0 +// } +// +// t, err := time.ParseInLocation("2006-01-02", user.EnterDate, time.Local) +// if err != nil { +// return 0 +// } +// +// //if user.LeftDate != "" { +// // +// // end, err := time.ParseInLocation("2006-01-02", user.LeftDate, time.Local) +// // if err == nil { +// // return utils.SubYearFromStartAndEnd(t, end) +// // } +// //} +// +// return utils.SubYearFromNowBefore(t) +//} + +// ChangeNewTel 修改手机号 +func (user *User) ChangeNewTel(code string) error { + nowNewTelKey := redis_key.GetNowNewTelById(*user.Domain, strconv.Itoa(int(user.ID))) + + //0 校验当前修改到的手机号 以及账号唯一性 + newTelNumObj := cache.RedisClient.Get(nowNewTelKey) + newTelNum := newTelNumObj.Val() + + if newTelNum == "" { + return errors.New(m.Mobile_Wrong) + } + + var count int64 + DB.Model(&User{}).Where(&User{TelNum: newTelNum, Domain: user.Domain}).Count(&count) + + if count > 0 { + return errors.New(m.ACCOUNT_EXIST) + } + + if newTelNum == user.TelNum { + return nil + } + + //检测验证码 + str := cache.RedisClient.Get(redis_key.GetChangeTelKey(*user.Domain, newTelNum, strconv.Itoa(int(user.ID)))) + + if str.Val() == "" { + return errors.New(m.Mobile_Not_Send) + } + + if str.Val() != code { + return errors.New(m.Mobile_Wrong_Code) + } + + //修改完毕之后删除 + domain.DelRecordTelMsgCodeLogin(*user.Domain, newTelNum, strconv.Itoa(int(user.ID))) + + err := DB.Model(&user).Updates(&User{TelNum: newTelNum}).Error + + return err +} + +func (user *User) NowNewTelNum() (string, error) { + + str := cache.RedisClient.Get(redis_key.GetNowNewTelById(*user.Domain, strconv.Itoa(int(user.ID)))) + if str.Val() == "" { + return "", errors.New(m.Mobile_New_Tel_Over) + } + + return str.Val(), nil + +} + +// SendNewTelMsg 给新手机号发送验证码 +func (user *User) SendNewTelMsg(newTelNum, project string, signNo uint) error { + telTodayNum := redis_key.GetAccountKeyCountToday(*user.Domain, newTelNum) + if newTelNum == "" { + return errors.New("新手机号不能为空") + } + + if user.TelNum == newTelNum { + return errors.New(m.Mobile_Not_Change) + } + + if utils.CheckMobile(newTelNum) == false { + return errors.New(m.Mobile_Wrong) + } + + //0 限制频率 (一个账号一分钟少于一次 同一一天最多10条) + fmt.Println(redis_key.GetOneMinuteKey(*user.Domain, newTelNum, strconv.Itoa(int(user.ID)))) + str := cache.RedisClient.Get(redis_key.GetOneMinuteKey(*user.Domain, newTelNum, strconv.Itoa(int(user.ID)))) + fmt.Println(str) + + if str.Val() != "" { + return errors.New(m.Mobile_Sended) + } + + if err := domain.CheckMsg(telTodayNum); err != nil { + return errors.New(m.Mobile_Send_Over) + } + + //1 执行发送 并且记录code + code, err := verifica.SendMsgV2(newTelNum, project, signNo) + + if err != nil { + return err + } + + //2 记录发送 + err = domain.SetRecordTelMsgCodeLogin(*user.Domain, newTelNum, code, strconv.Itoa(int(user.ID))) + + return err +} + +// CheckPassword 校验密码 +func (user *User) CheckPassword(password string) bool { + err := bcrypt.CompareHashAndPassword([]byte(user.PasswordDigest), []byte(password)) + return err == nil +} + +func DomainCount(domain string) int64 { + + var count int64 + + //获取自己领导的部门 + DB.Model(&User{}). + Where(&User{Domain: &domain}).Count(&count) + + return count +} + +func RandList(domain string, limit int) ([]*User, int64) { + + var list []*User + var count int64 + var departmentIds []uint + + //获取自己领导的部门 + searchObj := DB.Preload("RealName"). + Where(&User{Domain: &domain}). + Limit(limit). + Order("rand()") + + searchObj.Find(&list, departmentIds) + + DB.Model(&User{}).Where(&User{Domain: &domain}).Count(&count) + + return list, count +} + +func SynInvitationCode(userId uint) error { + + //保存实名信息 + var user *User + + if err := DB.Model(&User{}).First(user, userId).Error; err != nil { + return err + } + + updateMap := map[string]interface{}{"invitation_code": utils.DecimalToAny(int(userId))} + return DB.Model(&User{}).Where(&User{ID: userId}).Updates(updateMap).Error + +} + +func GetEnglishNameByName(nickName string) string { + + fmt.Println(strings.ReplaceAll("hello word", " ", "")) + pinyinObj := pinyin.NewArgs() + pinyinObj.Style = pinyin.Normal + pinyinObj.Separator = "" + result := pinyin.Pinyin(strings.ReplaceAll(nickName, " ", ""), pinyinObj) + pinyinStr := "" + for _, s := range result { + fmt.Println(s) + pinyinStr += s[0] + } + + return strings.ReplaceAll(pinyinStr, " ", "") +} diff --git a/pkg/model/user_test.go b/pkg/model/user_test.go new file mode 100644 index 0000000..4f4ced7 --- /dev/null +++ b/pkg/model/user_test.go @@ -0,0 +1,186 @@ +package model + +import ( + "fmt" + "github.com/fonchain_enterprise/micro-account/api/account" + "github.com/fonchain_enterprise/micro-account/pkg/common/utils" + "github.com/fonchain_enterprise/micro-account/pkg/infrsatructure/external" + "github.com/fonchain_enterprise/micro-account/pkg/m" + "testing" + "time" +) + +func TestDomainCount(t *testing.T) { + +} + +func TestSynMailAccount(t *testing.T) { + + //数据库 + mysqlConfig := MysqlConfig{ + Db: "mysql", + DbHost: "rm-bp176edrl1g6kcycblo.mysql.rds.aliyuncs.com", + DbPort: "3306", + DbUser: "fonchain_opv", + DbPassWord: "IhQmhg8HZjDmU=Ove5PnA^D", + DbName: "fontree-account", + } + + LoadEnv(mysqlConfig) + + external.LoadEnv("postmaster@fontree.cn", "Zaq12wsx", "fontree.cn", true) + + var users []User + domain := m.DefaultDomain + DB.Model(&User{}).Where(&User{Domain: &domain}).Where("isNull(mail_account) and id >50 ").Where("status != 'left'").Limit(100).Find(&users) + fmt.Println(users) + if len(users) <= 0 { + return + } + for _, user := range users { + + var englishName, mailAccount, mailAccountPrefix string + var num int64 + if utils.HasEnglishAndChinese(user.Nickname) { + return + } + + englishName = user.Nickname + if utils.HasChinese(user.Nickname) { + englishName = GetEnglishNameByName(user.Nickname) + } + + DB.Model(&User{}).Unscoped().Preload("DeletedAt").Where(&User{Domain: user.Domain, EnglishName: englishName}).Count(&num) + + if num >= 1 { + mailAccount = fmt.Sprintf("%s%02d@%s", englishName, num+1, m.MailDomain) + mailAccountPrefix = fmt.Sprintf("%s%02d", englishName, num+1) + } else { + mailAccount = fmt.Sprintf("%s@%s", englishName, m.MailDomain) + mailAccountPrefix = fmt.Sprintf("%s", englishName) + + } + + err := external.ReadMail.CreateMailAccount(external.CreateAccountInfo{Username: mailAccountPrefix, Password: "Aa.123456", Cn: user.Nickname}) + + if err != nil { + + fmt.Println("2------", err) + return + } + + if err := DB.Model(&User{}).Where(&User{ID: uint(user.ID)}).UpdateColumns(&User{MailAccount: mailAccount, EnglishName: englishName}).Error; err != nil { + fmt.Println("1------", err) + return + } + + fmt.Println("设置成功一个", user.Nickname) + time.Sleep(1 * time.Second) + } + +} + +func TestGetMemCry(t *testing.T) { + + user := &User{ + ID: 153, + MnemonicWords: "bbX/2x+VK1zMX/oETDqPyw67Sj16H2ex8J8+tp7gFoSVUpL1UXLAJbqcURigOOZU", + } + + fmt.Println(user.GetMemCry()) + +} + +func TestNick(t *testing.T) { + + fmt.Println(SendPhoneNum["13788998899"]) + + if _, ok := SendPhoneNum["13788998899"]; ok { + fmt.Println("1-----", SendPhoneNum["13788998899"]) + } + +} + +func TestGetEnglishNameByName(t *testing.T) { + type args struct { + nickName string + } + tests := []struct { + name string + args args + want string + }{ + {args: args{nickName: "阿丽米罕·色依提"}}, + // TODO: Add test cases. + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := GetEnglishNameByName(tt.args.nickName); got != tt.want { + t.Errorf("GetEnglishNameByName() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestUser_recordTrainVideo(t *testing.T) { + //数据库 + mysqlConfig := MysqlConfig{ + Db: "mysql", + DbHost: "172.16.100.93", + DbPort: "9061", + DbUser: "root", + DbPassWord: "123456", + DbName: "fontree-account", + } + //http://172.16.100.93:9010/salebot + LoadEnv(mysqlConfig) + + external.LoadEnv("postmaster@fontree.cn", "Zaq12wsx", "fontree.cn", true) + + var user *User + domain := m.DefaultDomain + DB.Model(&User{}).Where(&User{Domain: &domain, ID: 40}).Find(&user) + + var trains []*account.TrainVideo + trains = append(trains, &account.TrainVideo{TrainUUID: "1", TrainDesc: "111--", Video: "x111x"}) + trains = append(trains, &account.TrainVideo{TrainUUID: "2", TrainDesc: "2--", Video: "x2x"}) + trains = append(trains, &account.TrainVideo{TrainUUID: "4", TrainDesc: "4--", Video: "x4x"}) + + err := user.recordTrainVideo(trains) + fmt.Println("err", err) +} + +func TestSynTrainVideo(t *testing.T) { + + //数据库 + mysqlConfig := MysqlConfig{ + Db: "mysql", + DbHost: "172.16.100.93", + DbPort: "9061", + DbUser: "root", + DbPassWord: "123456", + DbName: "fontree-account", + } + + LoadEnv(mysqlConfig) + + var users []User + domain := m.DefaultDomain + DB.Model(&User{}).Where(&User{Domain: &domain}).Where("train != ''").Limit(1000).Find(&users) + //fmt.Println(users) + if len(users) <= 0 { + return + } + + fmt.Println(len(users)) + for _, t1 := range users { + var trains []*account.TrainVideo + trains = append(trains, &account.TrainVideo{TrainUUID: "1", TrainDesc: "市场培训", Video: t1.Train}) + + err := t1.recordTrainVideo(trains) + if err != nil { + fmt.Println(t1.ID, err) + } + } + +} diff --git a/pkg/serializer/user.go b/pkg/serializer/user.go new file mode 100644 index 0000000..1779fad --- /dev/null +++ b/pkg/serializer/user.go @@ -0,0 +1,107 @@ +package serializer + +import ( + "github.com/fonchain_enterprise/micro-account/api/account" + "github.com/fonchain_enterprise/micro-account/pkg/common/utils" + "github.com/fonchain_enterprise/micro-account/pkg/model" +) + +type User struct { + ID uint `json:"id"` + Account string `json:"account"` + NickName string `json:"nickName"` + Type int `json:"type"` + TelNum string `json:"telNum"` + Status string `json:"status"` + Avatar string `json:"avatar"` + CreateAt int64 `json:"createAt"` + RealNameID uint `json:"realNameId"` + RealName string `json:"realName"` + IDNum string `json:"idNum"` +} + +// BuildUser 序列化用户 +func BuildUser(user *model.User) *account.AccountInfo { + + var realName = "" + var IdNum = "" + var videos []*account.TrainVideo + + //if user.RealName != nil { + // realName = user.RealName.Name + // IdNum, _ = user.RealName.GetIDNum(user) + //} + + //extend := &account.Extend{ + // JumpTo: user.Extend.JumpTo, + // Lang: user.Extend.Lang, + // CanScan: user.Extend.CanScan, + // ResolutionRatio: user.Extend.ResolutionRatio, + //} + // + //if user.InvitationCode == "" { + // user.InvitationCode, _ = SynInvitationCode(user.ID) + //} + + return &account.AccountInfo{ + ID: uint64(user.ID), + TelNum: user.TelNum, + Status: int32(user.Status), + //Avatar: user.AvatarURL(), + CreateAt: user.CreatedAt.Format("2006-01-02 15:04:05"), + RealName: realName, + Domain: *user.Domain, + IDNum: IdNum, + TrainVideos: videos, + UpdatedAt: user.UpdatedAt.Format("2006-01-02 15:04:05"), + } +} +func BuildUsers(items []*model.User) (users []*account.AccountInfo) { + for _, item := range items { + user := BuildUser(item) + users = append(users, user) + } + return users +} +func BuildUserList(user []*model.User) []*account.UserListInfo { + if len(user) == 0 { + return []*account.UserListInfo{} + } + var userList []*account.UserListInfo + for _, i := range user { + userList = append(userList, &account.UserListInfo{ + Id: uint64(i.ID), + Status: int32(i.Status), + Name: i.RealName.Name, + Sex: int32(i.RealName.Sex), + Nationality: i.RealName.Nationality, + DocumentType: int32(i.RealName.DocumentType), + CertificatePicture: i.RealName.CertificatePicture, + Validity: i.RealName.Validity, + PlaceOfResidence: i.RealName.PlaceOfResidence, + GroupPhoto: i.RealName.GroupPhoto, + Attachment: i.RealName.Attachment, + RegistrationTime: i.RegistrationTime, + AuditTime: i.AuditTime, + SubNum: i.SubNum, + NotPassRemarks: i.NotPassRemarks, + TelNum: i.TelNum, + }) + } + return userList +} +func SynInvitationCode(userId uint) (string, error) { + + //保存实名信息 + var user *model.User + + if err := model.DB.Model(&model.User{}).First(&user, userId).Error; err != nil { + return "", err + } + + invitationCode := utils.DecimalToAny(int(userId)) + + updateMap := map[string]interface{}{"invitation_code": invitationCode} + return invitationCode, model.DB.Model(&model.User{}).Where(&model.User{ID: userId}).Updates(updateMap).Error + +} diff --git a/pkg/serializer/user_test.go b/pkg/serializer/user_test.go new file mode 100644 index 0000000..a6b8c35 --- /dev/null +++ b/pkg/serializer/user_test.go @@ -0,0 +1,31 @@ +package serializer + +import "testing" + +func TestSynInvitationCode(t *testing.T) { + type args struct { + userId uint + } + tests := []struct { + name string + args args + want string + wantErr bool + }{ + // TODO: Add test cases. + {name: "1", args: struct{ userId uint }{userId: 1964}, want: "", wantErr: true}, + {name: "1", args: struct{ userId uint }{userId: 1978}, want: "", wantErr: true}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := SynInvitationCode(tt.args.userId) + if (err != nil) != tt.wantErr { + t.Errorf("SynInvitationCode() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("SynInvitationCode() got = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/pkg/service/account.go b/pkg/service/account.go new file mode 100644 index 0000000..b42656e --- /dev/null +++ b/pkg/service/account.go @@ -0,0 +1,905 @@ +package service + +import ( + "context" + "dubbo.apache.org/dubbo-go/v3/common/logger" + _ "dubbo.apache.org/dubbo-go/v3/imports" + "errors" + "fmt" + "github.com/fonchain_enterprise/micro-account/api/account" + "github.com/fonchain_enterprise/micro-account/pkg/application" + "github.com/fonchain_enterprise/micro-account/pkg/cache" + "github.com/fonchain_enterprise/micro-account/pkg/common/jwt" + "github.com/fonchain_enterprise/micro-account/pkg/common/page" + "github.com/fonchain_enterprise/micro-account/pkg/common/redis_key" + "github.com/fonchain_enterprise/micro-account/pkg/common/verifica" + "github.com/fonchain_enterprise/micro-account/pkg/domain" + "github.com/fonchain_enterprise/micro-account/pkg/m" + "github.com/fonchain_enterprise/micro-account/pkg/model" + "github.com/fonchain_enterprise/micro-account/pkg/serializer" + "github.com/fonchain_enterprise/utils/mobile" + uuid2 "github.com/google/uuid" + "gorm.io/gorm" + "log" + "strconv" + "strings" + "time" +) + +type AccountProvider struct { + account.UnimplementedAccountServer +} + +// OffLine 踢出 +func (a *AccountProvider) OffLine(ctx context.Context, in *account.CommonRequest) (*account.CommonResponse, error) { + + response := &account.CommonResponse{} + + err := application.OffByLogId(in.ID) + + if err != nil { + return nil, err + } + + return response, nil + +} + +// Logout 登出 +func (a *AccountProvider) Logout(ctx context.Context, in *account.DecryptJwtRequest) (*account.CommonResponse, error) { + + response := &account.CommonResponse{} + + err := application.Logout(in, model.Status_Out) + if err != nil { + return nil, err + } + + return response, nil + +} + +// OnlineLogById 获取某个id的在线数据 +func (a *AccountProvider) OnlineLogById(ctx context.Context, in *account.OnlineLogByIdRequest) (*account.LoginLog, error) { + response := &account.LoginLog{} + response, err := application.OnlineLogById(in.ID) + if err != nil { + return response, nil + } + + return response, nil +} + +// OnlineLog 获取某个人的在线数据 +func (a *AccountProvider) OnlineLog(ctx context.Context, in *account.LoginInfosByUserIdRequest) (*account.LoginLogsResponse, error) { + response := &account.LoginLogsResponse{} + response.Data = application.OnlineLogList(in) + + return response, nil +} +func (a *AccountProvider) Login(ctx context.Context, in *account.LoginRequest) (*account.TokenInfo, error) { + timeNow := time.Now() + tokenInfo := &account.TokenInfo{IsSampleAddress: true} + //nowIpAddress := "" + + var user *model.User + if err := model.DB.Preload("RealName").Where(&model.User{TelNum: in.TelNum, Domain: &in.Domain}).First(&user).Error; err != nil { + return nil, errors.New(m.AccountDoesNotExist) + } + + if in.Code == "" && in.Password == "" { + return nil, errors.New(m.ERRORCODE) + } + + fmt.Println("---------------add1---", time.Now().Sub(timeNow)) + if in.Code != "" { + str := cache.RedisClient.Get(redis_key.GetAccountKey(in.Domain, in.TelNum)) // 登陆检测 + code := str.Val() + if code != in.Code { + return nil, errors.New(m.ERRORCODE) + } + } + + fmt.Println("---------------add2---", time.Now().Sub(timeNow)) + if in.Password != "" { + if !user.CheckPassword(in.Password) { //200毫秒 + return nil, errors.New(m.ERRORPWD) + } + + } + + fmt.Println("---------------add3---", time.Now().Sub(timeNow)) + + //生成token + tokenTime := m.TokenTime + token, refreshToken, err := jwt.GenerateTotalToken(user.ID, in.Domain, tokenTime, user.TelNum, m.JWTSecret) + + if err != nil { + logger.Error(err) + return nil, err + } + + fmt.Println("---------------add4---", time.Now().Sub(timeNow)) + + if err := application.AddRefreshToken(refreshToken); err != nil { + logger.Error(err) + return nil, err + } + + tokenInfo.Token = token + tokenInfo.RefreshToken = refreshToken + tokenInfo.AccountInfo = serializer.BuildUser(user) + + fmt.Println("---------------add4---", time.Now().Sub(timeNow)) + + //tokenInfo.AccountInfo.NowLogId = application.LoginAddLog(user, token, in.Ip, nowIpAddress) + + fmt.Println("---------------结束", time.Now().Sub(timeNow)) + return tokenInfo, nil + +} + +func (a *AccountProvider) RefreshToken(_ context.Context, in *account.RefreshTokenRequest) (*account.TokenInfo, error) { + response := &account.TokenInfo{} + oldRefreshToken := in.RefreshToken + + //验证 + claims, err := jwt.ParseRefreshToken(oldRefreshToken, m.JWTSecret) + if err != nil { + return nil, err + } + + var user *model.User + if err := model.DB.Preload("RealName").Where(&model.User{ID: claims.ID, Domain: &in.Domain}).First(&user).Error; err != nil { + return nil, errors.New(m.Not_Found) + } + + //生成token + token, refreshToken, err := jwt.GenerateTotalToken(user.ID, in.Domain, m.TokenTime, user.TelNum, m.JWTSecret) + + if err != nil { + logger.Error(err) + return nil, err + } + + //refresh 是否合法 + if err := application.CheckRefreshToke(oldRefreshToken); err != nil { + logger.Error(err) + return nil, err + } + + //refresh 是否合法 + if err := application.AddRefreshToken(refreshToken); err != nil { + logger.Error(err) + return nil, err + } + + //nowIpAddress := application.GetIpAddressByIp(in.Ip) //400毫秒 + //_ = application.LoginAddLog(user, token, in.Ip, nowIpAddress) + + response.Token = token + response.RefreshToken = refreshToken + response.AccountInfo = serializer.BuildUser(user) + + return response, nil +} + +func (a *AccountProvider) OnlySendMsg(_ context.Context, in *account.SendMsgRequest) (*account.SendMsgStatusResponse, error) { + response := &account.SendMsgStatusResponse{} + + //telTodayNum := redis_key.GetAccountKeyCountToday(in.Domain, in.TelNum, in.Scope) + + //校验(1-是否已经发送 2-是否今日发送超过指定数量) + /*str := cache.RedisClient.Get(redis_key.GetOnlyAccountKey(in.Domain, in.TelNum)) + + if str.Val() != "" { + return nil, errors.New(m.Mobile_Sended) + } + */ + + if err := domain.CheckMsgPre(in.Domain, in.TelNum, in.Scope); err != nil { + return response, err + } + + //执行发送 并且记录code + //code, err := verifica.SendMsg(in.TelNum, in.Project) + + //兼容老代码 + sigNo := in.SignNo + if sigNo == 0 { + sigNo = verifica.SIG_NO + if in.Project == "seller" { + sigNo = verifica.SIG_NO_SELLER + } + } + + if in.MId == 0 { + in.MId = mobile.TMP1 + } + + code, err := verifica.SendCustomCode(in.TelNum, uint(in.MId), uint(sigNo)) + + if err != nil { + return nil, err + } + + err = domain.SetOnlyRecordTelMsgCode(in.Domain, in.TelNum, code, in.Scope) + + if err != nil { + return response, err + } + + return response, nil + +} + +func (a *AccountProvider) OnlyCheckMsg(_ context.Context, in *account.CheckMsgRequest) (*account.SendMsgStatusResponse, error) { + response := &account.SendMsgStatusResponse{} + + fmt.Println(in) + str := cache.RedisClient.Get(redis_key.GetOnlyAccountKey(in.Domain, in.TelNum)) + code := str.Val() + + if code == "" { + return nil, errors.New(m.Mobile_Not_Send) + } + + if code != in.GetCode() { + return nil, errors.New(m.Mobile_Wrong_Code) + } + + return response, nil + +} + +// SendMsg 发送验证码 +func (a *AccountProvider) SendMsg(_ context.Context, in *account.SendMsgRequest) (*account.SendMsgStatusResponse, error) { + response := &account.SendMsgStatusResponse{} + + var user *model.User + + if domain.InBlockList(in.Domain, in.TelNum) { + return nil, errors.New(m.Black_Mobile_Sended) + } + + if err := model.DB.Where(&model.User{TelNum: in.TelNum, Domain: &in.Domain}).First(&user).Error; err != nil { + return nil, errors.New(m.Not_Found) + } + + //此处不再校验验证码有效期 + //校验(1-是否已经发送 2-是否今日发送超过指定数量) + /* + str := cache.RedisClient.Get(redis_key.GetAccountKey(in.Domain, in.TelNum)) // 发送验证码 + + if str.Val() != "" { + return nil, errors.New(m.Mobile_Sended) + } + */ + + //是否存活 (1分钟冷却) (1-是否已经发送 2-是否今日发送超过指定数量) 55秒 + if err := domain.CodeLive(in.Domain, in.TelNum); err != nil { + return nil, err + } + + //今日是否达到上限 + if err := domain.CheckMsg(redis_key.GetAccountKeyCountToday(in.Domain, in.TelNum)); err != nil { + return nil, err + } + + //执行发送 并且记录code + code, err := verifica.SendMsgV2(in.TelNum, in.Project, uint(in.SignNo)) + + if err != nil { + return nil, err + } + + err = domain.SetRecordTelMsgCode(in.Domain, in.TelNum, code) + + if err != nil { + return response, err + } + + return response, nil + +} + +func (a *AccountProvider) SendMsgRegister(_ context.Context, in *account.SendMsgRequest) (*account.SendMsgStatusResponse, error) { + response := &account.SendMsgStatusResponse{} + + telTodayNum := redis_key.GetAccountKeyCountToday(in.Domain, in.TelNum) + + // 手机号是否存在 + var count int64 + model.DB.Model(&model.User{}).Where(&model.User{TelNum: in.TelNum, Domain: &in.Domain}).Count(&count) + + if count > 0 { + return response, errors.New(m.ACCOUNT_EXIST) + } + + //校验(1-是否已经发送 2-是否今日发送超过指定数量) + if err := domain.CodeLive(in.Domain, in.TelNum); err != nil { + return nil, err + } + + if err := domain.CheckMsg(telTodayNum); err != nil { + return nil, err + } + + //执行发送 并且记录code + code, err := verifica.SendMsgV2(in.TelNum, in.Project, uint(in.SignNo)) + + if err != nil { + return nil, err + } + + err = domain.SetRecordTelMsgCode(in.Domain, in.TelNum, code) + + if err != nil { + return response, err + } + + return response, nil + +} + +func (a *AccountProvider) CheckMsg(_ context.Context, in *account.CheckMsgRequest) (*account.SendMsgStatusResponse, error) { + response := &account.SendMsgStatusResponse{} + + str := cache.RedisClient.Get(redis_key.GetAccountKey(in.Domain, in.TelNum)) //校验验证码 + code := str.Val() + if code == "" { + return nil, errors.New(m.Mobile_Not_Send) + } + + if code != in.GetCode() { + return nil, errors.New(m.Mobile_Wrong_Code) + } + + return response, nil + +} + +func (a *AccountProvider) RealName(_ context.Context, in *account.RealNameRequest) (*account.RealNameResponse, error) { + // 检查用户是否存在 + var existingUser model.User + if err := model.DB.First(&existingUser, "id = ?", in.Id).Error; err != nil { + return &account.RealNameResponse{Status: m.FAILED}, err + } + // 如果用户已经实名 + if existingUser.Status == m.Pass { + return &account.RealNameResponse{Status: m.FAILED}, errors.New("已实名") + } + + // 如果实名审核中 + if existingUser.Status == m.UnderReview { + return &account.RealNameResponse{Status: m.FAILED}, errors.New("实名审核中,请勿重复提交") + } + // 检查用户是否已关联实名信息 + if existingUser.RealNameID == 0 { + // 如果没有找到实名信息,创建一个新的 RealName 记录 + newRealName := model.RealName{ + Name: in.Name, + Sex: int(in.Sex), + Nationality: in.Nationality, + DocumentType: int(in.DocumentType), + CertificatePicture: in.CertificatePicture, + Validity: in.Validity, + PlaceOfResidence: in.PlaceOfResidence, + GroupPhoto: in.GroupPhoto, + Attachment: in.Attachment, + } + // 创建实名信息 + if err := model.DB.Create(&newRealName).Error; err != nil { + return &account.RealNameResponse{Status: m.FAILED}, err + } + // 更新用户的实名信息 ID + existingUser.RealNameID = newRealName.ID + if err := model.DB.Save(&existingUser).Error; err != nil { + return &account.RealNameResponse{Status: m.FAILED}, err + } + // 返回成功 + return &account.RealNameResponse{Status: m.SUCCESS}, nil + } + // 如果已存在实名信息,更新该信息 + updateData := map[string]interface{}{ + "status": m.UnderReview, // 审核中状态 + "name": in.Name, + "sex": in.Sex, + "nationality": in.Nationality, + "document_type": in.DocumentType, + "certificate_picture": in.CertificatePicture, + "validity": in.Validity, + "place_of_residence": in.PlaceOfResidence, + "group_photo": in.GroupPhoto, + "attachment": in.Attachment, + } + // 更新 RealName 表中的数据 + var existingRealName model.RealName + if err := model.DB.First(&existingRealName, "id = ?", existingUser.RealNameID).Error; err != nil { + return &account.RealNameResponse{Status: m.FAILED}, err + } + + if err := model.DB.Model(&existingRealName).Updates(updateData).Error; err != nil { + return &account.RealNameResponse{Status: m.FAILED}, err + } + + return &account.RealNameResponse{Status: m.SUCCESS}, nil +} +func (a *AccountProvider) CheckRealName(ctx context.Context, in *account.CheckRealNameRequest) (*account.CheckRealNameResponse, error) { + // 根据用户 ID 查询用户 + var user model.User + if err := model.DB.First(&user, "id = ?", in.Id).Error; err != nil { + return &account.CheckRealNameResponse{Status: m.FAILED}, err + } + + // 只有当用户处于“审核中”状态时才能进行审核更新 + if user.Status != m.UnderReview { + return &account.CheckRealNameResponse{Status: m.FAILED}, errors.New("用户状态异常,无法进行审核") + } + + // 根据传入的审核结果更新用户状态和备注 + if in.Pass { + user.Status = m.Pass + } else { + user.Status = m.AuditFailure + user.NotPassRemarks = in.NotPassRemarks + } + loc, err := time.LoadLocation("Asia/Shanghai") + if err != nil { + log.Fatalf("加载时区失败: %v", err) + } + user.AuditTime = time.Now().In(loc).Format("2006-01-02 15:04:05") + + // 保存更新 + if err := model.DB.Save(&user).Error; err != nil { + return &account.CheckRealNameResponse{Status: m.FAILED}, err + } + + return &account.CheckRealNameResponse{Status: m.SUCCESS}, nil +} + +// Register 注册 +func (a *AccountProvider) Register(_ context.Context, in *account.RegistRequest) (*account.RegisterResponse, error) { + var err error + // 验证验证码 + if in.Code == "" { + return &account.RegisterResponse{Status: m.Unknown}, errors.New(m.Mobile_Wrong_Code) + } + if err := domain.CheckRegisterCode(in.Domain, in.TelNum, in.Code); err != nil { + return &account.RegisterResponse{Status: m.Unknown}, errors.New(m.Mobile_Code_Wrong) + } + // 手机号是否已注册 + var tempUser *model.User + if err := model.DB.Model(&model.User{}).Where(&model.User{TelNum: in.TelNum, Domain: &in.Domain}).First(&tempUser).Error; err == nil { + // 用户已存在 + return &account.RegisterResponse{ID: uint64(tempUser.ID), Status: uint64(tempUser.Status)}, nil + } else if err != gorm.ErrRecordNotFound { + // 查询错误 + return &account.RegisterResponse{Status: m.Unknown}, err + } + var subNum string + if err := model.DB.Model(&model.User{}).Select("MAX(SUBSTRING(SubNum, 3, 6))").Row().Scan(&subNum); err != nil { + return &account.RegisterResponse{Status: m.Unknown}, err + } + var newNum int + if subNum == "" { + // 如果没有用户,起始编号为 FE00001 + newNum = 1 + } else { + // 递增现有编号 + parsedNum, err := strconv.Atoi(subNum) + if err != nil { + return &account.RegisterResponse{Status: m.Unknown}, err + } + newNum = parsedNum + 1 + } + subNum = fmt.Sprintf("FE%05d", newNum) + //数据库中创建该用户记录 + + loc, err := time.LoadLocation("Asia/Shanghai") + if err != nil { + log.Fatalf("加载时区失败: %v", err) + } + user := model.User{ + Domain: &in.Domain, + TelNum: in.TelNum, + Status: m.Unnamed, + TelAreaCode: in.TelAreaCode, + RegistrationTime: time.Now().In(loc).Format("2006-01-02 15:04:05"), + SubNum: subNum, + } + if err = model.DB.Create(&user).Error; err != nil { + return &account.RegisterResponse{Status: 0}, err + } + return &account.RegisterResponse{Status: uint64(user.Status), ID: uint64(user.ID)}, nil +} + +// CheckPwd 检测密码是否正确 +func (a *AccountProvider) CheckPwd(_ context.Context, in *account.CheckPwdRequest) (*account.UpdateResponse, error) { + response := &account.UpdateResponse{} + claims, err := jwt.ParseToken(in.Token, m.JWTSecret) + if err != nil { + return nil, err + } + //获取该用户信息 + var user model.User + if err := model.DB.First(&user, claims.ID).Error; err != nil { + return response, err + } + + if in.Password != "" { + if !user.CheckPassword(in.Password) { + return nil, errors.New(m.ERRORPWD) + } + } + + return response, nil +} + +func (a *AccountProvider) Authentication(_ context.Context, in *account.AuthenticationRequest) (*account.RequestStatus, error) { + claims, err := jwt.ParseToken(in.Token, m.JWTSecret) + if err != nil { + return nil, err + } + //获取该用户信息 + var user model.User + if err := model.DB.First(&user, claims.ID).Error; err != nil { + logger.Error(err) + return &account.RequestStatus{Status: m.FAILED}, err + } + var realName model.RealName + //if user.RealNameID != 0 { + // if err := model.DB.First(&realName, user.RealNameID).Error; err != nil { + // logger.Error(err) + // return &account.RequestStatus{Status: m.FAILED}, err + // } + //} + + //EncryptedIDNum, errCrypt := encryption.AesEncrypt([]byte(in.IDNum), strconv.Itoa(int(user.ID))) + + //if errCrypt != nil { + // return &account.RequestStatus{Status: m.FAILED}, err + //} + + realName.Name = in.Name + //realName.IDNum = base64.StdEncoding.EncodeToString(EncryptedIDNum) + + //保存实名信息 + if err := model.DB.Save(&realName).Error; err != nil { + logger.Error(err) + return &account.RequestStatus{Status: m.FAILED}, err + } + + return &account.RequestStatus{Status: m.SUCCESS}, nil +} + +func (a *AccountProvider) Info(ctx context.Context, in *account.InfoRequest) (*account.UserInfoResponse, error) { + + //获取该用户信息 + var user *model.User + if err := model.DB.Where(&model.User{Domain: &in.Domain}).Preload("RealName").First(&user, in.ID).Error; err != nil { + logger.Error(err) + return nil, err + } + response := &account.UserInfoResponse{ + Id: uint64(user.ID), + Status: int32(user.Status), + Name: user.RealName.Name, + Sex: int32(user.RealName.Sex), + Nationality: user.RealName.Nationality, + DocumentType: int32(user.RealName.DocumentType), + CertificatePicture: user.RealName.CertificatePicture, + Validity: user.RealName.Validity, + PlaceOfResidence: user.RealName.PlaceOfResidence, + GroupPhoto: user.RealName.GroupPhoto, + Attachment: user.RealName.Attachment, + SubNum: user.SubNum, + NotPassRemarks: user.NotPassRemarks, + } + + return response, nil +} +func (a *AccountProvider) UserList(ctx context.Context, in *account.UserListRequest) (*account.UserListResponse, error) { + var count int64 + var users []*model.User + modelObj := model.DB.Model(&model.User{}).Preload("RealName") + if in.SubNum != "" { + modelObj.Where("sub_num like ? ", "%"+in.SubNum+"%") + } + if in.RealNameOrNot == 1 { + modelObj.Where("status = 1 ") //未实名 + } else if in.RealNameOrNot == 2 { + modelObj.Where("status != 1 ") //已实名 + } + if in.Name != "" { + modelObj.Where("real_name.name like ? ", "%"+in.Name+"%") + } + if in.DocumentType != 0 { + modelObj.Where("real_name.document_type = ? ", in.DocumentType) + } + if in.AuditStatus != 0 { + modelObj.Where("status = ? ", in.AuditStatus) + } + modelObj.Count(&count) + if in.Page > 0 && in.PageSize > 0 { + modelObj.Limit(int(in.PageSize)).Offset(page.GetOffset(in.Page, in.PageSize)) + } + modelObj.Find(&users) + + response := &account.UserListResponse{} + + response.UserList = serializer.BuildUserList(users) + response.Page = in.Page + response.PageSize = in.PageSize + response.Count = uint64(count) + + return response, nil +} +func (a *AccountProvider) DecryptJwt(_ context.Context, in *account.DecryptJwtRequest) (*account.DecryptJwtResponse, error) { + + //默认在线 + fmt.Println() + isOffline := false + claims, err := jwt.ParseToken(in.Token, m.JWTSecret) + if err != nil { + return nil, err + } + + tokenKey := redis_key.GetTokenInfo(in.Domain, in.Token) + num, err := cache.RedisClient.Exists(tokenKey).Result() + + if num <= 0 { //不存在则下线 + isOffline = true + } + + //获取该用户信息 + response := &account.DecryptJwtResponse{ + ID: uint64(claims.ID), + Account: claims.Account, + Domain: claims.Domain, + NickName: claims.NickName, + IsOffline: isOffline, + } + + //更新下活跃时间 + application.UpdateLastDate(in.Token) + + return response, nil +} + +func (a *AccountProvider) UserByTel(_ context.Context, in *account.UserByTelRequest) (*account.InfoResponse, error) { + + response := &account.InfoResponse{IsExist: false} + + var user *model.User + + if err := model.DB.Model(&model.User{}).Preload("RealName").Where(&model.User{Domain: &in.Domain, TelNum: in.Tel}).First(&user).Error; err != nil { + + if err.Error() == "record not found" { //不存在 + return response, nil + } + + return response, err + } + + response.Info = serializer.BuildUser(user) + response.IsExist = true + + return response, nil +} + +func (a *AccountProvider) UsersByTel(_ context.Context, in *account.UsersByTelRequest) (*account.ListResponse, error) { + + response := &account.ListResponse{} + if len(in.Tels) == 0 { + return response, nil + } + + var users []*model.User + model.DB.Model(&model.User{}).Where(&model.User{Domain: &in.Domain}).Where("tel_num in (?)", in.Tels).Find(&users) + + response.Data = serializer.BuildUsers(users) + + response.Count = uint64(len(users)) + + return response, nil +} + +func (a *AccountProvider) ListByIDs(_ context.Context, in *account.ListByIDsRequest) (*account.ListResponse, error) { + + var count int64 + //获取该用户信息 + //var user model.User + var users []*model.User + modelObj := model.DB.Model(&model.User{}).Preload("Clocks.Device") + if len(in.IDs) > 0 { + modelObj.Where("id in ? ", in.IDs) + } + + if in.NickName != "" { + modelObj.Where("nickname like ?", "%"+in.NickName+"%") + } + + if len(in.InvitationCode) > 0 { + modelObj.Where("invitation_code in (?)", in.InvitationCode) + } + + modelObj.Count(&count) + if in.Page > 0 && in.PageSize > 0 { + modelObj.Limit(int(in.PageSize)).Offset(page.GetOffset(in.Page, in.PageSize)) + } + + if in.OrderType == 1 { + modelObj.Order("id desc") + } else if in.OrderType == 2 { + modelObj.Order("enter_date asc") + } + + //modelObj.Find(&users, in.IDs) + modelObj.Find(&users) + + response := &account.ListResponse{} + + response.Data = serializer.BuildUsers(users) + + response.Count = uint64(count) + + return response, nil +} + +func (a *AccountProvider) RandList(_ context.Context, in *account.ListRequest) (*account.ListResponse, error) { + + //获取该用户信息 + //var user model.User + users, count := model.RandList(in.Domain, int(in.PageSize)) + + response := &account.ListResponse{} + + response.Data = serializer.BuildUsers(users) + response.Count = uint64(count) + response.AllCount = uint64(model.DomainCount(in.Domain)) + + return response, nil +} +func (a *AccountProvider) Remove(_ context.Context, in *account.RemoveRequest) (*account.RemoveResponse, error) { + response := &account.RemoveResponse{} + + err := model.DB.Transaction(func(tx *gorm.DB) error { + + var err error + + //删除个人 + if err = model.DB.Where(&model.User{Domain: &in.Domain}).Delete(&model.User{}, in.ID).Error; err != nil { + return err + } + + return nil + }) + + return response, err + +} + +// SendNewTelNumMsg 给新手机号发送验证码 +func (a *AccountProvider) SendNewTelNumMsg(_ context.Context, in *account.SendNewTelNumMsgRequest) (*account.SendMsgStatusResponse, error) { + var user *model.User + response := &account.SendMsgStatusResponse{} + if err := model.DB.First(&user, in.ID).Error; err != nil { + return response, errors.New(m.Not_Found) + } + + if in.NewTelNum == "" { //新手机号是空,则去redis中查询上次的手机号 + newTelNum, err := user.NowNewTelNum() + if err != nil { + return response, err + } + + in.NewTelNum = newTelNum + } + + err := user.SendNewTelMsg(in.NewTelNum, in.Project, uint(in.SignNo)) + + return response, err +} + +// UpdateTelNum 更新新手机号 +func (a *AccountProvider) UpdateTelNum(_ context.Context, in *account.SendNewTelNumMsgRequest) (*account.SendMsgStatusResponse, error) { + var user *model.User + response := &account.SendMsgStatusResponse{} + if err := model.DB.First(&user, in.ID).Error; err != nil { + return response, errors.New(m.Not_Found) + } + + err := user.ChangeNewTel(in.Code) + + return response, err +} + +func (a *AccountProvider) SendCustomMsg(ctx context.Context, in *account.SendCustomMsgRequest) (*account.SendMsgStatusResponse, error) { + response := &account.SendMsgStatusResponse{} + var user *model.User + uuid := uuid2.NewString() + + logger.Info(uuid, ",发送自定义短信手机号", in.TelNum, "连接地址", in.Url) + if err := model.DB.Model(&model.User{}).First(&user, in.ID).Error; err != nil { + logger.Info(uuid, ",错误", err.Error()) + return nil, errors.New(m.Not_Found) + } + + //执行发送 并且记录code + fmt.Println("接收短信", in.Url, in) + in.Url = strings.Replace(in.Url, "|", "||", 1) + telNum := in.TelNum + if _, ok := model.SendPhoneNum[user.TelNum]; ok { + telNum = model.SendPhoneNum[user.TelNum] + } + + if telNum == "" { + telNum = user.TelNum + } + + err := verifica.SendCustomMsg(telNum, in.Url, uint(in.MId)) + return response, err + +} + +func (a *AccountProvider) SendExCustomMsg(ctx context.Context, in *account.SendCustomMsgRequest) (*account.SendMsgStatusResponse, error) { + response := &account.SendMsgStatusResponse{} + + fmt.Println("对外的发送短信参数:", in.TelNum, in.Url, in.MId) + err := verifica.SendCustomSignNoMsg(in.TelNum, in.Url, uint(in.MId), uint(in.SigNo)) + return response, err + +} + +func (a *AccountProvider) MailAccountByNickName(_ context.Context, in *account.MailAccountByNickNameRequest) (*account.MaiAccountResponse, error) { + var err error + response := &account.MaiAccountResponse{} + + //response.EnglishName, response.MailAccount, err = model.GetMailAndEnglishNameByNickName(in.NickName, in.Domain, in.ID) + + return response, err +} + +func (a *AccountProvider) QueryPersonnelWithTheSameName(_ context.Context, req *account.QueryPersonnelWithTheSameNameRequest) (*account.QueryPersonnelWithTheSameNameResponse, error) { + var duplicateNames []string + query := model.DB.Table("user"). + Select("nickname"). + Group("nickname"). + Having("COUNT(nickname) >= ?", 2) + if len(req.Names) != 0 { + query.Where("nickname in (?)", req.Names) + } + if req.Domain != "" { + query.Where("domain = ?", req.Domain) + } + if req.Status != "" { + query.Where("status = ?", req.Status) + } + query.Where("deleted_at = 0") + if err := query.Pluck("nickname", &duplicateNames).Error; err != nil { + return nil, errors.New(m.Not_Found) + } + response := &account.QueryPersonnelWithTheSameNameResponse{ + Names: duplicateNames, + Count: uint64(len(duplicateNames)), + } + + return response, nil +} +func (a *AccountProvider) UsersByJobNum(_ context.Context, in *account.UsersByJobNumRequest) (*account.ListResponse, error) { + + response := &account.ListResponse{} + if len(in.JobNum) == 0 { + return response, nil + } + + var users []*model.User + model.DB.Model(&model.User{}).Where(&model.User{Domain: &in.Domain}).Where("job_num in (?)", in.JobNum).Find(&users) + + response.Data = serializer.BuildUsers(users) + + response.Count = uint64(len(users)) + + return response, nil +}