From 1758afcbf365fe945475b2863389889d304ecbb9 Mon Sep 17 00:00:00 2001 From: Nick Z <2420177+nickzelei@users.noreply.github.com> Date: Fri, 24 Jan 2025 13:58:16 -0800 Subject: [PATCH 1/9] Generates proto code for hash transformer --- .../go/protos/mgmt/v1alpha1/transformer.pb.go | 1445 +++++++++-------- .../mgmt/v1alpha1/transformer.pb.json.go | 10 + .../protos/mgmt/v1alpha1/transformer.proto | 23 + .../mgmt/v1alpha1/anonymization.openapi.yaml | 48 + docs/openapi/mgmt/v1alpha1/job.openapi.yaml | 48 + .../mgmt/v1alpha1/transformer.openapi.yaml | 49 + docs/openapi/neosync.mgmt.v1alpha1.yaml | 53 + .../mgmt/v1alpha1/transformer.proto.mdx | 48 +- docs/protos/proto_docs.json | 74 + .../client/mgmt/v1alpha1/transformer_pb.ts | 84 +- .../neosync/mgmt/v1alpha1/transformer_pb2.py | 284 ++-- .../neosync/mgmt/v1alpha1/transformer_pb2.pyi | 26 +- 12 files changed, 1383 insertions(+), 809 deletions(-) diff --git a/backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.go b/backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.go index 879b4ca05d..a0b27b2fcd 100644 --- a/backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.go +++ b/backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.go @@ -76,6 +76,8 @@ const ( TransformerSource_TRANSFORMER_SOURCE_GENERATE_BUSINESS_NAME TransformerSource = 48 TransformerSource_TRANSFORMER_SOURCE_GENERATE_IP_ADDRESS TransformerSource = 49 TransformerSource_TRANSFORMER_SOURCE_TRANSFORM_UUID TransformerSource = 50 + // TransformHash is a transformer that hashes the input string using the specified hashing algorithm. + TransformerSource_TRANSFORMER_SOURCE_TRANSFORM_HASH TransformerSource = 51 ) // Enum value maps for TransformerSource. @@ -131,6 +133,7 @@ var ( 48: "TRANSFORMER_SOURCE_GENERATE_BUSINESS_NAME", 49: "TRANSFORMER_SOURCE_GENERATE_IP_ADDRESS", 50: "TRANSFORMER_SOURCE_TRANSFORM_UUID", + 51: "TRANSFORMER_SOURCE_TRANSFORM_HASH", } TransformerSource_value = map[string]int32{ "TRANSFORMER_SOURCE_UNSPECIFIED": 0, @@ -183,6 +186,7 @@ var ( "TRANSFORMER_SOURCE_GENERATE_BUSINESS_NAME": 48, "TRANSFORMER_SOURCE_GENERATE_IP_ADDRESS": 49, "TRANSFORMER_SOURCE_TRANSFORM_UUID": 50, + "TRANSFORMER_SOURCE_TRANSFORM_HASH": 51, } ) @@ -576,6 +580,66 @@ func (PiiAnonymizer_Hash_HashType) EnumDescriptor() ([]byte, []int) { return file_mgmt_v1alpha1_transformer_proto_rawDescGZIP(), []int{21, 3, 0} } +type TransformHash_HashType int32 + +const ( + // If unspecified, defaults to md5 + TransformHash_HASH_TYPE_UNSPECIFIED TransformHash_HashType = 0 + // The MD5 Hash Algorithm + TransformHash_HASH_TYPE_MD5 TransformHash_HashType = 1 + // The SHA1 Hash Algorithm + TransformHash_HASH_TYPE_SHA1 TransformHash_HashType = 2 + // The SHA256 Hash Algorithm + TransformHash_HASH_TYPE_SHA256 TransformHash_HashType = 3 + // The SHA512 Hash Algorithm + TransformHash_HASH_TYPE_SHA512 TransformHash_HashType = 4 +) + +// Enum value maps for TransformHash_HashType. +var ( + TransformHash_HashType_name = map[int32]string{ + 0: "HASH_TYPE_UNSPECIFIED", + 1: "HASH_TYPE_MD5", + 2: "HASH_TYPE_SHA1", + 3: "HASH_TYPE_SHA256", + 4: "HASH_TYPE_SHA512", + } + TransformHash_HashType_value = map[string]int32{ + "HASH_TYPE_UNSPECIFIED": 0, + "HASH_TYPE_MD5": 1, + "HASH_TYPE_SHA1": 2, + "HASH_TYPE_SHA256": 3, + "HASH_TYPE_SHA512": 4, + } +) + +func (x TransformHash_HashType) Enum() *TransformHash_HashType { + p := new(TransformHash_HashType) + *p = x + return p +} + +func (x TransformHash_HashType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (TransformHash_HashType) Descriptor() protoreflect.EnumDescriptor { + return file_mgmt_v1alpha1_transformer_proto_enumTypes[7].Descriptor() +} + +func (TransformHash_HashType) Type() protoreflect.EnumType { + return &file_mgmt_v1alpha1_transformer_proto_enumTypes[7] +} + +func (x TransformHash_HashType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use TransformHash_HashType.Descriptor instead. +func (TransformHash_HashType) EnumDescriptor() ([]byte, []int) { + return file_mgmt_v1alpha1_transformer_proto_rawDescGZIP(), []int{74, 0} +} + type GetSystemTransformersRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1647,6 +1711,7 @@ type TransformerConfig struct { // *TransformerConfig_GenerateBusinessNameConfig // *TransformerConfig_GenerateIpAddressConfig // *TransformerConfig_TransformUuidConfig + // *TransformerConfig_TransformHashConfig Config isTransformerConfig_Config `protobuf_oneof:"config"` } @@ -2016,6 +2081,13 @@ func (x *TransformerConfig) GetTransformUuidConfig() *TransformUuid { return nil } +func (x *TransformerConfig) GetTransformHashConfig() *TransformHash { + if x, ok := x.GetConfig().(*TransformerConfig_TransformHashConfig); ok { + return x.TransformHashConfig + } + return nil +} + type isTransformerConfig_Config interface { isTransformerConfig_Config() } @@ -2209,6 +2281,11 @@ type TransformerConfig_TransformUuidConfig struct { TransformUuidConfig *TransformUuid `protobuf:"bytes,47,opt,name=transform_uuid_config,json=transformUuidConfig,proto3,oneof"` } +type TransformerConfig_TransformHashConfig struct { + // TransformHash is a transformer that hashes the input string using the specified hashing algorithm. + TransformHashConfig *TransformHash `protobuf:"bytes,48,opt,name=transform_hash_config,json=transformHashConfig,proto3,oneof"` +} + func (*TransformerConfig_GenerateEmailConfig) isTransformerConfig_Config() {} func (*TransformerConfig_TransformEmailConfig) isTransformerConfig_Config() {} @@ -2303,6 +2380,8 @@ func (*TransformerConfig_GenerateIpAddressConfig) isTransformerConfig_Config() { func (*TransformerConfig_TransformUuidConfig) isTransformerConfig_Config() {} +func (*TransformerConfig_TransformHashConfig) isTransformerConfig_Config() {} + // NeosyncCloud/Enterprise only transformer for anonymizing PII Text type TransformPiiText struct { state protoimpl.MessageState @@ -4919,6 +4998,53 @@ func (*TransformUuid) Descriptor() ([]byte, []int) { return file_mgmt_v1alpha1_transformer_proto_rawDescGZIP(), []int{73} } +// TransformHash is a transformer that hashes the input string using the specified hashing algorithm. +type TransformHash struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The hashing algorithm to use. + Algo *TransformHash_HashType `protobuf:"varint,1,opt,name=algo,proto3,enum=mgmt.v1alpha1.TransformHash_HashType,oneof" json:"algo,omitempty"` +} + +func (x *TransformHash) Reset() { + *x = TransformHash{} + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TransformHash) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TransformHash) ProtoMessage() {} + +func (x *TransformHash) ProtoReflect() protoreflect.Message { + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[74] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TransformHash.ProtoReflect.Descriptor instead. +func (*TransformHash) Descriptor() ([]byte, []int) { + return file_mgmt_v1alpha1_transformer_proto_rawDescGZIP(), []int{74} +} + +func (x *TransformHash) GetAlgo() TransformHash_HashType { + if x != nil && x.Algo != nil { + return *x.Algo + } + return TransformHash_HASH_TYPE_UNSPECIFIED +} + type PiiAnonymizer_Replace struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4930,7 +5056,7 @@ type PiiAnonymizer_Replace struct { func (x *PiiAnonymizer_Replace) Reset() { *x = PiiAnonymizer_Replace{} - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[75] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4942,7 +5068,7 @@ func (x *PiiAnonymizer_Replace) String() string { func (*PiiAnonymizer_Replace) ProtoMessage() {} func (x *PiiAnonymizer_Replace) ProtoReflect() protoreflect.Message { - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[75] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4973,7 +5099,7 @@ type PiiAnonymizer_Redact struct { func (x *PiiAnonymizer_Redact) Reset() { *x = PiiAnonymizer_Redact{} - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[76] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4985,7 +5111,7 @@ func (x *PiiAnonymizer_Redact) String() string { func (*PiiAnonymizer_Redact) ProtoMessage() {} func (x *PiiAnonymizer_Redact) ProtoReflect() protoreflect.Message { - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[76] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5016,7 +5142,7 @@ type PiiAnonymizer_Mask struct { func (x *PiiAnonymizer_Mask) Reset() { *x = PiiAnonymizer_Mask{} - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[77] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5028,7 +5154,7 @@ func (x *PiiAnonymizer_Mask) String() string { func (*PiiAnonymizer_Mask) ProtoMessage() {} func (x *PiiAnonymizer_Mask) ProtoReflect() protoreflect.Message { - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[77] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5076,7 +5202,7 @@ type PiiAnonymizer_Hash struct { func (x *PiiAnonymizer_Hash) Reset() { *x = PiiAnonymizer_Hash{} - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[78] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5088,7 +5214,7 @@ func (x *PiiAnonymizer_Hash) String() string { func (*PiiAnonymizer_Hash) ProtoMessage() {} func (x *PiiAnonymizer_Hash) ProtoReflect() protoreflect.Message { - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[78] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5122,7 +5248,7 @@ type PiiAnonymizer_Transform struct { func (x *PiiAnonymizer_Transform) Reset() { *x = PiiAnonymizer_Transform{} - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[79] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5134,7 +5260,7 @@ func (x *PiiAnonymizer_Transform) String() string { func (*PiiAnonymizer_Transform) ProtoMessage() {} func (x *PiiAnonymizer_Transform) ProtoReflect() protoreflect.Message { - mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[79] + mi := &file_mgmt_v1alpha1_transformer_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5341,7 +5467,7 @@ var file_mgmt_v1alpha1_transformer_proto_rawDesc = []byte{ 0x0e, 0x32, 0x1f, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4a, 0x6f, 0x62, - 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0xce, 0x23, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0xa2, 0x24, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x52, 0x0a, 0x15, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x67, 0x6d, @@ -5625,474 +5751,495 @@ var file_mgmt_v1alpha1_transformer_proto_rawDesc = []byte{ 0x32, 0x1c, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x75, 0x69, 0x64, 0x48, 0x00, 0x52, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x75, 0x69, 0x64, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x0f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0xc1, 0x04, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, 0x54, 0x65, 0x78, 0x74, 0x12, 0x38, 0x0a, 0x0f, 0x73, - 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x02, 0x42, 0x0f, 0xba, 0x48, 0x0c, 0x0a, 0x0a, 0x1d, 0x00, 0x00, 0x80, 0x3f, - 0x2d, 0x00, 0x00, 0x00, 0x00, 0x52, 0x0e, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x54, 0x68, 0x72, 0x65, - 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x4b, 0x0a, 0x12, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x5f, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x52, - 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, - 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x10, 0x64, 0x65, 0x6e, 0x79, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x67, - 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, - 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, - 0x44, 0x65, 0x6e, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x0f, - 0x64, 0x65, 0x6e, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x12, - 0x37, 0x0a, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0xba, 0x48, 0x09, 0x92, 0x01, - 0x06, 0x22, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, - 0x77, 0x65, 0x64, 0x5f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x50, 0x68, 0x72, 0x61, 0x73, 0x65, - 0x73, 0x12, 0x1f, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x88, - 0x01, 0x01, 0x12, 0x65, 0x0a, 0x12, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x61, 0x6e, 0x6f, - 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, - 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, 0x54, 0x65, 0x78, 0x74, 0x2e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x41, 0x6e, - 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x1a, 0x62, 0x0a, 0x16, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x52, 0x0a, 0x15, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, + 0x72, 0x6d, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, - 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0b, 0x0a, - 0x09, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x70, 0x0a, 0x11, 0x50, 0x69, - 0x69, 0x44, 0x65, 0x6e, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x12, - 0x2e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0xba, - 0x48, 0x17, 0x72, 0x15, 0x32, 0x13, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x2d, 0x5f, - 0x5d, 0x7b, 0x31, 0x2c, 0x31, 0x30, 0x30, 0x7d, 0x24, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x2b, 0x0a, 0x0a, 0x64, 0x65, 0x6e, 0x79, 0x5f, 0x77, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x09, 0x42, 0x0c, 0xba, 0x48, 0x09, 0x92, 0x01, 0x06, 0x22, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x09, 0x64, 0x65, 0x6e, 0x79, 0x57, 0x6f, 0x72, 0x64, 0x73, 0x22, 0xbc, 0x06, 0x0a, - 0x0d, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x40, - 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x52, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, - 0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x52, - 0x65, 0x64, 0x61, 0x63, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x12, - 0x37, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, - 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x4d, 0x61, 0x73, 0x6b, - 0x48, 0x00, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x12, 0x37, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, - 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x48, 0x00, 0x52, 0x04, 0x68, 0x61, 0x73, - 0x68, 0x12, 0x46, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x48, 0x00, 0x52, 0x09, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x1a, 0x2e, 0x0a, 0x07, 0x52, 0x65, 0x70, - 0x6c, 0x61, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, - 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x64, - 0x61, 0x63, 0x74, 0x1a, 0xa7, 0x01, 0x0a, 0x04, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x26, 0x0a, 0x0c, - 0x6d, 0x61, 0x73, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x61, 0x73, 0x6b, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, - 0x72, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x72, 0x73, 0x5f, 0x74, 0x6f, - 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x0b, 0x63, - 0x68, 0x61, 0x72, 0x73, 0x54, 0x6f, 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x1e, 0x0a, - 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, - 0x02, 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x45, 0x6e, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, - 0x0d, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x42, 0x10, - 0x0a, 0x0e, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x73, 0x6b, - 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x1a, 0xba, 0x01, - 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x12, 0x43, 0x0a, 0x04, 0x61, 0x6c, 0x67, 0x6f, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, - 0x65, 0x72, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, - 0x48, 0x00, 0x52, 0x04, 0x61, 0x6c, 0x67, 0x6f, 0x88, 0x01, 0x01, 0x22, 0x64, 0x0a, 0x08, 0x48, - 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x48, 0x41, 0x53, 0x48, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x4d, 0x44, 0x35, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x48, - 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x35, 0x31, 0x32, 0x10, - 0x03, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x1a, 0x45, 0x0a, 0x09, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x38, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, - 0x6d, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x42, 0x08, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x64, 0x0a, 0x0d, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x44, 0x0a, 0x0a, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x48, 0x61, + 0x73, 0x68, 0x48, 0x00, 0x52, 0x13, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x48, + 0x61, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x0f, 0x0a, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0xc1, 0x04, 0x0a, 0x10, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, 0x54, 0x65, 0x78, 0x74, 0x12, + 0x38, 0x0a, 0x0f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, + 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x42, 0x0f, 0xba, 0x48, 0x0c, 0x0a, 0x0a, 0x1d, + 0x00, 0x00, 0x80, 0x3f, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x52, 0x0e, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x12, 0x4b, 0x0a, 0x12, 0x64, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, + 0x7a, 0x65, 0x72, 0x52, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x6e, 0x6f, 0x6e, + 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x10, 0x64, 0x65, 0x6e, 0x79, 0x5f, 0x72, + 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x79, - 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x88, - 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x22, 0x87, 0x03, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x45, - 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, - 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x88, - 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0e, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, - 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x65, 0x78, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x64, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x44, 0x0a, 0x0a, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x79, 0x70, - 0x65, 0x48, 0x02, 0x52, 0x09, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, - 0x01, 0x12, 0x58, 0x0a, 0x14, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x65, 0x6d, 0x61, - 0x69, 0x6c, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x21, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, - 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x03, 0x52, 0x12, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x45, 0x6d, 0x61, - 0x69, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, + 0x2e, 0x50, 0x69, 0x69, 0x44, 0x65, 0x6e, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, + 0x65, 0x72, 0x52, 0x0f, 0x64, 0x65, 0x6e, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, 0x7a, + 0x65, 0x72, 0x73, 0x12, 0x37, 0x0a, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0xba, + 0x48, 0x09, 0x92, 0x01, 0x06, 0x22, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x0f, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x50, 0x68, + 0x72, 0x61, 0x73, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, + 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x65, 0x0a, 0x12, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, 0x54, + 0x65, 0x78, 0x74, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, + 0x69, 0x7a, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x1a, 0x62, 0x0a, + 0x16, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, + 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, + 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x22, 0x70, + 0x0a, 0x11, 0x50, 0x69, 0x69, 0x44, 0x65, 0x6e, 0x79, 0x52, 0x65, 0x63, 0x6f, 0x67, 0x6e, 0x69, + 0x7a, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x1a, 0xba, 0x48, 0x17, 0x72, 0x15, 0x32, 0x13, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x30, + 0x2d, 0x39, 0x2d, 0x5f, 0x5d, 0x7b, 0x31, 0x2c, 0x31, 0x30, 0x30, 0x7d, 0x24, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x0a, 0x64, 0x65, 0x6e, 0x79, 0x5f, 0x77, 0x6f, 0x72, 0x64, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0c, 0xba, 0x48, 0x09, 0x92, 0x01, 0x06, 0x22, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x09, 0x64, 0x65, 0x6e, 0x79, 0x57, 0x6f, 0x72, 0x64, 0x73, + 0x22, 0xbc, 0x06, 0x0a, 0x0d, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, + 0x65, 0x72, 0x12, 0x40, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, + 0x72, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x70, + 0x6c, 0x61, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, + 0x65, 0x72, 0x2e, 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x64, + 0x61, 0x63, 0x74, 0x12, 0x37, 0x0a, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x2e, + 0x4d, 0x61, 0x73, 0x6b, 0x48, 0x00, 0x52, 0x04, 0x6d, 0x61, 0x73, 0x6b, 0x12, 0x37, 0x0a, 0x04, + 0x68, 0x61, 0x73, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x67, 0x6d, + 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, + 0x6f, 0x6e, 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x48, 0x00, 0x52, + 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x46, 0x0a, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, + 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, + 0x48, 0x00, 0x52, 0x09, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x1a, 0x2e, 0x0a, + 0x07, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x08, 0x0a, + 0x06, 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, 0x1a, 0xa7, 0x01, 0x0a, 0x04, 0x4d, 0x61, 0x73, 0x6b, + 0x12, 0x26, 0x0a, 0x0c, 0x6d, 0x61, 0x73, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x61, 0x73, 0x6b, 0x69, 0x6e, + 0x67, 0x43, 0x68, 0x61, 0x72, 0x88, 0x01, 0x01, 0x12, 0x27, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x72, + 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x48, + 0x01, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x72, 0x73, 0x54, 0x6f, 0x4d, 0x61, 0x73, 0x6b, 0x88, 0x01, + 0x01, 0x12, 0x1e, 0x0a, 0x08, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, 0x07, 0x66, 0x72, 0x6f, 0x6d, 0x45, 0x6e, 0x64, 0x88, 0x01, + 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, + 0x61, 0x72, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x63, 0x68, 0x61, 0x72, 0x73, 0x5f, 0x74, 0x6f, 0x5f, + 0x6d, 0x61, 0x73, 0x6b, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x65, 0x6e, + 0x64, 0x1a, 0xba, 0x01, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x12, 0x43, 0x0a, 0x04, 0x61, 0x6c, + 0x67, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x50, 0x69, 0x69, 0x41, 0x6e, 0x6f, 0x6e, + 0x79, 0x6d, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x48, 0x61, 0x73, 0x68, 0x2e, 0x48, 0x61, 0x73, 0x68, + 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x61, 0x6c, 0x67, 0x6f, 0x88, 0x01, 0x01, 0x22, + 0x64, 0x0a, 0x08, 0x48, 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x48, + 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x44, 0x35, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x41, 0x53, + 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x10, 0x02, 0x12, + 0x14, 0x0a, 0x10, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x48, 0x41, + 0x35, 0x31, 0x32, 0x10, 0x03, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x1a, 0x45, + 0x0a, 0x09, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x38, 0x0a, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x67, + 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x42, 0x08, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, + 0x64, 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, 0x6c, + 0x12, 0x44, 0x0a, 0x0a, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x6d, 0x61, + 0x69, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x54, + 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x87, 0x03, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x6f, 0x72, 0x6d, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x44, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, + 0x01, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, + 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, + 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x64, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x73, 0x12, + 0x44, 0x0a, 0x0a, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x6d, 0x61, 0x69, + 0x6c, 0x54, 0x79, 0x70, 0x65, 0x48, 0x02, 0x52, 0x09, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x54, 0x79, + 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x58, 0x0a, 0x14, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x03, 0x52, 0x12, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, + 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x6d, 0x61, 0x69, + 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x0e, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x22, + 0x47, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, 0x64, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x6c, + 0x75, 0x68, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x4c, 0x75, 0x68, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x5f, 0x6c, 0x75, 0x68, 0x6e, 0x22, 0x0e, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x43, 0x69, 0x74, 0x79, 0x22, 0x11, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x57, 0x0a, 0x17, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x31, 0x36, 0x34, 0x50, 0x68, 0x6f, 0x6e, 0x65, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, + 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x61, + 0x78, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, + 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x46, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x0f, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x12, 0x2a, 0x0a, + 0x0e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, + 0x7a, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, + 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x02, 0x52, + 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x09, 0x70, 0x72, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x72, + 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x42, 0x06, 0x0a, + 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x42, 0x0c, 0x0a, + 0x0a, 0x5f, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x15, 0x0a, 0x13, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x75, + 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x44, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x47, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0a, 0x61, 0x62, 0x62, 0x72, + 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0a, + 0x61, 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, + 0x0b, 0x5f, 0x61, 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x22, 0x1a, 0x0a, 0x18, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x50, 0x68, 0x6f, + 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x8c, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2a, 0x0a, 0x0e, 0x72, 0x61, + 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x53, + 0x69, 0x67, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, + 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x03, 0x6d, 0x61, + 0x78, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, + 0x7a, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, + 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x4c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x48, 0x61, 0x73, + 0x68, 0x22, 0x0d, 0x0a, 0x0b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x53, 0x4e, + 0x22, 0x59, 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x31, 0x0a, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x75, + 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, + 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x65, 0x74, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x22, 0x5f, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, + 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, + 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x4a, + 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x4e, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, + 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x03, 0x6d, + 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, + 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x55, 0x6e, 0x69, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x12, + 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x74, + 0x63, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x50, 0x0a, 0x0c, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x0f, 0x69, 0x6e, + 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x48, 0x79, + 0x70, 0x68, 0x65, 0x6e, 0x73, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x69, 0x6e, 0x63, + 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x22, 0x11, 0x0a, 0x0f, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5a, 0x69, 0x70, 0x63, 0x6f, 0x64, 0x65, 0x22, + 0x5c, 0x0a, 0x18, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x31, 0x36, 0x34, + 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x0f, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x56, 0x0a, + 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, + 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, + 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, + 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, + 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xc4, 0x01, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x6f, 0x72, 0x6d, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x12, 0x3b, 0x0a, 0x17, 0x72, 0x61, + 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, + 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x15, 0x72, + 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x4d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x72, 0x61, 0x6e, 0x64, 0x6f, + 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, + 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, 0x15, 0x72, 0x61, 0x6e, 0x64, + 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, + 0x78, 0x88, 0x01, 0x01, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x69, 0x6e, + 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x55, 0x0a, 0x11, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x42, 0x17, 0x0a, 0x15, 0x5f, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x65, - 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x0e, 0x0a, 0x0c, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x22, 0x47, 0x0a, 0x12, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, 0x72, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x12, 0x22, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, 0x6c, 0x75, 0x68, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x4c, 0x75, - 0x68, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x5f, - 0x6c, 0x75, 0x68, 0x6e, 0x22, 0x0e, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x43, 0x69, 0x74, 0x79, 0x22, 0x11, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x22, 0x57, 0x0a, 0x17, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x45, 0x31, 0x36, 0x34, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, - 0x00, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, - 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, - 0x22, 0x13, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x72, 0x73, - 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xbf, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x12, 0x2a, 0x0a, 0x0e, 0x72, 0x61, 0x6e, - 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x53, 0x69, - 0x67, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x01, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, - 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x48, 0x02, 0x52, 0x03, 0x6d, 0x61, 0x78, - 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x48, 0x03, 0x52, 0x09, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, - 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, - 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x70, 0x72, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x15, 0x0a, 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x12, - 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, - 0x6d, 0x65, 0x22, 0x44, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x47, 0x65, - 0x6e, 0x64, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0a, 0x61, 0x62, 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, - 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x62, 0x62, 0x72, - 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x61, 0x62, - 0x62, 0x72, 0x65, 0x76, 0x69, 0x61, 0x74, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x22, 0x8c, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x2a, 0x0a, 0x0e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, - 0x69, 0x7a, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, - 0x52, 0x0d, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x88, - 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, - 0x01, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x02, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, - 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x73, - 0x69, 0x67, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, - 0x6d, 0x61, 0x78, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4c, - 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x53, 0x68, 0x61, 0x32, 0x35, 0x36, 0x48, 0x61, 0x73, 0x68, 0x22, 0x0d, 0x0a, - 0x0b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x53, 0x4e, 0x22, 0x59, 0x0a, 0x0d, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x31, 0x0a, + 0x67, 0x74, 0x68, 0x22, 0x5d, 0x0a, 0x19, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, + 0x49, 0x6e, 0x74, 0x36, 0x34, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, + 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, + 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, + 0x74, 0x68, 0x22, 0xc2, 0x01, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, + 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x3b, 0x0a, 0x17, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x69, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, 0x88, + 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x15, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, + 0x1a, 0x0a, 0x18, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x1a, 0x0a, 0x18, 0x5f, + 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, + 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x55, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x66, 0x6f, 0x72, 0x6d, 0x4c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x0f, + 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x58, + 0x0a, 0x14, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x68, 0x6f, 0x6e, 0x65, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, + 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, + 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x53, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x0f, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, + 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x0d, 0x0a, + 0x0b, 0x50, 0x61, 0x73, 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x22, 0x06, 0x0a, 0x04, + 0x4e, 0x75, 0x6c, 0x6c, 0x22, 0x29, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, + 0x6d, 0x4a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, + 0x38, 0x0a, 0x1c, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, + 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x46, 0x0a, 0x21, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, + 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x4a, 0x04, 0x08, 0x01, 0x10, + 0x02, 0x22, 0x3a, 0x0a, 0x22, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, + 0x72, 0x4a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x49, 0x0a, + 0x13, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x69, 0x63, 0x61, 0x6c, 0x12, 0x23, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, + 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x61, + 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x22, 0x69, 0x0a, 0x1a, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x53, 0x63, + 0x72, 0x61, 0x6d, 0x62, 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x64, 0x52, 0x65, 0x67, 0x65, 0x78, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, + 0x67, 0x65, 0x78, 0x22, 0x28, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4a, + 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x54, 0x0a, + 0x1c, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, + 0x65, 0x78, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, + 0x13, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x72, + 0x65, 0x67, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x52, 0x65, 0x67, 0x65, 0x78, 0x4a, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x22, 0x35, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, + 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x65, 0x78, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x5b, 0x0a, 0x0f, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x31, 0x0a, 0x12, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x75, - 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x65, 0x65, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x22, 0x5f, 0x0a, 0x19, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x15, 0x0a, - 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x03, 0x6d, 0x69, - 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x03, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, - 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, 0x78, 0x4a, 0x04, 0x08, 0x01, 0x10, - 0x02, 0x22, 0x4e, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x48, 0x00, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x15, 0x0a, 0x03, 0x6d, 0x61, - 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, 0x01, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x88, 0x01, - 0x01, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x6d, 0x61, - 0x78, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x6e, 0x69, - 0x78, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x16, - 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x55, 0x74, 0x63, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x50, 0x0a, 0x0c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x55, 0x75, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x0f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x5f, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, - 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x48, 0x79, 0x70, 0x68, 0x65, 0x6e, - 0x73, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x5f, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x22, 0x11, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x5a, 0x69, 0x70, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x5c, 0x0a, 0x18, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x45, 0x31, 0x36, 0x34, 0x50, 0x68, 0x6f, 0x6e, - 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x56, 0x0a, 0x12, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, - 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x22, 0xc4, 0x01, 0x0a, 0x10, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x46, - 0x6c, 0x6f, 0x61, 0x74, 0x36, 0x34, 0x12, 0x3b, 0x0a, 0x17, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x69, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x15, 0x72, 0x61, 0x6e, 0x64, 0x6f, - 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, - 0x88, 0x01, 0x01, 0x12, 0x3b, 0x0a, 0x17, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x01, 0x48, 0x01, 0x52, 0x15, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, - 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x1a, 0x0a, 0x18, - 0x5f, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, - 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x22, 0x55, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, - 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x5d, 0x0a, 0x19, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x74, 0x36, - 0x34, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x0f, - 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0xc2, - 0x01, 0x0a, 0x0e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x49, 0x6e, 0x74, 0x36, - 0x34, 0x12, 0x3b, 0x0a, 0x17, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x48, 0x00, 0x52, 0x15, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, 0x88, 0x01, 0x01, 0x12, 0x3b, - 0x0a, 0x17, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x48, - 0x01, 0x52, 0x15, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x78, 0x88, 0x01, 0x01, 0x42, 0x1a, 0x0a, 0x18, 0x5f, - 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x69, 0x6e, 0x42, 0x1a, 0x0a, 0x18, 0x5f, 0x72, 0x61, 0x6e, 0x64, - 0x6f, 0x6d, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, - 0x6d, 0x61, 0x78, 0x22, 0x55, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, - 0x4c, 0x61, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, - 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x58, 0x0a, 0x14, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0e, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x88, 0x01, 0x01, - 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, - 0x6e, 0x67, 0x74, 0x68, 0x22, 0x53, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, - 0x6d, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x2c, 0x0a, 0x0f, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x00, 0x52, 0x0e, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x4c, 0x65, 0x6e, 0x67, - 0x74, 0x68, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x5f, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, 0x0d, 0x0a, 0x0b, 0x50, 0x61, 0x73, - 0x73, 0x74, 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x22, 0x06, 0x0a, 0x04, 0x4e, 0x75, 0x6c, 0x6c, - 0x22, 0x29, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x4a, 0x61, 0x76, - 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x38, 0x0a, 0x1c, 0x55, - 0x73, 0x65, 0x72, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, - 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x46, 0x0a, 0x21, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x61, 0x76, 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x04, 0x63, 0x6f, - 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, - 0x01, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x3a, 0x0a, - 0x22, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x4a, 0x61, 0x76, - 0x61, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x49, 0x0a, 0x13, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, - 0x12, 0x23, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, - 0x65, 0x73, 0x88, 0x01, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x69, 0x65, 0x73, 0x22, 0x69, 0x0a, 0x1a, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, - 0x6d, 0x43, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x53, 0x63, 0x72, 0x61, 0x6d, 0x62, - 0x6c, 0x65, 0x12, 0x33, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x52, - 0x65, 0x67, 0x65, 0x78, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, 0x22, - 0x28, 0x0a, 0x12, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4a, 0x61, 0x76, 0x61, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x54, 0x0a, 0x1c, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x67, 0x65, 0x78, 0x43, 0x6f, - 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x65, 0x78, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x64, 0x52, 0x65, 0x67, 0x65, 0x78, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, - 0x35, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, - 0x65, 0x67, 0x65, 0x78, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x22, 0x5b, 0x0a, 0x0f, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x31, 0x0a, 0x12, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x10, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x42, 0x15, 0x0a, 0x13, - 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x22, 0x49, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, - 0xb0, 0x01, 0x01, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x3d, - 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, - 0x69, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x16, 0x0a, - 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x42, 0x75, 0x73, 0x69, 0x6e, 0x65, 0x73, - 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x42, 0x0a, 0x07, 0x69, 0x70, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x6d, 0x67, - 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x54, 0x79, 0x70, - 0x65, 0x48, 0x00, 0x52, 0x06, 0x69, 0x70, 0x54, 0x79, 0x70, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0a, - 0x0a, 0x08, 0x5f, 0x69, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x75, 0x69, 0x64, 0x2a, 0x87, 0x11, 0x0a, 0x11, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, - 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, - 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x50, 0x41, 0x53, 0x53, - 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x01, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, - 0x10, 0x02, 0x12, 0x2b, 0x0a, 0x27, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, - 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, - 0x52, 0x4d, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x03, 0x12, - 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x45, - 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x04, 0x12, 0x26, 0x0a, 0x22, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, - 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x05, 0x12, 0x24, - 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x42, 0x4f, - 0x4f, 0x4c, 0x10, 0x06, 0x12, 0x2b, 0x0a, 0x27, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, - 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, - 0x41, 0x54, 0x45, 0x5f, 0x43, 0x41, 0x52, 0x44, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, - 0x07, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, - 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, - 0x5f, 0x43, 0x49, 0x54, 0x59, 0x10, 0x08, 0x12, 0x31, 0x0a, 0x2d, 0x54, 0x52, 0x41, 0x4e, 0x53, + 0x6c, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x49, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x50, 0x69, 0x69, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x0a, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, + 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x09, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x64, 0x22, 0x3d, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, + 0x72, 0x6d, 0x50, 0x69, 0x69, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x22, 0x16, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x42, 0x75, 0x73, + 0x69, 0x6e, 0x65, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x63, 0x0a, 0x11, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x42, + 0x0a, 0x07, 0x69, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x24, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x49, 0x70, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x06, 0x69, 0x70, 0x54, 0x79, 0x70, 0x65, 0x88, + 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x69, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x0f, + 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x55, 0x75, 0x69, 0x64, 0x22, + 0xd2, 0x01, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x48, 0x61, 0x73, + 0x68, 0x12, 0x3e, 0x0a, 0x04, 0x61, 0x6c, 0x67, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x25, 0x2e, 0x6d, 0x67, 0x6d, 0x74, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x48, 0x61, 0x73, 0x68, 0x2e, 0x48, 0x61, + 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x61, 0x6c, 0x67, 0x6f, 0x88, 0x01, + 0x01, 0x22, 0x78, 0x0a, 0x08, 0x48, 0x61, 0x73, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, + 0x15, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x48, 0x41, 0x53, 0x48, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x44, 0x35, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x48, + 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x31, 0x10, 0x02, 0x12, + 0x14, 0x0a, 0x10, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x48, 0x41, + 0x32, 0x35, 0x36, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x41, 0x53, 0x48, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x35, 0x31, 0x32, 0x10, 0x04, 0x42, 0x07, 0x0a, 0x05, 0x5f, + 0x61, 0x6c, 0x67, 0x6f, 0x2a, 0xae, 0x11, 0x0a, 0x11, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, + 0x72, 0x6d, 0x65, 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x1e, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x22, + 0x0a, 0x1e, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, + 0x10, 0x01, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, + 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, + 0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x02, 0x12, 0x2b, 0x0a, 0x27, 0x54, + 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x4a, 0x41, 0x56, 0x41, + 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x03, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, + 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, + 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x04, 0x12, + 0x26, 0x0a, 0x22, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, + 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x05, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, - 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x45, 0x31, 0x36, 0x34, 0x5f, 0x50, 0x48, 0x4f, 0x4e, - 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x09, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, + 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x06, 0x12, 0x2b, 0x0a, + 0x27, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x41, 0x52, + 0x44, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x07, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, - 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x0a, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, - 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, - 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x0b, 0x12, - 0x2c, 0x0a, 0x28, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, + 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x49, 0x54, 0x59, 0x10, 0x08, + 0x12, 0x31, 0x0a, 0x2d, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, + 0x45, 0x31, 0x36, 0x34, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, + 0x52, 0x10, 0x09, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, + 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, + 0x54, 0x45, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x0a, 0x12, + 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, - 0x55, 0x4c, 0x4c, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x0c, 0x12, 0x29, 0x0a, - 0x25, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x55, 0x4c, - 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x0d, 0x12, 0x26, 0x0a, 0x22, 0x54, 0x52, 0x41, 0x4e, + 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x0b, 0x12, 0x2c, 0x0a, 0x28, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, - 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x10, 0x0e, - 0x12, 0x32, 0x0a, 0x2e, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, - 0x49, 0x4e, 0x54, 0x36, 0x34, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, - 0x45, 0x52, 0x10, 0x0f, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, - 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, - 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x10, 0x12, 0x2c, 0x0a, 0x28, 0x54, - 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x41, 0x4e, 0x44, 0x4f, - 0x4d, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x11, 0x12, 0x29, 0x0a, 0x25, 0x54, 0x52, 0x41, + 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x41, 0x44, 0x44, + 0x52, 0x45, 0x53, 0x53, 0x10, 0x0c, 0x12, 0x29, 0x0a, 0x25, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, + 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, + 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, + 0x0d, 0x12, 0x26, 0x0a, 0x22, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, + 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, + 0x5f, 0x47, 0x45, 0x4e, 0x44, 0x45, 0x52, 0x10, 0x0e, 0x12, 0x32, 0x0a, 0x2e, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x4e, 0x41, - 0x4d, 0x45, 0x10, 0x12, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, + 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x5f, 0x50, + 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x0f, 0x12, 0x25, 0x0a, + 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x4e, 0x54, + 0x36, 0x34, 0x10, 0x10, 0x12, 0x2c, 0x0a, 0x28, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, - 0x41, 0x54, 0x45, 0x5f, 0x53, 0x48, 0x41, 0x32, 0x35, 0x36, 0x48, 0x41, 0x53, 0x48, 0x10, 0x13, - 0x12, 0x23, 0x0a, 0x1f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, - 0x53, 0x53, 0x4e, 0x10, 0x14, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, + 0x41, 0x54, 0x45, 0x5f, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, + 0x10, 0x11, 0x12, 0x29, 0x0a, 0x25, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, + 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, + 0x45, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x12, 0x12, 0x2a, 0x0a, + 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x48, 0x41, + 0x32, 0x35, 0x36, 0x48, 0x41, 0x53, 0x48, 0x10, 0x13, 0x12, 0x23, 0x0a, 0x1f, 0x54, 0x52, 0x41, + 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, + 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x53, 0x4e, 0x10, 0x14, 0x12, 0x25, + 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x45, 0x10, 0x15, 0x12, 0x2e, 0x0a, 0x2a, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, - 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x10, 0x15, 0x12, 0x2e, 0x0a, 0x2a, - 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x45, - 0x45, 0x54, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x16, 0x12, 0x33, 0x0a, 0x2f, - 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, - 0x4e, 0x47, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, - 0x17, 0x12, 0x26, 0x0a, 0x22, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, + 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x45, 0x54, 0x5f, 0x41, 0x44, 0x44, 0x52, + 0x45, 0x53, 0x53, 0x10, 0x16, 0x12, 0x33, 0x0a, 0x2f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, + 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, + 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x50, 0x48, 0x4f, 0x4e, + 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x17, 0x12, 0x26, 0x0a, 0x22, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, + 0x10, 0x18, 0x12, 0x2d, 0x0a, 0x29, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, + 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, + 0x45, 0x5f, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, + 0x19, 0x12, 0x2d, 0x0a, 0x29, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, - 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x18, 0x12, 0x2d, 0x0a, 0x29, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x5f, - 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x19, 0x12, 0x2d, 0x0a, 0x29, 0x54, 0x52, 0x41, 0x4e, + 0x5f, 0x55, 0x4e, 0x49, 0x58, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x1a, + 0x12, 0x28, 0x0a, 0x24, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, + 0x55, 0x53, 0x45, 0x52, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x1b, 0x12, 0x2c, 0x0a, 0x28, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x54, 0x43, 0x54, 0x49, 0x4d, + 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x1c, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, - 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x58, 0x54, 0x49, 0x4d, 0x45, - 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x1a, 0x12, 0x28, 0x0a, 0x24, 0x54, 0x52, 0x41, 0x4e, 0x53, - 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, - 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x4e, 0x41, 0x4d, 0x45, 0x10, - 0x1b, 0x12, 0x2c, 0x0a, 0x28, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, - 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, - 0x5f, 0x55, 0x54, 0x43, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x1c, 0x12, + 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x55, 0x49, 0x44, 0x10, 0x1d, 0x12, 0x27, + 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x5a, 0x49, + 0x50, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x1e, 0x12, 0x32, 0x0a, 0x2e, 0x54, 0x52, 0x41, 0x4e, 0x53, + 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x45, 0x31, 0x36, 0x34, 0x5f, 0x50, 0x48, 0x4f, + 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x1f, 0x12, 0x2b, 0x0a, 0x27, 0x54, + 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46, 0x49, 0x52, 0x53, + 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x20, 0x12, 0x28, 0x0a, 0x24, 0x54, 0x52, 0x41, 0x4e, + 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, + 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, + 0x10, 0x21, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, + 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, + 0x52, 0x4d, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x22, 0x12, 0x33, + 0x0a, 0x2f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x49, + 0x4e, 0x54, 0x36, 0x34, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, + 0x52, 0x10, 0x23, 0x12, 0x26, 0x0a, 0x22, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, + 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, + 0x4f, 0x52, 0x4d, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x24, 0x12, 0x2a, 0x0a, 0x26, 0x54, + 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x4c, 0x41, 0x53, 0x54, + 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x25, 0x12, 0x2d, 0x0a, 0x29, 0x54, 0x52, 0x41, 0x4e, 0x53, + 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, + 0x4d, 0x42, 0x45, 0x52, 0x10, 0x26, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, + 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, + 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x27, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x55, - 0x55, 0x49, 0x44, 0x10, 0x1d, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x4e, + 0x55, 0x4c, 0x4c, 0x10, 0x28, 0x12, 0x2b, 0x0a, 0x27, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, - 0x52, 0x41, 0x54, 0x45, 0x5f, 0x5a, 0x49, 0x50, 0x43, 0x4f, 0x44, 0x45, 0x10, 0x1e, 0x12, 0x32, - 0x0a, 0x2e, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x45, - 0x31, 0x36, 0x34, 0x5f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, - 0x10, 0x1f, 0x12, 0x2b, 0x0a, 0x27, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, - 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, - 0x52, 0x4d, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x20, 0x12, - 0x28, 0x0a, 0x24, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, - 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x36, 0x34, 0x10, 0x21, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x4e, - 0x41, 0x4d, 0x45, 0x10, 0x22, 0x12, 0x33, 0x0a, 0x2f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, - 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, - 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x5f, 0x50, 0x48, 0x4f, 0x4e, - 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x23, 0x12, 0x26, 0x0a, 0x22, 0x54, 0x52, - 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, - 0x10, 0x24, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, + 0x52, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x49, 0x43, 0x41, 0x4c, + 0x10, 0x2a, 0x12, 0x33, 0x0a, 0x2f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, - 0x52, 0x4d, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x25, 0x12, 0x2d, - 0x0a, 0x29, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x50, - 0x48, 0x4f, 0x4e, 0x45, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x26, 0x12, 0x27, 0x0a, - 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x53, 0x54, - 0x52, 0x49, 0x4e, 0x47, 0x10, 0x27, 0x12, 0x24, 0x0a, 0x20, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, - 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, - 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x4e, 0x55, 0x4c, 0x4c, 0x10, 0x28, 0x12, 0x2b, 0x0a, 0x27, + 0x52, 0x4d, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x43, 0x52, + 0x41, 0x4d, 0x42, 0x4c, 0x45, 0x10, 0x2b, 0x12, 0x23, 0x0a, 0x1f, 0x54, 0x52, 0x41, 0x4e, 0x53, + 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x53, + 0x45, 0x52, 0x5f, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x2c, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x41, 0x54, 0x45, - 0x47, 0x4f, 0x52, 0x49, 0x43, 0x41, 0x4c, 0x10, 0x2a, 0x12, 0x33, 0x0a, 0x2f, 0x54, 0x52, 0x41, - 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x41, 0x43, - 0x54, 0x45, 0x52, 0x5f, 0x53, 0x43, 0x52, 0x41, 0x4d, 0x42, 0x4c, 0x45, 0x10, 0x2b, 0x12, 0x23, - 0x0a, 0x1f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, - 0x44, 0x10, 0x2c, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, - 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, - 0x54, 0x45, 0x5f, 0x4a, 0x41, 0x56, 0x41, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x2d, 0x12, - 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x43, - 0x4f, 0x55, 0x4e, 0x54, 0x52, 0x59, 0x10, 0x2e, 0x12, 0x29, 0x0a, 0x25, 0x54, 0x52, 0x41, 0x4e, - 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, - 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x50, 0x49, 0x49, 0x5f, 0x54, 0x45, 0x58, - 0x54, 0x10, 0x2f, 0x12, 0x2d, 0x0a, 0x29, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, - 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, - 0x54, 0x45, 0x5f, 0x42, 0x55, 0x53, 0x49, 0x4e, 0x45, 0x53, 0x53, 0x5f, 0x4e, 0x41, 0x4d, 0x45, - 0x10, 0x30, 0x12, 0x2a, 0x0a, 0x26, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, - 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, - 0x45, 0x5f, 0x49, 0x50, 0x5f, 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x31, 0x12, 0x25, + 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x4a, 0x41, 0x56, 0x41, + 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x10, 0x2d, 0x12, 0x27, 0x0a, 0x23, 0x54, 0x52, 0x41, 0x4e, + 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x47, + 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x52, 0x59, 0x10, + 0x2e, 0x12, 0x29, 0x0a, 0x25, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, + 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, + 0x4d, 0x5f, 0x50, 0x49, 0x49, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x10, 0x2f, 0x12, 0x2d, 0x0a, 0x29, + 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x42, 0x55, 0x53, 0x49, + 0x4e, 0x45, 0x53, 0x53, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x30, 0x12, 0x2a, 0x0a, 0x26, 0x54, + 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x45, 0x5f, 0x49, 0x50, 0x5f, 0x41, 0x44, + 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x31, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, + 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, + 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x55, 0x55, 0x49, 0x44, 0x10, 0x32, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x55, - 0x55, 0x49, 0x44, 0x10, 0x32, 0x2a, 0xc4, 0x02, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x48, + 0x41, 0x53, 0x48, 0x10, 0x33, 0x2a, 0xc4, 0x02, 0x0a, 0x13, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x21, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x4f, 0x52, 0x4d, 0x45, 0x52, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, @@ -6287,8 +6434,8 @@ func file_mgmt_v1alpha1_transformer_proto_rawDescGZIP() []byte { return file_mgmt_v1alpha1_transformer_proto_rawDescData } -var file_mgmt_v1alpha1_transformer_proto_enumTypes = make([]protoimpl.EnumInfo, 7) -var file_mgmt_v1alpha1_transformer_proto_msgTypes = make([]protoimpl.MessageInfo, 80) +var file_mgmt_v1alpha1_transformer_proto_enumTypes = make([]protoimpl.EnumInfo, 8) +var file_mgmt_v1alpha1_transformer_proto_msgTypes = make([]protoimpl.MessageInfo, 81) var file_mgmt_v1alpha1_transformer_proto_goTypes = []any{ (TransformerSource)(0), // 0: mgmt.v1alpha1.TransformerSource (TransformerDataType)(0), // 1: mgmt.v1alpha1.TransformerDataType @@ -6297,199 +6444,203 @@ var file_mgmt_v1alpha1_transformer_proto_goTypes = []any{ (InvalidEmailAction)(0), // 4: mgmt.v1alpha1.InvalidEmailAction (GenerateIpAddressType)(0), // 5: mgmt.v1alpha1.GenerateIpAddressType (PiiAnonymizer_Hash_HashType)(0), // 6: mgmt.v1alpha1.PiiAnonymizer.Hash.HashType - (*GetSystemTransformersRequest)(nil), // 7: mgmt.v1alpha1.GetSystemTransformersRequest - (*GetSystemTransformersResponse)(nil), // 8: mgmt.v1alpha1.GetSystemTransformersResponse - (*GetSystemTransformerBySourceRequest)(nil), // 9: mgmt.v1alpha1.GetSystemTransformerBySourceRequest - (*GetSystemTransformerBySourceResponse)(nil), // 10: mgmt.v1alpha1.GetSystemTransformerBySourceResponse - (*GetUserDefinedTransformersRequest)(nil), // 11: mgmt.v1alpha1.GetUserDefinedTransformersRequest - (*GetUserDefinedTransformersResponse)(nil), // 12: mgmt.v1alpha1.GetUserDefinedTransformersResponse - (*GetUserDefinedTransformerByIdRequest)(nil), // 13: mgmt.v1alpha1.GetUserDefinedTransformerByIdRequest - (*GetUserDefinedTransformerByIdResponse)(nil), // 14: mgmt.v1alpha1.GetUserDefinedTransformerByIdResponse - (*CreateUserDefinedTransformerRequest)(nil), // 15: mgmt.v1alpha1.CreateUserDefinedTransformerRequest - (*CreateUserDefinedTransformerResponse)(nil), // 16: mgmt.v1alpha1.CreateUserDefinedTransformerResponse - (*DeleteUserDefinedTransformerRequest)(nil), // 17: mgmt.v1alpha1.DeleteUserDefinedTransformerRequest - (*DeleteUserDefinedTransformerResponse)(nil), // 18: mgmt.v1alpha1.DeleteUserDefinedTransformerResponse - (*UpdateUserDefinedTransformerRequest)(nil), // 19: mgmt.v1alpha1.UpdateUserDefinedTransformerRequest - (*UpdateUserDefinedTransformerResponse)(nil), // 20: mgmt.v1alpha1.UpdateUserDefinedTransformerResponse - (*IsTransformerNameAvailableRequest)(nil), // 21: mgmt.v1alpha1.IsTransformerNameAvailableRequest - (*IsTransformerNameAvailableResponse)(nil), // 22: mgmt.v1alpha1.IsTransformerNameAvailableResponse - (*UserDefinedTransformer)(nil), // 23: mgmt.v1alpha1.UserDefinedTransformer - (*SystemTransformer)(nil), // 24: mgmt.v1alpha1.SystemTransformer - (*TransformerConfig)(nil), // 25: mgmt.v1alpha1.TransformerConfig - (*TransformPiiText)(nil), // 26: mgmt.v1alpha1.TransformPiiText - (*PiiDenyRecognizer)(nil), // 27: mgmt.v1alpha1.PiiDenyRecognizer - (*PiiAnonymizer)(nil), // 28: mgmt.v1alpha1.PiiAnonymizer - (*GenerateEmail)(nil), // 29: mgmt.v1alpha1.GenerateEmail - (*TransformEmail)(nil), // 30: mgmt.v1alpha1.TransformEmail - (*GenerateBool)(nil), // 31: mgmt.v1alpha1.GenerateBool - (*GenerateCardNumber)(nil), // 32: mgmt.v1alpha1.GenerateCardNumber - (*GenerateCity)(nil), // 33: mgmt.v1alpha1.GenerateCity - (*GenerateDefault)(nil), // 34: mgmt.v1alpha1.GenerateDefault - (*GenerateE164PhoneNumber)(nil), // 35: mgmt.v1alpha1.GenerateE164PhoneNumber - (*GenerateFirstName)(nil), // 36: mgmt.v1alpha1.GenerateFirstName - (*GenerateFloat64)(nil), // 37: mgmt.v1alpha1.GenerateFloat64 - (*GenerateFullAddress)(nil), // 38: mgmt.v1alpha1.GenerateFullAddress - (*GenerateFullName)(nil), // 39: mgmt.v1alpha1.GenerateFullName - (*GenerateGender)(nil), // 40: mgmt.v1alpha1.GenerateGender - (*GenerateInt64PhoneNumber)(nil), // 41: mgmt.v1alpha1.GenerateInt64PhoneNumber - (*GenerateInt64)(nil), // 42: mgmt.v1alpha1.GenerateInt64 - (*GenerateLastName)(nil), // 43: mgmt.v1alpha1.GenerateLastName - (*GenerateSha256Hash)(nil), // 44: mgmt.v1alpha1.GenerateSha256Hash - (*GenerateSSN)(nil), // 45: mgmt.v1alpha1.GenerateSSN - (*GenerateState)(nil), // 46: mgmt.v1alpha1.GenerateState - (*GenerateStreetAddress)(nil), // 47: mgmt.v1alpha1.GenerateStreetAddress - (*GenerateStringPhoneNumber)(nil), // 48: mgmt.v1alpha1.GenerateStringPhoneNumber - (*GenerateString)(nil), // 49: mgmt.v1alpha1.GenerateString - (*GenerateUnixTimestamp)(nil), // 50: mgmt.v1alpha1.GenerateUnixTimestamp - (*GenerateUsername)(nil), // 51: mgmt.v1alpha1.GenerateUsername - (*GenerateUtcTimestamp)(nil), // 52: mgmt.v1alpha1.GenerateUtcTimestamp - (*GenerateUuid)(nil), // 53: mgmt.v1alpha1.GenerateUuid - (*GenerateZipcode)(nil), // 54: mgmt.v1alpha1.GenerateZipcode - (*TransformE164PhoneNumber)(nil), // 55: mgmt.v1alpha1.TransformE164PhoneNumber - (*TransformFirstName)(nil), // 56: mgmt.v1alpha1.TransformFirstName - (*TransformFloat64)(nil), // 57: mgmt.v1alpha1.TransformFloat64 - (*TransformFullName)(nil), // 58: mgmt.v1alpha1.TransformFullName - (*TransformInt64PhoneNumber)(nil), // 59: mgmt.v1alpha1.TransformInt64PhoneNumber - (*TransformInt64)(nil), // 60: mgmt.v1alpha1.TransformInt64 - (*TransformLastName)(nil), // 61: mgmt.v1alpha1.TransformLastName - (*TransformPhoneNumber)(nil), // 62: mgmt.v1alpha1.TransformPhoneNumber - (*TransformString)(nil), // 63: mgmt.v1alpha1.TransformString - (*Passthrough)(nil), // 64: mgmt.v1alpha1.Passthrough - (*Null)(nil), // 65: mgmt.v1alpha1.Null - (*TransformJavascript)(nil), // 66: mgmt.v1alpha1.TransformJavascript - (*UserDefinedTransformerConfig)(nil), // 67: mgmt.v1alpha1.UserDefinedTransformerConfig - (*ValidateUserJavascriptCodeRequest)(nil), // 68: mgmt.v1alpha1.ValidateUserJavascriptCodeRequest - (*ValidateUserJavascriptCodeResponse)(nil), // 69: mgmt.v1alpha1.ValidateUserJavascriptCodeResponse - (*GenerateCategorical)(nil), // 70: mgmt.v1alpha1.GenerateCategorical - (*TransformCharacterScramble)(nil), // 71: mgmt.v1alpha1.TransformCharacterScramble - (*GenerateJavascript)(nil), // 72: mgmt.v1alpha1.GenerateJavascript - (*ValidateUserRegexCodeRequest)(nil), // 73: mgmt.v1alpha1.ValidateUserRegexCodeRequest - (*ValidateUserRegexCodeResponse)(nil), // 74: mgmt.v1alpha1.ValidateUserRegexCodeResponse - (*GenerateCountry)(nil), // 75: mgmt.v1alpha1.GenerateCountry - (*GetTransformPiiEntitiesRequest)(nil), // 76: mgmt.v1alpha1.GetTransformPiiEntitiesRequest - (*GetTransformPiiEntitiesResponse)(nil), // 77: mgmt.v1alpha1.GetTransformPiiEntitiesResponse - (*GenerateBusinessName)(nil), // 78: mgmt.v1alpha1.GenerateBusinessName - (*GenerateIpAddress)(nil), // 79: mgmt.v1alpha1.GenerateIpAddress - (*TransformUuid)(nil), // 80: mgmt.v1alpha1.TransformUuid - nil, // 81: mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry - (*PiiAnonymizer_Replace)(nil), // 82: mgmt.v1alpha1.PiiAnonymizer.Replace - (*PiiAnonymizer_Redact)(nil), // 83: mgmt.v1alpha1.PiiAnonymizer.Redact - (*PiiAnonymizer_Mask)(nil), // 84: mgmt.v1alpha1.PiiAnonymizer.Mask - (*PiiAnonymizer_Hash)(nil), // 85: mgmt.v1alpha1.PiiAnonymizer.Hash - (*PiiAnonymizer_Transform)(nil), // 86: mgmt.v1alpha1.PiiAnonymizer.Transform - (*timestamppb.Timestamp)(nil), // 87: google.protobuf.Timestamp + (TransformHash_HashType)(0), // 7: mgmt.v1alpha1.TransformHash.HashType + (*GetSystemTransformersRequest)(nil), // 8: mgmt.v1alpha1.GetSystemTransformersRequest + (*GetSystemTransformersResponse)(nil), // 9: mgmt.v1alpha1.GetSystemTransformersResponse + (*GetSystemTransformerBySourceRequest)(nil), // 10: mgmt.v1alpha1.GetSystemTransformerBySourceRequest + (*GetSystemTransformerBySourceResponse)(nil), // 11: mgmt.v1alpha1.GetSystemTransformerBySourceResponse + (*GetUserDefinedTransformersRequest)(nil), // 12: mgmt.v1alpha1.GetUserDefinedTransformersRequest + (*GetUserDefinedTransformersResponse)(nil), // 13: mgmt.v1alpha1.GetUserDefinedTransformersResponse + (*GetUserDefinedTransformerByIdRequest)(nil), // 14: mgmt.v1alpha1.GetUserDefinedTransformerByIdRequest + (*GetUserDefinedTransformerByIdResponse)(nil), // 15: mgmt.v1alpha1.GetUserDefinedTransformerByIdResponse + (*CreateUserDefinedTransformerRequest)(nil), // 16: mgmt.v1alpha1.CreateUserDefinedTransformerRequest + (*CreateUserDefinedTransformerResponse)(nil), // 17: mgmt.v1alpha1.CreateUserDefinedTransformerResponse + (*DeleteUserDefinedTransformerRequest)(nil), // 18: mgmt.v1alpha1.DeleteUserDefinedTransformerRequest + (*DeleteUserDefinedTransformerResponse)(nil), // 19: mgmt.v1alpha1.DeleteUserDefinedTransformerResponse + (*UpdateUserDefinedTransformerRequest)(nil), // 20: mgmt.v1alpha1.UpdateUserDefinedTransformerRequest + (*UpdateUserDefinedTransformerResponse)(nil), // 21: mgmt.v1alpha1.UpdateUserDefinedTransformerResponse + (*IsTransformerNameAvailableRequest)(nil), // 22: mgmt.v1alpha1.IsTransformerNameAvailableRequest + (*IsTransformerNameAvailableResponse)(nil), // 23: mgmt.v1alpha1.IsTransformerNameAvailableResponse + (*UserDefinedTransformer)(nil), // 24: mgmt.v1alpha1.UserDefinedTransformer + (*SystemTransformer)(nil), // 25: mgmt.v1alpha1.SystemTransformer + (*TransformerConfig)(nil), // 26: mgmt.v1alpha1.TransformerConfig + (*TransformPiiText)(nil), // 27: mgmt.v1alpha1.TransformPiiText + (*PiiDenyRecognizer)(nil), // 28: mgmt.v1alpha1.PiiDenyRecognizer + (*PiiAnonymizer)(nil), // 29: mgmt.v1alpha1.PiiAnonymizer + (*GenerateEmail)(nil), // 30: mgmt.v1alpha1.GenerateEmail + (*TransformEmail)(nil), // 31: mgmt.v1alpha1.TransformEmail + (*GenerateBool)(nil), // 32: mgmt.v1alpha1.GenerateBool + (*GenerateCardNumber)(nil), // 33: mgmt.v1alpha1.GenerateCardNumber + (*GenerateCity)(nil), // 34: mgmt.v1alpha1.GenerateCity + (*GenerateDefault)(nil), // 35: mgmt.v1alpha1.GenerateDefault + (*GenerateE164PhoneNumber)(nil), // 36: mgmt.v1alpha1.GenerateE164PhoneNumber + (*GenerateFirstName)(nil), // 37: mgmt.v1alpha1.GenerateFirstName + (*GenerateFloat64)(nil), // 38: mgmt.v1alpha1.GenerateFloat64 + (*GenerateFullAddress)(nil), // 39: mgmt.v1alpha1.GenerateFullAddress + (*GenerateFullName)(nil), // 40: mgmt.v1alpha1.GenerateFullName + (*GenerateGender)(nil), // 41: mgmt.v1alpha1.GenerateGender + (*GenerateInt64PhoneNumber)(nil), // 42: mgmt.v1alpha1.GenerateInt64PhoneNumber + (*GenerateInt64)(nil), // 43: mgmt.v1alpha1.GenerateInt64 + (*GenerateLastName)(nil), // 44: mgmt.v1alpha1.GenerateLastName + (*GenerateSha256Hash)(nil), // 45: mgmt.v1alpha1.GenerateSha256Hash + (*GenerateSSN)(nil), // 46: mgmt.v1alpha1.GenerateSSN + (*GenerateState)(nil), // 47: mgmt.v1alpha1.GenerateState + (*GenerateStreetAddress)(nil), // 48: mgmt.v1alpha1.GenerateStreetAddress + (*GenerateStringPhoneNumber)(nil), // 49: mgmt.v1alpha1.GenerateStringPhoneNumber + (*GenerateString)(nil), // 50: mgmt.v1alpha1.GenerateString + (*GenerateUnixTimestamp)(nil), // 51: mgmt.v1alpha1.GenerateUnixTimestamp + (*GenerateUsername)(nil), // 52: mgmt.v1alpha1.GenerateUsername + (*GenerateUtcTimestamp)(nil), // 53: mgmt.v1alpha1.GenerateUtcTimestamp + (*GenerateUuid)(nil), // 54: mgmt.v1alpha1.GenerateUuid + (*GenerateZipcode)(nil), // 55: mgmt.v1alpha1.GenerateZipcode + (*TransformE164PhoneNumber)(nil), // 56: mgmt.v1alpha1.TransformE164PhoneNumber + (*TransformFirstName)(nil), // 57: mgmt.v1alpha1.TransformFirstName + (*TransformFloat64)(nil), // 58: mgmt.v1alpha1.TransformFloat64 + (*TransformFullName)(nil), // 59: mgmt.v1alpha1.TransformFullName + (*TransformInt64PhoneNumber)(nil), // 60: mgmt.v1alpha1.TransformInt64PhoneNumber + (*TransformInt64)(nil), // 61: mgmt.v1alpha1.TransformInt64 + (*TransformLastName)(nil), // 62: mgmt.v1alpha1.TransformLastName + (*TransformPhoneNumber)(nil), // 63: mgmt.v1alpha1.TransformPhoneNumber + (*TransformString)(nil), // 64: mgmt.v1alpha1.TransformString + (*Passthrough)(nil), // 65: mgmt.v1alpha1.Passthrough + (*Null)(nil), // 66: mgmt.v1alpha1.Null + (*TransformJavascript)(nil), // 67: mgmt.v1alpha1.TransformJavascript + (*UserDefinedTransformerConfig)(nil), // 68: mgmt.v1alpha1.UserDefinedTransformerConfig + (*ValidateUserJavascriptCodeRequest)(nil), // 69: mgmt.v1alpha1.ValidateUserJavascriptCodeRequest + (*ValidateUserJavascriptCodeResponse)(nil), // 70: mgmt.v1alpha1.ValidateUserJavascriptCodeResponse + (*GenerateCategorical)(nil), // 71: mgmt.v1alpha1.GenerateCategorical + (*TransformCharacterScramble)(nil), // 72: mgmt.v1alpha1.TransformCharacterScramble + (*GenerateJavascript)(nil), // 73: mgmt.v1alpha1.GenerateJavascript + (*ValidateUserRegexCodeRequest)(nil), // 74: mgmt.v1alpha1.ValidateUserRegexCodeRequest + (*ValidateUserRegexCodeResponse)(nil), // 75: mgmt.v1alpha1.ValidateUserRegexCodeResponse + (*GenerateCountry)(nil), // 76: mgmt.v1alpha1.GenerateCountry + (*GetTransformPiiEntitiesRequest)(nil), // 77: mgmt.v1alpha1.GetTransformPiiEntitiesRequest + (*GetTransformPiiEntitiesResponse)(nil), // 78: mgmt.v1alpha1.GetTransformPiiEntitiesResponse + (*GenerateBusinessName)(nil), // 79: mgmt.v1alpha1.GenerateBusinessName + (*GenerateIpAddress)(nil), // 80: mgmt.v1alpha1.GenerateIpAddress + (*TransformUuid)(nil), // 81: mgmt.v1alpha1.TransformUuid + (*TransformHash)(nil), // 82: mgmt.v1alpha1.TransformHash + nil, // 83: mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry + (*PiiAnonymizer_Replace)(nil), // 84: mgmt.v1alpha1.PiiAnonymizer.Replace + (*PiiAnonymizer_Redact)(nil), // 85: mgmt.v1alpha1.PiiAnonymizer.Redact + (*PiiAnonymizer_Mask)(nil), // 86: mgmt.v1alpha1.PiiAnonymizer.Mask + (*PiiAnonymizer_Hash)(nil), // 87: mgmt.v1alpha1.PiiAnonymizer.Hash + (*PiiAnonymizer_Transform)(nil), // 88: mgmt.v1alpha1.PiiAnonymizer.Transform + (*timestamppb.Timestamp)(nil), // 89: google.protobuf.Timestamp } var file_mgmt_v1alpha1_transformer_proto_depIdxs = []int32{ - 24, // 0: mgmt.v1alpha1.GetSystemTransformersResponse.transformers:type_name -> mgmt.v1alpha1.SystemTransformer + 25, // 0: mgmt.v1alpha1.GetSystemTransformersResponse.transformers:type_name -> mgmt.v1alpha1.SystemTransformer 0, // 1: mgmt.v1alpha1.GetSystemTransformerBySourceRequest.source:type_name -> mgmt.v1alpha1.TransformerSource - 24, // 2: mgmt.v1alpha1.GetSystemTransformerBySourceResponse.transformer:type_name -> mgmt.v1alpha1.SystemTransformer - 23, // 3: mgmt.v1alpha1.GetUserDefinedTransformersResponse.transformers:type_name -> mgmt.v1alpha1.UserDefinedTransformer - 23, // 4: mgmt.v1alpha1.GetUserDefinedTransformerByIdResponse.transformer:type_name -> mgmt.v1alpha1.UserDefinedTransformer + 25, // 2: mgmt.v1alpha1.GetSystemTransformerBySourceResponse.transformer:type_name -> mgmt.v1alpha1.SystemTransformer + 24, // 3: mgmt.v1alpha1.GetUserDefinedTransformersResponse.transformers:type_name -> mgmt.v1alpha1.UserDefinedTransformer + 24, // 4: mgmt.v1alpha1.GetUserDefinedTransformerByIdResponse.transformer:type_name -> mgmt.v1alpha1.UserDefinedTransformer 0, // 5: mgmt.v1alpha1.CreateUserDefinedTransformerRequest.source:type_name -> mgmt.v1alpha1.TransformerSource - 25, // 6: mgmt.v1alpha1.CreateUserDefinedTransformerRequest.transformer_config:type_name -> mgmt.v1alpha1.TransformerConfig - 23, // 7: mgmt.v1alpha1.CreateUserDefinedTransformerResponse.transformer:type_name -> mgmt.v1alpha1.UserDefinedTransformer - 25, // 8: mgmt.v1alpha1.UpdateUserDefinedTransformerRequest.transformer_config:type_name -> mgmt.v1alpha1.TransformerConfig - 23, // 9: mgmt.v1alpha1.UpdateUserDefinedTransformerResponse.transformer:type_name -> mgmt.v1alpha1.UserDefinedTransformer + 26, // 6: mgmt.v1alpha1.CreateUserDefinedTransformerRequest.transformer_config:type_name -> mgmt.v1alpha1.TransformerConfig + 24, // 7: mgmt.v1alpha1.CreateUserDefinedTransformerResponse.transformer:type_name -> mgmt.v1alpha1.UserDefinedTransformer + 26, // 8: mgmt.v1alpha1.UpdateUserDefinedTransformerRequest.transformer_config:type_name -> mgmt.v1alpha1.TransformerConfig + 24, // 9: mgmt.v1alpha1.UpdateUserDefinedTransformerResponse.transformer:type_name -> mgmt.v1alpha1.UserDefinedTransformer 1, // 10: mgmt.v1alpha1.UserDefinedTransformer.data_type:type_name -> mgmt.v1alpha1.TransformerDataType 0, // 11: mgmt.v1alpha1.UserDefinedTransformer.source:type_name -> mgmt.v1alpha1.TransformerSource - 25, // 12: mgmt.v1alpha1.UserDefinedTransformer.config:type_name -> mgmt.v1alpha1.TransformerConfig - 87, // 13: mgmt.v1alpha1.UserDefinedTransformer.created_at:type_name -> google.protobuf.Timestamp - 87, // 14: mgmt.v1alpha1.UserDefinedTransformer.updated_at:type_name -> google.protobuf.Timestamp + 26, // 12: mgmt.v1alpha1.UserDefinedTransformer.config:type_name -> mgmt.v1alpha1.TransformerConfig + 89, // 13: mgmt.v1alpha1.UserDefinedTransformer.created_at:type_name -> google.protobuf.Timestamp + 89, // 14: mgmt.v1alpha1.UserDefinedTransformer.updated_at:type_name -> google.protobuf.Timestamp 1, // 15: mgmt.v1alpha1.UserDefinedTransformer.data_types:type_name -> mgmt.v1alpha1.TransformerDataType 1, // 16: mgmt.v1alpha1.SystemTransformer.data_type:type_name -> mgmt.v1alpha1.TransformerDataType 0, // 17: mgmt.v1alpha1.SystemTransformer.source:type_name -> mgmt.v1alpha1.TransformerSource - 25, // 18: mgmt.v1alpha1.SystemTransformer.config:type_name -> mgmt.v1alpha1.TransformerConfig + 26, // 18: mgmt.v1alpha1.SystemTransformer.config:type_name -> mgmt.v1alpha1.TransformerConfig 1, // 19: mgmt.v1alpha1.SystemTransformer.data_types:type_name -> mgmt.v1alpha1.TransformerDataType 2, // 20: mgmt.v1alpha1.SystemTransformer.supported_job_types:type_name -> mgmt.v1alpha1.SupportedJobType - 29, // 21: mgmt.v1alpha1.TransformerConfig.generate_email_config:type_name -> mgmt.v1alpha1.GenerateEmail - 30, // 22: mgmt.v1alpha1.TransformerConfig.transform_email_config:type_name -> mgmt.v1alpha1.TransformEmail - 31, // 23: mgmt.v1alpha1.TransformerConfig.generate_bool_config:type_name -> mgmt.v1alpha1.GenerateBool - 32, // 24: mgmt.v1alpha1.TransformerConfig.generate_card_number_config:type_name -> mgmt.v1alpha1.GenerateCardNumber - 33, // 25: mgmt.v1alpha1.TransformerConfig.generate_city_config:type_name -> mgmt.v1alpha1.GenerateCity - 35, // 26: mgmt.v1alpha1.TransformerConfig.generate_e164_phone_number_config:type_name -> mgmt.v1alpha1.GenerateE164PhoneNumber - 36, // 27: mgmt.v1alpha1.TransformerConfig.generate_first_name_config:type_name -> mgmt.v1alpha1.GenerateFirstName - 37, // 28: mgmt.v1alpha1.TransformerConfig.generate_float64_config:type_name -> mgmt.v1alpha1.GenerateFloat64 - 38, // 29: mgmt.v1alpha1.TransformerConfig.generate_full_address_config:type_name -> mgmt.v1alpha1.GenerateFullAddress - 39, // 30: mgmt.v1alpha1.TransformerConfig.generate_full_name_config:type_name -> mgmt.v1alpha1.GenerateFullName - 40, // 31: mgmt.v1alpha1.TransformerConfig.generate_gender_config:type_name -> mgmt.v1alpha1.GenerateGender - 41, // 32: mgmt.v1alpha1.TransformerConfig.generate_int64_phone_number_config:type_name -> mgmt.v1alpha1.GenerateInt64PhoneNumber - 42, // 33: mgmt.v1alpha1.TransformerConfig.generate_int64_config:type_name -> mgmt.v1alpha1.GenerateInt64 - 43, // 34: mgmt.v1alpha1.TransformerConfig.generate_last_name_config:type_name -> mgmt.v1alpha1.GenerateLastName - 44, // 35: mgmt.v1alpha1.TransformerConfig.generate_sha256hash_config:type_name -> mgmt.v1alpha1.GenerateSha256Hash - 45, // 36: mgmt.v1alpha1.TransformerConfig.generate_ssn_config:type_name -> mgmt.v1alpha1.GenerateSSN - 46, // 37: mgmt.v1alpha1.TransformerConfig.generate_state_config:type_name -> mgmt.v1alpha1.GenerateState - 47, // 38: mgmt.v1alpha1.TransformerConfig.generate_street_address_config:type_name -> mgmt.v1alpha1.GenerateStreetAddress - 48, // 39: mgmt.v1alpha1.TransformerConfig.generate_string_phone_number_config:type_name -> mgmt.v1alpha1.GenerateStringPhoneNumber - 49, // 40: mgmt.v1alpha1.TransformerConfig.generate_string_config:type_name -> mgmt.v1alpha1.GenerateString - 50, // 41: mgmt.v1alpha1.TransformerConfig.generate_unixtimestamp_config:type_name -> mgmt.v1alpha1.GenerateUnixTimestamp - 51, // 42: mgmt.v1alpha1.TransformerConfig.generate_username_config:type_name -> mgmt.v1alpha1.GenerateUsername - 52, // 43: mgmt.v1alpha1.TransformerConfig.generate_utctimestamp_config:type_name -> mgmt.v1alpha1.GenerateUtcTimestamp - 53, // 44: mgmt.v1alpha1.TransformerConfig.generate_uuid_config:type_name -> mgmt.v1alpha1.GenerateUuid - 54, // 45: mgmt.v1alpha1.TransformerConfig.generate_zipcode_config:type_name -> mgmt.v1alpha1.GenerateZipcode - 55, // 46: mgmt.v1alpha1.TransformerConfig.transform_e164_phone_number_config:type_name -> mgmt.v1alpha1.TransformE164PhoneNumber - 56, // 47: mgmt.v1alpha1.TransformerConfig.transform_first_name_config:type_name -> mgmt.v1alpha1.TransformFirstName - 57, // 48: mgmt.v1alpha1.TransformerConfig.transform_float64_config:type_name -> mgmt.v1alpha1.TransformFloat64 - 58, // 49: mgmt.v1alpha1.TransformerConfig.transform_full_name_config:type_name -> mgmt.v1alpha1.TransformFullName - 59, // 50: mgmt.v1alpha1.TransformerConfig.transform_int64_phone_number_config:type_name -> mgmt.v1alpha1.TransformInt64PhoneNumber - 60, // 51: mgmt.v1alpha1.TransformerConfig.transform_int64_config:type_name -> mgmt.v1alpha1.TransformInt64 - 61, // 52: mgmt.v1alpha1.TransformerConfig.transform_last_name_config:type_name -> mgmt.v1alpha1.TransformLastName - 62, // 53: mgmt.v1alpha1.TransformerConfig.transform_phone_number_config:type_name -> mgmt.v1alpha1.TransformPhoneNumber - 63, // 54: mgmt.v1alpha1.TransformerConfig.transform_string_config:type_name -> mgmt.v1alpha1.TransformString - 64, // 55: mgmt.v1alpha1.TransformerConfig.passthrough_config:type_name -> mgmt.v1alpha1.Passthrough - 65, // 56: mgmt.v1alpha1.TransformerConfig.nullconfig:type_name -> mgmt.v1alpha1.Null - 67, // 57: mgmt.v1alpha1.TransformerConfig.user_defined_transformer_config:type_name -> mgmt.v1alpha1.UserDefinedTransformerConfig - 34, // 58: mgmt.v1alpha1.TransformerConfig.generate_default_config:type_name -> mgmt.v1alpha1.GenerateDefault - 66, // 59: mgmt.v1alpha1.TransformerConfig.transform_javascript_config:type_name -> mgmt.v1alpha1.TransformJavascript - 70, // 60: mgmt.v1alpha1.TransformerConfig.generate_categorical_config:type_name -> mgmt.v1alpha1.GenerateCategorical - 71, // 61: mgmt.v1alpha1.TransformerConfig.transform_character_scramble_config:type_name -> mgmt.v1alpha1.TransformCharacterScramble - 72, // 62: mgmt.v1alpha1.TransformerConfig.generate_javascript_config:type_name -> mgmt.v1alpha1.GenerateJavascript - 75, // 63: mgmt.v1alpha1.TransformerConfig.generate_country_config:type_name -> mgmt.v1alpha1.GenerateCountry - 26, // 64: mgmt.v1alpha1.TransformerConfig.transform_pii_text_config:type_name -> mgmt.v1alpha1.TransformPiiText - 78, // 65: mgmt.v1alpha1.TransformerConfig.generate_business_name_config:type_name -> mgmt.v1alpha1.GenerateBusinessName - 79, // 66: mgmt.v1alpha1.TransformerConfig.generate_ip_address_config:type_name -> mgmt.v1alpha1.GenerateIpAddress - 80, // 67: mgmt.v1alpha1.TransformerConfig.transform_uuid_config:type_name -> mgmt.v1alpha1.TransformUuid - 28, // 68: mgmt.v1alpha1.TransformPiiText.default_anonymizer:type_name -> mgmt.v1alpha1.PiiAnonymizer - 27, // 69: mgmt.v1alpha1.TransformPiiText.deny_recognizers:type_name -> mgmt.v1alpha1.PiiDenyRecognizer - 81, // 70: mgmt.v1alpha1.TransformPiiText.entity_anonymizers:type_name -> mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry - 82, // 71: mgmt.v1alpha1.PiiAnonymizer.replace:type_name -> mgmt.v1alpha1.PiiAnonymizer.Replace - 83, // 72: mgmt.v1alpha1.PiiAnonymizer.redact:type_name -> mgmt.v1alpha1.PiiAnonymizer.Redact - 84, // 73: mgmt.v1alpha1.PiiAnonymizer.mask:type_name -> mgmt.v1alpha1.PiiAnonymizer.Mask - 85, // 74: mgmt.v1alpha1.PiiAnonymizer.hash:type_name -> mgmt.v1alpha1.PiiAnonymizer.Hash - 86, // 75: mgmt.v1alpha1.PiiAnonymizer.transform:type_name -> mgmt.v1alpha1.PiiAnonymizer.Transform - 3, // 76: mgmt.v1alpha1.GenerateEmail.email_type:type_name -> mgmt.v1alpha1.GenerateEmailType - 3, // 77: mgmt.v1alpha1.TransformEmail.email_type:type_name -> mgmt.v1alpha1.GenerateEmailType - 4, // 78: mgmt.v1alpha1.TransformEmail.invalid_email_action:type_name -> mgmt.v1alpha1.InvalidEmailAction - 5, // 79: mgmt.v1alpha1.GenerateIpAddress.ip_type:type_name -> mgmt.v1alpha1.GenerateIpAddressType - 28, // 80: mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry.value:type_name -> mgmt.v1alpha1.PiiAnonymizer - 6, // 81: mgmt.v1alpha1.PiiAnonymizer.Hash.algo:type_name -> mgmt.v1alpha1.PiiAnonymizer.Hash.HashType - 25, // 82: mgmt.v1alpha1.PiiAnonymizer.Transform.config:type_name -> mgmt.v1alpha1.TransformerConfig - 7, // 83: mgmt.v1alpha1.TransformersService.GetSystemTransformers:input_type -> mgmt.v1alpha1.GetSystemTransformersRequest - 9, // 84: mgmt.v1alpha1.TransformersService.GetSystemTransformerBySource:input_type -> mgmt.v1alpha1.GetSystemTransformerBySourceRequest - 11, // 85: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformers:input_type -> mgmt.v1alpha1.GetUserDefinedTransformersRequest - 13, // 86: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformerById:input_type -> mgmt.v1alpha1.GetUserDefinedTransformerByIdRequest - 15, // 87: mgmt.v1alpha1.TransformersService.CreateUserDefinedTransformer:input_type -> mgmt.v1alpha1.CreateUserDefinedTransformerRequest - 17, // 88: mgmt.v1alpha1.TransformersService.DeleteUserDefinedTransformer:input_type -> mgmt.v1alpha1.DeleteUserDefinedTransformerRequest - 19, // 89: mgmt.v1alpha1.TransformersService.UpdateUserDefinedTransformer:input_type -> mgmt.v1alpha1.UpdateUserDefinedTransformerRequest - 21, // 90: mgmt.v1alpha1.TransformersService.IsTransformerNameAvailable:input_type -> mgmt.v1alpha1.IsTransformerNameAvailableRequest - 68, // 91: mgmt.v1alpha1.TransformersService.ValidateUserJavascriptCode:input_type -> mgmt.v1alpha1.ValidateUserJavascriptCodeRequest - 73, // 92: mgmt.v1alpha1.TransformersService.ValidateUserRegexCode:input_type -> mgmt.v1alpha1.ValidateUserRegexCodeRequest - 76, // 93: mgmt.v1alpha1.TransformersService.GetTransformPiiEntities:input_type -> mgmt.v1alpha1.GetTransformPiiEntitiesRequest - 8, // 94: mgmt.v1alpha1.TransformersService.GetSystemTransformers:output_type -> mgmt.v1alpha1.GetSystemTransformersResponse - 10, // 95: mgmt.v1alpha1.TransformersService.GetSystemTransformerBySource:output_type -> mgmt.v1alpha1.GetSystemTransformerBySourceResponse - 12, // 96: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformers:output_type -> mgmt.v1alpha1.GetUserDefinedTransformersResponse - 14, // 97: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformerById:output_type -> mgmt.v1alpha1.GetUserDefinedTransformerByIdResponse - 16, // 98: mgmt.v1alpha1.TransformersService.CreateUserDefinedTransformer:output_type -> mgmt.v1alpha1.CreateUserDefinedTransformerResponse - 18, // 99: mgmt.v1alpha1.TransformersService.DeleteUserDefinedTransformer:output_type -> mgmt.v1alpha1.DeleteUserDefinedTransformerResponse - 20, // 100: mgmt.v1alpha1.TransformersService.UpdateUserDefinedTransformer:output_type -> mgmt.v1alpha1.UpdateUserDefinedTransformerResponse - 22, // 101: mgmt.v1alpha1.TransformersService.IsTransformerNameAvailable:output_type -> mgmt.v1alpha1.IsTransformerNameAvailableResponse - 69, // 102: mgmt.v1alpha1.TransformersService.ValidateUserJavascriptCode:output_type -> mgmt.v1alpha1.ValidateUserJavascriptCodeResponse - 74, // 103: mgmt.v1alpha1.TransformersService.ValidateUserRegexCode:output_type -> mgmt.v1alpha1.ValidateUserRegexCodeResponse - 77, // 104: mgmt.v1alpha1.TransformersService.GetTransformPiiEntities:output_type -> mgmt.v1alpha1.GetTransformPiiEntitiesResponse - 94, // [94:105] is the sub-list for method output_type - 83, // [83:94] is the sub-list for method input_type - 83, // [83:83] is the sub-list for extension type_name - 83, // [83:83] is the sub-list for extension extendee - 0, // [0:83] is the sub-list for field type_name + 30, // 21: mgmt.v1alpha1.TransformerConfig.generate_email_config:type_name -> mgmt.v1alpha1.GenerateEmail + 31, // 22: mgmt.v1alpha1.TransformerConfig.transform_email_config:type_name -> mgmt.v1alpha1.TransformEmail + 32, // 23: mgmt.v1alpha1.TransformerConfig.generate_bool_config:type_name -> mgmt.v1alpha1.GenerateBool + 33, // 24: mgmt.v1alpha1.TransformerConfig.generate_card_number_config:type_name -> mgmt.v1alpha1.GenerateCardNumber + 34, // 25: mgmt.v1alpha1.TransformerConfig.generate_city_config:type_name -> mgmt.v1alpha1.GenerateCity + 36, // 26: mgmt.v1alpha1.TransformerConfig.generate_e164_phone_number_config:type_name -> mgmt.v1alpha1.GenerateE164PhoneNumber + 37, // 27: mgmt.v1alpha1.TransformerConfig.generate_first_name_config:type_name -> mgmt.v1alpha1.GenerateFirstName + 38, // 28: mgmt.v1alpha1.TransformerConfig.generate_float64_config:type_name -> mgmt.v1alpha1.GenerateFloat64 + 39, // 29: mgmt.v1alpha1.TransformerConfig.generate_full_address_config:type_name -> mgmt.v1alpha1.GenerateFullAddress + 40, // 30: mgmt.v1alpha1.TransformerConfig.generate_full_name_config:type_name -> mgmt.v1alpha1.GenerateFullName + 41, // 31: mgmt.v1alpha1.TransformerConfig.generate_gender_config:type_name -> mgmt.v1alpha1.GenerateGender + 42, // 32: mgmt.v1alpha1.TransformerConfig.generate_int64_phone_number_config:type_name -> mgmt.v1alpha1.GenerateInt64PhoneNumber + 43, // 33: mgmt.v1alpha1.TransformerConfig.generate_int64_config:type_name -> mgmt.v1alpha1.GenerateInt64 + 44, // 34: mgmt.v1alpha1.TransformerConfig.generate_last_name_config:type_name -> mgmt.v1alpha1.GenerateLastName + 45, // 35: mgmt.v1alpha1.TransformerConfig.generate_sha256hash_config:type_name -> mgmt.v1alpha1.GenerateSha256Hash + 46, // 36: mgmt.v1alpha1.TransformerConfig.generate_ssn_config:type_name -> mgmt.v1alpha1.GenerateSSN + 47, // 37: mgmt.v1alpha1.TransformerConfig.generate_state_config:type_name -> mgmt.v1alpha1.GenerateState + 48, // 38: mgmt.v1alpha1.TransformerConfig.generate_street_address_config:type_name -> mgmt.v1alpha1.GenerateStreetAddress + 49, // 39: mgmt.v1alpha1.TransformerConfig.generate_string_phone_number_config:type_name -> mgmt.v1alpha1.GenerateStringPhoneNumber + 50, // 40: mgmt.v1alpha1.TransformerConfig.generate_string_config:type_name -> mgmt.v1alpha1.GenerateString + 51, // 41: mgmt.v1alpha1.TransformerConfig.generate_unixtimestamp_config:type_name -> mgmt.v1alpha1.GenerateUnixTimestamp + 52, // 42: mgmt.v1alpha1.TransformerConfig.generate_username_config:type_name -> mgmt.v1alpha1.GenerateUsername + 53, // 43: mgmt.v1alpha1.TransformerConfig.generate_utctimestamp_config:type_name -> mgmt.v1alpha1.GenerateUtcTimestamp + 54, // 44: mgmt.v1alpha1.TransformerConfig.generate_uuid_config:type_name -> mgmt.v1alpha1.GenerateUuid + 55, // 45: mgmt.v1alpha1.TransformerConfig.generate_zipcode_config:type_name -> mgmt.v1alpha1.GenerateZipcode + 56, // 46: mgmt.v1alpha1.TransformerConfig.transform_e164_phone_number_config:type_name -> mgmt.v1alpha1.TransformE164PhoneNumber + 57, // 47: mgmt.v1alpha1.TransformerConfig.transform_first_name_config:type_name -> mgmt.v1alpha1.TransformFirstName + 58, // 48: mgmt.v1alpha1.TransformerConfig.transform_float64_config:type_name -> mgmt.v1alpha1.TransformFloat64 + 59, // 49: mgmt.v1alpha1.TransformerConfig.transform_full_name_config:type_name -> mgmt.v1alpha1.TransformFullName + 60, // 50: mgmt.v1alpha1.TransformerConfig.transform_int64_phone_number_config:type_name -> mgmt.v1alpha1.TransformInt64PhoneNumber + 61, // 51: mgmt.v1alpha1.TransformerConfig.transform_int64_config:type_name -> mgmt.v1alpha1.TransformInt64 + 62, // 52: mgmt.v1alpha1.TransformerConfig.transform_last_name_config:type_name -> mgmt.v1alpha1.TransformLastName + 63, // 53: mgmt.v1alpha1.TransformerConfig.transform_phone_number_config:type_name -> mgmt.v1alpha1.TransformPhoneNumber + 64, // 54: mgmt.v1alpha1.TransformerConfig.transform_string_config:type_name -> mgmt.v1alpha1.TransformString + 65, // 55: mgmt.v1alpha1.TransformerConfig.passthrough_config:type_name -> mgmt.v1alpha1.Passthrough + 66, // 56: mgmt.v1alpha1.TransformerConfig.nullconfig:type_name -> mgmt.v1alpha1.Null + 68, // 57: mgmt.v1alpha1.TransformerConfig.user_defined_transformer_config:type_name -> mgmt.v1alpha1.UserDefinedTransformerConfig + 35, // 58: mgmt.v1alpha1.TransformerConfig.generate_default_config:type_name -> mgmt.v1alpha1.GenerateDefault + 67, // 59: mgmt.v1alpha1.TransformerConfig.transform_javascript_config:type_name -> mgmt.v1alpha1.TransformJavascript + 71, // 60: mgmt.v1alpha1.TransformerConfig.generate_categorical_config:type_name -> mgmt.v1alpha1.GenerateCategorical + 72, // 61: mgmt.v1alpha1.TransformerConfig.transform_character_scramble_config:type_name -> mgmt.v1alpha1.TransformCharacterScramble + 73, // 62: mgmt.v1alpha1.TransformerConfig.generate_javascript_config:type_name -> mgmt.v1alpha1.GenerateJavascript + 76, // 63: mgmt.v1alpha1.TransformerConfig.generate_country_config:type_name -> mgmt.v1alpha1.GenerateCountry + 27, // 64: mgmt.v1alpha1.TransformerConfig.transform_pii_text_config:type_name -> mgmt.v1alpha1.TransformPiiText + 79, // 65: mgmt.v1alpha1.TransformerConfig.generate_business_name_config:type_name -> mgmt.v1alpha1.GenerateBusinessName + 80, // 66: mgmt.v1alpha1.TransformerConfig.generate_ip_address_config:type_name -> mgmt.v1alpha1.GenerateIpAddress + 81, // 67: mgmt.v1alpha1.TransformerConfig.transform_uuid_config:type_name -> mgmt.v1alpha1.TransformUuid + 82, // 68: mgmt.v1alpha1.TransformerConfig.transform_hash_config:type_name -> mgmt.v1alpha1.TransformHash + 29, // 69: mgmt.v1alpha1.TransformPiiText.default_anonymizer:type_name -> mgmt.v1alpha1.PiiAnonymizer + 28, // 70: mgmt.v1alpha1.TransformPiiText.deny_recognizers:type_name -> mgmt.v1alpha1.PiiDenyRecognizer + 83, // 71: mgmt.v1alpha1.TransformPiiText.entity_anonymizers:type_name -> mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry + 84, // 72: mgmt.v1alpha1.PiiAnonymizer.replace:type_name -> mgmt.v1alpha1.PiiAnonymizer.Replace + 85, // 73: mgmt.v1alpha1.PiiAnonymizer.redact:type_name -> mgmt.v1alpha1.PiiAnonymizer.Redact + 86, // 74: mgmt.v1alpha1.PiiAnonymizer.mask:type_name -> mgmt.v1alpha1.PiiAnonymizer.Mask + 87, // 75: mgmt.v1alpha1.PiiAnonymizer.hash:type_name -> mgmt.v1alpha1.PiiAnonymizer.Hash + 88, // 76: mgmt.v1alpha1.PiiAnonymizer.transform:type_name -> mgmt.v1alpha1.PiiAnonymizer.Transform + 3, // 77: mgmt.v1alpha1.GenerateEmail.email_type:type_name -> mgmt.v1alpha1.GenerateEmailType + 3, // 78: mgmt.v1alpha1.TransformEmail.email_type:type_name -> mgmt.v1alpha1.GenerateEmailType + 4, // 79: mgmt.v1alpha1.TransformEmail.invalid_email_action:type_name -> mgmt.v1alpha1.InvalidEmailAction + 5, // 80: mgmt.v1alpha1.GenerateIpAddress.ip_type:type_name -> mgmt.v1alpha1.GenerateIpAddressType + 7, // 81: mgmt.v1alpha1.TransformHash.algo:type_name -> mgmt.v1alpha1.TransformHash.HashType + 29, // 82: mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntry.value:type_name -> mgmt.v1alpha1.PiiAnonymizer + 6, // 83: mgmt.v1alpha1.PiiAnonymizer.Hash.algo:type_name -> mgmt.v1alpha1.PiiAnonymizer.Hash.HashType + 26, // 84: mgmt.v1alpha1.PiiAnonymizer.Transform.config:type_name -> mgmt.v1alpha1.TransformerConfig + 8, // 85: mgmt.v1alpha1.TransformersService.GetSystemTransformers:input_type -> mgmt.v1alpha1.GetSystemTransformersRequest + 10, // 86: mgmt.v1alpha1.TransformersService.GetSystemTransformerBySource:input_type -> mgmt.v1alpha1.GetSystemTransformerBySourceRequest + 12, // 87: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformers:input_type -> mgmt.v1alpha1.GetUserDefinedTransformersRequest + 14, // 88: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformerById:input_type -> mgmt.v1alpha1.GetUserDefinedTransformerByIdRequest + 16, // 89: mgmt.v1alpha1.TransformersService.CreateUserDefinedTransformer:input_type -> mgmt.v1alpha1.CreateUserDefinedTransformerRequest + 18, // 90: mgmt.v1alpha1.TransformersService.DeleteUserDefinedTransformer:input_type -> mgmt.v1alpha1.DeleteUserDefinedTransformerRequest + 20, // 91: mgmt.v1alpha1.TransformersService.UpdateUserDefinedTransformer:input_type -> mgmt.v1alpha1.UpdateUserDefinedTransformerRequest + 22, // 92: mgmt.v1alpha1.TransformersService.IsTransformerNameAvailable:input_type -> mgmt.v1alpha1.IsTransformerNameAvailableRequest + 69, // 93: mgmt.v1alpha1.TransformersService.ValidateUserJavascriptCode:input_type -> mgmt.v1alpha1.ValidateUserJavascriptCodeRequest + 74, // 94: mgmt.v1alpha1.TransformersService.ValidateUserRegexCode:input_type -> mgmt.v1alpha1.ValidateUserRegexCodeRequest + 77, // 95: mgmt.v1alpha1.TransformersService.GetTransformPiiEntities:input_type -> mgmt.v1alpha1.GetTransformPiiEntitiesRequest + 9, // 96: mgmt.v1alpha1.TransformersService.GetSystemTransformers:output_type -> mgmt.v1alpha1.GetSystemTransformersResponse + 11, // 97: mgmt.v1alpha1.TransformersService.GetSystemTransformerBySource:output_type -> mgmt.v1alpha1.GetSystemTransformerBySourceResponse + 13, // 98: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformers:output_type -> mgmt.v1alpha1.GetUserDefinedTransformersResponse + 15, // 99: mgmt.v1alpha1.TransformersService.GetUserDefinedTransformerById:output_type -> mgmt.v1alpha1.GetUserDefinedTransformerByIdResponse + 17, // 100: mgmt.v1alpha1.TransformersService.CreateUserDefinedTransformer:output_type -> mgmt.v1alpha1.CreateUserDefinedTransformerResponse + 19, // 101: mgmt.v1alpha1.TransformersService.DeleteUserDefinedTransformer:output_type -> mgmt.v1alpha1.DeleteUserDefinedTransformerResponse + 21, // 102: mgmt.v1alpha1.TransformersService.UpdateUserDefinedTransformer:output_type -> mgmt.v1alpha1.UpdateUserDefinedTransformerResponse + 23, // 103: mgmt.v1alpha1.TransformersService.IsTransformerNameAvailable:output_type -> mgmt.v1alpha1.IsTransformerNameAvailableResponse + 70, // 104: mgmt.v1alpha1.TransformersService.ValidateUserJavascriptCode:output_type -> mgmt.v1alpha1.ValidateUserJavascriptCodeResponse + 75, // 105: mgmt.v1alpha1.TransformersService.ValidateUserRegexCode:output_type -> mgmt.v1alpha1.ValidateUserRegexCodeResponse + 78, // 106: mgmt.v1alpha1.TransformersService.GetTransformPiiEntities:output_type -> mgmt.v1alpha1.GetTransformPiiEntitiesResponse + 96, // [96:107] is the sub-list for method output_type + 85, // [85:96] is the sub-list for method input_type + 85, // [85:85] is the sub-list for extension type_name + 85, // [85:85] is the sub-list for extension extendee + 0, // [0:85] is the sub-list for field type_name } func init() { file_mgmt_v1alpha1_transformer_proto_init() } @@ -6545,6 +6696,7 @@ func file_mgmt_v1alpha1_transformer_proto_init() { (*TransformerConfig_GenerateBusinessNameConfig)(nil), (*TransformerConfig_GenerateIpAddressConfig)(nil), (*TransformerConfig_TransformUuidConfig)(nil), + (*TransformerConfig_TransformHashConfig)(nil), } file_mgmt_v1alpha1_transformer_proto_msgTypes[19].OneofWrappers = []any{} file_mgmt_v1alpha1_transformer_proto_msgTypes[21].OneofWrappers = []any{ @@ -6578,16 +6730,17 @@ func file_mgmt_v1alpha1_transformer_proto_init() { file_mgmt_v1alpha1_transformer_proto_msgTypes[64].OneofWrappers = []any{} file_mgmt_v1alpha1_transformer_proto_msgTypes[68].OneofWrappers = []any{} file_mgmt_v1alpha1_transformer_proto_msgTypes[72].OneofWrappers = []any{} - file_mgmt_v1alpha1_transformer_proto_msgTypes[75].OneofWrappers = []any{} - file_mgmt_v1alpha1_transformer_proto_msgTypes[77].OneofWrappers = []any{} + file_mgmt_v1alpha1_transformer_proto_msgTypes[74].OneofWrappers = []any{} + file_mgmt_v1alpha1_transformer_proto_msgTypes[76].OneofWrappers = []any{} file_mgmt_v1alpha1_transformer_proto_msgTypes[78].OneofWrappers = []any{} + file_mgmt_v1alpha1_transformer_proto_msgTypes[79].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_mgmt_v1alpha1_transformer_proto_rawDesc, - NumEnums: 7, - NumMessages: 80, + NumEnums: 8, + NumMessages: 81, NumExtensions: 0, NumServices: 1, }, diff --git a/backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.json.go b/backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.json.go index e74a740c47..4eb887bf07 100644 --- a/backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.json.go +++ b/backend/gen/go/protos/mgmt/v1alpha1/transformer.pb.json.go @@ -796,3 +796,13 @@ func (msg *TransformUuid) MarshalJSON() ([]byte, error) { func (msg *TransformUuid) UnmarshalJSON(b []byte) error { return protojson.UnmarshalOptions{}.Unmarshal(b, msg) } + +// MarshalJSON implements json.Marshaler +func (msg *TransformHash) MarshalJSON() ([]byte, error) { + return protojson.MarshalOptions{}.Marshal(msg) +} + +// UnmarshalJSON implements json.Unmarshaler +func (msg *TransformHash) UnmarshalJSON(b []byte) error { + return protojson.UnmarshalOptions{}.Unmarshal(b, msg) +} diff --git a/backend/protos/mgmt/v1alpha1/transformer.proto b/backend/protos/mgmt/v1alpha1/transformer.proto index 457c86e1ac..1db6601ad2 100644 --- a/backend/protos/mgmt/v1alpha1/transformer.proto +++ b/backend/protos/mgmt/v1alpha1/transformer.proto @@ -168,6 +168,8 @@ enum TransformerSource { TRANSFORMER_SOURCE_GENERATE_BUSINESS_NAME = 48; TRANSFORMER_SOURCE_GENERATE_IP_ADDRESS = 49; TRANSFORMER_SOURCE_TRANSFORM_UUID = 50; + // TransformHash is a transformer that hashes the input string using the specified hashing algorithm. + TRANSFORMER_SOURCE_TRANSFORM_HASH = 51; } enum TransformerDataType { @@ -261,6 +263,8 @@ message TransformerConfig { GenerateBusinessName generate_business_name_config = 45; GenerateIpAddress generate_ip_address_config = 46; TransformUuid transform_uuid_config = 47; + // TransformHash is a transformer that hashes the input string using the specified hashing algorithm. + TransformHash transform_hash_config = 48; } } @@ -635,6 +639,25 @@ message GenerateIpAddress { message TransformUuid {} +// TransformHash is a transformer that hashes the input string using the specified hashing algorithm. +message TransformHash { + // The hashing algorithm to use. + optional HashType algo = 1; + + enum HashType { + // If unspecified, defaults to md5 + HASH_TYPE_UNSPECIFIED = 0; + // The MD5 Hash Algorithm + HASH_TYPE_MD5 = 1; + // The SHA1 Hash Algorithm + HASH_TYPE_SHA1 = 2; + // The SHA256 Hash Algorithm + HASH_TYPE_SHA256 = 3; + // The SHA512 Hash Algorithm + HASH_TYPE_SHA512 = 4; + } +} + // Service that manages system and user defined transformers service TransformersService { // Get a list of all system transformers diff --git a/docs/openapi/mgmt/v1alpha1/anonymization.openapi.yaml b/docs/openapi/mgmt/v1alpha1/anonymization.openapi.yaml index 4a57d71519..54744f7b65 100644 --- a/docs/openapi/mgmt/v1alpha1/anonymization.openapi.yaml +++ b/docs/openapi/mgmt/v1alpha1/anonymization.openapi.yaml @@ -62,6 +62,15 @@ components: - HASH_TYPE_MD5 - HASH_TYPE_SHA256 - HASH_TYPE_SHA512 + mgmt.v1alpha1.TransformHash.HashType: + type: string + title: HashType + enum: + - HASH_TYPE_UNSPECIFIED + - HASH_TYPE_MD5 + - HASH_TYPE_SHA1 + - HASH_TYPE_SHA256 + - HASH_TYPE_SHA512 mgmt.v1alpha1.AnonymizeManyErrors: type: object properties: @@ -1075,6 +1084,32 @@ components: description: Whether or not to preserve the original length of the full name. This causes the transformed full name to retain the original length. title: TransformFullName additionalProperties: false + mgmt.v1alpha1.TransformHash: + type: object + allOf: + - anyOf: + - required: + - algo + - not: + anyOf: + - required: + - algo + anyOf: + - required: + - algo + - not: + anyOf: + - required: + - algo + properties: + algo: + allOf: + - $ref: '#/components/schemas/mgmt.v1alpha1.TransformHash.HashType' + title: algo + description: The hashing algorithm to use. + title: TransformHash + additionalProperties: false + description: TransformHash is a transformer that hashes the input string using the specified hashing algorithm. mgmt.v1alpha1.TransformInt64: type: object allOf: @@ -1382,6 +1417,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -1478,6 +1515,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -1573,6 +1612,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -1669,6 +1710,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -1877,6 +1920,11 @@ components: allOf: - $ref: '#/components/schemas/mgmt.v1alpha1.TransformUuid' title: transform_uuid_config + transformHashConfig: + allOf: + - $ref: '#/components/schemas/mgmt.v1alpha1.TransformHash' + title: transform_hash_config + description: TransformHash is a transformer that hashes the input string using the specified hashing algorithm. title: TransformerConfig additionalProperties: false description: The configuration for a transformer. This determines what type of transformation or generation is performed. diff --git a/docs/openapi/mgmt/v1alpha1/job.openapi.yaml b/docs/openapi/mgmt/v1alpha1/job.openapi.yaml index 32cdd5235d..165993d835 100644 --- a/docs/openapi/mgmt/v1alpha1/job.openapi.yaml +++ b/docs/openapi/mgmt/v1alpha1/job.openapi.yaml @@ -173,6 +173,15 @@ components: - TABLE_ERROR_CODE_VFK_TARGET_TABLE_NOT_FOUND_IN_MAPPING - TABLE_ERROR_CODE_VFK_TARGET_TABLE_NOT_FOUND_IN_SOURCE description: An enumeration of table error codes + mgmt.v1alpha1.TransformHash.HashType: + type: string + title: HashType + enum: + - HASH_TYPE_UNSPECIFIED + - HASH_TYPE_MD5 + - HASH_TYPE_SHA1 + - HASH_TYPE_SHA256 + - HASH_TYPE_SHA512 google.protobuf.Timestamp: type: string format: date-time @@ -4383,6 +4392,32 @@ components: description: Whether or not to preserve the original length of the full name. This causes the transformed full name to retain the original length. title: TransformFullName additionalProperties: false + mgmt.v1alpha1.TransformHash: + type: object + allOf: + - anyOf: + - required: + - algo + - not: + anyOf: + - required: + - algo + anyOf: + - required: + - algo + - not: + anyOf: + - required: + - algo + properties: + algo: + allOf: + - $ref: '#/components/schemas/mgmt.v1alpha1.TransformHash.HashType' + title: algo + description: The hashing algorithm to use. + title: TransformHash + additionalProperties: false + description: TransformHash is a transformer that hashes the input string using the specified hashing algorithm. mgmt.v1alpha1.TransformInt64: type: object allOf: @@ -4690,6 +4725,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -4786,6 +4823,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -4881,6 +4920,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -4977,6 +5018,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -5185,6 +5228,11 @@ components: allOf: - $ref: '#/components/schemas/mgmt.v1alpha1.TransformUuid' title: transform_uuid_config + transformHashConfig: + allOf: + - $ref: '#/components/schemas/mgmt.v1alpha1.TransformHash' + title: transform_hash_config + description: TransformHash is a transformer that hashes the input string using the specified hashing algorithm. title: TransformerConfig additionalProperties: false description: The configuration for a transformer. This determines what type of transformation or generation is performed. diff --git a/docs/openapi/mgmt/v1alpha1/transformer.openapi.yaml b/docs/openapi/mgmt/v1alpha1/transformer.openapi.yaml index b44268a3d9..e96816abe9 100644 --- a/docs/openapi/mgmt/v1alpha1/transformer.openapi.yaml +++ b/docs/openapi/mgmt/v1alpha1/transformer.openapi.yaml @@ -69,6 +69,15 @@ components: - SUPPORTED_JOB_TYPE_UNSPECIFIED - SUPPORTED_JOB_TYPE_SYNC - SUPPORTED_JOB_TYPE_GENERATE + mgmt.v1alpha1.TransformHash.HashType: + type: string + title: HashType + enum: + - HASH_TYPE_UNSPECIFIED + - HASH_TYPE_MD5 + - HASH_TYPE_SHA1 + - HASH_TYPE_SHA256 + - HASH_TYPE_SHA512 mgmt.v1alpha1.TransformerDataType: type: string title: TransformerDataType @@ -136,6 +145,7 @@ components: - TRANSFORMER_SOURCE_GENERATE_BUSINESS_NAME - TRANSFORMER_SOURCE_GENERATE_IP_ADDRESS - TRANSFORMER_SOURCE_TRANSFORM_UUID + - TRANSFORMER_SOURCE_TRANSFORM_HASH google.protobuf.Timestamp: type: string format: date-time @@ -1298,6 +1308,32 @@ components: description: Whether or not to preserve the original length of the full name. This causes the transformed full name to retain the original length. title: TransformFullName additionalProperties: false + mgmt.v1alpha1.TransformHash: + type: object + allOf: + - anyOf: + - required: + - algo + - not: + anyOf: + - required: + - algo + anyOf: + - required: + - algo + - not: + anyOf: + - required: + - algo + properties: + algo: + allOf: + - $ref: '#/components/schemas/mgmt.v1alpha1.TransformHash.HashType' + title: algo + description: The hashing algorithm to use. + title: TransformHash + additionalProperties: false + description: TransformHash is a transformer that hashes the input string using the specified hashing algorithm. mgmt.v1alpha1.TransformInt64: type: object allOf: @@ -1605,6 +1641,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -1701,6 +1739,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -1796,6 +1836,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -1892,6 +1934,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -2100,6 +2144,11 @@ components: allOf: - $ref: '#/components/schemas/mgmt.v1alpha1.TransformUuid' title: transform_uuid_config + transformHashConfig: + allOf: + - $ref: '#/components/schemas/mgmt.v1alpha1.TransformHash' + title: transform_hash_config + description: TransformHash is a transformer that hashes the input string using the specified hashing algorithm. title: TransformerConfig additionalProperties: false description: The configuration for a transformer. This determines what type of transformation or generation is performed. diff --git a/docs/openapi/neosync.mgmt.v1alpha1.yaml b/docs/openapi/neosync.mgmt.v1alpha1.yaml index 288b72fc5c..03e534cd7f 100644 --- a/docs/openapi/neosync.mgmt.v1alpha1.yaml +++ b/docs/openapi/neosync.mgmt.v1alpha1.yaml @@ -4161,6 +4161,15 @@ components: - HASH_TYPE_MD5 - HASH_TYPE_SHA256 - HASH_TYPE_SHA512 + mgmt.v1alpha1.TransformHash.HashType: + type: string + title: HashType + enum: + - HASH_TYPE_UNSPECIFIED + - HASH_TYPE_MD5 + - HASH_TYPE_SHA1 + - HASH_TYPE_SHA256 + - HASH_TYPE_SHA512 mgmt.v1alpha1.AnonymizeManyErrors: type: object properties: @@ -5223,6 +5232,34 @@ components: This causes the transformed full name to retain the original length. title: TransformFullName additionalProperties: false + mgmt.v1alpha1.TransformHash: + type: object + allOf: + - anyOf: + - required: + - algo + - not: + anyOf: + - required: + - algo + anyOf: + - required: + - algo + - not: + anyOf: + - required: + - algo + properties: + algo: + allOf: + - $ref: '#/components/schemas/mgmt.v1alpha1.TransformHash.HashType' + title: algo + description: The hashing algorithm to use. + title: TransformHash + additionalProperties: false + description: >- + TransformHash is a transformer that hashes the input string using the + specified hashing algorithm. mgmt.v1alpha1.TransformInt64: type: object allOf: @@ -5549,6 +5586,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -5645,6 +5684,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -5740,6 +5781,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -5836,6 +5879,8 @@ components: - transformFloat64Config - required: - transformFullNameConfig + - required: + - transformHashConfig - required: - transformInt64Config - required: @@ -6044,6 +6089,13 @@ components: allOf: - $ref: '#/components/schemas/mgmt.v1alpha1.TransformUuid' title: transform_uuid_config + transformHashConfig: + allOf: + - $ref: '#/components/schemas/mgmt.v1alpha1.TransformHash' + title: transform_hash_config + description: >- + TransformHash is a transformer that hashes the input string using + the specified hashing algorithm. title: TransformerConfig additionalProperties: false description: >- @@ -13044,6 +13096,7 @@ components: - TRANSFORMER_SOURCE_GENERATE_BUSINESS_NAME - TRANSFORMER_SOURCE_GENERATE_IP_ADDRESS - TRANSFORMER_SOURCE_TRANSFORM_UUID + - TRANSFORMER_SOURCE_TRANSFORM_HASH mgmt.v1alpha1.CreateUserDefinedTransformerRequest: type: object properties: diff --git a/docs/protos/mgmt/v1alpha1/transformer.proto.mdx b/docs/protos/mgmt/v1alpha1/transformer.proto.mdx index 2508aae9a1..631e1f1d06 100644 --- a/docs/protos/mgmt/v1alpha1/transformer.proto.mdx +++ b/docs/protos/mgmt/v1alpha1/transformer.proto.mdx @@ -265,76 +265,80 @@ _**package** mgmt.v1alpha1_ +### `TransformHash` + + + ### `TransformInt64` - + ### `TransformInt64PhoneNumber` - + ### `TransformJavascript` - + ### `TransformLastName` - + ### `TransformPhoneNumber` - + ### `TransformPiiText` - + ### `TransformPiiText.EntityAnonymizersEntry` - + ### `TransformString` - + ### `TransformUuid` - + ### `TransformerConfig` - + ### `UpdateUserDefinedTransformerRequest` - + ### `UpdateUserDefinedTransformerResponse` - + ### `UserDefinedTransformer` - + ### `UserDefinedTransformerConfig` - + ### `ValidateUserJavascriptCodeRequest` - + ### `ValidateUserJavascriptCodeResponse` - + ### `ValidateUserRegexCodeRequest` - + ### `ValidateUserRegexCodeResponse` - + --- ## Enums @@ -360,12 +364,16 @@ _**package** mgmt.v1alpha1_ +### `TransformHash.HashType` + + + ### `TransformerDataType` - + ### `TransformerSource` - + --- ## Services diff --git a/docs/protos/proto_docs.json b/docs/protos/proto_docs.json index 5752ef67fa..0458770fd7 100644 --- a/docs/protos/proto_docs.json +++ b/docs/protos/proto_docs.json @@ -169,6 +169,39 @@ } ] }, + { + "name": "HashType", + "longName": "TransformHash.HashType", + "fullName": "mgmt.v1alpha1.TransformHash.HashType", + "description": "", + "values": [ + { + "name": "HASH_TYPE_UNSPECIFIED", + "number": "0", + "description": "If unspecified, defaults to md5" + }, + { + "name": "HASH_TYPE_MD5", + "number": "1", + "description": "The MD5 Hash Algorithm" + }, + { + "name": "HASH_TYPE_SHA1", + "number": "2", + "description": "The SHA1 Hash Algorithm" + }, + { + "name": "HASH_TYPE_SHA256", + "number": "3", + "description": "The SHA256 Hash Algorithm" + }, + { + "name": "HASH_TYPE_SHA512", + "number": "4", + "description": "The SHA512 Hash Algorithm" + } + ] + }, { "name": "TransformerDataType", "longName": "TransformerDataType", @@ -477,6 +510,11 @@ "name": "TRANSFORMER_SOURCE_TRANSFORM_UUID", "number": "50", "description": "" + }, + { + "name": "TRANSFORMER_SOURCE_TRANSFORM_HASH", + "number": "51", + "description": "TransformHash is a transformer that hashes the input string using the specified hashing algorithm." } ] } @@ -2073,6 +2111,30 @@ } ] }, + { + "name": "TransformHash", + "longName": "TransformHash", + "fullName": "mgmt.v1alpha1.TransformHash", + "description": "TransformHash is a transformer that hashes the input string using the specified hashing algorithm.", + "hasExtensions": false, + "hasFields": true, + "hasOneofs": true, + "extensions": [], + "fields": [ + { + "name": "algo", + "description": "The hashing algorithm to use.", + "label": "optional", + "type": "HashType", + "longType": "TransformHash.HashType", + "fullType": "mgmt.v1alpha1.TransformHash.HashType", + "ismap": false, + "isoneof": true, + "oneofdecl": "_algo", + "defaultValue": "" + } + ] + }, { "name": "TransformInt64", "longName": "TransformInt64", @@ -2945,6 +3007,18 @@ "isoneof": true, "oneofdecl": "config", "defaultValue": "" + }, + { + "name": "transform_hash_config", + "description": "TransformHash is a transformer that hashes the input string using the specified hashing algorithm.", + "label": "", + "type": "TransformHash", + "longType": "TransformHash", + "fullType": "mgmt.v1alpha1.TransformHash", + "ismap": false, + "isoneof": true, + "oneofdecl": "config", + "defaultValue": "" } ] }, diff --git a/frontend/packages/sdk/src/client/mgmt/v1alpha1/transformer_pb.ts b/frontend/packages/sdk/src/client/mgmt/v1alpha1/transformer_pb.ts index 5ee1301eb9..c743c5fea2 100644 --- a/frontend/packages/sdk/src/client/mgmt/v1alpha1/transformer_pb.ts +++ b/frontend/packages/sdk/src/client/mgmt/v1alpha1/transformer_pb.ts @@ -13,7 +13,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file mgmt/v1alpha1/transformer.proto. */ export const file_mgmt_v1alpha1_transformer: GenFile = /*@__PURE__*/ - fileDesc("Ch9tZ210L3YxYWxwaGExL3RyYW5zZm9ybWVyLnByb3RvEg1tZ210LnYxYWxwaGExIh4KHEdldFN5c3RlbVRyYW5zZm9ybWVyc1JlcXVlc3QiVwodR2V0U3lzdGVtVHJhbnNmb3JtZXJzUmVzcG9uc2USNgoMdHJhbnNmb3JtZXJzGAEgAygLMiAubWdtdC52MWFscGhhMS5TeXN0ZW1UcmFuc2Zvcm1lciJXCiNHZXRTeXN0ZW1UcmFuc2Zvcm1lckJ5U291cmNlUmVxdWVzdBIwCgZzb3VyY2UYASABKA4yIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyU291cmNlIl0KJEdldFN5c3RlbVRyYW5zZm9ybWVyQnlTb3VyY2VSZXNwb25zZRI1Cgt0cmFuc2Zvcm1lchgBIAEoCzIgLm1nbXQudjFhbHBoYTEuU3lzdGVtVHJhbnNmb3JtZXIiQQohR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lcnNSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBImEKIkdldFVzZXJEZWZpbmVkVHJhbnNmb3JtZXJzUmVzcG9uc2USOwoMdHJhbnNmb3JtZXJzGAEgAygLMiUubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyIkgKJEdldFVzZXJEZWZpbmVkVHJhbnNmb3JtZXJCeUlkUmVxdWVzdBIgCg50cmFuc2Zvcm1lcl9pZBgBIAEoCUIIukgFcgOwAQEiYwolR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lckJ5SWRSZXNwb25zZRI6Cgt0cmFuc2Zvcm1lchgBIAEoCzIlLm1nbXQudjFhbHBoYTEuVXNlckRlZmluZWRUcmFuc2Zvcm1lciL3AQojQ3JlYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQESJwoEbmFtZRgCIAEoCUIZukgWchQyEl5bYS16MC05LV17MywxMDB9JBITCgtkZXNjcmlwdGlvbhgDIAEoCRIwCgZzb3VyY2UYBSABKA4yIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyU291cmNlEjwKEnRyYW5zZm9ybWVyX2NvbmZpZxgGIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWdKBAgEEAUiYgokQ3JlYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlc3BvbnNlEjoKC3RyYW5zZm9ybWVyGAEgASgLMiUubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyIkcKI0RlbGV0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXF1ZXN0EiAKDnRyYW5zZm9ybWVyX2lkGAEgASgJQgi6SAVyA7ABASImCiREZWxldGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyUmVzcG9uc2UiwwEKI1VwZGF0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXF1ZXN0EiAKDnRyYW5zZm9ybWVyX2lkGAEgASgJQgi6SAVyA7ABARInCgRuYW1lGAIgASgJQhm6SBZyFDISXlthLXowLTktXXszLDEwMH0kEhMKC2Rlc2NyaXB0aW9uGAMgASgJEjwKEnRyYW5zZm9ybWVyX2NvbmZpZxgEIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWciYgokVXBkYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlc3BvbnNlEjoKC3RyYW5zZm9ybWVyGAEgASgLMiUubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyInYKIUlzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIzChB0cmFuc2Zvcm1lcl9uYW1lGAIgASgJQhm6SBZyFDISXlthLXowLTktXXszLDEwMH0kIjoKIklzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlUmVzcG9uc2USFAoMaXNfYXZhaWxhYmxlGAEgASgIIqIDChZVc2VyRGVmaW5lZFRyYW5zZm9ybWVyEhQKAmlkGAEgASgJQgi6SAVyA7ABARIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEjkKCWRhdGFfdHlwZRgFIAEoDjIiLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJEYXRhVHlwZUICGAESMAoGc291cmNlGAYgASgOMiAubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1lclNvdXJjZRIwCgZjb25maWcYByABKAsyIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyQ29uZmlnEi4KCmNyZWF0ZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhIKCmFjY291bnRfaWQYCiABKAkSNgoKZGF0YV90eXBlcxgLIAMoDjIiLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJEYXRhVHlwZUoECAQQBSLLAgoRU3lzdGVtVHJhbnNmb3JtZXISDAoEbmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRI5CglkYXRhX3R5cGUYAyABKA4yIi5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyRGF0YVR5cGVCAhgBEjAKBnNvdXJjZRgEIAEoDjIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJTb3VyY2USMAoGY29uZmlnGAUgASgLMiAubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1lckNvbmZpZxI2CgpkYXRhX3R5cGVzGAYgAygOMiIubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1lckRhdGFUeXBlEjwKE3N1cHBvcnRlZF9qb2JfdHlwZXMYByADKA4yHy5tZ210LnYxYWxwaGExLlN1cHBvcnRlZEpvYlR5cGUivRoKEVRyYW5zZm9ybWVyQ29uZmlnEj0KFWdlbmVyYXRlX2VtYWlsX2NvbmZpZxgBIAEoCzIcLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVFbWFpbEgAEj8KFnRyYW5zZm9ybV9lbWFpbF9jb25maWcYAiABKAsyHS5tZ210LnYxYWxwaGExLlRyYW5zZm9ybUVtYWlsSAASOwoUZ2VuZXJhdGVfYm9vbF9jb25maWcYAyABKAsyGy5tZ210LnYxYWxwaGExLkdlbmVyYXRlQm9vbEgAEkgKG2dlbmVyYXRlX2NhcmRfbnVtYmVyX2NvbmZpZxgEIAEoCzIhLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVDYXJkTnVtYmVySAASOwoUZ2VuZXJhdGVfY2l0eV9jb25maWcYBSABKAsyGy5tZ210LnYxYWxwaGExLkdlbmVyYXRlQ2l0eUgAElMKIWdlbmVyYXRlX2UxNjRfcGhvbmVfbnVtYmVyX2NvbmZpZxgGIAEoCzImLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVFMTY0UGhvbmVOdW1iZXJIABJGChpnZW5lcmF0ZV9maXJzdF9uYW1lX2NvbmZpZxgHIAEoCzIgLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVGaXJzdE5hbWVIABJBChdnZW5lcmF0ZV9mbG9hdDY0X2NvbmZpZxgIIAEoCzIeLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVGbG9hdDY0SAASSgocZ2VuZXJhdGVfZnVsbF9hZGRyZXNzX2NvbmZpZxgJIAEoCzIiLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVGdWxsQWRkcmVzc0gAEkQKGWdlbmVyYXRlX2Z1bGxfbmFtZV9jb25maWcYCiABKAsyHy5tZ210LnYxYWxwaGExLkdlbmVyYXRlRnVsbE5hbWVIABI/ChZnZW5lcmF0ZV9nZW5kZXJfY29uZmlnGAsgASgLMh0ubWdtdC52MWFscGhhMS5HZW5lcmF0ZUdlbmRlckgAElUKImdlbmVyYXRlX2ludDY0X3Bob25lX251bWJlcl9jb25maWcYDCABKAsyJy5tZ210LnYxYWxwaGExLkdlbmVyYXRlSW50NjRQaG9uZU51bWJlckgAEj0KFWdlbmVyYXRlX2ludDY0X2NvbmZpZxgNIAEoCzIcLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVJbnQ2NEgAEkQKGWdlbmVyYXRlX2xhc3RfbmFtZV9jb25maWcYDiABKAsyHy5tZ210LnYxYWxwaGExLkdlbmVyYXRlTGFzdE5hbWVIABJHChpnZW5lcmF0ZV9zaGEyNTZoYXNoX2NvbmZpZxgPIAEoCzIhLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVTaGEyNTZIYXNoSAASOQoTZ2VuZXJhdGVfc3NuX2NvbmZpZxgQIAEoCzIaLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVTU05IABI9ChVnZW5lcmF0ZV9zdGF0ZV9jb25maWcYESABKAsyHC5tZ210LnYxYWxwaGExLkdlbmVyYXRlU3RhdGVIABJOCh5nZW5lcmF0ZV9zdHJlZXRfYWRkcmVzc19jb25maWcYEiABKAsyJC5tZ210LnYxYWxwaGExLkdlbmVyYXRlU3RyZWV0QWRkcmVzc0gAElcKI2dlbmVyYXRlX3N0cmluZ19waG9uZV9udW1iZXJfY29uZmlnGBMgASgLMigubWdtdC52MWFscGhhMS5HZW5lcmF0ZVN0cmluZ1Bob25lTnVtYmVySAASPwoWZ2VuZXJhdGVfc3RyaW5nX2NvbmZpZxgUIAEoCzIdLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVTdHJpbmdIABJNCh1nZW5lcmF0ZV91bml4dGltZXN0YW1wX2NvbmZpZxgVIAEoCzIkLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVVbml4VGltZXN0YW1wSAASQwoYZ2VuZXJhdGVfdXNlcm5hbWVfY29uZmlnGBYgASgLMh8ubWdtdC52MWFscGhhMS5HZW5lcmF0ZVVzZXJuYW1lSAASSwocZ2VuZXJhdGVfdXRjdGltZXN0YW1wX2NvbmZpZxgXIAEoCzIjLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVVdGNUaW1lc3RhbXBIABI7ChRnZW5lcmF0ZV91dWlkX2NvbmZpZxgYIAEoCzIbLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVVdWlkSAASQQoXZ2VuZXJhdGVfemlwY29kZV9jb25maWcYGSABKAsyHi5tZ210LnYxYWxwaGExLkdlbmVyYXRlWmlwY29kZUgAElUKInRyYW5zZm9ybV9lMTY0X3Bob25lX251bWJlcl9jb25maWcYGiABKAsyJy5tZ210LnYxYWxwaGExLlRyYW5zZm9ybUUxNjRQaG9uZU51bWJlckgAEkgKG3RyYW5zZm9ybV9maXJzdF9uYW1lX2NvbmZpZxgbIAEoCzIhLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtRmlyc3ROYW1lSAASQwoYdHJhbnNmb3JtX2Zsb2F0NjRfY29uZmlnGBwgASgLMh8ubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1GbG9hdDY0SAASRgoadHJhbnNmb3JtX2Z1bGxfbmFtZV9jb25maWcYHSABKAsyIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybUZ1bGxOYW1lSAASVwojdHJhbnNmb3JtX2ludDY0X3Bob25lX251bWJlcl9jb25maWcYHiABKAsyKC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybUludDY0UGhvbmVOdW1iZXJIABI/ChZ0cmFuc2Zvcm1faW50NjRfY29uZmlnGB8gASgLMh0ubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1JbnQ2NEgAEkYKGnRyYW5zZm9ybV9sYXN0X25hbWVfY29uZmlnGCAgASgLMiAubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1MYXN0TmFtZUgAEkwKHXRyYW5zZm9ybV9waG9uZV9udW1iZXJfY29uZmlnGCEgASgLMiMubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1QaG9uZU51bWJlckgAEkEKF3RyYW5zZm9ybV9zdHJpbmdfY29uZmlnGCIgASgLMh4ubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1TdHJpbmdIABI4ChJwYXNzdGhyb3VnaF9jb25maWcYIyABKAsyGi5tZ210LnYxYWxwaGExLlBhc3N0aHJvdWdoSAASKQoKbnVsbGNvbmZpZxgkIAEoCzITLm1nbXQudjFhbHBoYTEuTnVsbEgAElYKH3VzZXJfZGVmaW5lZF90cmFuc2Zvcm1lcl9jb25maWcYJSABKAsyKy5tZ210LnYxYWxwaGExLlVzZXJEZWZpbmVkVHJhbnNmb3JtZXJDb25maWdIABJBChdnZW5lcmF0ZV9kZWZhdWx0X2NvbmZpZxgmIAEoCzIeLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVEZWZhdWx0SAASSQobdHJhbnNmb3JtX2phdmFzY3JpcHRfY29uZmlnGCcgASgLMiIubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1KYXZhc2NyaXB0SAASSQobZ2VuZXJhdGVfY2F0ZWdvcmljYWxfY29uZmlnGCggASgLMiIubWdtdC52MWFscGhhMS5HZW5lcmF0ZUNhdGVnb3JpY2FsSAASWAojdHJhbnNmb3JtX2NoYXJhY3Rlcl9zY3JhbWJsZV9jb25maWcYKSABKAsyKS5tZ210LnYxYWxwaGExLlRyYW5zZm9ybUNoYXJhY3RlclNjcmFtYmxlSAASRwoaZ2VuZXJhdGVfamF2YXNjcmlwdF9jb25maWcYKiABKAsyIS5tZ210LnYxYWxwaGExLkdlbmVyYXRlSmF2YXNjcmlwdEgAEkEKF2dlbmVyYXRlX2NvdW50cnlfY29uZmlnGCsgASgLMh4ubWdtdC52MWFscGhhMS5HZW5lcmF0ZUNvdW50cnlIABJEChl0cmFuc2Zvcm1fcGlpX3RleHRfY29uZmlnGCwgASgLMh8ubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1QaWlUZXh0SAASTAodZ2VuZXJhdGVfYnVzaW5lc3NfbmFtZV9jb25maWcYLSABKAsyIy5tZ210LnYxYWxwaGExLkdlbmVyYXRlQnVzaW5lc3NOYW1lSAASRgoaZ2VuZXJhdGVfaXBfYWRkcmVzc19jb25maWcYLiABKAsyIC5tZ210LnYxYWxwaGExLkdlbmVyYXRlSXBBZGRyZXNzSAASPQoVdHJhbnNmb3JtX3V1aWRfY29uZmlnGC8gASgLMhwubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1VdWlkSABCDwoGY29uZmlnEgW6SAIIASLDAwoQVHJhbnNmb3JtUGlpVGV4dBIoCg9zY29yZV90aHJlc2hvbGQYASABKAJCD7pIDAoKHQAAgD8tAAAAABI4ChJkZWZhdWx0X2Fub255bWl6ZXIYAiABKAsyHC5tZ210LnYxYWxwaGExLlBpaUFub255bWl6ZXISOgoQZGVueV9yZWNvZ25pemVycxgDIAMoCzIgLm1nbXQudjFhbHBoYTEuUGlpRGVueVJlY29nbml6ZXISJgoQYWxsb3dlZF9lbnRpdGllcxgEIAMoCUIMukgJkgEGIgRyAhABEhcKD2FsbG93ZWRfcGhyYXNlcxgFIAMoCRIVCghsYW5ndWFnZRgGIAEoCUgAiAEBElIKEmVudGl0eV9hbm9ueW1pemVycxgHIAMoCzI2Lm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtUGlpVGV4dC5FbnRpdHlBbm9ueW1pemVyc0VudHJ5GlYKFkVudGl0eUFub255bWl6ZXJzRW50cnkSCwoDa2V5GAEgASgJEisKBXZhbHVlGAIgASgLMhwubWdtdC52MWFscGhhMS5QaWlBbm9ueW1pemVyOgI4AUILCglfbGFuZ3VhZ2UiXwoRUGlpRGVueVJlY29nbml6ZXISKAoEbmFtZRgBIAEoCUIaukgXchUyE15bYS16MC05LV9dezEsMTAwfSQSIAoKZGVueV93b3JkcxgCIAMoCUIMukgJkgEGIgRyAhABItwFCg1QaWlBbm9ueW1pemVyEjcKB3JlcGxhY2UYASABKAsyJC5tZ210LnYxYWxwaGExLlBpaUFub255bWl6ZXIuUmVwbGFjZUgAEjUKBnJlZGFjdBgCIAEoCzIjLm1nbXQudjFhbHBoYTEuUGlpQW5vbnltaXplci5SZWRhY3RIABIxCgRtYXNrGAMgASgLMiEubWdtdC52MWFscGhhMS5QaWlBbm9ueW1pemVyLk1hc2tIABIxCgRoYXNoGAQgASgLMiEubWdtdC52MWFscGhhMS5QaWlBbm9ueW1pemVyLkhhc2hIABI7Cgl0cmFuc2Zvcm0YBSABKAsyJi5tZ210LnYxYWxwaGExLlBpaUFub255bWl6ZXIuVHJhbnNmb3JtSAAaJwoHUmVwbGFjZRISCgV2YWx1ZRgBIAEoCUgAiAEBQggKBl92YWx1ZRoICgZSZWRhY3QahAEKBE1hc2sSGQoMbWFza2luZ19jaGFyGAEgASgJSACIAQESGgoNY2hhcnNfdG9fbWFzaxgCIAEoBUgBiAEBEhUKCGZyb21fZW5kGAMgASgISAKIAQFCDwoNX21hc2tpbmdfY2hhckIQCg5fY2hhcnNfdG9fbWFza0ILCglfZnJvbV9lbmQatAEKBEhhc2gSPQoEYWxnbxgBIAEoDjIqLm1nbXQudjFhbHBoYTEuUGlpQW5vbnltaXplci5IYXNoLkhhc2hUeXBlSACIAQEiZAoISGFzaFR5cGUSGQoVSEFTSF9UWVBFX1VOU1BFQ0lGSUVEEAASEQoNSEFTSF9UWVBFX01ENRABEhQKEEhBU0hfVFlQRV9TSEEyNTYQAhIUChBIQVNIX1RZUEVfU0hBNTEyEANCBwoFX2FsZ28aPQoJVHJhbnNmb3JtEjAKBmNvbmZpZxgBIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWdCCAoGY29uZmlnIlkKDUdlbmVyYXRlRW1haWwSOQoKZW1haWxfdHlwZRgBIAEoDjIgLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVFbWFpbFR5cGVIAIgBAUINCgtfZW1haWxfdHlwZSK3AgoOVHJhbnNmb3JtRW1haWwSHAoPcHJlc2VydmVfZG9tYWluGAEgASgISACIAQESHAoPcHJlc2VydmVfbGVuZ3RoGAIgASgISAGIAQESGAoQZXhjbHVkZWRfZG9tYWlucxgDIAMoCRI5CgplbWFpbF90eXBlGAQgASgOMiAubWdtdC52MWFscGhhMS5HZW5lcmF0ZUVtYWlsVHlwZUgCiAEBEkQKFGludmFsaWRfZW1haWxfYWN0aW9uGAUgASgOMiEubWdtdC52MWFscGhhMS5JbnZhbGlkRW1haWxBY3Rpb25IA4gBAUISChBfcHJlc2VydmVfZG9tYWluQhIKEF9wcmVzZXJ2ZV9sZW5ndGhCDQoLX2VtYWlsX3R5cGVCFwoVX2ludmFsaWRfZW1haWxfYWN0aW9uIg4KDEdlbmVyYXRlQm9vbCI8ChJHZW5lcmF0ZUNhcmROdW1iZXISFwoKdmFsaWRfbHVobhgBIAEoCEgAiAEBQg0KC192YWxpZF9sdWhuIg4KDEdlbmVyYXRlQ2l0eSIRCg9HZW5lcmF0ZURlZmF1bHQiTQoXR2VuZXJhdGVFMTY0UGhvbmVOdW1iZXISEAoDbWluGAEgASgDSACIAQESEAoDbWF4GAIgASgDSAGIAQFCBgoEX21pbkIGCgRfbWF4IhMKEUdlbmVyYXRlRmlyc3ROYW1lIpsBCg9HZW5lcmF0ZUZsb2F0NjQSGwoOcmFuZG9taXplX3NpZ24YASABKAhIAIgBARIQCgNtaW4YAiABKAFIAYgBARIQCgNtYXgYAyABKAFIAogBARIWCglwcmVjaXNpb24YBCABKANIA4gBAUIRCg9fcmFuZG9taXplX3NpZ25CBgoEX21pbkIGCgRfbWF4QgwKCl9wcmVjaXNpb24iFQoTR2VuZXJhdGVGdWxsQWRkcmVzcyISChBHZW5lcmF0ZUZ1bGxOYW1lIjgKDkdlbmVyYXRlR2VuZGVyEhcKCmFiYnJldmlhdGUYASABKAhIAIgBAUINCgtfYWJicmV2aWF0ZSIaChhHZW5lcmF0ZUludDY0UGhvbmVOdW1iZXIicwoNR2VuZXJhdGVJbnQ2NBIbCg5yYW5kb21pemVfc2lnbhgBIAEoCEgAiAEBEhAKA21pbhgCIAEoA0gBiAEBEhAKA21heBgDIAEoA0gCiAEBQhEKD19yYW5kb21pemVfc2lnbkIGCgRfbWluQgYKBF9tYXgiEgoQR2VuZXJhdGVMYXN0TmFtZSIUChJHZW5lcmF0ZVNoYTI1Nkhhc2giDQoLR2VuZXJhdGVTU04iRwoNR2VuZXJhdGVTdGF0ZRIfChJnZW5lcmF0ZV9mdWxsX25hbWUYASABKAhIAIgBAUIVChNfZ2VuZXJhdGVfZnVsbF9uYW1lIhcKFUdlbmVyYXRlU3RyZWV0QWRkcmVzcyJVChlHZW5lcmF0ZVN0cmluZ1Bob25lTnVtYmVyEhAKA21pbhgCIAEoA0gAiAEBEhAKA21heBgDIAEoA0gBiAEBQgYKBF9taW5CBgoEX21heEoECAEQAiJECg5HZW5lcmF0ZVN0cmluZxIQCgNtaW4YASABKANIAIgBARIQCgNtYXgYAiABKANIAYgBAUIGCgRfbWluQgYKBF9tYXgiFwoVR2VuZXJhdGVVbml4VGltZXN0YW1wIhIKEEdlbmVyYXRlVXNlcm5hbWUiFgoUR2VuZXJhdGVVdGNUaW1lc3RhbXAiQAoMR2VuZXJhdGVVdWlkEhwKD2luY2x1ZGVfaHlwaGVucxgBIAEoCEgAiAEBQhIKEF9pbmNsdWRlX2h5cGhlbnMiEQoPR2VuZXJhdGVaaXBjb2RlIkwKGFRyYW5zZm9ybUUxNjRQaG9uZU51bWJlchIcCg9wcmVzZXJ2ZV9sZW5ndGgYASABKAhIAIgBAUISChBfcHJlc2VydmVfbGVuZ3RoIkYKElRyYW5zZm9ybUZpcnN0TmFtZRIcCg9wcmVzZXJ2ZV9sZW5ndGgYASABKAhIAIgBAUISChBfcHJlc2VydmVfbGVuZ3RoIpYBChBUcmFuc2Zvcm1GbG9hdDY0EiQKF3JhbmRvbWl6YXRpb25fcmFuZ2VfbWluGAEgASgBSACIAQESJAoXcmFuZG9taXphdGlvbl9yYW5nZV9tYXgYAiABKAFIAYgBAUIaChhfcmFuZG9taXphdGlvbl9yYW5nZV9taW5CGgoYX3JhbmRvbWl6YXRpb25fcmFuZ2VfbWF4IkUKEVRyYW5zZm9ybUZ1bGxOYW1lEhwKD3ByZXNlcnZlX2xlbmd0aBgBIAEoCEgAiAEBQhIKEF9wcmVzZXJ2ZV9sZW5ndGgiTQoZVHJhbnNmb3JtSW50NjRQaG9uZU51bWJlchIcCg9wcmVzZXJ2ZV9sZW5ndGgYASABKAhIAIgBAUISChBfcHJlc2VydmVfbGVuZ3RoIpQBCg5UcmFuc2Zvcm1JbnQ2NBIkChdyYW5kb21pemF0aW9uX3JhbmdlX21pbhgBIAEoA0gAiAEBEiQKF3JhbmRvbWl6YXRpb25fcmFuZ2VfbWF4GAIgASgDSAGIAQFCGgoYX3JhbmRvbWl6YXRpb25fcmFuZ2VfbWluQhoKGF9yYW5kb21pemF0aW9uX3JhbmdlX21heCJFChFUcmFuc2Zvcm1MYXN0TmFtZRIcCg9wcmVzZXJ2ZV9sZW5ndGgYASABKAhIAIgBAUISChBfcHJlc2VydmVfbGVuZ3RoIkgKFFRyYW5zZm9ybVBob25lTnVtYmVyEhwKD3ByZXNlcnZlX2xlbmd0aBgBIAEoCEgAiAEBQhIKEF9wcmVzZXJ2ZV9sZW5ndGgiQwoPVHJhbnNmb3JtU3RyaW5nEhwKD3ByZXNlcnZlX2xlbmd0aBgBIAEoCEgAiAEBQhIKEF9wcmVzZXJ2ZV9sZW5ndGgiDQoLUGFzc3Rocm91Z2giBgoETnVsbCIjChNUcmFuc2Zvcm1KYXZhc2NyaXB0EgwKBGNvZGUYASABKAkiNAocVXNlckRlZmluZWRUcmFuc2Zvcm1lckNvbmZpZxIUCgJpZBgBIAEoCUIIukgFcgOwAQEiQAohVmFsaWRhdGVVc2VySmF2YXNjcmlwdENvZGVSZXF1ZXN0EhUKBGNvZGUYAiABKAlCB7pIBHICEAFKBAgBEAIiMwoiVmFsaWRhdGVVc2VySmF2YXNjcmlwdENvZGVSZXNwb25zZRINCgV2YWxpZBgBIAEoCCI9ChNHZW5lcmF0ZUNhdGVnb3JpY2FsEhcKCmNhdGVnb3JpZXMYASABKAlIAIgBAUINCgtfY2F0ZWdvcmllcyJWChpUcmFuc2Zvcm1DaGFyYWN0ZXJTY3JhbWJsZRIgChN1c2VyX3Byb3ZpZGVkX3JlZ2V4GAEgASgJSACIAQFCFgoUX3VzZXJfcHJvdmlkZWRfcmVnZXgiIgoSR2VuZXJhdGVKYXZhc2NyaXB0EgwKBGNvZGUYASABKAkiQQocVmFsaWRhdGVVc2VyUmVnZXhDb2RlUmVxdWVzdBIbChN1c2VyX3Byb3ZpZGVkX3JlZ2V4GAIgASgJSgQIARACIi4KHVZhbGlkYXRlVXNlclJlZ2V4Q29kZVJlc3BvbnNlEg0KBXZhbGlkGAEgASgIIkkKD0dlbmVyYXRlQ291bnRyeRIfChJnZW5lcmF0ZV9mdWxsX25hbWUYASABKAhIAIgBAUIVChNfZ2VuZXJhdGVfZnVsbF9uYW1lIj4KHkdldFRyYW5zZm9ybVBpaUVudGl0aWVzUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABASIzCh9HZXRUcmFuc2Zvcm1QaWlFbnRpdGllc1Jlc3BvbnNlEhAKCGVudGl0aWVzGAEgAygJIhYKFEdlbmVyYXRlQnVzaW5lc3NOYW1lIlsKEUdlbmVyYXRlSXBBZGRyZXNzEjoKB2lwX3R5cGUYASABKA4yJC5tZ210LnYxYWxwaGExLkdlbmVyYXRlSXBBZGRyZXNzVHlwZUgAiAEBQgoKCF9pcF90eXBlIg8KDVRyYW5zZm9ybVV1aWQqhxEKEVRyYW5zZm9ybWVyU291cmNlEiIKHlRSQU5TRk9STUVSX1NPVVJDRV9VTlNQRUNJRklFRBAAEiIKHlRSQU5TRk9STUVSX1NPVVJDRV9QQVNTVEhST1VHSBABEicKI1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9ERUZBVUxUEAISKwonVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9KQVZBU0NSSVBUEAMSJQohVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0VNQUlMEAQSJgoiVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9FTUFJTBAFEiQKIFRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9CT09MEAYSKwonVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0NBUkRfTlVNQkVSEAcSJAogVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0NJVFkQCBIxCi1UUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfRTE2NF9QSE9ORV9OVU1CRVIQCRIqCiZUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfRklSU1RfTkFNRRAKEicKI1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9GTE9BVDY0EAsSLAooVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0ZVTExfQUREUkVTUxAMEikKJVRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9GVUxMX05BTUUQDRImCiJUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfR0VOREVSEA4SMgouVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0lOVDY0X1BIT05FX05VTUJFUhAPEiUKIVRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9JTlQ2NBAQEiwKKFRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9SQU5ET01fSU5UNjQQERIpCiVUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfTEFTVF9OQU1FEBISKgomVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1NIQTI1NkhBU0gQExIjCh9UUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfU1NOEBQSJQohVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1NUQVRFEBUSLgoqVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1NUUkVFVF9BRERSRVNTEBYSMwovVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1NUUklOR19QSE9ORV9OVU1CRVIQFxImCiJUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfU1RSSU5HEBgSLQopVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1JBTkRPTV9TVFJJTkcQGRItCilUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfVU5JWFRJTUVTVEFNUBAaEigKJFRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9VU0VSTkFNRRAbEiwKKFRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9VVENUSU1FU1RBTVAQHBIkCiBUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfVVVJRBAdEicKI1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9aSVBDT0RFEB4SMgouVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9FMTY0X1BIT05FX05VTUJFUhAfEisKJ1RSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fRklSU1RfTkFNRRAgEigKJFRSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fRkxPQVQ2NBAhEioKJlRSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fRlVMTF9OQU1FECISMwovVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9JTlQ2NF9QSE9ORV9OVU1CRVIQIxImCiJUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX0lOVDY0ECQSKgomVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9MQVNUX05BTUUQJRItCilUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX1BIT05FX05VTUJFUhAmEicKI1RSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fU1RSSU5HECcSJAogVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX05VTEwQKBIrCidUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfQ0FURUdPUklDQUwQKhIzCi9UUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX0NIQVJBQ1RFUl9TQ1JBTUJMRRArEiMKH1RSQU5TRk9STUVSX1NPVVJDRV9VU0VSX0RFRklORUQQLBIqCiZUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfSkFWQVNDUklQVBAtEicKI1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9DT1VOVFJZEC4SKQolVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9QSUlfVEVYVBAvEi0KKVRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9CVVNJTkVTU19OQU1FEDASKgomVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0lQX0FERFJFU1MQMRIlCiFUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX1VVSUQQMirEAgoTVHJhbnNmb3JtZXJEYXRhVHlwZRIlCiFUUkFOU0ZPUk1FUl9EQVRBX1RZUEVfVU5TUEVDSUZJRUQQABIgChxUUkFOU0ZPUk1FUl9EQVRBX1RZUEVfU1RSSU5HEAESHwobVFJBTlNGT1JNRVJfREFUQV9UWVBFX0lOVDY0EAISIQodVFJBTlNGT1JNRVJfREFUQV9UWVBFX0JPT0xFQU4QAxIhCh1UUkFOU0ZPUk1FUl9EQVRBX1RZUEVfRkxPQVQ2NBAEEh4KGlRSQU5TRk9STUVSX0RBVEFfVFlQRV9OVUxMEAUSHQoZVFJBTlNGT1JNRVJfREFUQV9UWVBFX0FOWRAGEh4KGlRSQU5TRk9STUVSX0RBVEFfVFlQRV9USU1FEAcSHgoaVFJBTlNGT1JNRVJfREFUQV9UWVBFX1VVSUQQCCp0ChBTdXBwb3J0ZWRKb2JUeXBlEiIKHlNVUFBPUlRFRF9KT0JfVFlQRV9VTlNQRUNJRklFRBAAEhsKF1NVUFBPUlRFRF9KT0JfVFlQRV9TWU5DEAESHwobU1VQUE9SVEVEX0pPQl9UWVBFX0dFTkVSQVRFEAIqewoRR2VuZXJhdGVFbWFpbFR5cGUSIwofR0VORVJBVEVfRU1BSUxfVFlQRV9VTlNQRUNJRklFRBAAEh8KG0dFTkVSQVRFX0VNQUlMX1RZUEVfVVVJRF9WNBABEiAKHEdFTkVSQVRFX0VNQUlMX1RZUEVfRlVMTE5BTUUQAirDAQoSSW52YWxpZEVtYWlsQWN0aW9uEiQKIElOVkFMSURfRU1BSUxfQUNUSU9OX1VOU1BFQ0lGSUVEEAASHwobSU5WQUxJRF9FTUFJTF9BQ1RJT05fUkVKRUNUEAESHQoZSU5WQUxJRF9FTUFJTF9BQ1RJT05fTlVMTBACEiQKIElOVkFMSURfRU1BSUxfQUNUSU9OX1BBU1NUSFJPVUdIEAMSIQodSU5WQUxJRF9FTUFJTF9BQ1RJT05fR0VORVJBVEUQBCqMAwoVR2VuZXJhdGVJcEFkZHJlc3NUeXBlEigKJEdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9VTlNQRUNJRklFRBAAEiYKIkdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9WNF9QVUJMSUMQARIpCiVHRU5FUkFURV9JUF9BRERSRVNTX1RZUEVfVjRfUFJJVkFURV9BEAISKQolR0VORVJBVEVfSVBfQUREUkVTU19UWVBFX1Y0X1BSSVZBVEVfQhADEikKJUdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9WNF9QUklWQVRFX0MQBBIqCiZHRU5FUkFURV9JUF9BRERSRVNTX1RZUEVfVjRfTElOS19MT0NBTBAFEikKJUdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9WNF9NVUxUSUNBU1QQBhIoCiRHRU5FUkFURV9JUF9BRERSRVNTX1RZUEVfVjRfTE9PUEJBQ0sQBxIfChtHRU5FUkFURV9JUF9BRERSRVNTX1RZUEVfVjYQCDLdCwoTVHJhbnNmb3JtZXJzU2VydmljZRJ3ChVHZXRTeXN0ZW1UcmFuc2Zvcm1lcnMSKy5tZ210LnYxYWxwaGExLkdldFN5c3RlbVRyYW5zZm9ybWVyc1JlcXVlc3QaLC5tZ210LnYxYWxwaGExLkdldFN5c3RlbVRyYW5zZm9ybWVyc1Jlc3BvbnNlIgOQAgESjAEKHEdldFN5c3RlbVRyYW5zZm9ybWVyQnlTb3VyY2USMi5tZ210LnYxYWxwaGExLkdldFN5c3RlbVRyYW5zZm9ybWVyQnlTb3VyY2VSZXF1ZXN0GjMubWdtdC52MWFscGhhMS5HZXRTeXN0ZW1UcmFuc2Zvcm1lckJ5U291cmNlUmVzcG9uc2UiA5ACARKGAQoaR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lcnMSMC5tZ210LnYxYWxwaGExLkdldFVzZXJEZWZpbmVkVHJhbnNmb3JtZXJzUmVxdWVzdBoxLm1nbXQudjFhbHBoYTEuR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lcnNSZXNwb25zZSIDkAIBEo8BCh1HZXRVc2VyRGVmaW5lZFRyYW5zZm9ybWVyQnlJZBIzLm1nbXQudjFhbHBoYTEuR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lckJ5SWRSZXF1ZXN0GjQubWdtdC52MWFscGhhMS5HZXRVc2VyRGVmaW5lZFRyYW5zZm9ybWVyQnlJZFJlc3BvbnNlIgOQAgESiQEKHENyZWF0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXISMi5tZ210LnYxYWxwaGExLkNyZWF0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXF1ZXN0GjMubWdtdC52MWFscGhhMS5DcmVhdGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyUmVzcG9uc2UiABKJAQocRGVsZXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lchIyLm1nbXQudjFhbHBoYTEuRGVsZXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlcXVlc3QaMy5tZ210LnYxYWxwaGExLkRlbGV0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXNwb25zZSIAEokBChxVcGRhdGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyEjIubWdtdC52MWFscGhhMS5VcGRhdGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyUmVxdWVzdBozLm1nbXQudjFhbHBoYTEuVXBkYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlc3BvbnNlIgASgwEKGklzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlEjAubWdtdC52MWFscGhhMS5Jc1RyYW5zZm9ybWVyTmFtZUF2YWlsYWJsZVJlcXVlc3QaMS5tZ210LnYxYWxwaGExLklzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlUmVzcG9uc2UiABKDAQoaVmFsaWRhdGVVc2VySmF2YXNjcmlwdENvZGUSMC5tZ210LnYxYWxwaGExLlZhbGlkYXRlVXNlckphdmFzY3JpcHRDb2RlUmVxdWVzdBoxLm1nbXQudjFhbHBoYTEuVmFsaWRhdGVVc2VySmF2YXNjcmlwdENvZGVSZXNwb25zZSIAEnQKFVZhbGlkYXRlVXNlclJlZ2V4Q29kZRIrLm1nbXQudjFhbHBoYTEuVmFsaWRhdGVVc2VyUmVnZXhDb2RlUmVxdWVzdBosLm1nbXQudjFhbHBoYTEuVmFsaWRhdGVVc2VyUmVnZXhDb2RlUmVzcG9uc2UiABJ9ChdHZXRUcmFuc2Zvcm1QaWlFbnRpdGllcxItLm1nbXQudjFhbHBoYTEuR2V0VHJhbnNmb3JtUGlpRW50aXRpZXNSZXF1ZXN0Gi4ubWdtdC52MWFscGhhMS5HZXRUcmFuc2Zvcm1QaWlFbnRpdGllc1Jlc3BvbnNlIgOQAgFCzAEKEWNvbS5tZ210LnYxYWxwaGExQhBUcmFuc2Zvcm1lclByb3RvUAFaUGdpdGh1Yi5jb20vbnVjbGV1c2Nsb3VkL25lb3N5bmMvYmFja2VuZC9nZW4vZ28vcHJvdG9zL21nbXQvdjFhbHBoYTE7bWdtdHYxYWxwaGExogIDTVhYqgINTWdtdC5WMWFscGhhMcoCDU1nbXRcVjFhbHBoYTHiAhlNZ210XFYxYWxwaGExXEdQQk1ldGFkYXRh6gIOTWdtdDo6VjFhbHBoYTFiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_timestamp]); + fileDesc("Ch9tZ210L3YxYWxwaGExL3RyYW5zZm9ybWVyLnByb3RvEg1tZ210LnYxYWxwaGExIh4KHEdldFN5c3RlbVRyYW5zZm9ybWVyc1JlcXVlc3QiVwodR2V0U3lzdGVtVHJhbnNmb3JtZXJzUmVzcG9uc2USNgoMdHJhbnNmb3JtZXJzGAEgAygLMiAubWdtdC52MWFscGhhMS5TeXN0ZW1UcmFuc2Zvcm1lciJXCiNHZXRTeXN0ZW1UcmFuc2Zvcm1lckJ5U291cmNlUmVxdWVzdBIwCgZzb3VyY2UYASABKA4yIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyU291cmNlIl0KJEdldFN5c3RlbVRyYW5zZm9ybWVyQnlTb3VyY2VSZXNwb25zZRI1Cgt0cmFuc2Zvcm1lchgBIAEoCzIgLm1nbXQudjFhbHBoYTEuU3lzdGVtVHJhbnNmb3JtZXIiQQohR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lcnNSZXF1ZXN0EhwKCmFjY291bnRfaWQYASABKAlCCLpIBXIDsAEBImEKIkdldFVzZXJEZWZpbmVkVHJhbnNmb3JtZXJzUmVzcG9uc2USOwoMdHJhbnNmb3JtZXJzGAEgAygLMiUubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyIkgKJEdldFVzZXJEZWZpbmVkVHJhbnNmb3JtZXJCeUlkUmVxdWVzdBIgCg50cmFuc2Zvcm1lcl9pZBgBIAEoCUIIukgFcgOwAQEiYwolR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lckJ5SWRSZXNwb25zZRI6Cgt0cmFuc2Zvcm1lchgBIAEoCzIlLm1nbXQudjFhbHBoYTEuVXNlckRlZmluZWRUcmFuc2Zvcm1lciL3AQojQ3JlYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlcXVlc3QSHAoKYWNjb3VudF9pZBgBIAEoCUIIukgFcgOwAQESJwoEbmFtZRgCIAEoCUIZukgWchQyEl5bYS16MC05LV17MywxMDB9JBITCgtkZXNjcmlwdGlvbhgDIAEoCRIwCgZzb3VyY2UYBSABKA4yIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyU291cmNlEjwKEnRyYW5zZm9ybWVyX2NvbmZpZxgGIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWdKBAgEEAUiYgokQ3JlYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlc3BvbnNlEjoKC3RyYW5zZm9ybWVyGAEgASgLMiUubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyIkcKI0RlbGV0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXF1ZXN0EiAKDnRyYW5zZm9ybWVyX2lkGAEgASgJQgi6SAVyA7ABASImCiREZWxldGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyUmVzcG9uc2UiwwEKI1VwZGF0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXF1ZXN0EiAKDnRyYW5zZm9ybWVyX2lkGAEgASgJQgi6SAVyA7ABARInCgRuYW1lGAIgASgJQhm6SBZyFDISXlthLXowLTktXXszLDEwMH0kEhMKC2Rlc2NyaXB0aW9uGAMgASgJEjwKEnRyYW5zZm9ybWVyX2NvbmZpZxgEIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWciYgokVXBkYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlc3BvbnNlEjoKC3RyYW5zZm9ybWVyGAEgASgLMiUubWdtdC52MWFscGhhMS5Vc2VyRGVmaW5lZFRyYW5zZm9ybWVyInYKIUlzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABARIzChB0cmFuc2Zvcm1lcl9uYW1lGAIgASgJQhm6SBZyFDISXlthLXowLTktXXszLDEwMH0kIjoKIklzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlUmVzcG9uc2USFAoMaXNfYXZhaWxhYmxlGAEgASgIIqIDChZVc2VyRGVmaW5lZFRyYW5zZm9ybWVyEhQKAmlkGAEgASgJQgi6SAVyA7ABARIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEjkKCWRhdGFfdHlwZRgFIAEoDjIiLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJEYXRhVHlwZUICGAESMAoGc291cmNlGAYgASgOMiAubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1lclNvdXJjZRIwCgZjb25maWcYByABKAsyIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyQ29uZmlnEi4KCmNyZWF0ZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhIKCmFjY291bnRfaWQYCiABKAkSNgoKZGF0YV90eXBlcxgLIAMoDjIiLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJEYXRhVHlwZUoECAQQBSLLAgoRU3lzdGVtVHJhbnNmb3JtZXISDAoEbmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRI5CglkYXRhX3R5cGUYAyABKA4yIi5tZ210LnYxYWxwaGExLlRyYW5zZm9ybWVyRGF0YVR5cGVCAhgBEjAKBnNvdXJjZRgEIAEoDjIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJTb3VyY2USMAoGY29uZmlnGAUgASgLMiAubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1lckNvbmZpZxI2CgpkYXRhX3R5cGVzGAYgAygOMiIubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1lckRhdGFUeXBlEjwKE3N1cHBvcnRlZF9qb2JfdHlwZXMYByADKA4yHy5tZ210LnYxYWxwaGExLlN1cHBvcnRlZEpvYlR5cGUi/BoKEVRyYW5zZm9ybWVyQ29uZmlnEj0KFWdlbmVyYXRlX2VtYWlsX2NvbmZpZxgBIAEoCzIcLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVFbWFpbEgAEj8KFnRyYW5zZm9ybV9lbWFpbF9jb25maWcYAiABKAsyHS5tZ210LnYxYWxwaGExLlRyYW5zZm9ybUVtYWlsSAASOwoUZ2VuZXJhdGVfYm9vbF9jb25maWcYAyABKAsyGy5tZ210LnYxYWxwaGExLkdlbmVyYXRlQm9vbEgAEkgKG2dlbmVyYXRlX2NhcmRfbnVtYmVyX2NvbmZpZxgEIAEoCzIhLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVDYXJkTnVtYmVySAASOwoUZ2VuZXJhdGVfY2l0eV9jb25maWcYBSABKAsyGy5tZ210LnYxYWxwaGExLkdlbmVyYXRlQ2l0eUgAElMKIWdlbmVyYXRlX2UxNjRfcGhvbmVfbnVtYmVyX2NvbmZpZxgGIAEoCzImLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVFMTY0UGhvbmVOdW1iZXJIABJGChpnZW5lcmF0ZV9maXJzdF9uYW1lX2NvbmZpZxgHIAEoCzIgLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVGaXJzdE5hbWVIABJBChdnZW5lcmF0ZV9mbG9hdDY0X2NvbmZpZxgIIAEoCzIeLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVGbG9hdDY0SAASSgocZ2VuZXJhdGVfZnVsbF9hZGRyZXNzX2NvbmZpZxgJIAEoCzIiLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVGdWxsQWRkcmVzc0gAEkQKGWdlbmVyYXRlX2Z1bGxfbmFtZV9jb25maWcYCiABKAsyHy5tZ210LnYxYWxwaGExLkdlbmVyYXRlRnVsbE5hbWVIABI/ChZnZW5lcmF0ZV9nZW5kZXJfY29uZmlnGAsgASgLMh0ubWdtdC52MWFscGhhMS5HZW5lcmF0ZUdlbmRlckgAElUKImdlbmVyYXRlX2ludDY0X3Bob25lX251bWJlcl9jb25maWcYDCABKAsyJy5tZ210LnYxYWxwaGExLkdlbmVyYXRlSW50NjRQaG9uZU51bWJlckgAEj0KFWdlbmVyYXRlX2ludDY0X2NvbmZpZxgNIAEoCzIcLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVJbnQ2NEgAEkQKGWdlbmVyYXRlX2xhc3RfbmFtZV9jb25maWcYDiABKAsyHy5tZ210LnYxYWxwaGExLkdlbmVyYXRlTGFzdE5hbWVIABJHChpnZW5lcmF0ZV9zaGEyNTZoYXNoX2NvbmZpZxgPIAEoCzIhLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVTaGEyNTZIYXNoSAASOQoTZ2VuZXJhdGVfc3NuX2NvbmZpZxgQIAEoCzIaLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVTU05IABI9ChVnZW5lcmF0ZV9zdGF0ZV9jb25maWcYESABKAsyHC5tZ210LnYxYWxwaGExLkdlbmVyYXRlU3RhdGVIABJOCh5nZW5lcmF0ZV9zdHJlZXRfYWRkcmVzc19jb25maWcYEiABKAsyJC5tZ210LnYxYWxwaGExLkdlbmVyYXRlU3RyZWV0QWRkcmVzc0gAElcKI2dlbmVyYXRlX3N0cmluZ19waG9uZV9udW1iZXJfY29uZmlnGBMgASgLMigubWdtdC52MWFscGhhMS5HZW5lcmF0ZVN0cmluZ1Bob25lTnVtYmVySAASPwoWZ2VuZXJhdGVfc3RyaW5nX2NvbmZpZxgUIAEoCzIdLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVTdHJpbmdIABJNCh1nZW5lcmF0ZV91bml4dGltZXN0YW1wX2NvbmZpZxgVIAEoCzIkLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVVbml4VGltZXN0YW1wSAASQwoYZ2VuZXJhdGVfdXNlcm5hbWVfY29uZmlnGBYgASgLMh8ubWdtdC52MWFscGhhMS5HZW5lcmF0ZVVzZXJuYW1lSAASSwocZ2VuZXJhdGVfdXRjdGltZXN0YW1wX2NvbmZpZxgXIAEoCzIjLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVVdGNUaW1lc3RhbXBIABI7ChRnZW5lcmF0ZV91dWlkX2NvbmZpZxgYIAEoCzIbLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVVdWlkSAASQQoXZ2VuZXJhdGVfemlwY29kZV9jb25maWcYGSABKAsyHi5tZ210LnYxYWxwaGExLkdlbmVyYXRlWmlwY29kZUgAElUKInRyYW5zZm9ybV9lMTY0X3Bob25lX251bWJlcl9jb25maWcYGiABKAsyJy5tZ210LnYxYWxwaGExLlRyYW5zZm9ybUUxNjRQaG9uZU51bWJlckgAEkgKG3RyYW5zZm9ybV9maXJzdF9uYW1lX2NvbmZpZxgbIAEoCzIhLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtRmlyc3ROYW1lSAASQwoYdHJhbnNmb3JtX2Zsb2F0NjRfY29uZmlnGBwgASgLMh8ubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1GbG9hdDY0SAASRgoadHJhbnNmb3JtX2Z1bGxfbmFtZV9jb25maWcYHSABKAsyIC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybUZ1bGxOYW1lSAASVwojdHJhbnNmb3JtX2ludDY0X3Bob25lX251bWJlcl9jb25maWcYHiABKAsyKC5tZ210LnYxYWxwaGExLlRyYW5zZm9ybUludDY0UGhvbmVOdW1iZXJIABI/ChZ0cmFuc2Zvcm1faW50NjRfY29uZmlnGB8gASgLMh0ubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1JbnQ2NEgAEkYKGnRyYW5zZm9ybV9sYXN0X25hbWVfY29uZmlnGCAgASgLMiAubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1MYXN0TmFtZUgAEkwKHXRyYW5zZm9ybV9waG9uZV9udW1iZXJfY29uZmlnGCEgASgLMiMubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1QaG9uZU51bWJlckgAEkEKF3RyYW5zZm9ybV9zdHJpbmdfY29uZmlnGCIgASgLMh4ubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1TdHJpbmdIABI4ChJwYXNzdGhyb3VnaF9jb25maWcYIyABKAsyGi5tZ210LnYxYWxwaGExLlBhc3N0aHJvdWdoSAASKQoKbnVsbGNvbmZpZxgkIAEoCzITLm1nbXQudjFhbHBoYTEuTnVsbEgAElYKH3VzZXJfZGVmaW5lZF90cmFuc2Zvcm1lcl9jb25maWcYJSABKAsyKy5tZ210LnYxYWxwaGExLlVzZXJEZWZpbmVkVHJhbnNmb3JtZXJDb25maWdIABJBChdnZW5lcmF0ZV9kZWZhdWx0X2NvbmZpZxgmIAEoCzIeLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVEZWZhdWx0SAASSQobdHJhbnNmb3JtX2phdmFzY3JpcHRfY29uZmlnGCcgASgLMiIubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1KYXZhc2NyaXB0SAASSQobZ2VuZXJhdGVfY2F0ZWdvcmljYWxfY29uZmlnGCggASgLMiIubWdtdC52MWFscGhhMS5HZW5lcmF0ZUNhdGVnb3JpY2FsSAASWAojdHJhbnNmb3JtX2NoYXJhY3Rlcl9zY3JhbWJsZV9jb25maWcYKSABKAsyKS5tZ210LnYxYWxwaGExLlRyYW5zZm9ybUNoYXJhY3RlclNjcmFtYmxlSAASRwoaZ2VuZXJhdGVfamF2YXNjcmlwdF9jb25maWcYKiABKAsyIS5tZ210LnYxYWxwaGExLkdlbmVyYXRlSmF2YXNjcmlwdEgAEkEKF2dlbmVyYXRlX2NvdW50cnlfY29uZmlnGCsgASgLMh4ubWdtdC52MWFscGhhMS5HZW5lcmF0ZUNvdW50cnlIABJEChl0cmFuc2Zvcm1fcGlpX3RleHRfY29uZmlnGCwgASgLMh8ubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1QaWlUZXh0SAASTAodZ2VuZXJhdGVfYnVzaW5lc3NfbmFtZV9jb25maWcYLSABKAsyIy5tZ210LnYxYWxwaGExLkdlbmVyYXRlQnVzaW5lc3NOYW1lSAASRgoaZ2VuZXJhdGVfaXBfYWRkcmVzc19jb25maWcYLiABKAsyIC5tZ210LnYxYWxwaGExLkdlbmVyYXRlSXBBZGRyZXNzSAASPQoVdHJhbnNmb3JtX3V1aWRfY29uZmlnGC8gASgLMhwubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1VdWlkSAASPQoVdHJhbnNmb3JtX2hhc2hfY29uZmlnGDAgASgLMhwubWdtdC52MWFscGhhMS5UcmFuc2Zvcm1IYXNoSABCDwoGY29uZmlnEgW6SAIIASLDAwoQVHJhbnNmb3JtUGlpVGV4dBIoCg9zY29yZV90aHJlc2hvbGQYASABKAJCD7pIDAoKHQAAgD8tAAAAABI4ChJkZWZhdWx0X2Fub255bWl6ZXIYAiABKAsyHC5tZ210LnYxYWxwaGExLlBpaUFub255bWl6ZXISOgoQZGVueV9yZWNvZ25pemVycxgDIAMoCzIgLm1nbXQudjFhbHBoYTEuUGlpRGVueVJlY29nbml6ZXISJgoQYWxsb3dlZF9lbnRpdGllcxgEIAMoCUIMukgJkgEGIgRyAhABEhcKD2FsbG93ZWRfcGhyYXNlcxgFIAMoCRIVCghsYW5ndWFnZRgGIAEoCUgAiAEBElIKEmVudGl0eV9hbm9ueW1pemVycxgHIAMoCzI2Lm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtUGlpVGV4dC5FbnRpdHlBbm9ueW1pemVyc0VudHJ5GlYKFkVudGl0eUFub255bWl6ZXJzRW50cnkSCwoDa2V5GAEgASgJEisKBXZhbHVlGAIgASgLMhwubWdtdC52MWFscGhhMS5QaWlBbm9ueW1pemVyOgI4AUILCglfbGFuZ3VhZ2UiXwoRUGlpRGVueVJlY29nbml6ZXISKAoEbmFtZRgBIAEoCUIaukgXchUyE15bYS16MC05LV9dezEsMTAwfSQSIAoKZGVueV93b3JkcxgCIAMoCUIMukgJkgEGIgRyAhABItwFCg1QaWlBbm9ueW1pemVyEjcKB3JlcGxhY2UYASABKAsyJC5tZ210LnYxYWxwaGExLlBpaUFub255bWl6ZXIuUmVwbGFjZUgAEjUKBnJlZGFjdBgCIAEoCzIjLm1nbXQudjFhbHBoYTEuUGlpQW5vbnltaXplci5SZWRhY3RIABIxCgRtYXNrGAMgASgLMiEubWdtdC52MWFscGhhMS5QaWlBbm9ueW1pemVyLk1hc2tIABIxCgRoYXNoGAQgASgLMiEubWdtdC52MWFscGhhMS5QaWlBbm9ueW1pemVyLkhhc2hIABI7Cgl0cmFuc2Zvcm0YBSABKAsyJi5tZ210LnYxYWxwaGExLlBpaUFub255bWl6ZXIuVHJhbnNmb3JtSAAaJwoHUmVwbGFjZRISCgV2YWx1ZRgBIAEoCUgAiAEBQggKBl92YWx1ZRoICgZSZWRhY3QahAEKBE1hc2sSGQoMbWFza2luZ19jaGFyGAEgASgJSACIAQESGgoNY2hhcnNfdG9fbWFzaxgCIAEoBUgBiAEBEhUKCGZyb21fZW5kGAMgASgISAKIAQFCDwoNX21hc2tpbmdfY2hhckIQCg5fY2hhcnNfdG9fbWFza0ILCglfZnJvbV9lbmQatAEKBEhhc2gSPQoEYWxnbxgBIAEoDjIqLm1nbXQudjFhbHBoYTEuUGlpQW5vbnltaXplci5IYXNoLkhhc2hUeXBlSACIAQEiZAoISGFzaFR5cGUSGQoVSEFTSF9UWVBFX1VOU1BFQ0lGSUVEEAASEQoNSEFTSF9UWVBFX01ENRABEhQKEEhBU0hfVFlQRV9TSEEyNTYQAhIUChBIQVNIX1RZUEVfU0hBNTEyEANCBwoFX2FsZ28aPQoJVHJhbnNmb3JtEjAKBmNvbmZpZxgBIAEoCzIgLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtZXJDb25maWdCCAoGY29uZmlnIlkKDUdlbmVyYXRlRW1haWwSOQoKZW1haWxfdHlwZRgBIAEoDjIgLm1nbXQudjFhbHBoYTEuR2VuZXJhdGVFbWFpbFR5cGVIAIgBAUINCgtfZW1haWxfdHlwZSK3AgoOVHJhbnNmb3JtRW1haWwSHAoPcHJlc2VydmVfZG9tYWluGAEgASgISACIAQESHAoPcHJlc2VydmVfbGVuZ3RoGAIgASgISAGIAQESGAoQZXhjbHVkZWRfZG9tYWlucxgDIAMoCRI5CgplbWFpbF90eXBlGAQgASgOMiAubWdtdC52MWFscGhhMS5HZW5lcmF0ZUVtYWlsVHlwZUgCiAEBEkQKFGludmFsaWRfZW1haWxfYWN0aW9uGAUgASgOMiEubWdtdC52MWFscGhhMS5JbnZhbGlkRW1haWxBY3Rpb25IA4gBAUISChBfcHJlc2VydmVfZG9tYWluQhIKEF9wcmVzZXJ2ZV9sZW5ndGhCDQoLX2VtYWlsX3R5cGVCFwoVX2ludmFsaWRfZW1haWxfYWN0aW9uIg4KDEdlbmVyYXRlQm9vbCI8ChJHZW5lcmF0ZUNhcmROdW1iZXISFwoKdmFsaWRfbHVobhgBIAEoCEgAiAEBQg0KC192YWxpZF9sdWhuIg4KDEdlbmVyYXRlQ2l0eSIRCg9HZW5lcmF0ZURlZmF1bHQiTQoXR2VuZXJhdGVFMTY0UGhvbmVOdW1iZXISEAoDbWluGAEgASgDSACIAQESEAoDbWF4GAIgASgDSAGIAQFCBgoEX21pbkIGCgRfbWF4IhMKEUdlbmVyYXRlRmlyc3ROYW1lIpsBCg9HZW5lcmF0ZUZsb2F0NjQSGwoOcmFuZG9taXplX3NpZ24YASABKAhIAIgBARIQCgNtaW4YAiABKAFIAYgBARIQCgNtYXgYAyABKAFIAogBARIWCglwcmVjaXNpb24YBCABKANIA4gBAUIRCg9fcmFuZG9taXplX3NpZ25CBgoEX21pbkIGCgRfbWF4QgwKCl9wcmVjaXNpb24iFQoTR2VuZXJhdGVGdWxsQWRkcmVzcyISChBHZW5lcmF0ZUZ1bGxOYW1lIjgKDkdlbmVyYXRlR2VuZGVyEhcKCmFiYnJldmlhdGUYASABKAhIAIgBAUINCgtfYWJicmV2aWF0ZSIaChhHZW5lcmF0ZUludDY0UGhvbmVOdW1iZXIicwoNR2VuZXJhdGVJbnQ2NBIbCg5yYW5kb21pemVfc2lnbhgBIAEoCEgAiAEBEhAKA21pbhgCIAEoA0gBiAEBEhAKA21heBgDIAEoA0gCiAEBQhEKD19yYW5kb21pemVfc2lnbkIGCgRfbWluQgYKBF9tYXgiEgoQR2VuZXJhdGVMYXN0TmFtZSIUChJHZW5lcmF0ZVNoYTI1Nkhhc2giDQoLR2VuZXJhdGVTU04iRwoNR2VuZXJhdGVTdGF0ZRIfChJnZW5lcmF0ZV9mdWxsX25hbWUYASABKAhIAIgBAUIVChNfZ2VuZXJhdGVfZnVsbF9uYW1lIhcKFUdlbmVyYXRlU3RyZWV0QWRkcmVzcyJVChlHZW5lcmF0ZVN0cmluZ1Bob25lTnVtYmVyEhAKA21pbhgCIAEoA0gAiAEBEhAKA21heBgDIAEoA0gBiAEBQgYKBF9taW5CBgoEX21heEoECAEQAiJECg5HZW5lcmF0ZVN0cmluZxIQCgNtaW4YASABKANIAIgBARIQCgNtYXgYAiABKANIAYgBAUIGCgRfbWluQgYKBF9tYXgiFwoVR2VuZXJhdGVVbml4VGltZXN0YW1wIhIKEEdlbmVyYXRlVXNlcm5hbWUiFgoUR2VuZXJhdGVVdGNUaW1lc3RhbXAiQAoMR2VuZXJhdGVVdWlkEhwKD2luY2x1ZGVfaHlwaGVucxgBIAEoCEgAiAEBQhIKEF9pbmNsdWRlX2h5cGhlbnMiEQoPR2VuZXJhdGVaaXBjb2RlIkwKGFRyYW5zZm9ybUUxNjRQaG9uZU51bWJlchIcCg9wcmVzZXJ2ZV9sZW5ndGgYASABKAhIAIgBAUISChBfcHJlc2VydmVfbGVuZ3RoIkYKElRyYW5zZm9ybUZpcnN0TmFtZRIcCg9wcmVzZXJ2ZV9sZW5ndGgYASABKAhIAIgBAUISChBfcHJlc2VydmVfbGVuZ3RoIpYBChBUcmFuc2Zvcm1GbG9hdDY0EiQKF3JhbmRvbWl6YXRpb25fcmFuZ2VfbWluGAEgASgBSACIAQESJAoXcmFuZG9taXphdGlvbl9yYW5nZV9tYXgYAiABKAFIAYgBAUIaChhfcmFuZG9taXphdGlvbl9yYW5nZV9taW5CGgoYX3JhbmRvbWl6YXRpb25fcmFuZ2VfbWF4IkUKEVRyYW5zZm9ybUZ1bGxOYW1lEhwKD3ByZXNlcnZlX2xlbmd0aBgBIAEoCEgAiAEBQhIKEF9wcmVzZXJ2ZV9sZW5ndGgiTQoZVHJhbnNmb3JtSW50NjRQaG9uZU51bWJlchIcCg9wcmVzZXJ2ZV9sZW5ndGgYASABKAhIAIgBAUISChBfcHJlc2VydmVfbGVuZ3RoIpQBCg5UcmFuc2Zvcm1JbnQ2NBIkChdyYW5kb21pemF0aW9uX3JhbmdlX21pbhgBIAEoA0gAiAEBEiQKF3JhbmRvbWl6YXRpb25fcmFuZ2VfbWF4GAIgASgDSAGIAQFCGgoYX3JhbmRvbWl6YXRpb25fcmFuZ2VfbWluQhoKGF9yYW5kb21pemF0aW9uX3JhbmdlX21heCJFChFUcmFuc2Zvcm1MYXN0TmFtZRIcCg9wcmVzZXJ2ZV9sZW5ndGgYASABKAhIAIgBAUISChBfcHJlc2VydmVfbGVuZ3RoIkgKFFRyYW5zZm9ybVBob25lTnVtYmVyEhwKD3ByZXNlcnZlX2xlbmd0aBgBIAEoCEgAiAEBQhIKEF9wcmVzZXJ2ZV9sZW5ndGgiQwoPVHJhbnNmb3JtU3RyaW5nEhwKD3ByZXNlcnZlX2xlbmd0aBgBIAEoCEgAiAEBQhIKEF9wcmVzZXJ2ZV9sZW5ndGgiDQoLUGFzc3Rocm91Z2giBgoETnVsbCIjChNUcmFuc2Zvcm1KYXZhc2NyaXB0EgwKBGNvZGUYASABKAkiNAocVXNlckRlZmluZWRUcmFuc2Zvcm1lckNvbmZpZxIUCgJpZBgBIAEoCUIIukgFcgOwAQEiQAohVmFsaWRhdGVVc2VySmF2YXNjcmlwdENvZGVSZXF1ZXN0EhUKBGNvZGUYAiABKAlCB7pIBHICEAFKBAgBEAIiMwoiVmFsaWRhdGVVc2VySmF2YXNjcmlwdENvZGVSZXNwb25zZRINCgV2YWxpZBgBIAEoCCI9ChNHZW5lcmF0ZUNhdGVnb3JpY2FsEhcKCmNhdGVnb3JpZXMYASABKAlIAIgBAUINCgtfY2F0ZWdvcmllcyJWChpUcmFuc2Zvcm1DaGFyYWN0ZXJTY3JhbWJsZRIgChN1c2VyX3Byb3ZpZGVkX3JlZ2V4GAEgASgJSACIAQFCFgoUX3VzZXJfcHJvdmlkZWRfcmVnZXgiIgoSR2VuZXJhdGVKYXZhc2NyaXB0EgwKBGNvZGUYASABKAkiQQocVmFsaWRhdGVVc2VyUmVnZXhDb2RlUmVxdWVzdBIbChN1c2VyX3Byb3ZpZGVkX3JlZ2V4GAIgASgJSgQIARACIi4KHVZhbGlkYXRlVXNlclJlZ2V4Q29kZVJlc3BvbnNlEg0KBXZhbGlkGAEgASgIIkkKD0dlbmVyYXRlQ291bnRyeRIfChJnZW5lcmF0ZV9mdWxsX25hbWUYASABKAhIAIgBAUIVChNfZ2VuZXJhdGVfZnVsbF9uYW1lIj4KHkdldFRyYW5zZm9ybVBpaUVudGl0aWVzUmVxdWVzdBIcCgphY2NvdW50X2lkGAEgASgJQgi6SAVyA7ABASIzCh9HZXRUcmFuc2Zvcm1QaWlFbnRpdGllc1Jlc3BvbnNlEhAKCGVudGl0aWVzGAEgAygJIhYKFEdlbmVyYXRlQnVzaW5lc3NOYW1lIlsKEUdlbmVyYXRlSXBBZGRyZXNzEjoKB2lwX3R5cGUYASABKA4yJC5tZ210LnYxYWxwaGExLkdlbmVyYXRlSXBBZGRyZXNzVHlwZUgAiAEBQgoKCF9pcF90eXBlIg8KDVRyYW5zZm9ybVV1aWQizAEKDVRyYW5zZm9ybUhhc2gSOAoEYWxnbxgBIAEoDjIlLm1nbXQudjFhbHBoYTEuVHJhbnNmb3JtSGFzaC5IYXNoVHlwZUgAiAEBIngKCEhhc2hUeXBlEhkKFUhBU0hfVFlQRV9VTlNQRUNJRklFRBAAEhEKDUhBU0hfVFlQRV9NRDUQARISCg5IQVNIX1RZUEVfU0hBMRACEhQKEEhBU0hfVFlQRV9TSEEyNTYQAxIUChBIQVNIX1RZUEVfU0hBNTEyEARCBwoFX2FsZ28qrhEKEVRyYW5zZm9ybWVyU291cmNlEiIKHlRSQU5TRk9STUVSX1NPVVJDRV9VTlNQRUNJRklFRBAAEiIKHlRSQU5TRk9STUVSX1NPVVJDRV9QQVNTVEhST1VHSBABEicKI1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9ERUZBVUxUEAISKwonVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9KQVZBU0NSSVBUEAMSJQohVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0VNQUlMEAQSJgoiVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9FTUFJTBAFEiQKIFRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9CT09MEAYSKwonVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0NBUkRfTlVNQkVSEAcSJAogVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0NJVFkQCBIxCi1UUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfRTE2NF9QSE9ORV9OVU1CRVIQCRIqCiZUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfRklSU1RfTkFNRRAKEicKI1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9GTE9BVDY0EAsSLAooVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0ZVTExfQUREUkVTUxAMEikKJVRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9GVUxMX05BTUUQDRImCiJUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfR0VOREVSEA4SMgouVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0lOVDY0X1BIT05FX05VTUJFUhAPEiUKIVRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9JTlQ2NBAQEiwKKFRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9SQU5ET01fSU5UNjQQERIpCiVUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfTEFTVF9OQU1FEBISKgomVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1NIQTI1NkhBU0gQExIjCh9UUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfU1NOEBQSJQohVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1NUQVRFEBUSLgoqVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1NUUkVFVF9BRERSRVNTEBYSMwovVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1NUUklOR19QSE9ORV9OVU1CRVIQFxImCiJUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfU1RSSU5HEBgSLQopVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX1JBTkRPTV9TVFJJTkcQGRItCilUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfVU5JWFRJTUVTVEFNUBAaEigKJFRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9VU0VSTkFNRRAbEiwKKFRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9VVENUSU1FU1RBTVAQHBIkCiBUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfVVVJRBAdEicKI1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9aSVBDT0RFEB4SMgouVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9FMTY0X1BIT05FX05VTUJFUhAfEisKJ1RSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fRklSU1RfTkFNRRAgEigKJFRSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fRkxPQVQ2NBAhEioKJlRSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fRlVMTF9OQU1FECISMwovVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9JTlQ2NF9QSE9ORV9OVU1CRVIQIxImCiJUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX0lOVDY0ECQSKgomVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9MQVNUX05BTUUQJRItCilUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX1BIT05FX05VTUJFUhAmEicKI1RSQU5TRk9STUVSX1NPVVJDRV9UUkFOU0ZPUk1fU1RSSU5HECcSJAogVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX05VTEwQKBIrCidUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfQ0FURUdPUklDQUwQKhIzCi9UUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX0NIQVJBQ1RFUl9TQ1JBTUJMRRArEiMKH1RSQU5TRk9STUVSX1NPVVJDRV9VU0VSX0RFRklORUQQLBIqCiZUUkFOU0ZPUk1FUl9TT1VSQ0VfR0VORVJBVEVfSkFWQVNDUklQVBAtEicKI1RSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9DT1VOVFJZEC4SKQolVFJBTlNGT1JNRVJfU09VUkNFX1RSQU5TRk9STV9QSUlfVEVYVBAvEi0KKVRSQU5TRk9STUVSX1NPVVJDRV9HRU5FUkFURV9CVVNJTkVTU19OQU1FEDASKgomVFJBTlNGT1JNRVJfU09VUkNFX0dFTkVSQVRFX0lQX0FERFJFU1MQMRIlCiFUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX1VVSUQQMhIlCiFUUkFOU0ZPUk1FUl9TT1VSQ0VfVFJBTlNGT1JNX0hBU0gQMyrEAgoTVHJhbnNmb3JtZXJEYXRhVHlwZRIlCiFUUkFOU0ZPUk1FUl9EQVRBX1RZUEVfVU5TUEVDSUZJRUQQABIgChxUUkFOU0ZPUk1FUl9EQVRBX1RZUEVfU1RSSU5HEAESHwobVFJBTlNGT1JNRVJfREFUQV9UWVBFX0lOVDY0EAISIQodVFJBTlNGT1JNRVJfREFUQV9UWVBFX0JPT0xFQU4QAxIhCh1UUkFOU0ZPUk1FUl9EQVRBX1RZUEVfRkxPQVQ2NBAEEh4KGlRSQU5TRk9STUVSX0RBVEFfVFlQRV9OVUxMEAUSHQoZVFJBTlNGT1JNRVJfREFUQV9UWVBFX0FOWRAGEh4KGlRSQU5TRk9STUVSX0RBVEFfVFlQRV9USU1FEAcSHgoaVFJBTlNGT1JNRVJfREFUQV9UWVBFX1VVSUQQCCp0ChBTdXBwb3J0ZWRKb2JUeXBlEiIKHlNVUFBPUlRFRF9KT0JfVFlQRV9VTlNQRUNJRklFRBAAEhsKF1NVUFBPUlRFRF9KT0JfVFlQRV9TWU5DEAESHwobU1VQUE9SVEVEX0pPQl9UWVBFX0dFTkVSQVRFEAIqewoRR2VuZXJhdGVFbWFpbFR5cGUSIwofR0VORVJBVEVfRU1BSUxfVFlQRV9VTlNQRUNJRklFRBAAEh8KG0dFTkVSQVRFX0VNQUlMX1RZUEVfVVVJRF9WNBABEiAKHEdFTkVSQVRFX0VNQUlMX1RZUEVfRlVMTE5BTUUQAirDAQoSSW52YWxpZEVtYWlsQWN0aW9uEiQKIElOVkFMSURfRU1BSUxfQUNUSU9OX1VOU1BFQ0lGSUVEEAASHwobSU5WQUxJRF9FTUFJTF9BQ1RJT05fUkVKRUNUEAESHQoZSU5WQUxJRF9FTUFJTF9BQ1RJT05fTlVMTBACEiQKIElOVkFMSURfRU1BSUxfQUNUSU9OX1BBU1NUSFJPVUdIEAMSIQodSU5WQUxJRF9FTUFJTF9BQ1RJT05fR0VORVJBVEUQBCqMAwoVR2VuZXJhdGVJcEFkZHJlc3NUeXBlEigKJEdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9VTlNQRUNJRklFRBAAEiYKIkdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9WNF9QVUJMSUMQARIpCiVHRU5FUkFURV9JUF9BRERSRVNTX1RZUEVfVjRfUFJJVkFURV9BEAISKQolR0VORVJBVEVfSVBfQUREUkVTU19UWVBFX1Y0X1BSSVZBVEVfQhADEikKJUdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9WNF9QUklWQVRFX0MQBBIqCiZHRU5FUkFURV9JUF9BRERSRVNTX1RZUEVfVjRfTElOS19MT0NBTBAFEikKJUdFTkVSQVRFX0lQX0FERFJFU1NfVFlQRV9WNF9NVUxUSUNBU1QQBhIoCiRHRU5FUkFURV9JUF9BRERSRVNTX1RZUEVfVjRfTE9PUEJBQ0sQBxIfChtHRU5FUkFURV9JUF9BRERSRVNTX1RZUEVfVjYQCDLdCwoTVHJhbnNmb3JtZXJzU2VydmljZRJ3ChVHZXRTeXN0ZW1UcmFuc2Zvcm1lcnMSKy5tZ210LnYxYWxwaGExLkdldFN5c3RlbVRyYW5zZm9ybWVyc1JlcXVlc3QaLC5tZ210LnYxYWxwaGExLkdldFN5c3RlbVRyYW5zZm9ybWVyc1Jlc3BvbnNlIgOQAgESjAEKHEdldFN5c3RlbVRyYW5zZm9ybWVyQnlTb3VyY2USMi5tZ210LnYxYWxwaGExLkdldFN5c3RlbVRyYW5zZm9ybWVyQnlTb3VyY2VSZXF1ZXN0GjMubWdtdC52MWFscGhhMS5HZXRTeXN0ZW1UcmFuc2Zvcm1lckJ5U291cmNlUmVzcG9uc2UiA5ACARKGAQoaR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lcnMSMC5tZ210LnYxYWxwaGExLkdldFVzZXJEZWZpbmVkVHJhbnNmb3JtZXJzUmVxdWVzdBoxLm1nbXQudjFhbHBoYTEuR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lcnNSZXNwb25zZSIDkAIBEo8BCh1HZXRVc2VyRGVmaW5lZFRyYW5zZm9ybWVyQnlJZBIzLm1nbXQudjFhbHBoYTEuR2V0VXNlckRlZmluZWRUcmFuc2Zvcm1lckJ5SWRSZXF1ZXN0GjQubWdtdC52MWFscGhhMS5HZXRVc2VyRGVmaW5lZFRyYW5zZm9ybWVyQnlJZFJlc3BvbnNlIgOQAgESiQEKHENyZWF0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXISMi5tZ210LnYxYWxwaGExLkNyZWF0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXF1ZXN0GjMubWdtdC52MWFscGhhMS5DcmVhdGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyUmVzcG9uc2UiABKJAQocRGVsZXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lchIyLm1nbXQudjFhbHBoYTEuRGVsZXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlcXVlc3QaMy5tZ210LnYxYWxwaGExLkRlbGV0ZVVzZXJEZWZpbmVkVHJhbnNmb3JtZXJSZXNwb25zZSIAEokBChxVcGRhdGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyEjIubWdtdC52MWFscGhhMS5VcGRhdGVVc2VyRGVmaW5lZFRyYW5zZm9ybWVyUmVxdWVzdBozLm1nbXQudjFhbHBoYTEuVXBkYXRlVXNlckRlZmluZWRUcmFuc2Zvcm1lclJlc3BvbnNlIgASgwEKGklzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlEjAubWdtdC52MWFscGhhMS5Jc1RyYW5zZm9ybWVyTmFtZUF2YWlsYWJsZVJlcXVlc3QaMS5tZ210LnYxYWxwaGExLklzVHJhbnNmb3JtZXJOYW1lQXZhaWxhYmxlUmVzcG9uc2UiABKDAQoaVmFsaWRhdGVVc2VySmF2YXNjcmlwdENvZGUSMC5tZ210LnYxYWxwaGExLlZhbGlkYXRlVXNlckphdmFzY3JpcHRDb2RlUmVxdWVzdBoxLm1nbXQudjFhbHBoYTEuVmFsaWRhdGVVc2VySmF2YXNjcmlwdENvZGVSZXNwb25zZSIAEnQKFVZhbGlkYXRlVXNlclJlZ2V4Q29kZRIrLm1nbXQudjFhbHBoYTEuVmFsaWRhdGVVc2VyUmVnZXhDb2RlUmVxdWVzdBosLm1nbXQudjFhbHBoYTEuVmFsaWRhdGVVc2VyUmVnZXhDb2RlUmVzcG9uc2UiABJ9ChdHZXRUcmFuc2Zvcm1QaWlFbnRpdGllcxItLm1nbXQudjFhbHBoYTEuR2V0VHJhbnNmb3JtUGlpRW50aXRpZXNSZXF1ZXN0Gi4ubWdtdC52MWFscGhhMS5HZXRUcmFuc2Zvcm1QaWlFbnRpdGllc1Jlc3BvbnNlIgOQAgFCzAEKEWNvbS5tZ210LnYxYWxwaGExQhBUcmFuc2Zvcm1lclByb3RvUAFaUGdpdGh1Yi5jb20vbnVjbGV1c2Nsb3VkL25lb3N5bmMvYmFja2VuZC9nZW4vZ28vcHJvdG9zL21nbXQvdjFhbHBoYTE7bWdtdHYxYWxwaGExogIDTVhYqgINTWdtdC5WMWFscGhhMcoCDU1nbXRcVjFhbHBoYTHiAhlNZ210XFYxYWxwaGExXEdQQk1ldGFkYXRh6gIOTWdtdDo6VjFhbHBoYTFiBnByb3RvMw", [file_buf_validate_validate, file_google_protobuf_timestamp]); /** * @generated from message mgmt.v1alpha1.GetSystemTransformersRequest @@ -790,6 +790,14 @@ export type TransformerConfig = Message<"mgmt.v1alpha1.TransformerConfig"> & { */ value: TransformUuid; case: "transformUuidConfig"; + } | { + /** + * TransformHash is a transformer that hashes the input string using the specified hashing algorithm. + * + * @generated from field: mgmt.v1alpha1.TransformHash transform_hash_config = 48; + */ + value: TransformHash; + case: "transformHashConfig"; } | { case: undefined; value?: undefined }; }; @@ -2065,6 +2073,73 @@ export type TransformUuid = Message<"mgmt.v1alpha1.TransformUuid"> & { export const TransformUuidSchema: GenMessage = /*@__PURE__*/ messageDesc(file_mgmt_v1alpha1_transformer, 73); +/** + * TransformHash is a transformer that hashes the input string using the specified hashing algorithm. + * + * @generated from message mgmt.v1alpha1.TransformHash + */ +export type TransformHash = Message<"mgmt.v1alpha1.TransformHash"> & { + /** + * The hashing algorithm to use. + * + * @generated from field: optional mgmt.v1alpha1.TransformHash.HashType algo = 1; + */ + algo?: TransformHash_HashType; +}; + +/** + * Describes the message mgmt.v1alpha1.TransformHash. + * Use `create(TransformHashSchema)` to create a new message. + */ +export const TransformHashSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_mgmt_v1alpha1_transformer, 74); + +/** + * @generated from enum mgmt.v1alpha1.TransformHash.HashType + */ +export enum TransformHash_HashType { + /** + * If unspecified, defaults to md5 + * + * @generated from enum value: HASH_TYPE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * The MD5 Hash Algorithm + * + * @generated from enum value: HASH_TYPE_MD5 = 1; + */ + MD5 = 1, + + /** + * The SHA1 Hash Algorithm + * + * @generated from enum value: HASH_TYPE_SHA1 = 2; + */ + SHA1 = 2, + + /** + * The SHA256 Hash Algorithm + * + * @generated from enum value: HASH_TYPE_SHA256 = 3; + */ + SHA256 = 3, + + /** + * The SHA512 Hash Algorithm + * + * @generated from enum value: HASH_TYPE_SHA512 = 4; + */ + SHA512 = 4, +} + +/** + * Describes the enum mgmt.v1alpha1.TransformHash.HashType. + */ +export const TransformHash_HashTypeSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_mgmt_v1alpha1_transformer, 74, 0); + /** * @generated from enum mgmt.v1alpha1.TransformerSource */ @@ -2320,6 +2395,13 @@ export enum TransformerSource { * @generated from enum value: TRANSFORMER_SOURCE_TRANSFORM_UUID = 50; */ TRANSFORM_UUID = 50, + + /** + * TransformHash is a transformer that hashes the input string using the specified hashing algorithm. + * + * @generated from enum value: TRANSFORMER_SOURCE_TRANSFORM_HASH = 51; + */ + TRANSFORM_HASH = 51, } /** diff --git a/python/src/neosync/mgmt/v1alpha1/transformer_pb2.py b/python/src/neosync/mgmt/v1alpha1/transformer_pb2.py index 8d05510692..9bb070a906 100644 --- a/python/src/neosync/mgmt/v1alpha1/transformer_pb2.py +++ b/python/src/neosync/mgmt/v1alpha1/transformer_pb2.py @@ -26,7 +26,7 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmgmt/v1alpha1/transformer.proto\x12\rmgmt.v1alpha1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x1e\n\x1cGetSystemTransformersRequest\"e\n\x1dGetSystemTransformersResponse\x12\x44\n\x0ctransformers\x18\x01 \x03(\x0b\x32 .mgmt.v1alpha1.SystemTransformerR\x0ctransformers\"_\n#GetSystemTransformerBySourceRequest\x12\x38\n\x06source\x18\x01 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\"j\n$GetSystemTransformerBySourceResponse\x12\x42\n\x0btransformer\x18\x01 \x01(\x0b\x32 .mgmt.v1alpha1.SystemTransformerR\x0btransformer\"L\n!GetUserDefinedTransformersRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"o\n\"GetUserDefinedTransformersResponse\x12I\n\x0ctransformers\x18\x01 \x03(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0ctransformers\"W\n$GetUserDefinedTransformerByIdRequest\x12/\n\x0etransformer_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtransformerId\"p\n%GetUserDefinedTransformerByIdResponse\x12G\n\x0btransformer\x18\x01 \x01(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0btransformer\"\xb0\x02\n#CreateUserDefinedTransformerRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12-\n\x04name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x38\n\x06source\x18\x05 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12O\n\x12transformer_config\x18\x06 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x11transformerConfigJ\x04\x08\x04\x10\x05\"o\n$CreateUserDefinedTransformerResponse\x12G\n\x0btransformer\x18\x01 \x01(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0btransformer\"V\n#DeleteUserDefinedTransformerRequest\x12/\n\x0etransformer_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtransformerId\"&\n$DeleteUserDefinedTransformerResponse\"\xf8\x01\n#UpdateUserDefinedTransformerRequest\x12/\n\x0etransformer_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtransformerId\x12-\n\x04name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12O\n\x12transformer_config\x18\x04 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x11transformerConfig\"o\n$UpdateUserDefinedTransformerResponse\x12G\n\x0btransformer\x18\x01 \x01(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0btransformer\"\x92\x01\n!IsTransformerNameAvailableRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\x44\n\x10transformer_name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x0ftransformerName\"G\n\"IsTransformerNameAvailableResponse\x12!\n\x0cis_available\x18\x01 \x01(\x08R\x0bisAvailable\"\xff\x03\n\x16UserDefinedTransformer\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x43\n\tdata_type\x18\x05 \x01(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeB\x02\x18\x01R\x08\x64\x61taType\x12\x38\n\x06source\x18\x06 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12\x38\n\x06\x63onfig\x18\x07 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x06\x63onfig\x12\x39\n\ncreated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x1d\n\naccount_id\x18\n \x01(\tR\taccountId\x12\x41\n\ndata_types\x18\x0b \x03(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeR\tdataTypesJ\x04\x08\x04\x10\x05\"\x96\x03\n\x11SystemTransformer\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x02 \x01(\tR\x0b\x64\x65scription\x12\x43\n\tdata_type\x18\x03 \x01(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeB\x02\x18\x01R\x08\x64\x61taType\x12\x38\n\x06source\x18\x04 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12\x38\n\x06\x63onfig\x18\x05 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x06\x63onfig\x12\x41\n\ndata_types\x18\x06 \x03(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeR\tdataTypes\x12O\n\x13supported_job_types\x18\x07 \x03(\x0e\x32\x1f.mgmt.v1alpha1.SupportedJobTypeR\x11supportedJobTypes\"\xce#\n\x11TransformerConfig\x12R\n\x15generate_email_config\x18\x01 \x01(\x0b\x32\x1c.mgmt.v1alpha1.GenerateEmailH\x00R\x13generateEmailConfig\x12U\n\x16transform_email_config\x18\x02 \x01(\x0b\x32\x1d.mgmt.v1alpha1.TransformEmailH\x00R\x14transformEmailConfig\x12O\n\x14generate_bool_config\x18\x03 \x01(\x0b\x32\x1b.mgmt.v1alpha1.GenerateBoolH\x00R\x12generateBoolConfig\x12\x62\n\x1bgenerate_card_number_config\x18\x04 \x01(\x0b\x32!.mgmt.v1alpha1.GenerateCardNumberH\x00R\x18generateCardNumberConfig\x12O\n\x14generate_city_config\x18\x05 \x01(\x0b\x32\x1b.mgmt.v1alpha1.GenerateCityH\x00R\x12generateCityConfig\x12r\n!generate_e164_phone_number_config\x18\x06 \x01(\x0b\x32&.mgmt.v1alpha1.GenerateE164PhoneNumberH\x00R\x1dgenerateE164PhoneNumberConfig\x12_\n\x1agenerate_first_name_config\x18\x07 \x01(\x0b\x32 .mgmt.v1alpha1.GenerateFirstNameH\x00R\x17generateFirstNameConfig\x12X\n\x17generate_float64_config\x18\x08 \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateFloat64H\x00R\x15generateFloat64Config\x12\x65\n\x1cgenerate_full_address_config\x18\t \x01(\x0b\x32\".mgmt.v1alpha1.GenerateFullAddressH\x00R\x19generateFullAddressConfig\x12\\\n\x19generate_full_name_config\x18\n \x01(\x0b\x32\x1f.mgmt.v1alpha1.GenerateFullNameH\x00R\x16generateFullNameConfig\x12U\n\x16generate_gender_config\x18\x0b \x01(\x0b\x32\x1d.mgmt.v1alpha1.GenerateGenderH\x00R\x14generateGenderConfig\x12u\n\"generate_int64_phone_number_config\x18\x0c \x01(\x0b\x32\'.mgmt.v1alpha1.GenerateInt64PhoneNumberH\x00R\x1egenerateInt64PhoneNumberConfig\x12R\n\x15generate_int64_config\x18\r \x01(\x0b\x32\x1c.mgmt.v1alpha1.GenerateInt64H\x00R\x13generateInt64Config\x12\\\n\x19generate_last_name_config\x18\x0e \x01(\x0b\x32\x1f.mgmt.v1alpha1.GenerateLastNameH\x00R\x16generateLastNameConfig\x12\x61\n\x1agenerate_sha256hash_config\x18\x0f \x01(\x0b\x32!.mgmt.v1alpha1.GenerateSha256HashH\x00R\x18generateSha256hashConfig\x12L\n\x13generate_ssn_config\x18\x10 \x01(\x0b\x32\x1a.mgmt.v1alpha1.GenerateSSNH\x00R\x11generateSsnConfig\x12R\n\x15generate_state_config\x18\x11 \x01(\x0b\x32\x1c.mgmt.v1alpha1.GenerateStateH\x00R\x13generateStateConfig\x12k\n\x1egenerate_street_address_config\x18\x12 \x01(\x0b\x32$.mgmt.v1alpha1.GenerateStreetAddressH\x00R\x1bgenerateStreetAddressConfig\x12x\n#generate_string_phone_number_config\x18\x13 \x01(\x0b\x32(.mgmt.v1alpha1.GenerateStringPhoneNumberH\x00R\x1fgenerateStringPhoneNumberConfig\x12U\n\x16generate_string_config\x18\x14 \x01(\x0b\x32\x1d.mgmt.v1alpha1.GenerateStringH\x00R\x14generateStringConfig\x12j\n\x1dgenerate_unixtimestamp_config\x18\x15 \x01(\x0b\x32$.mgmt.v1alpha1.GenerateUnixTimestampH\x00R\x1bgenerateUnixtimestampConfig\x12[\n\x18generate_username_config\x18\x16 \x01(\x0b\x32\x1f.mgmt.v1alpha1.GenerateUsernameH\x00R\x16generateUsernameConfig\x12g\n\x1cgenerate_utctimestamp_config\x18\x17 \x01(\x0b\x32#.mgmt.v1alpha1.GenerateUtcTimestampH\x00R\x1agenerateUtctimestampConfig\x12O\n\x14generate_uuid_config\x18\x18 \x01(\x0b\x32\x1b.mgmt.v1alpha1.GenerateUuidH\x00R\x12generateUuidConfig\x12X\n\x17generate_zipcode_config\x18\x19 \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateZipcodeH\x00R\x15generateZipcodeConfig\x12u\n\"transform_e164_phone_number_config\x18\x1a \x01(\x0b\x32\'.mgmt.v1alpha1.TransformE164PhoneNumberH\x00R\x1etransformE164PhoneNumberConfig\x12\x62\n\x1btransform_first_name_config\x18\x1b \x01(\x0b\x32!.mgmt.v1alpha1.TransformFirstNameH\x00R\x18transformFirstNameConfig\x12[\n\x18transform_float64_config\x18\x1c \x01(\x0b\x32\x1f.mgmt.v1alpha1.TransformFloat64H\x00R\x16transformFloat64Config\x12_\n\x1atransform_full_name_config\x18\x1d \x01(\x0b\x32 .mgmt.v1alpha1.TransformFullNameH\x00R\x17transformFullNameConfig\x12x\n#transform_int64_phone_number_config\x18\x1e \x01(\x0b\x32(.mgmt.v1alpha1.TransformInt64PhoneNumberH\x00R\x1ftransformInt64PhoneNumberConfig\x12U\n\x16transform_int64_config\x18\x1f \x01(\x0b\x32\x1d.mgmt.v1alpha1.TransformInt64H\x00R\x14transformInt64Config\x12_\n\x1atransform_last_name_config\x18 \x01(\x0b\x32 .mgmt.v1alpha1.TransformLastNameH\x00R\x17transformLastNameConfig\x12h\n\x1dtransform_phone_number_config\x18! \x01(\x0b\x32#.mgmt.v1alpha1.TransformPhoneNumberH\x00R\x1atransformPhoneNumberConfig\x12X\n\x17transform_string_config\x18\" \x01(\x0b\x32\x1e.mgmt.v1alpha1.TransformStringH\x00R\x15transformStringConfig\x12K\n\x12passthrough_config\x18# \x01(\x0b\x32\x1a.mgmt.v1alpha1.PassthroughH\x00R\x11passthroughConfig\x12\x35\n\nnullconfig\x18$ \x01(\x0b\x32\x13.mgmt.v1alpha1.NullH\x00R\nnullconfig\x12t\n\x1fuser_defined_transformer_config\x18% \x01(\x0b\x32+.mgmt.v1alpha1.UserDefinedTransformerConfigH\x00R\x1cuserDefinedTransformerConfig\x12X\n\x17generate_default_config\x18& \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateDefaultH\x00R\x15generateDefaultConfig\x12\x64\n\x1btransform_javascript_config\x18\' \x01(\x0b\x32\".mgmt.v1alpha1.TransformJavascriptH\x00R\x19transformJavascriptConfig\x12\x64\n\x1bgenerate_categorical_config\x18( \x01(\x0b\x32\".mgmt.v1alpha1.GenerateCategoricalH\x00R\x19generateCategoricalConfig\x12z\n#transform_character_scramble_config\x18) \x01(\x0b\x32).mgmt.v1alpha1.TransformCharacterScrambleH\x00R transformCharacterScrambleConfig\x12\x61\n\x1agenerate_javascript_config\x18* \x01(\x0b\x32!.mgmt.v1alpha1.GenerateJavascriptH\x00R\x18generateJavascriptConfig\x12X\n\x17generate_country_config\x18+ \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateCountryH\x00R\x15generateCountryConfig\x12\\\n\x19transform_pii_text_config\x18, \x01(\x0b\x32\x1f.mgmt.v1alpha1.TransformPiiTextH\x00R\x16transformPiiTextConfig\x12h\n\x1dgenerate_business_name_config\x18- \x01(\x0b\x32#.mgmt.v1alpha1.GenerateBusinessNameH\x00R\x1agenerateBusinessNameConfig\x12_\n\x1agenerate_ip_address_config\x18. \x01(\x0b\x32 .mgmt.v1alpha1.GenerateIpAddressH\x00R\x17generateIpAddressConfig\x12R\n\x15transform_uuid_config\x18/ \x01(\x0b\x32\x1c.mgmt.v1alpha1.TransformUuidH\x00R\x13transformUuidConfigB\x0f\n\x06\x63onfig\x12\x05\xbaH\x02\x08\x01\"\xc1\x04\n\x10TransformPiiText\x12\x38\n\x0fscore_threshold\x18\x01 \x01(\x02\x42\x0f\xbaH\x0c\n\n\x1d\x00\x00\x80?-\x00\x00\x00\x00R\x0escoreThreshold\x12K\n\x12\x64\x65\x66\x61ult_anonymizer\x18\x02 \x01(\x0b\x32\x1c.mgmt.v1alpha1.PiiAnonymizerR\x11\x64\x65\x66\x61ultAnonymizer\x12K\n\x10\x64\x65ny_recognizers\x18\x03 \x03(\x0b\x32 .mgmt.v1alpha1.PiiDenyRecognizerR\x0f\x64\x65nyRecognizers\x12\x37\n\x10\x61llowed_entities\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\"\x04r\x02\x10\x01R\x0f\x61llowedEntities\x12\'\n\x0f\x61llowed_phrases\x18\x05 \x03(\tR\x0e\x61llowedPhrases\x12\x1f\n\x08language\x18\x06 \x01(\tH\x00R\x08language\x88\x01\x01\x12\x65\n\x12\x65ntity_anonymizers\x18\x07 \x03(\x0b\x32\x36.mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntryR\x11\x65ntityAnonymizers\x1a\x62\n\x16\x45ntityAnonymizersEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32\x1c.mgmt.v1alpha1.PiiAnonymizerR\x05value:\x02\x38\x01\x42\x0b\n\t_language\"p\n\x11PiiDenyRecognizer\x12.\n\x04name\x18\x01 \x01(\tB\x1a\xbaH\x17r\x15\x32\x13^[a-z0-9-_]{1,100}$R\x04name\x12+\n\ndeny_words\x18\x02 \x03(\tB\x0c\xbaH\t\x92\x01\x06\"\x04r\x02\x10\x01R\tdenyWords\"\xbc\x06\n\rPiiAnonymizer\x12@\n\x07replace\x18\x01 \x01(\x0b\x32$.mgmt.v1alpha1.PiiAnonymizer.ReplaceH\x00R\x07replace\x12=\n\x06redact\x18\x02 \x01(\x0b\x32#.mgmt.v1alpha1.PiiAnonymizer.RedactH\x00R\x06redact\x12\x37\n\x04mask\x18\x03 \x01(\x0b\x32!.mgmt.v1alpha1.PiiAnonymizer.MaskH\x00R\x04mask\x12\x37\n\x04hash\x18\x04 \x01(\x0b\x32!.mgmt.v1alpha1.PiiAnonymizer.HashH\x00R\x04hash\x12\x46\n\ttransform\x18\x05 \x01(\x0b\x32&.mgmt.v1alpha1.PiiAnonymizer.TransformH\x00R\ttransform\x1a.\n\x07Replace\x12\x19\n\x05value\x18\x01 \x01(\tH\x00R\x05value\x88\x01\x01\x42\x08\n\x06_value\x1a\x08\n\x06Redact\x1a\xa7\x01\n\x04Mask\x12&\n\x0cmasking_char\x18\x01 \x01(\tH\x00R\x0bmaskingChar\x88\x01\x01\x12\'\n\rchars_to_mask\x18\x02 \x01(\x05H\x01R\x0b\x63harsToMask\x88\x01\x01\x12\x1e\n\x08\x66rom_end\x18\x03 \x01(\x08H\x02R\x07\x66romEnd\x88\x01\x01\x42\x0f\n\r_masking_charB\x10\n\x0e_chars_to_maskB\x0b\n\t_from_end\x1a\xba\x01\n\x04Hash\x12\x43\n\x04\x61lgo\x18\x01 \x01(\x0e\x32*.mgmt.v1alpha1.PiiAnonymizer.Hash.HashTypeH\x00R\x04\x61lgo\x88\x01\x01\"d\n\x08HashType\x12\x19\n\x15HASH_TYPE_UNSPECIFIED\x10\x00\x12\x11\n\rHASH_TYPE_MD5\x10\x01\x12\x14\n\x10HASH_TYPE_SHA256\x10\x02\x12\x14\n\x10HASH_TYPE_SHA512\x10\x03\x42\x07\n\x05_algo\x1a\x45\n\tTransform\x12\x38\n\x06\x63onfig\x18\x01 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x06\x63onfigB\x08\n\x06\x63onfig\"d\n\rGenerateEmail\x12\x44\n\nemail_type\x18\x01 \x01(\x0e\x32 .mgmt.v1alpha1.GenerateEmailTypeH\x00R\temailType\x88\x01\x01\x42\r\n\x0b_email_type\"\x87\x03\n\x0eTransformEmail\x12,\n\x0fpreserve_domain\x18\x01 \x01(\x08H\x00R\x0epreserveDomain\x88\x01\x01\x12,\n\x0fpreserve_length\x18\x02 \x01(\x08H\x01R\x0epreserveLength\x88\x01\x01\x12)\n\x10\x65xcluded_domains\x18\x03 \x03(\tR\x0f\x65xcludedDomains\x12\x44\n\nemail_type\x18\x04 \x01(\x0e\x32 .mgmt.v1alpha1.GenerateEmailTypeH\x02R\temailType\x88\x01\x01\x12X\n\x14invalid_email_action\x18\x05 \x01(\x0e\x32!.mgmt.v1alpha1.InvalidEmailActionH\x03R\x12invalidEmailAction\x88\x01\x01\x42\x12\n\x10_preserve_domainB\x12\n\x10_preserve_lengthB\r\n\x0b_email_typeB\x17\n\x15_invalid_email_action\"\x0e\n\x0cGenerateBool\"G\n\x12GenerateCardNumber\x12\"\n\nvalid_luhn\x18\x01 \x01(\x08H\x00R\tvalidLuhn\x88\x01\x01\x42\r\n\x0b_valid_luhn\"\x0e\n\x0cGenerateCity\"\x11\n\x0fGenerateDefault\"W\n\x17GenerateE164PhoneNumber\x12\x15\n\x03min\x18\x01 \x01(\x03H\x00R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x02 \x01(\x03H\x01R\x03max\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_max\"\x13\n\x11GenerateFirstName\"\xbf\x01\n\x0fGenerateFloat64\x12*\n\x0erandomize_sign\x18\x01 \x01(\x08H\x00R\rrandomizeSign\x88\x01\x01\x12\x15\n\x03min\x18\x02 \x01(\x01H\x01R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x03 \x01(\x01H\x02R\x03max\x88\x01\x01\x12!\n\tprecision\x18\x04 \x01(\x03H\x03R\tprecision\x88\x01\x01\x42\x11\n\x0f_randomize_signB\x06\n\x04_minB\x06\n\x04_maxB\x0c\n\n_precision\"\x15\n\x13GenerateFullAddress\"\x12\n\x10GenerateFullName\"D\n\x0eGenerateGender\x12#\n\nabbreviate\x18\x01 \x01(\x08H\x00R\nabbreviate\x88\x01\x01\x42\r\n\x0b_abbreviate\"\x1a\n\x18GenerateInt64PhoneNumber\"\x8c\x01\n\rGenerateInt64\x12*\n\x0erandomize_sign\x18\x01 \x01(\x08H\x00R\rrandomizeSign\x88\x01\x01\x12\x15\n\x03min\x18\x02 \x01(\x03H\x01R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x03 \x01(\x03H\x02R\x03max\x88\x01\x01\x42\x11\n\x0f_randomize_signB\x06\n\x04_minB\x06\n\x04_max\"\x12\n\x10GenerateLastName\"\x14\n\x12GenerateSha256Hash\"\r\n\x0bGenerateSSN\"Y\n\rGenerateState\x12\x31\n\x12generate_full_name\x18\x01 \x01(\x08H\x00R\x10generateFullName\x88\x01\x01\x42\x15\n\x13_generate_full_name\"\x17\n\x15GenerateStreetAddress\"_\n\x19GenerateStringPhoneNumber\x12\x15\n\x03min\x18\x02 \x01(\x03H\x00R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x03 \x01(\x03H\x01R\x03max\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_maxJ\x04\x08\x01\x10\x02\"N\n\x0eGenerateString\x12\x15\n\x03min\x18\x01 \x01(\x03H\x00R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x02 \x01(\x03H\x01R\x03max\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_max\"\x17\n\x15GenerateUnixTimestamp\"\x12\n\x10GenerateUsername\"\x16\n\x14GenerateUtcTimestamp\"P\n\x0cGenerateUuid\x12,\n\x0finclude_hyphens\x18\x01 \x01(\x08H\x00R\x0eincludeHyphens\x88\x01\x01\x42\x12\n\x10_include_hyphens\"\x11\n\x0fGenerateZipcode\"\\\n\x18TransformE164PhoneNumber\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"V\n\x12TransformFirstName\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"\xc4\x01\n\x10TransformFloat64\x12;\n\x17randomization_range_min\x18\x01 \x01(\x01H\x00R\x15randomizationRangeMin\x88\x01\x01\x12;\n\x17randomization_range_max\x18\x02 \x01(\x01H\x01R\x15randomizationRangeMax\x88\x01\x01\x42\x1a\n\x18_randomization_range_minB\x1a\n\x18_randomization_range_max\"U\n\x11TransformFullName\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"]\n\x19TransformInt64PhoneNumber\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"\xc2\x01\n\x0eTransformInt64\x12;\n\x17randomization_range_min\x18\x01 \x01(\x03H\x00R\x15randomizationRangeMin\x88\x01\x01\x12;\n\x17randomization_range_max\x18\x02 \x01(\x03H\x01R\x15randomizationRangeMax\x88\x01\x01\x42\x1a\n\x18_randomization_range_minB\x1a\n\x18_randomization_range_max\"U\n\x11TransformLastName\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"X\n\x14TransformPhoneNumber\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"S\n\x0fTransformString\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"\r\n\x0bPassthrough\"\x06\n\x04Null\")\n\x13TransformJavascript\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\"8\n\x1cUserDefinedTransformerConfig\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\"F\n!ValidateUserJavascriptCodeRequest\x12\x1b\n\x04\x63ode\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04\x63odeJ\x04\x08\x01\x10\x02\":\n\"ValidateUserJavascriptCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"I\n\x13GenerateCategorical\x12#\n\ncategories\x18\x01 \x01(\tH\x00R\ncategories\x88\x01\x01\x42\r\n\x0b_categories\"i\n\x1aTransformCharacterScramble\x12\x33\n\x13user_provided_regex\x18\x01 \x01(\tH\x00R\x11userProvidedRegex\x88\x01\x01\x42\x16\n\x14_user_provided_regex\"(\n\x12GenerateJavascript\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\"T\n\x1cValidateUserRegexCodeRequest\x12.\n\x13user_provided_regex\x18\x02 \x01(\tR\x11userProvidedRegexJ\x04\x08\x01\x10\x02\"5\n\x1dValidateUserRegexCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"[\n\x0fGenerateCountry\x12\x31\n\x12generate_full_name\x18\x01 \x01(\x08H\x00R\x10generateFullName\x88\x01\x01\x42\x15\n\x13_generate_full_name\"I\n\x1eGetTransformPiiEntitiesRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"=\n\x1fGetTransformPiiEntitiesResponse\x12\x1a\n\x08\x65ntities\x18\x01 \x03(\tR\x08\x65ntities\"\x16\n\x14GenerateBusinessName\"c\n\x11GenerateIpAddress\x12\x42\n\x07ip_type\x18\x01 \x01(\x0e\x32$.mgmt.v1alpha1.GenerateIpAddressTypeH\x00R\x06ipType\x88\x01\x01\x42\n\n\x08_ip_type\"\x0f\n\rTransformUuid*\x87\x11\n\x11TransformerSource\x12\"\n\x1eTRANSFORMER_SOURCE_UNSPECIFIED\x10\x00\x12\"\n\x1eTRANSFORMER_SOURCE_PASSTHROUGH\x10\x01\x12\'\n#TRANSFORMER_SOURCE_GENERATE_DEFAULT\x10\x02\x12+\n\'TRANSFORMER_SOURCE_TRANSFORM_JAVASCRIPT\x10\x03\x12%\n!TRANSFORMER_SOURCE_GENERATE_EMAIL\x10\x04\x12&\n\"TRANSFORMER_SOURCE_TRANSFORM_EMAIL\x10\x05\x12$\n TRANSFORMER_SOURCE_GENERATE_BOOL\x10\x06\x12+\n\'TRANSFORMER_SOURCE_GENERATE_CARD_NUMBER\x10\x07\x12$\n TRANSFORMER_SOURCE_GENERATE_CITY\x10\x08\x12\x31\n-TRANSFORMER_SOURCE_GENERATE_E164_PHONE_NUMBER\x10\t\x12*\n&TRANSFORMER_SOURCE_GENERATE_FIRST_NAME\x10\n\x12\'\n#TRANSFORMER_SOURCE_GENERATE_FLOAT64\x10\x0b\x12,\n(TRANSFORMER_SOURCE_GENERATE_FULL_ADDRESS\x10\x0c\x12)\n%TRANSFORMER_SOURCE_GENERATE_FULL_NAME\x10\r\x12&\n\"TRANSFORMER_SOURCE_GENERATE_GENDER\x10\x0e\x12\x32\n.TRANSFORMER_SOURCE_GENERATE_INT64_PHONE_NUMBER\x10\x0f\x12%\n!TRANSFORMER_SOURCE_GENERATE_INT64\x10\x10\x12,\n(TRANSFORMER_SOURCE_GENERATE_RANDOM_INT64\x10\x11\x12)\n%TRANSFORMER_SOURCE_GENERATE_LAST_NAME\x10\x12\x12*\n&TRANSFORMER_SOURCE_GENERATE_SHA256HASH\x10\x13\x12#\n\x1fTRANSFORMER_SOURCE_GENERATE_SSN\x10\x14\x12%\n!TRANSFORMER_SOURCE_GENERATE_STATE\x10\x15\x12.\n*TRANSFORMER_SOURCE_GENERATE_STREET_ADDRESS\x10\x16\x12\x33\n/TRANSFORMER_SOURCE_GENERATE_STRING_PHONE_NUMBER\x10\x17\x12&\n\"TRANSFORMER_SOURCE_GENERATE_STRING\x10\x18\x12-\n)TRANSFORMER_SOURCE_GENERATE_RANDOM_STRING\x10\x19\x12-\n)TRANSFORMER_SOURCE_GENERATE_UNIXTIMESTAMP\x10\x1a\x12(\n$TRANSFORMER_SOURCE_GENERATE_USERNAME\x10\x1b\x12,\n(TRANSFORMER_SOURCE_GENERATE_UTCTIMESTAMP\x10\x1c\x12$\n TRANSFORMER_SOURCE_GENERATE_UUID\x10\x1d\x12\'\n#TRANSFORMER_SOURCE_GENERATE_ZIPCODE\x10\x1e\x12\x32\n.TRANSFORMER_SOURCE_TRANSFORM_E164_PHONE_NUMBER\x10\x1f\x12+\n\'TRANSFORMER_SOURCE_TRANSFORM_FIRST_NAME\x10 \x12(\n$TRANSFORMER_SOURCE_TRANSFORM_FLOAT64\x10!\x12*\n&TRANSFORMER_SOURCE_TRANSFORM_FULL_NAME\x10\"\x12\x33\n/TRANSFORMER_SOURCE_TRANSFORM_INT64_PHONE_NUMBER\x10#\x12&\n\"TRANSFORMER_SOURCE_TRANSFORM_INT64\x10$\x12*\n&TRANSFORMER_SOURCE_TRANSFORM_LAST_NAME\x10%\x12-\n)TRANSFORMER_SOURCE_TRANSFORM_PHONE_NUMBER\x10&\x12\'\n#TRANSFORMER_SOURCE_TRANSFORM_STRING\x10\'\x12$\n TRANSFORMER_SOURCE_GENERATE_NULL\x10(\x12+\n\'TRANSFORMER_SOURCE_GENERATE_CATEGORICAL\x10*\x12\x33\n/TRANSFORMER_SOURCE_TRANSFORM_CHARACTER_SCRAMBLE\x10+\x12#\n\x1fTRANSFORMER_SOURCE_USER_DEFINED\x10,\x12*\n&TRANSFORMER_SOURCE_GENERATE_JAVASCRIPT\x10-\x12\'\n#TRANSFORMER_SOURCE_GENERATE_COUNTRY\x10.\x12)\n%TRANSFORMER_SOURCE_TRANSFORM_PII_TEXT\x10/\x12-\n)TRANSFORMER_SOURCE_GENERATE_BUSINESS_NAME\x10\x30\x12*\n&TRANSFORMER_SOURCE_GENERATE_IP_ADDRESS\x10\x31\x12%\n!TRANSFORMER_SOURCE_TRANSFORM_UUID\x10\x32*\xc4\x02\n\x13TransformerDataType\x12%\n!TRANSFORMER_DATA_TYPE_UNSPECIFIED\x10\x00\x12 \n\x1cTRANSFORMER_DATA_TYPE_STRING\x10\x01\x12\x1f\n\x1bTRANSFORMER_DATA_TYPE_INT64\x10\x02\x12!\n\x1dTRANSFORMER_DATA_TYPE_BOOLEAN\x10\x03\x12!\n\x1dTRANSFORMER_DATA_TYPE_FLOAT64\x10\x04\x12\x1e\n\x1aTRANSFORMER_DATA_TYPE_NULL\x10\x05\x12\x1d\n\x19TRANSFORMER_DATA_TYPE_ANY\x10\x06\x12\x1e\n\x1aTRANSFORMER_DATA_TYPE_TIME\x10\x07\x12\x1e\n\x1aTRANSFORMER_DATA_TYPE_UUID\x10\x08*t\n\x10SupportedJobType\x12\"\n\x1eSUPPORTED_JOB_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\x17SUPPORTED_JOB_TYPE_SYNC\x10\x01\x12\x1f\n\x1bSUPPORTED_JOB_TYPE_GENERATE\x10\x02*{\n\x11GenerateEmailType\x12#\n\x1fGENERATE_EMAIL_TYPE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bGENERATE_EMAIL_TYPE_UUID_V4\x10\x01\x12 \n\x1cGENERATE_EMAIL_TYPE_FULLNAME\x10\x02*\xc3\x01\n\x12InvalidEmailAction\x12$\n INVALID_EMAIL_ACTION_UNSPECIFIED\x10\x00\x12\x1f\n\x1bINVALID_EMAIL_ACTION_REJECT\x10\x01\x12\x1d\n\x19INVALID_EMAIL_ACTION_NULL\x10\x02\x12$\n INVALID_EMAIL_ACTION_PASSTHROUGH\x10\x03\x12!\n\x1dINVALID_EMAIL_ACTION_GENERATE\x10\x04*\x8c\x03\n\x15GenerateIpAddressType\x12(\n$GENERATE_IP_ADDRESS_TYPE_UNSPECIFIED\x10\x00\x12&\n\"GENERATE_IP_ADDRESS_TYPE_V4_PUBLIC\x10\x01\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_PRIVATE_A\x10\x02\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_PRIVATE_B\x10\x03\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_PRIVATE_C\x10\x04\x12*\n&GENERATE_IP_ADDRESS_TYPE_V4_LINK_LOCAL\x10\x05\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_MULTICAST\x10\x06\x12(\n$GENERATE_IP_ADDRESS_TYPE_V4_LOOPBACK\x10\x07\x12\x1f\n\x1bGENERATE_IP_ADDRESS_TYPE_V6\x10\x08\x32\xdd\x0b\n\x13TransformersService\x12w\n\x15GetSystemTransformers\x12+.mgmt.v1alpha1.GetSystemTransformersRequest\x1a,.mgmt.v1alpha1.GetSystemTransformersResponse\"\x03\x90\x02\x01\x12\x8c\x01\n\x1cGetSystemTransformerBySource\x12\x32.mgmt.v1alpha1.GetSystemTransformerBySourceRequest\x1a\x33.mgmt.v1alpha1.GetSystemTransformerBySourceResponse\"\x03\x90\x02\x01\x12\x86\x01\n\x1aGetUserDefinedTransformers\x12\x30.mgmt.v1alpha1.GetUserDefinedTransformersRequest\x1a\x31.mgmt.v1alpha1.GetUserDefinedTransformersResponse\"\x03\x90\x02\x01\x12\x8f\x01\n\x1dGetUserDefinedTransformerById\x12\x33.mgmt.v1alpha1.GetUserDefinedTransformerByIdRequest\x1a\x34.mgmt.v1alpha1.GetUserDefinedTransformerByIdResponse\"\x03\x90\x02\x01\x12\x89\x01\n\x1c\x43reateUserDefinedTransformer\x12\x32.mgmt.v1alpha1.CreateUserDefinedTransformerRequest\x1a\x33.mgmt.v1alpha1.CreateUserDefinedTransformerResponse\"\x00\x12\x89\x01\n\x1c\x44\x65leteUserDefinedTransformer\x12\x32.mgmt.v1alpha1.DeleteUserDefinedTransformerRequest\x1a\x33.mgmt.v1alpha1.DeleteUserDefinedTransformerResponse\"\x00\x12\x89\x01\n\x1cUpdateUserDefinedTransformer\x12\x32.mgmt.v1alpha1.UpdateUserDefinedTransformerRequest\x1a\x33.mgmt.v1alpha1.UpdateUserDefinedTransformerResponse\"\x00\x12\x83\x01\n\x1aIsTransformerNameAvailable\x12\x30.mgmt.v1alpha1.IsTransformerNameAvailableRequest\x1a\x31.mgmt.v1alpha1.IsTransformerNameAvailableResponse\"\x00\x12\x83\x01\n\x1aValidateUserJavascriptCode\x12\x30.mgmt.v1alpha1.ValidateUserJavascriptCodeRequest\x1a\x31.mgmt.v1alpha1.ValidateUserJavascriptCodeResponse\"\x00\x12t\n\x15ValidateUserRegexCode\x12+.mgmt.v1alpha1.ValidateUserRegexCodeRequest\x1a,.mgmt.v1alpha1.ValidateUserRegexCodeResponse\"\x00\x12}\n\x17GetTransformPiiEntities\x12-.mgmt.v1alpha1.GetTransformPiiEntitiesRequest\x1a..mgmt.v1alpha1.GetTransformPiiEntitiesResponse\"\x03\x90\x02\x01\x42\xcc\x01\n\x11\x63om.mgmt.v1alpha1B\x10TransformerProtoP\x01ZPgithub.com/nucleuscloud/neosync/backend/gen/go/protos/mgmt/v1alpha1;mgmtv1alpha1\xa2\x02\x03MXX\xaa\x02\rMgmt.V1alpha1\xca\x02\rMgmt\\V1alpha1\xe2\x02\x19Mgmt\\V1alpha1\\GPBMetadata\xea\x02\x0eMgmt::V1alpha1b\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmgmt/v1alpha1/transformer.proto\x12\rmgmt.v1alpha1\x1a\x1b\x62uf/validate/validate.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x1e\n\x1cGetSystemTransformersRequest\"e\n\x1dGetSystemTransformersResponse\x12\x44\n\x0ctransformers\x18\x01 \x03(\x0b\x32 .mgmt.v1alpha1.SystemTransformerR\x0ctransformers\"_\n#GetSystemTransformerBySourceRequest\x12\x38\n\x06source\x18\x01 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\"j\n$GetSystemTransformerBySourceResponse\x12\x42\n\x0btransformer\x18\x01 \x01(\x0b\x32 .mgmt.v1alpha1.SystemTransformerR\x0btransformer\"L\n!GetUserDefinedTransformersRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"o\n\"GetUserDefinedTransformersResponse\x12I\n\x0ctransformers\x18\x01 \x03(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0ctransformers\"W\n$GetUserDefinedTransformerByIdRequest\x12/\n\x0etransformer_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtransformerId\"p\n%GetUserDefinedTransformerByIdResponse\x12G\n\x0btransformer\x18\x01 \x01(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0btransformer\"\xb0\x02\n#CreateUserDefinedTransformerRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12-\n\x04name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x38\n\x06source\x18\x05 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12O\n\x12transformer_config\x18\x06 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x11transformerConfigJ\x04\x08\x04\x10\x05\"o\n$CreateUserDefinedTransformerResponse\x12G\n\x0btransformer\x18\x01 \x01(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0btransformer\"V\n#DeleteUserDefinedTransformerRequest\x12/\n\x0etransformer_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtransformerId\"&\n$DeleteUserDefinedTransformerResponse\"\xf8\x01\n#UpdateUserDefinedTransformerRequest\x12/\n\x0etransformer_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\rtransformerId\x12-\n\x04name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12O\n\x12transformer_config\x18\x04 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x11transformerConfig\"o\n$UpdateUserDefinedTransformerResponse\x12G\n\x0btransformer\x18\x01 \x01(\x0b\x32%.mgmt.v1alpha1.UserDefinedTransformerR\x0btransformer\"\x92\x01\n!IsTransformerNameAvailableRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\x12\x44\n\x10transformer_name\x18\x02 \x01(\tB\x19\xbaH\x16r\x14\x32\x12^[a-z0-9-]{3,100}$R\x0ftransformerName\"G\n\"IsTransformerNameAvailableResponse\x12!\n\x0cis_available\x18\x01 \x01(\x08R\x0bisAvailable\"\xff\x03\n\x16UserDefinedTransformer\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x03 \x01(\tR\x0b\x64\x65scription\x12\x43\n\tdata_type\x18\x05 \x01(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeB\x02\x18\x01R\x08\x64\x61taType\x12\x38\n\x06source\x18\x06 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12\x38\n\x06\x63onfig\x18\x07 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x06\x63onfig\x12\x39\n\ncreated_at\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tcreatedAt\x12\x39\n\nupdated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tupdatedAt\x12\x1d\n\naccount_id\x18\n \x01(\tR\taccountId\x12\x41\n\ndata_types\x18\x0b \x03(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeR\tdataTypesJ\x04\x08\x04\x10\x05\"\x96\x03\n\x11SystemTransformer\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12 \n\x0b\x64\x65scription\x18\x02 \x01(\tR\x0b\x64\x65scription\x12\x43\n\tdata_type\x18\x03 \x01(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeB\x02\x18\x01R\x08\x64\x61taType\x12\x38\n\x06source\x18\x04 \x01(\x0e\x32 .mgmt.v1alpha1.TransformerSourceR\x06source\x12\x38\n\x06\x63onfig\x18\x05 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x06\x63onfig\x12\x41\n\ndata_types\x18\x06 \x03(\x0e\x32\".mgmt.v1alpha1.TransformerDataTypeR\tdataTypes\x12O\n\x13supported_job_types\x18\x07 \x03(\x0e\x32\x1f.mgmt.v1alpha1.SupportedJobTypeR\x11supportedJobTypes\"\xa2$\n\x11TransformerConfig\x12R\n\x15generate_email_config\x18\x01 \x01(\x0b\x32\x1c.mgmt.v1alpha1.GenerateEmailH\x00R\x13generateEmailConfig\x12U\n\x16transform_email_config\x18\x02 \x01(\x0b\x32\x1d.mgmt.v1alpha1.TransformEmailH\x00R\x14transformEmailConfig\x12O\n\x14generate_bool_config\x18\x03 \x01(\x0b\x32\x1b.mgmt.v1alpha1.GenerateBoolH\x00R\x12generateBoolConfig\x12\x62\n\x1bgenerate_card_number_config\x18\x04 \x01(\x0b\x32!.mgmt.v1alpha1.GenerateCardNumberH\x00R\x18generateCardNumberConfig\x12O\n\x14generate_city_config\x18\x05 \x01(\x0b\x32\x1b.mgmt.v1alpha1.GenerateCityH\x00R\x12generateCityConfig\x12r\n!generate_e164_phone_number_config\x18\x06 \x01(\x0b\x32&.mgmt.v1alpha1.GenerateE164PhoneNumberH\x00R\x1dgenerateE164PhoneNumberConfig\x12_\n\x1agenerate_first_name_config\x18\x07 \x01(\x0b\x32 .mgmt.v1alpha1.GenerateFirstNameH\x00R\x17generateFirstNameConfig\x12X\n\x17generate_float64_config\x18\x08 \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateFloat64H\x00R\x15generateFloat64Config\x12\x65\n\x1cgenerate_full_address_config\x18\t \x01(\x0b\x32\".mgmt.v1alpha1.GenerateFullAddressH\x00R\x19generateFullAddressConfig\x12\\\n\x19generate_full_name_config\x18\n \x01(\x0b\x32\x1f.mgmt.v1alpha1.GenerateFullNameH\x00R\x16generateFullNameConfig\x12U\n\x16generate_gender_config\x18\x0b \x01(\x0b\x32\x1d.mgmt.v1alpha1.GenerateGenderH\x00R\x14generateGenderConfig\x12u\n\"generate_int64_phone_number_config\x18\x0c \x01(\x0b\x32\'.mgmt.v1alpha1.GenerateInt64PhoneNumberH\x00R\x1egenerateInt64PhoneNumberConfig\x12R\n\x15generate_int64_config\x18\r \x01(\x0b\x32\x1c.mgmt.v1alpha1.GenerateInt64H\x00R\x13generateInt64Config\x12\\\n\x19generate_last_name_config\x18\x0e \x01(\x0b\x32\x1f.mgmt.v1alpha1.GenerateLastNameH\x00R\x16generateLastNameConfig\x12\x61\n\x1agenerate_sha256hash_config\x18\x0f \x01(\x0b\x32!.mgmt.v1alpha1.GenerateSha256HashH\x00R\x18generateSha256hashConfig\x12L\n\x13generate_ssn_config\x18\x10 \x01(\x0b\x32\x1a.mgmt.v1alpha1.GenerateSSNH\x00R\x11generateSsnConfig\x12R\n\x15generate_state_config\x18\x11 \x01(\x0b\x32\x1c.mgmt.v1alpha1.GenerateStateH\x00R\x13generateStateConfig\x12k\n\x1egenerate_street_address_config\x18\x12 \x01(\x0b\x32$.mgmt.v1alpha1.GenerateStreetAddressH\x00R\x1bgenerateStreetAddressConfig\x12x\n#generate_string_phone_number_config\x18\x13 \x01(\x0b\x32(.mgmt.v1alpha1.GenerateStringPhoneNumberH\x00R\x1fgenerateStringPhoneNumberConfig\x12U\n\x16generate_string_config\x18\x14 \x01(\x0b\x32\x1d.mgmt.v1alpha1.GenerateStringH\x00R\x14generateStringConfig\x12j\n\x1dgenerate_unixtimestamp_config\x18\x15 \x01(\x0b\x32$.mgmt.v1alpha1.GenerateUnixTimestampH\x00R\x1bgenerateUnixtimestampConfig\x12[\n\x18generate_username_config\x18\x16 \x01(\x0b\x32\x1f.mgmt.v1alpha1.GenerateUsernameH\x00R\x16generateUsernameConfig\x12g\n\x1cgenerate_utctimestamp_config\x18\x17 \x01(\x0b\x32#.mgmt.v1alpha1.GenerateUtcTimestampH\x00R\x1agenerateUtctimestampConfig\x12O\n\x14generate_uuid_config\x18\x18 \x01(\x0b\x32\x1b.mgmt.v1alpha1.GenerateUuidH\x00R\x12generateUuidConfig\x12X\n\x17generate_zipcode_config\x18\x19 \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateZipcodeH\x00R\x15generateZipcodeConfig\x12u\n\"transform_e164_phone_number_config\x18\x1a \x01(\x0b\x32\'.mgmt.v1alpha1.TransformE164PhoneNumberH\x00R\x1etransformE164PhoneNumberConfig\x12\x62\n\x1btransform_first_name_config\x18\x1b \x01(\x0b\x32!.mgmt.v1alpha1.TransformFirstNameH\x00R\x18transformFirstNameConfig\x12[\n\x18transform_float64_config\x18\x1c \x01(\x0b\x32\x1f.mgmt.v1alpha1.TransformFloat64H\x00R\x16transformFloat64Config\x12_\n\x1atransform_full_name_config\x18\x1d \x01(\x0b\x32 .mgmt.v1alpha1.TransformFullNameH\x00R\x17transformFullNameConfig\x12x\n#transform_int64_phone_number_config\x18\x1e \x01(\x0b\x32(.mgmt.v1alpha1.TransformInt64PhoneNumberH\x00R\x1ftransformInt64PhoneNumberConfig\x12U\n\x16transform_int64_config\x18\x1f \x01(\x0b\x32\x1d.mgmt.v1alpha1.TransformInt64H\x00R\x14transformInt64Config\x12_\n\x1atransform_last_name_config\x18 \x01(\x0b\x32 .mgmt.v1alpha1.TransformLastNameH\x00R\x17transformLastNameConfig\x12h\n\x1dtransform_phone_number_config\x18! \x01(\x0b\x32#.mgmt.v1alpha1.TransformPhoneNumberH\x00R\x1atransformPhoneNumberConfig\x12X\n\x17transform_string_config\x18\" \x01(\x0b\x32\x1e.mgmt.v1alpha1.TransformStringH\x00R\x15transformStringConfig\x12K\n\x12passthrough_config\x18# \x01(\x0b\x32\x1a.mgmt.v1alpha1.PassthroughH\x00R\x11passthroughConfig\x12\x35\n\nnullconfig\x18$ \x01(\x0b\x32\x13.mgmt.v1alpha1.NullH\x00R\nnullconfig\x12t\n\x1fuser_defined_transformer_config\x18% \x01(\x0b\x32+.mgmt.v1alpha1.UserDefinedTransformerConfigH\x00R\x1cuserDefinedTransformerConfig\x12X\n\x17generate_default_config\x18& \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateDefaultH\x00R\x15generateDefaultConfig\x12\x64\n\x1btransform_javascript_config\x18\' \x01(\x0b\x32\".mgmt.v1alpha1.TransformJavascriptH\x00R\x19transformJavascriptConfig\x12\x64\n\x1bgenerate_categorical_config\x18( \x01(\x0b\x32\".mgmt.v1alpha1.GenerateCategoricalH\x00R\x19generateCategoricalConfig\x12z\n#transform_character_scramble_config\x18) \x01(\x0b\x32).mgmt.v1alpha1.TransformCharacterScrambleH\x00R transformCharacterScrambleConfig\x12\x61\n\x1agenerate_javascript_config\x18* \x01(\x0b\x32!.mgmt.v1alpha1.GenerateJavascriptH\x00R\x18generateJavascriptConfig\x12X\n\x17generate_country_config\x18+ \x01(\x0b\x32\x1e.mgmt.v1alpha1.GenerateCountryH\x00R\x15generateCountryConfig\x12\\\n\x19transform_pii_text_config\x18, \x01(\x0b\x32\x1f.mgmt.v1alpha1.TransformPiiTextH\x00R\x16transformPiiTextConfig\x12h\n\x1dgenerate_business_name_config\x18- \x01(\x0b\x32#.mgmt.v1alpha1.GenerateBusinessNameH\x00R\x1agenerateBusinessNameConfig\x12_\n\x1agenerate_ip_address_config\x18. \x01(\x0b\x32 .mgmt.v1alpha1.GenerateIpAddressH\x00R\x17generateIpAddressConfig\x12R\n\x15transform_uuid_config\x18/ \x01(\x0b\x32\x1c.mgmt.v1alpha1.TransformUuidH\x00R\x13transformUuidConfig\x12R\n\x15transform_hash_config\x18\x30 \x01(\x0b\x32\x1c.mgmt.v1alpha1.TransformHashH\x00R\x13transformHashConfigB\x0f\n\x06\x63onfig\x12\x05\xbaH\x02\x08\x01\"\xc1\x04\n\x10TransformPiiText\x12\x38\n\x0fscore_threshold\x18\x01 \x01(\x02\x42\x0f\xbaH\x0c\n\n\x1d\x00\x00\x80?-\x00\x00\x00\x00R\x0escoreThreshold\x12K\n\x12\x64\x65\x66\x61ult_anonymizer\x18\x02 \x01(\x0b\x32\x1c.mgmt.v1alpha1.PiiAnonymizerR\x11\x64\x65\x66\x61ultAnonymizer\x12K\n\x10\x64\x65ny_recognizers\x18\x03 \x03(\x0b\x32 .mgmt.v1alpha1.PiiDenyRecognizerR\x0f\x64\x65nyRecognizers\x12\x37\n\x10\x61llowed_entities\x18\x04 \x03(\tB\x0c\xbaH\t\x92\x01\x06\"\x04r\x02\x10\x01R\x0f\x61llowedEntities\x12\'\n\x0f\x61llowed_phrases\x18\x05 \x03(\tR\x0e\x61llowedPhrases\x12\x1f\n\x08language\x18\x06 \x01(\tH\x00R\x08language\x88\x01\x01\x12\x65\n\x12\x65ntity_anonymizers\x18\x07 \x03(\x0b\x32\x36.mgmt.v1alpha1.TransformPiiText.EntityAnonymizersEntryR\x11\x65ntityAnonymizers\x1a\x62\n\x16\x45ntityAnonymizersEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32\x1c.mgmt.v1alpha1.PiiAnonymizerR\x05value:\x02\x38\x01\x42\x0b\n\t_language\"p\n\x11PiiDenyRecognizer\x12.\n\x04name\x18\x01 \x01(\tB\x1a\xbaH\x17r\x15\x32\x13^[a-z0-9-_]{1,100}$R\x04name\x12+\n\ndeny_words\x18\x02 \x03(\tB\x0c\xbaH\t\x92\x01\x06\"\x04r\x02\x10\x01R\tdenyWords\"\xbc\x06\n\rPiiAnonymizer\x12@\n\x07replace\x18\x01 \x01(\x0b\x32$.mgmt.v1alpha1.PiiAnonymizer.ReplaceH\x00R\x07replace\x12=\n\x06redact\x18\x02 \x01(\x0b\x32#.mgmt.v1alpha1.PiiAnonymizer.RedactH\x00R\x06redact\x12\x37\n\x04mask\x18\x03 \x01(\x0b\x32!.mgmt.v1alpha1.PiiAnonymizer.MaskH\x00R\x04mask\x12\x37\n\x04hash\x18\x04 \x01(\x0b\x32!.mgmt.v1alpha1.PiiAnonymizer.HashH\x00R\x04hash\x12\x46\n\ttransform\x18\x05 \x01(\x0b\x32&.mgmt.v1alpha1.PiiAnonymizer.TransformH\x00R\ttransform\x1a.\n\x07Replace\x12\x19\n\x05value\x18\x01 \x01(\tH\x00R\x05value\x88\x01\x01\x42\x08\n\x06_value\x1a\x08\n\x06Redact\x1a\xa7\x01\n\x04Mask\x12&\n\x0cmasking_char\x18\x01 \x01(\tH\x00R\x0bmaskingChar\x88\x01\x01\x12\'\n\rchars_to_mask\x18\x02 \x01(\x05H\x01R\x0b\x63harsToMask\x88\x01\x01\x12\x1e\n\x08\x66rom_end\x18\x03 \x01(\x08H\x02R\x07\x66romEnd\x88\x01\x01\x42\x0f\n\r_masking_charB\x10\n\x0e_chars_to_maskB\x0b\n\t_from_end\x1a\xba\x01\n\x04Hash\x12\x43\n\x04\x61lgo\x18\x01 \x01(\x0e\x32*.mgmt.v1alpha1.PiiAnonymizer.Hash.HashTypeH\x00R\x04\x61lgo\x88\x01\x01\"d\n\x08HashType\x12\x19\n\x15HASH_TYPE_UNSPECIFIED\x10\x00\x12\x11\n\rHASH_TYPE_MD5\x10\x01\x12\x14\n\x10HASH_TYPE_SHA256\x10\x02\x12\x14\n\x10HASH_TYPE_SHA512\x10\x03\x42\x07\n\x05_algo\x1a\x45\n\tTransform\x12\x38\n\x06\x63onfig\x18\x01 \x01(\x0b\x32 .mgmt.v1alpha1.TransformerConfigR\x06\x63onfigB\x08\n\x06\x63onfig\"d\n\rGenerateEmail\x12\x44\n\nemail_type\x18\x01 \x01(\x0e\x32 .mgmt.v1alpha1.GenerateEmailTypeH\x00R\temailType\x88\x01\x01\x42\r\n\x0b_email_type\"\x87\x03\n\x0eTransformEmail\x12,\n\x0fpreserve_domain\x18\x01 \x01(\x08H\x00R\x0epreserveDomain\x88\x01\x01\x12,\n\x0fpreserve_length\x18\x02 \x01(\x08H\x01R\x0epreserveLength\x88\x01\x01\x12)\n\x10\x65xcluded_domains\x18\x03 \x03(\tR\x0f\x65xcludedDomains\x12\x44\n\nemail_type\x18\x04 \x01(\x0e\x32 .mgmt.v1alpha1.GenerateEmailTypeH\x02R\temailType\x88\x01\x01\x12X\n\x14invalid_email_action\x18\x05 \x01(\x0e\x32!.mgmt.v1alpha1.InvalidEmailActionH\x03R\x12invalidEmailAction\x88\x01\x01\x42\x12\n\x10_preserve_domainB\x12\n\x10_preserve_lengthB\r\n\x0b_email_typeB\x17\n\x15_invalid_email_action\"\x0e\n\x0cGenerateBool\"G\n\x12GenerateCardNumber\x12\"\n\nvalid_luhn\x18\x01 \x01(\x08H\x00R\tvalidLuhn\x88\x01\x01\x42\r\n\x0b_valid_luhn\"\x0e\n\x0cGenerateCity\"\x11\n\x0fGenerateDefault\"W\n\x17GenerateE164PhoneNumber\x12\x15\n\x03min\x18\x01 \x01(\x03H\x00R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x02 \x01(\x03H\x01R\x03max\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_max\"\x13\n\x11GenerateFirstName\"\xbf\x01\n\x0fGenerateFloat64\x12*\n\x0erandomize_sign\x18\x01 \x01(\x08H\x00R\rrandomizeSign\x88\x01\x01\x12\x15\n\x03min\x18\x02 \x01(\x01H\x01R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x03 \x01(\x01H\x02R\x03max\x88\x01\x01\x12!\n\tprecision\x18\x04 \x01(\x03H\x03R\tprecision\x88\x01\x01\x42\x11\n\x0f_randomize_signB\x06\n\x04_minB\x06\n\x04_maxB\x0c\n\n_precision\"\x15\n\x13GenerateFullAddress\"\x12\n\x10GenerateFullName\"D\n\x0eGenerateGender\x12#\n\nabbreviate\x18\x01 \x01(\x08H\x00R\nabbreviate\x88\x01\x01\x42\r\n\x0b_abbreviate\"\x1a\n\x18GenerateInt64PhoneNumber\"\x8c\x01\n\rGenerateInt64\x12*\n\x0erandomize_sign\x18\x01 \x01(\x08H\x00R\rrandomizeSign\x88\x01\x01\x12\x15\n\x03min\x18\x02 \x01(\x03H\x01R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x03 \x01(\x03H\x02R\x03max\x88\x01\x01\x42\x11\n\x0f_randomize_signB\x06\n\x04_minB\x06\n\x04_max\"\x12\n\x10GenerateLastName\"\x14\n\x12GenerateSha256Hash\"\r\n\x0bGenerateSSN\"Y\n\rGenerateState\x12\x31\n\x12generate_full_name\x18\x01 \x01(\x08H\x00R\x10generateFullName\x88\x01\x01\x42\x15\n\x13_generate_full_name\"\x17\n\x15GenerateStreetAddress\"_\n\x19GenerateStringPhoneNumber\x12\x15\n\x03min\x18\x02 \x01(\x03H\x00R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x03 \x01(\x03H\x01R\x03max\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_maxJ\x04\x08\x01\x10\x02\"N\n\x0eGenerateString\x12\x15\n\x03min\x18\x01 \x01(\x03H\x00R\x03min\x88\x01\x01\x12\x15\n\x03max\x18\x02 \x01(\x03H\x01R\x03max\x88\x01\x01\x42\x06\n\x04_minB\x06\n\x04_max\"\x17\n\x15GenerateUnixTimestamp\"\x12\n\x10GenerateUsername\"\x16\n\x14GenerateUtcTimestamp\"P\n\x0cGenerateUuid\x12,\n\x0finclude_hyphens\x18\x01 \x01(\x08H\x00R\x0eincludeHyphens\x88\x01\x01\x42\x12\n\x10_include_hyphens\"\x11\n\x0fGenerateZipcode\"\\\n\x18TransformE164PhoneNumber\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"V\n\x12TransformFirstName\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"\xc4\x01\n\x10TransformFloat64\x12;\n\x17randomization_range_min\x18\x01 \x01(\x01H\x00R\x15randomizationRangeMin\x88\x01\x01\x12;\n\x17randomization_range_max\x18\x02 \x01(\x01H\x01R\x15randomizationRangeMax\x88\x01\x01\x42\x1a\n\x18_randomization_range_minB\x1a\n\x18_randomization_range_max\"U\n\x11TransformFullName\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"]\n\x19TransformInt64PhoneNumber\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"\xc2\x01\n\x0eTransformInt64\x12;\n\x17randomization_range_min\x18\x01 \x01(\x03H\x00R\x15randomizationRangeMin\x88\x01\x01\x12;\n\x17randomization_range_max\x18\x02 \x01(\x03H\x01R\x15randomizationRangeMax\x88\x01\x01\x42\x1a\n\x18_randomization_range_minB\x1a\n\x18_randomization_range_max\"U\n\x11TransformLastName\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"X\n\x14TransformPhoneNumber\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"S\n\x0fTransformString\x12,\n\x0fpreserve_length\x18\x01 \x01(\x08H\x00R\x0epreserveLength\x88\x01\x01\x42\x12\n\x10_preserve_length\"\r\n\x0bPassthrough\"\x06\n\x04Null\")\n\x13TransformJavascript\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\"8\n\x1cUserDefinedTransformerConfig\x12\x18\n\x02id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\x02id\"F\n!ValidateUserJavascriptCodeRequest\x12\x1b\n\x04\x63ode\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04\x63odeJ\x04\x08\x01\x10\x02\":\n\"ValidateUserJavascriptCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"I\n\x13GenerateCategorical\x12#\n\ncategories\x18\x01 \x01(\tH\x00R\ncategories\x88\x01\x01\x42\r\n\x0b_categories\"i\n\x1aTransformCharacterScramble\x12\x33\n\x13user_provided_regex\x18\x01 \x01(\tH\x00R\x11userProvidedRegex\x88\x01\x01\x42\x16\n\x14_user_provided_regex\"(\n\x12GenerateJavascript\x12\x12\n\x04\x63ode\x18\x01 \x01(\tR\x04\x63ode\"T\n\x1cValidateUserRegexCodeRequest\x12.\n\x13user_provided_regex\x18\x02 \x01(\tR\x11userProvidedRegexJ\x04\x08\x01\x10\x02\"5\n\x1dValidateUserRegexCodeResponse\x12\x14\n\x05valid\x18\x01 \x01(\x08R\x05valid\"[\n\x0fGenerateCountry\x12\x31\n\x12generate_full_name\x18\x01 \x01(\x08H\x00R\x10generateFullName\x88\x01\x01\x42\x15\n\x13_generate_full_name\"I\n\x1eGetTransformPiiEntitiesRequest\x12\'\n\naccount_id\x18\x01 \x01(\tB\x08\xbaH\x05r\x03\xb0\x01\x01R\taccountId\"=\n\x1fGetTransformPiiEntitiesResponse\x12\x1a\n\x08\x65ntities\x18\x01 \x03(\tR\x08\x65ntities\"\x16\n\x14GenerateBusinessName\"c\n\x11GenerateIpAddress\x12\x42\n\x07ip_type\x18\x01 \x01(\x0e\x32$.mgmt.v1alpha1.GenerateIpAddressTypeH\x00R\x06ipType\x88\x01\x01\x42\n\n\x08_ip_type\"\x0f\n\rTransformUuid\"\xd2\x01\n\rTransformHash\x12>\n\x04\x61lgo\x18\x01 \x01(\x0e\x32%.mgmt.v1alpha1.TransformHash.HashTypeH\x00R\x04\x61lgo\x88\x01\x01\"x\n\x08HashType\x12\x19\n\x15HASH_TYPE_UNSPECIFIED\x10\x00\x12\x11\n\rHASH_TYPE_MD5\x10\x01\x12\x12\n\x0eHASH_TYPE_SHA1\x10\x02\x12\x14\n\x10HASH_TYPE_SHA256\x10\x03\x12\x14\n\x10HASH_TYPE_SHA512\x10\x04\x42\x07\n\x05_algo*\xae\x11\n\x11TransformerSource\x12\"\n\x1eTRANSFORMER_SOURCE_UNSPECIFIED\x10\x00\x12\"\n\x1eTRANSFORMER_SOURCE_PASSTHROUGH\x10\x01\x12\'\n#TRANSFORMER_SOURCE_GENERATE_DEFAULT\x10\x02\x12+\n\'TRANSFORMER_SOURCE_TRANSFORM_JAVASCRIPT\x10\x03\x12%\n!TRANSFORMER_SOURCE_GENERATE_EMAIL\x10\x04\x12&\n\"TRANSFORMER_SOURCE_TRANSFORM_EMAIL\x10\x05\x12$\n TRANSFORMER_SOURCE_GENERATE_BOOL\x10\x06\x12+\n\'TRANSFORMER_SOURCE_GENERATE_CARD_NUMBER\x10\x07\x12$\n TRANSFORMER_SOURCE_GENERATE_CITY\x10\x08\x12\x31\n-TRANSFORMER_SOURCE_GENERATE_E164_PHONE_NUMBER\x10\t\x12*\n&TRANSFORMER_SOURCE_GENERATE_FIRST_NAME\x10\n\x12\'\n#TRANSFORMER_SOURCE_GENERATE_FLOAT64\x10\x0b\x12,\n(TRANSFORMER_SOURCE_GENERATE_FULL_ADDRESS\x10\x0c\x12)\n%TRANSFORMER_SOURCE_GENERATE_FULL_NAME\x10\r\x12&\n\"TRANSFORMER_SOURCE_GENERATE_GENDER\x10\x0e\x12\x32\n.TRANSFORMER_SOURCE_GENERATE_INT64_PHONE_NUMBER\x10\x0f\x12%\n!TRANSFORMER_SOURCE_GENERATE_INT64\x10\x10\x12,\n(TRANSFORMER_SOURCE_GENERATE_RANDOM_INT64\x10\x11\x12)\n%TRANSFORMER_SOURCE_GENERATE_LAST_NAME\x10\x12\x12*\n&TRANSFORMER_SOURCE_GENERATE_SHA256HASH\x10\x13\x12#\n\x1fTRANSFORMER_SOURCE_GENERATE_SSN\x10\x14\x12%\n!TRANSFORMER_SOURCE_GENERATE_STATE\x10\x15\x12.\n*TRANSFORMER_SOURCE_GENERATE_STREET_ADDRESS\x10\x16\x12\x33\n/TRANSFORMER_SOURCE_GENERATE_STRING_PHONE_NUMBER\x10\x17\x12&\n\"TRANSFORMER_SOURCE_GENERATE_STRING\x10\x18\x12-\n)TRANSFORMER_SOURCE_GENERATE_RANDOM_STRING\x10\x19\x12-\n)TRANSFORMER_SOURCE_GENERATE_UNIXTIMESTAMP\x10\x1a\x12(\n$TRANSFORMER_SOURCE_GENERATE_USERNAME\x10\x1b\x12,\n(TRANSFORMER_SOURCE_GENERATE_UTCTIMESTAMP\x10\x1c\x12$\n TRANSFORMER_SOURCE_GENERATE_UUID\x10\x1d\x12\'\n#TRANSFORMER_SOURCE_GENERATE_ZIPCODE\x10\x1e\x12\x32\n.TRANSFORMER_SOURCE_TRANSFORM_E164_PHONE_NUMBER\x10\x1f\x12+\n\'TRANSFORMER_SOURCE_TRANSFORM_FIRST_NAME\x10 \x12(\n$TRANSFORMER_SOURCE_TRANSFORM_FLOAT64\x10!\x12*\n&TRANSFORMER_SOURCE_TRANSFORM_FULL_NAME\x10\"\x12\x33\n/TRANSFORMER_SOURCE_TRANSFORM_INT64_PHONE_NUMBER\x10#\x12&\n\"TRANSFORMER_SOURCE_TRANSFORM_INT64\x10$\x12*\n&TRANSFORMER_SOURCE_TRANSFORM_LAST_NAME\x10%\x12-\n)TRANSFORMER_SOURCE_TRANSFORM_PHONE_NUMBER\x10&\x12\'\n#TRANSFORMER_SOURCE_TRANSFORM_STRING\x10\'\x12$\n TRANSFORMER_SOURCE_GENERATE_NULL\x10(\x12+\n\'TRANSFORMER_SOURCE_GENERATE_CATEGORICAL\x10*\x12\x33\n/TRANSFORMER_SOURCE_TRANSFORM_CHARACTER_SCRAMBLE\x10+\x12#\n\x1fTRANSFORMER_SOURCE_USER_DEFINED\x10,\x12*\n&TRANSFORMER_SOURCE_GENERATE_JAVASCRIPT\x10-\x12\'\n#TRANSFORMER_SOURCE_GENERATE_COUNTRY\x10.\x12)\n%TRANSFORMER_SOURCE_TRANSFORM_PII_TEXT\x10/\x12-\n)TRANSFORMER_SOURCE_GENERATE_BUSINESS_NAME\x10\x30\x12*\n&TRANSFORMER_SOURCE_GENERATE_IP_ADDRESS\x10\x31\x12%\n!TRANSFORMER_SOURCE_TRANSFORM_UUID\x10\x32\x12%\n!TRANSFORMER_SOURCE_TRANSFORM_HASH\x10\x33*\xc4\x02\n\x13TransformerDataType\x12%\n!TRANSFORMER_DATA_TYPE_UNSPECIFIED\x10\x00\x12 \n\x1cTRANSFORMER_DATA_TYPE_STRING\x10\x01\x12\x1f\n\x1bTRANSFORMER_DATA_TYPE_INT64\x10\x02\x12!\n\x1dTRANSFORMER_DATA_TYPE_BOOLEAN\x10\x03\x12!\n\x1dTRANSFORMER_DATA_TYPE_FLOAT64\x10\x04\x12\x1e\n\x1aTRANSFORMER_DATA_TYPE_NULL\x10\x05\x12\x1d\n\x19TRANSFORMER_DATA_TYPE_ANY\x10\x06\x12\x1e\n\x1aTRANSFORMER_DATA_TYPE_TIME\x10\x07\x12\x1e\n\x1aTRANSFORMER_DATA_TYPE_UUID\x10\x08*t\n\x10SupportedJobType\x12\"\n\x1eSUPPORTED_JOB_TYPE_UNSPECIFIED\x10\x00\x12\x1b\n\x17SUPPORTED_JOB_TYPE_SYNC\x10\x01\x12\x1f\n\x1bSUPPORTED_JOB_TYPE_GENERATE\x10\x02*{\n\x11GenerateEmailType\x12#\n\x1fGENERATE_EMAIL_TYPE_UNSPECIFIED\x10\x00\x12\x1f\n\x1bGENERATE_EMAIL_TYPE_UUID_V4\x10\x01\x12 \n\x1cGENERATE_EMAIL_TYPE_FULLNAME\x10\x02*\xc3\x01\n\x12InvalidEmailAction\x12$\n INVALID_EMAIL_ACTION_UNSPECIFIED\x10\x00\x12\x1f\n\x1bINVALID_EMAIL_ACTION_REJECT\x10\x01\x12\x1d\n\x19INVALID_EMAIL_ACTION_NULL\x10\x02\x12$\n INVALID_EMAIL_ACTION_PASSTHROUGH\x10\x03\x12!\n\x1dINVALID_EMAIL_ACTION_GENERATE\x10\x04*\x8c\x03\n\x15GenerateIpAddressType\x12(\n$GENERATE_IP_ADDRESS_TYPE_UNSPECIFIED\x10\x00\x12&\n\"GENERATE_IP_ADDRESS_TYPE_V4_PUBLIC\x10\x01\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_PRIVATE_A\x10\x02\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_PRIVATE_B\x10\x03\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_PRIVATE_C\x10\x04\x12*\n&GENERATE_IP_ADDRESS_TYPE_V4_LINK_LOCAL\x10\x05\x12)\n%GENERATE_IP_ADDRESS_TYPE_V4_MULTICAST\x10\x06\x12(\n$GENERATE_IP_ADDRESS_TYPE_V4_LOOPBACK\x10\x07\x12\x1f\n\x1bGENERATE_IP_ADDRESS_TYPE_V6\x10\x08\x32\xdd\x0b\n\x13TransformersService\x12w\n\x15GetSystemTransformers\x12+.mgmt.v1alpha1.GetSystemTransformersRequest\x1a,.mgmt.v1alpha1.GetSystemTransformersResponse\"\x03\x90\x02\x01\x12\x8c\x01\n\x1cGetSystemTransformerBySource\x12\x32.mgmt.v1alpha1.GetSystemTransformerBySourceRequest\x1a\x33.mgmt.v1alpha1.GetSystemTransformerBySourceResponse\"\x03\x90\x02\x01\x12\x86\x01\n\x1aGetUserDefinedTransformers\x12\x30.mgmt.v1alpha1.GetUserDefinedTransformersRequest\x1a\x31.mgmt.v1alpha1.GetUserDefinedTransformersResponse\"\x03\x90\x02\x01\x12\x8f\x01\n\x1dGetUserDefinedTransformerById\x12\x33.mgmt.v1alpha1.GetUserDefinedTransformerByIdRequest\x1a\x34.mgmt.v1alpha1.GetUserDefinedTransformerByIdResponse\"\x03\x90\x02\x01\x12\x89\x01\n\x1c\x43reateUserDefinedTransformer\x12\x32.mgmt.v1alpha1.CreateUserDefinedTransformerRequest\x1a\x33.mgmt.v1alpha1.CreateUserDefinedTransformerResponse\"\x00\x12\x89\x01\n\x1c\x44\x65leteUserDefinedTransformer\x12\x32.mgmt.v1alpha1.DeleteUserDefinedTransformerRequest\x1a\x33.mgmt.v1alpha1.DeleteUserDefinedTransformerResponse\"\x00\x12\x89\x01\n\x1cUpdateUserDefinedTransformer\x12\x32.mgmt.v1alpha1.UpdateUserDefinedTransformerRequest\x1a\x33.mgmt.v1alpha1.UpdateUserDefinedTransformerResponse\"\x00\x12\x83\x01\n\x1aIsTransformerNameAvailable\x12\x30.mgmt.v1alpha1.IsTransformerNameAvailableRequest\x1a\x31.mgmt.v1alpha1.IsTransformerNameAvailableResponse\"\x00\x12\x83\x01\n\x1aValidateUserJavascriptCode\x12\x30.mgmt.v1alpha1.ValidateUserJavascriptCodeRequest\x1a\x31.mgmt.v1alpha1.ValidateUserJavascriptCodeResponse\"\x00\x12t\n\x15ValidateUserRegexCode\x12+.mgmt.v1alpha1.ValidateUserRegexCodeRequest\x1a,.mgmt.v1alpha1.ValidateUserRegexCodeResponse\"\x00\x12}\n\x17GetTransformPiiEntities\x12-.mgmt.v1alpha1.GetTransformPiiEntitiesRequest\x1a..mgmt.v1alpha1.GetTransformPiiEntitiesResponse\"\x03\x90\x02\x01\x42\xcc\x01\n\x11\x63om.mgmt.v1alpha1B\x10TransformerProtoP\x01ZPgithub.com/nucleuscloud/neosync/backend/gen/go/protos/mgmt/v1alpha1;mgmtv1alpha1\xa2\x02\x03MXX\xaa\x02\rMgmt.V1alpha1\xca\x02\rMgmt\\V1alpha1\xe2\x02\x19Mgmt\\V1alpha1\\GPBMetadata\xea\x02\x0eMgmt::V1alpha1b\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -86,18 +86,18 @@ _globals['_TRANSFORMERSSERVICE'].methods_by_name['GetUserDefinedTransformerById']._serialized_options = b'\220\002\001' _globals['_TRANSFORMERSSERVICE'].methods_by_name['GetTransformPiiEntities']._loaded_options = None _globals['_TRANSFORMERSSERVICE'].methods_by_name['GetTransformPiiEntities']._serialized_options = b'\220\002\001' - _globals['_TRANSFORMERSOURCE']._serialized_start=12734 - _globals['_TRANSFORMERSOURCE']._serialized_end=14917 - _globals['_TRANSFORMERDATATYPE']._serialized_start=14920 - _globals['_TRANSFORMERDATATYPE']._serialized_end=15244 - _globals['_SUPPORTEDJOBTYPE']._serialized_start=15246 - _globals['_SUPPORTEDJOBTYPE']._serialized_end=15362 - _globals['_GENERATEEMAILTYPE']._serialized_start=15364 - _globals['_GENERATEEMAILTYPE']._serialized_end=15487 - _globals['_INVALIDEMAILACTION']._serialized_start=15490 - _globals['_INVALIDEMAILACTION']._serialized_end=15685 - _globals['_GENERATEIPADDRESSTYPE']._serialized_start=15688 - _globals['_GENERATEIPADDRESSTYPE']._serialized_end=16084 + _globals['_TRANSFORMERSOURCE']._serialized_start=13031 + _globals['_TRANSFORMERSOURCE']._serialized_end=15253 + _globals['_TRANSFORMERDATATYPE']._serialized_start=15256 + _globals['_TRANSFORMERDATATYPE']._serialized_end=15580 + _globals['_SUPPORTEDJOBTYPE']._serialized_start=15582 + _globals['_SUPPORTEDJOBTYPE']._serialized_end=15698 + _globals['_GENERATEEMAILTYPE']._serialized_start=15700 + _globals['_GENERATEEMAILTYPE']._serialized_end=15823 + _globals['_INVALIDEMAILACTION']._serialized_start=15826 + _globals['_INVALIDEMAILACTION']._serialized_end=16021 + _globals['_GENERATEIPADDRESSTYPE']._serialized_start=16024 + _globals['_GENERATEIPADDRESSTYPE']._serialized_end=16420 _globals['_GETSYSTEMTRANSFORMERSREQUEST']._serialized_start=112 _globals['_GETSYSTEMTRANSFORMERSREQUEST']._serialized_end=142 _globals['_GETSYSTEMTRANSFORMERSRESPONSE']._serialized_start=144 @@ -135,131 +135,135 @@ _globals['_SYSTEMTRANSFORMER']._serialized_start=2495 _globals['_SYSTEMTRANSFORMER']._serialized_end=2901 _globals['_TRANSFORMERCONFIG']._serialized_start=2904 - _globals['_TRANSFORMERCONFIG']._serialized_end=7462 - _globals['_TRANSFORMPIITEXT']._serialized_start=7465 - _globals['_TRANSFORMPIITEXT']._serialized_end=8042 - _globals['_TRANSFORMPIITEXT_ENTITYANONYMIZERSENTRY']._serialized_start=7931 - _globals['_TRANSFORMPIITEXT_ENTITYANONYMIZERSENTRY']._serialized_end=8029 - _globals['_PIIDENYRECOGNIZER']._serialized_start=8044 - _globals['_PIIDENYRECOGNIZER']._serialized_end=8156 - _globals['_PIIANONYMIZER']._serialized_start=8159 - _globals['_PIIANONYMIZER']._serialized_end=8987 - _globals['_PIIANONYMIZER_REPLACE']._serialized_start=8491 - _globals['_PIIANONYMIZER_REPLACE']._serialized_end=8537 - _globals['_PIIANONYMIZER_REDACT']._serialized_start=8539 - _globals['_PIIANONYMIZER_REDACT']._serialized_end=8547 - _globals['_PIIANONYMIZER_MASK']._serialized_start=8550 - _globals['_PIIANONYMIZER_MASK']._serialized_end=8717 - _globals['_PIIANONYMIZER_HASH']._serialized_start=8720 - _globals['_PIIANONYMIZER_HASH']._serialized_end=8906 - _globals['_PIIANONYMIZER_HASH_HASHTYPE']._serialized_start=8797 - _globals['_PIIANONYMIZER_HASH_HASHTYPE']._serialized_end=8897 - _globals['_PIIANONYMIZER_TRANSFORM']._serialized_start=8908 - _globals['_PIIANONYMIZER_TRANSFORM']._serialized_end=8977 - _globals['_GENERATEEMAIL']._serialized_start=8989 - _globals['_GENERATEEMAIL']._serialized_end=9089 - _globals['_TRANSFORMEMAIL']._serialized_start=9092 - _globals['_TRANSFORMEMAIL']._serialized_end=9483 - _globals['_GENERATEBOOL']._serialized_start=9485 - _globals['_GENERATEBOOL']._serialized_end=9499 - _globals['_GENERATECARDNUMBER']._serialized_start=9501 - _globals['_GENERATECARDNUMBER']._serialized_end=9572 - _globals['_GENERATECITY']._serialized_start=9574 - _globals['_GENERATECITY']._serialized_end=9588 - _globals['_GENERATEDEFAULT']._serialized_start=9590 - _globals['_GENERATEDEFAULT']._serialized_end=9607 - _globals['_GENERATEE164PHONENUMBER']._serialized_start=9609 - _globals['_GENERATEE164PHONENUMBER']._serialized_end=9696 - _globals['_GENERATEFIRSTNAME']._serialized_start=9698 - _globals['_GENERATEFIRSTNAME']._serialized_end=9717 - _globals['_GENERATEFLOAT64']._serialized_start=9720 - _globals['_GENERATEFLOAT64']._serialized_end=9911 - _globals['_GENERATEFULLADDRESS']._serialized_start=9913 - _globals['_GENERATEFULLADDRESS']._serialized_end=9934 - _globals['_GENERATEFULLNAME']._serialized_start=9936 - _globals['_GENERATEFULLNAME']._serialized_end=9954 - _globals['_GENERATEGENDER']._serialized_start=9956 - _globals['_GENERATEGENDER']._serialized_end=10024 - _globals['_GENERATEINT64PHONENUMBER']._serialized_start=10026 - _globals['_GENERATEINT64PHONENUMBER']._serialized_end=10052 - _globals['_GENERATEINT64']._serialized_start=10055 - _globals['_GENERATEINT64']._serialized_end=10195 - _globals['_GENERATELASTNAME']._serialized_start=10197 - _globals['_GENERATELASTNAME']._serialized_end=10215 - _globals['_GENERATESHA256HASH']._serialized_start=10217 - _globals['_GENERATESHA256HASH']._serialized_end=10237 - _globals['_GENERATESSN']._serialized_start=10239 - _globals['_GENERATESSN']._serialized_end=10252 - _globals['_GENERATESTATE']._serialized_start=10254 - _globals['_GENERATESTATE']._serialized_end=10343 - _globals['_GENERATESTREETADDRESS']._serialized_start=10345 - _globals['_GENERATESTREETADDRESS']._serialized_end=10368 - _globals['_GENERATESTRINGPHONENUMBER']._serialized_start=10370 - _globals['_GENERATESTRINGPHONENUMBER']._serialized_end=10465 - _globals['_GENERATESTRING']._serialized_start=10467 - _globals['_GENERATESTRING']._serialized_end=10545 - _globals['_GENERATEUNIXTIMESTAMP']._serialized_start=10547 - _globals['_GENERATEUNIXTIMESTAMP']._serialized_end=10570 - _globals['_GENERATEUSERNAME']._serialized_start=10572 - _globals['_GENERATEUSERNAME']._serialized_end=10590 - _globals['_GENERATEUTCTIMESTAMP']._serialized_start=10592 - _globals['_GENERATEUTCTIMESTAMP']._serialized_end=10614 - _globals['_GENERATEUUID']._serialized_start=10616 - _globals['_GENERATEUUID']._serialized_end=10696 - _globals['_GENERATEZIPCODE']._serialized_start=10698 - _globals['_GENERATEZIPCODE']._serialized_end=10715 - _globals['_TRANSFORME164PHONENUMBER']._serialized_start=10717 - _globals['_TRANSFORME164PHONENUMBER']._serialized_end=10809 - _globals['_TRANSFORMFIRSTNAME']._serialized_start=10811 - _globals['_TRANSFORMFIRSTNAME']._serialized_end=10897 - _globals['_TRANSFORMFLOAT64']._serialized_start=10900 - _globals['_TRANSFORMFLOAT64']._serialized_end=11096 - _globals['_TRANSFORMFULLNAME']._serialized_start=11098 - _globals['_TRANSFORMFULLNAME']._serialized_end=11183 - _globals['_TRANSFORMINT64PHONENUMBER']._serialized_start=11185 - _globals['_TRANSFORMINT64PHONENUMBER']._serialized_end=11278 - _globals['_TRANSFORMINT64']._serialized_start=11281 - _globals['_TRANSFORMINT64']._serialized_end=11475 - _globals['_TRANSFORMLASTNAME']._serialized_start=11477 - _globals['_TRANSFORMLASTNAME']._serialized_end=11562 - _globals['_TRANSFORMPHONENUMBER']._serialized_start=11564 - _globals['_TRANSFORMPHONENUMBER']._serialized_end=11652 - _globals['_TRANSFORMSTRING']._serialized_start=11654 - _globals['_TRANSFORMSTRING']._serialized_end=11737 - _globals['_PASSTHROUGH']._serialized_start=11739 - _globals['_PASSTHROUGH']._serialized_end=11752 - _globals['_NULL']._serialized_start=11754 - _globals['_NULL']._serialized_end=11760 - _globals['_TRANSFORMJAVASCRIPT']._serialized_start=11762 - _globals['_TRANSFORMJAVASCRIPT']._serialized_end=11803 - _globals['_USERDEFINEDTRANSFORMERCONFIG']._serialized_start=11805 - _globals['_USERDEFINEDTRANSFORMERCONFIG']._serialized_end=11861 - _globals['_VALIDATEUSERJAVASCRIPTCODEREQUEST']._serialized_start=11863 - _globals['_VALIDATEUSERJAVASCRIPTCODEREQUEST']._serialized_end=11933 - _globals['_VALIDATEUSERJAVASCRIPTCODERESPONSE']._serialized_start=11935 - _globals['_VALIDATEUSERJAVASCRIPTCODERESPONSE']._serialized_end=11993 - _globals['_GENERATECATEGORICAL']._serialized_start=11995 - _globals['_GENERATECATEGORICAL']._serialized_end=12068 - _globals['_TRANSFORMCHARACTERSCRAMBLE']._serialized_start=12070 - _globals['_TRANSFORMCHARACTERSCRAMBLE']._serialized_end=12175 - _globals['_GENERATEJAVASCRIPT']._serialized_start=12177 - _globals['_GENERATEJAVASCRIPT']._serialized_end=12217 - _globals['_VALIDATEUSERREGEXCODEREQUEST']._serialized_start=12219 - _globals['_VALIDATEUSERREGEXCODEREQUEST']._serialized_end=12303 - _globals['_VALIDATEUSERREGEXCODERESPONSE']._serialized_start=12305 - _globals['_VALIDATEUSERREGEXCODERESPONSE']._serialized_end=12358 - _globals['_GENERATECOUNTRY']._serialized_start=12360 - _globals['_GENERATECOUNTRY']._serialized_end=12451 - _globals['_GETTRANSFORMPIIENTITIESREQUEST']._serialized_start=12453 - _globals['_GETTRANSFORMPIIENTITIESREQUEST']._serialized_end=12526 - _globals['_GETTRANSFORMPIIENTITIESRESPONSE']._serialized_start=12528 - _globals['_GETTRANSFORMPIIENTITIESRESPONSE']._serialized_end=12589 - _globals['_GENERATEBUSINESSNAME']._serialized_start=12591 - _globals['_GENERATEBUSINESSNAME']._serialized_end=12613 - _globals['_GENERATEIPADDRESS']._serialized_start=12615 - _globals['_GENERATEIPADDRESS']._serialized_end=12714 - _globals['_TRANSFORMUUID']._serialized_start=12716 - _globals['_TRANSFORMUUID']._serialized_end=12731 - _globals['_TRANSFORMERSSERVICE']._serialized_start=16087 - _globals['_TRANSFORMERSSERVICE']._serialized_end=17588 + _globals['_TRANSFORMERCONFIG']._serialized_end=7546 + _globals['_TRANSFORMPIITEXT']._serialized_start=7549 + _globals['_TRANSFORMPIITEXT']._serialized_end=8126 + _globals['_TRANSFORMPIITEXT_ENTITYANONYMIZERSENTRY']._serialized_start=8015 + _globals['_TRANSFORMPIITEXT_ENTITYANONYMIZERSENTRY']._serialized_end=8113 + _globals['_PIIDENYRECOGNIZER']._serialized_start=8128 + _globals['_PIIDENYRECOGNIZER']._serialized_end=8240 + _globals['_PIIANONYMIZER']._serialized_start=8243 + _globals['_PIIANONYMIZER']._serialized_end=9071 + _globals['_PIIANONYMIZER_REPLACE']._serialized_start=8575 + _globals['_PIIANONYMIZER_REPLACE']._serialized_end=8621 + _globals['_PIIANONYMIZER_REDACT']._serialized_start=8623 + _globals['_PIIANONYMIZER_REDACT']._serialized_end=8631 + _globals['_PIIANONYMIZER_MASK']._serialized_start=8634 + _globals['_PIIANONYMIZER_MASK']._serialized_end=8801 + _globals['_PIIANONYMIZER_HASH']._serialized_start=8804 + _globals['_PIIANONYMIZER_HASH']._serialized_end=8990 + _globals['_PIIANONYMIZER_HASH_HASHTYPE']._serialized_start=8881 + _globals['_PIIANONYMIZER_HASH_HASHTYPE']._serialized_end=8981 + _globals['_PIIANONYMIZER_TRANSFORM']._serialized_start=8992 + _globals['_PIIANONYMIZER_TRANSFORM']._serialized_end=9061 + _globals['_GENERATEEMAIL']._serialized_start=9073 + _globals['_GENERATEEMAIL']._serialized_end=9173 + _globals['_TRANSFORMEMAIL']._serialized_start=9176 + _globals['_TRANSFORMEMAIL']._serialized_end=9567 + _globals['_GENERATEBOOL']._serialized_start=9569 + _globals['_GENERATEBOOL']._serialized_end=9583 + _globals['_GENERATECARDNUMBER']._serialized_start=9585 + _globals['_GENERATECARDNUMBER']._serialized_end=9656 + _globals['_GENERATECITY']._serialized_start=9658 + _globals['_GENERATECITY']._serialized_end=9672 + _globals['_GENERATEDEFAULT']._serialized_start=9674 + _globals['_GENERATEDEFAULT']._serialized_end=9691 + _globals['_GENERATEE164PHONENUMBER']._serialized_start=9693 + _globals['_GENERATEE164PHONENUMBER']._serialized_end=9780 + _globals['_GENERATEFIRSTNAME']._serialized_start=9782 + _globals['_GENERATEFIRSTNAME']._serialized_end=9801 + _globals['_GENERATEFLOAT64']._serialized_start=9804 + _globals['_GENERATEFLOAT64']._serialized_end=9995 + _globals['_GENERATEFULLADDRESS']._serialized_start=9997 + _globals['_GENERATEFULLADDRESS']._serialized_end=10018 + _globals['_GENERATEFULLNAME']._serialized_start=10020 + _globals['_GENERATEFULLNAME']._serialized_end=10038 + _globals['_GENERATEGENDER']._serialized_start=10040 + _globals['_GENERATEGENDER']._serialized_end=10108 + _globals['_GENERATEINT64PHONENUMBER']._serialized_start=10110 + _globals['_GENERATEINT64PHONENUMBER']._serialized_end=10136 + _globals['_GENERATEINT64']._serialized_start=10139 + _globals['_GENERATEINT64']._serialized_end=10279 + _globals['_GENERATELASTNAME']._serialized_start=10281 + _globals['_GENERATELASTNAME']._serialized_end=10299 + _globals['_GENERATESHA256HASH']._serialized_start=10301 + _globals['_GENERATESHA256HASH']._serialized_end=10321 + _globals['_GENERATESSN']._serialized_start=10323 + _globals['_GENERATESSN']._serialized_end=10336 + _globals['_GENERATESTATE']._serialized_start=10338 + _globals['_GENERATESTATE']._serialized_end=10427 + _globals['_GENERATESTREETADDRESS']._serialized_start=10429 + _globals['_GENERATESTREETADDRESS']._serialized_end=10452 + _globals['_GENERATESTRINGPHONENUMBER']._serialized_start=10454 + _globals['_GENERATESTRINGPHONENUMBER']._serialized_end=10549 + _globals['_GENERATESTRING']._serialized_start=10551 + _globals['_GENERATESTRING']._serialized_end=10629 + _globals['_GENERATEUNIXTIMESTAMP']._serialized_start=10631 + _globals['_GENERATEUNIXTIMESTAMP']._serialized_end=10654 + _globals['_GENERATEUSERNAME']._serialized_start=10656 + _globals['_GENERATEUSERNAME']._serialized_end=10674 + _globals['_GENERATEUTCTIMESTAMP']._serialized_start=10676 + _globals['_GENERATEUTCTIMESTAMP']._serialized_end=10698 + _globals['_GENERATEUUID']._serialized_start=10700 + _globals['_GENERATEUUID']._serialized_end=10780 + _globals['_GENERATEZIPCODE']._serialized_start=10782 + _globals['_GENERATEZIPCODE']._serialized_end=10799 + _globals['_TRANSFORME164PHONENUMBER']._serialized_start=10801 + _globals['_TRANSFORME164PHONENUMBER']._serialized_end=10893 + _globals['_TRANSFORMFIRSTNAME']._serialized_start=10895 + _globals['_TRANSFORMFIRSTNAME']._serialized_end=10981 + _globals['_TRANSFORMFLOAT64']._serialized_start=10984 + _globals['_TRANSFORMFLOAT64']._serialized_end=11180 + _globals['_TRANSFORMFULLNAME']._serialized_start=11182 + _globals['_TRANSFORMFULLNAME']._serialized_end=11267 + _globals['_TRANSFORMINT64PHONENUMBER']._serialized_start=11269 + _globals['_TRANSFORMINT64PHONENUMBER']._serialized_end=11362 + _globals['_TRANSFORMINT64']._serialized_start=11365 + _globals['_TRANSFORMINT64']._serialized_end=11559 + _globals['_TRANSFORMLASTNAME']._serialized_start=11561 + _globals['_TRANSFORMLASTNAME']._serialized_end=11646 + _globals['_TRANSFORMPHONENUMBER']._serialized_start=11648 + _globals['_TRANSFORMPHONENUMBER']._serialized_end=11736 + _globals['_TRANSFORMSTRING']._serialized_start=11738 + _globals['_TRANSFORMSTRING']._serialized_end=11821 + _globals['_PASSTHROUGH']._serialized_start=11823 + _globals['_PASSTHROUGH']._serialized_end=11836 + _globals['_NULL']._serialized_start=11838 + _globals['_NULL']._serialized_end=11844 + _globals['_TRANSFORMJAVASCRIPT']._serialized_start=11846 + _globals['_TRANSFORMJAVASCRIPT']._serialized_end=11887 + _globals['_USERDEFINEDTRANSFORMERCONFIG']._serialized_start=11889 + _globals['_USERDEFINEDTRANSFORMERCONFIG']._serialized_end=11945 + _globals['_VALIDATEUSERJAVASCRIPTCODEREQUEST']._serialized_start=11947 + _globals['_VALIDATEUSERJAVASCRIPTCODEREQUEST']._serialized_end=12017 + _globals['_VALIDATEUSERJAVASCRIPTCODERESPONSE']._serialized_start=12019 + _globals['_VALIDATEUSERJAVASCRIPTCODERESPONSE']._serialized_end=12077 + _globals['_GENERATECATEGORICAL']._serialized_start=12079 + _globals['_GENERATECATEGORICAL']._serialized_end=12152 + _globals['_TRANSFORMCHARACTERSCRAMBLE']._serialized_start=12154 + _globals['_TRANSFORMCHARACTERSCRAMBLE']._serialized_end=12259 + _globals['_GENERATEJAVASCRIPT']._serialized_start=12261 + _globals['_GENERATEJAVASCRIPT']._serialized_end=12301 + _globals['_VALIDATEUSERREGEXCODEREQUEST']._serialized_start=12303 + _globals['_VALIDATEUSERREGEXCODEREQUEST']._serialized_end=12387 + _globals['_VALIDATEUSERREGEXCODERESPONSE']._serialized_start=12389 + _globals['_VALIDATEUSERREGEXCODERESPONSE']._serialized_end=12442 + _globals['_GENERATECOUNTRY']._serialized_start=12444 + _globals['_GENERATECOUNTRY']._serialized_end=12535 + _globals['_GETTRANSFORMPIIENTITIESREQUEST']._serialized_start=12537 + _globals['_GETTRANSFORMPIIENTITIESREQUEST']._serialized_end=12610 + _globals['_GETTRANSFORMPIIENTITIESRESPONSE']._serialized_start=12612 + _globals['_GETTRANSFORMPIIENTITIESRESPONSE']._serialized_end=12673 + _globals['_GENERATEBUSINESSNAME']._serialized_start=12675 + _globals['_GENERATEBUSINESSNAME']._serialized_end=12697 + _globals['_GENERATEIPADDRESS']._serialized_start=12699 + _globals['_GENERATEIPADDRESS']._serialized_end=12798 + _globals['_TRANSFORMUUID']._serialized_start=12800 + _globals['_TRANSFORMUUID']._serialized_end=12815 + _globals['_TRANSFORMHASH']._serialized_start=12818 + _globals['_TRANSFORMHASH']._serialized_end=13028 + _globals['_TRANSFORMHASH_HASHTYPE']._serialized_start=12899 + _globals['_TRANSFORMHASH_HASHTYPE']._serialized_end=13019 + _globals['_TRANSFORMERSSERVICE']._serialized_start=16423 + _globals['_TRANSFORMERSSERVICE']._serialized_end=17924 # @@protoc_insertion_point(module_scope) diff --git a/python/src/neosync/mgmt/v1alpha1/transformer_pb2.pyi b/python/src/neosync/mgmt/v1alpha1/transformer_pb2.pyi index 33012ec9e4..1eabd779a6 100644 --- a/python/src/neosync/mgmt/v1alpha1/transformer_pb2.pyi +++ b/python/src/neosync/mgmt/v1alpha1/transformer_pb2.pyi @@ -60,6 +60,7 @@ class TransformerSource(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): TRANSFORMER_SOURCE_GENERATE_BUSINESS_NAME: _ClassVar[TransformerSource] TRANSFORMER_SOURCE_GENERATE_IP_ADDRESS: _ClassVar[TransformerSource] TRANSFORMER_SOURCE_TRANSFORM_UUID: _ClassVar[TransformerSource] + TRANSFORMER_SOURCE_TRANSFORM_HASH: _ClassVar[TransformerSource] class TransformerDataType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): __slots__ = () @@ -154,6 +155,7 @@ TRANSFORMER_SOURCE_TRANSFORM_PII_TEXT: TransformerSource TRANSFORMER_SOURCE_GENERATE_BUSINESS_NAME: TransformerSource TRANSFORMER_SOURCE_GENERATE_IP_ADDRESS: TransformerSource TRANSFORMER_SOURCE_TRANSFORM_UUID: TransformerSource +TRANSFORMER_SOURCE_TRANSFORM_HASH: TransformerSource TRANSFORMER_DATA_TYPE_UNSPECIFIED: TransformerDataType TRANSFORMER_DATA_TYPE_STRING: TransformerDataType TRANSFORMER_DATA_TYPE_INT64: TransformerDataType @@ -335,7 +337,7 @@ class SystemTransformer(_message.Message): def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ..., data_type: _Optional[_Union[TransformerDataType, str]] = ..., source: _Optional[_Union[TransformerSource, str]] = ..., config: _Optional[_Union[TransformerConfig, _Mapping]] = ..., data_types: _Optional[_Iterable[_Union[TransformerDataType, str]]] = ..., supported_job_types: _Optional[_Iterable[_Union[SupportedJobType, str]]] = ...) -> None: ... class TransformerConfig(_message.Message): - __slots__ = ("generate_email_config", "transform_email_config", "generate_bool_config", "generate_card_number_config", "generate_city_config", "generate_e164_phone_number_config", "generate_first_name_config", "generate_float64_config", "generate_full_address_config", "generate_full_name_config", "generate_gender_config", "generate_int64_phone_number_config", "generate_int64_config", "generate_last_name_config", "generate_sha256hash_config", "generate_ssn_config", "generate_state_config", "generate_street_address_config", "generate_string_phone_number_config", "generate_string_config", "generate_unixtimestamp_config", "generate_username_config", "generate_utctimestamp_config", "generate_uuid_config", "generate_zipcode_config", "transform_e164_phone_number_config", "transform_first_name_config", "transform_float64_config", "transform_full_name_config", "transform_int64_phone_number_config", "transform_int64_config", "transform_last_name_config", "transform_phone_number_config", "transform_string_config", "passthrough_config", "nullconfig", "user_defined_transformer_config", "generate_default_config", "transform_javascript_config", "generate_categorical_config", "transform_character_scramble_config", "generate_javascript_config", "generate_country_config", "transform_pii_text_config", "generate_business_name_config", "generate_ip_address_config", "transform_uuid_config") + __slots__ = ("generate_email_config", "transform_email_config", "generate_bool_config", "generate_card_number_config", "generate_city_config", "generate_e164_phone_number_config", "generate_first_name_config", "generate_float64_config", "generate_full_address_config", "generate_full_name_config", "generate_gender_config", "generate_int64_phone_number_config", "generate_int64_config", "generate_last_name_config", "generate_sha256hash_config", "generate_ssn_config", "generate_state_config", "generate_street_address_config", "generate_string_phone_number_config", "generate_string_config", "generate_unixtimestamp_config", "generate_username_config", "generate_utctimestamp_config", "generate_uuid_config", "generate_zipcode_config", "transform_e164_phone_number_config", "transform_first_name_config", "transform_float64_config", "transform_full_name_config", "transform_int64_phone_number_config", "transform_int64_config", "transform_last_name_config", "transform_phone_number_config", "transform_string_config", "passthrough_config", "nullconfig", "user_defined_transformer_config", "generate_default_config", "transform_javascript_config", "generate_categorical_config", "transform_character_scramble_config", "generate_javascript_config", "generate_country_config", "transform_pii_text_config", "generate_business_name_config", "generate_ip_address_config", "transform_uuid_config", "transform_hash_config") GENERATE_EMAIL_CONFIG_FIELD_NUMBER: _ClassVar[int] TRANSFORM_EMAIL_CONFIG_FIELD_NUMBER: _ClassVar[int] GENERATE_BOOL_CONFIG_FIELD_NUMBER: _ClassVar[int] @@ -383,6 +385,7 @@ class TransformerConfig(_message.Message): GENERATE_BUSINESS_NAME_CONFIG_FIELD_NUMBER: _ClassVar[int] GENERATE_IP_ADDRESS_CONFIG_FIELD_NUMBER: _ClassVar[int] TRANSFORM_UUID_CONFIG_FIELD_NUMBER: _ClassVar[int] + TRANSFORM_HASH_CONFIG_FIELD_NUMBER: _ClassVar[int] generate_email_config: GenerateEmail transform_email_config: TransformEmail generate_bool_config: GenerateBool @@ -430,7 +433,8 @@ class TransformerConfig(_message.Message): generate_business_name_config: GenerateBusinessName generate_ip_address_config: GenerateIpAddress transform_uuid_config: TransformUuid - def __init__(self, generate_email_config: _Optional[_Union[GenerateEmail, _Mapping]] = ..., transform_email_config: _Optional[_Union[TransformEmail, _Mapping]] = ..., generate_bool_config: _Optional[_Union[GenerateBool, _Mapping]] = ..., generate_card_number_config: _Optional[_Union[GenerateCardNumber, _Mapping]] = ..., generate_city_config: _Optional[_Union[GenerateCity, _Mapping]] = ..., generate_e164_phone_number_config: _Optional[_Union[GenerateE164PhoneNumber, _Mapping]] = ..., generate_first_name_config: _Optional[_Union[GenerateFirstName, _Mapping]] = ..., generate_float64_config: _Optional[_Union[GenerateFloat64, _Mapping]] = ..., generate_full_address_config: _Optional[_Union[GenerateFullAddress, _Mapping]] = ..., generate_full_name_config: _Optional[_Union[GenerateFullName, _Mapping]] = ..., generate_gender_config: _Optional[_Union[GenerateGender, _Mapping]] = ..., generate_int64_phone_number_config: _Optional[_Union[GenerateInt64PhoneNumber, _Mapping]] = ..., generate_int64_config: _Optional[_Union[GenerateInt64, _Mapping]] = ..., generate_last_name_config: _Optional[_Union[GenerateLastName, _Mapping]] = ..., generate_sha256hash_config: _Optional[_Union[GenerateSha256Hash, _Mapping]] = ..., generate_ssn_config: _Optional[_Union[GenerateSSN, _Mapping]] = ..., generate_state_config: _Optional[_Union[GenerateState, _Mapping]] = ..., generate_street_address_config: _Optional[_Union[GenerateStreetAddress, _Mapping]] = ..., generate_string_phone_number_config: _Optional[_Union[GenerateStringPhoneNumber, _Mapping]] = ..., generate_string_config: _Optional[_Union[GenerateString, _Mapping]] = ..., generate_unixtimestamp_config: _Optional[_Union[GenerateUnixTimestamp, _Mapping]] = ..., generate_username_config: _Optional[_Union[GenerateUsername, _Mapping]] = ..., generate_utctimestamp_config: _Optional[_Union[GenerateUtcTimestamp, _Mapping]] = ..., generate_uuid_config: _Optional[_Union[GenerateUuid, _Mapping]] = ..., generate_zipcode_config: _Optional[_Union[GenerateZipcode, _Mapping]] = ..., transform_e164_phone_number_config: _Optional[_Union[TransformE164PhoneNumber, _Mapping]] = ..., transform_first_name_config: _Optional[_Union[TransformFirstName, _Mapping]] = ..., transform_float64_config: _Optional[_Union[TransformFloat64, _Mapping]] = ..., transform_full_name_config: _Optional[_Union[TransformFullName, _Mapping]] = ..., transform_int64_phone_number_config: _Optional[_Union[TransformInt64PhoneNumber, _Mapping]] = ..., transform_int64_config: _Optional[_Union[TransformInt64, _Mapping]] = ..., transform_last_name_config: _Optional[_Union[TransformLastName, _Mapping]] = ..., transform_phone_number_config: _Optional[_Union[TransformPhoneNumber, _Mapping]] = ..., transform_string_config: _Optional[_Union[TransformString, _Mapping]] = ..., passthrough_config: _Optional[_Union[Passthrough, _Mapping]] = ..., nullconfig: _Optional[_Union[Null, _Mapping]] = ..., user_defined_transformer_config: _Optional[_Union[UserDefinedTransformerConfig, _Mapping]] = ..., generate_default_config: _Optional[_Union[GenerateDefault, _Mapping]] = ..., transform_javascript_config: _Optional[_Union[TransformJavascript, _Mapping]] = ..., generate_categorical_config: _Optional[_Union[GenerateCategorical, _Mapping]] = ..., transform_character_scramble_config: _Optional[_Union[TransformCharacterScramble, _Mapping]] = ..., generate_javascript_config: _Optional[_Union[GenerateJavascript, _Mapping]] = ..., generate_country_config: _Optional[_Union[GenerateCountry, _Mapping]] = ..., transform_pii_text_config: _Optional[_Union[TransformPiiText, _Mapping]] = ..., generate_business_name_config: _Optional[_Union[GenerateBusinessName, _Mapping]] = ..., generate_ip_address_config: _Optional[_Union[GenerateIpAddress, _Mapping]] = ..., transform_uuid_config: _Optional[_Union[TransformUuid, _Mapping]] = ...) -> None: ... + transform_hash_config: TransformHash + def __init__(self, generate_email_config: _Optional[_Union[GenerateEmail, _Mapping]] = ..., transform_email_config: _Optional[_Union[TransformEmail, _Mapping]] = ..., generate_bool_config: _Optional[_Union[GenerateBool, _Mapping]] = ..., generate_card_number_config: _Optional[_Union[GenerateCardNumber, _Mapping]] = ..., generate_city_config: _Optional[_Union[GenerateCity, _Mapping]] = ..., generate_e164_phone_number_config: _Optional[_Union[GenerateE164PhoneNumber, _Mapping]] = ..., generate_first_name_config: _Optional[_Union[GenerateFirstName, _Mapping]] = ..., generate_float64_config: _Optional[_Union[GenerateFloat64, _Mapping]] = ..., generate_full_address_config: _Optional[_Union[GenerateFullAddress, _Mapping]] = ..., generate_full_name_config: _Optional[_Union[GenerateFullName, _Mapping]] = ..., generate_gender_config: _Optional[_Union[GenerateGender, _Mapping]] = ..., generate_int64_phone_number_config: _Optional[_Union[GenerateInt64PhoneNumber, _Mapping]] = ..., generate_int64_config: _Optional[_Union[GenerateInt64, _Mapping]] = ..., generate_last_name_config: _Optional[_Union[GenerateLastName, _Mapping]] = ..., generate_sha256hash_config: _Optional[_Union[GenerateSha256Hash, _Mapping]] = ..., generate_ssn_config: _Optional[_Union[GenerateSSN, _Mapping]] = ..., generate_state_config: _Optional[_Union[GenerateState, _Mapping]] = ..., generate_street_address_config: _Optional[_Union[GenerateStreetAddress, _Mapping]] = ..., generate_string_phone_number_config: _Optional[_Union[GenerateStringPhoneNumber, _Mapping]] = ..., generate_string_config: _Optional[_Union[GenerateString, _Mapping]] = ..., generate_unixtimestamp_config: _Optional[_Union[GenerateUnixTimestamp, _Mapping]] = ..., generate_username_config: _Optional[_Union[GenerateUsername, _Mapping]] = ..., generate_utctimestamp_config: _Optional[_Union[GenerateUtcTimestamp, _Mapping]] = ..., generate_uuid_config: _Optional[_Union[GenerateUuid, _Mapping]] = ..., generate_zipcode_config: _Optional[_Union[GenerateZipcode, _Mapping]] = ..., transform_e164_phone_number_config: _Optional[_Union[TransformE164PhoneNumber, _Mapping]] = ..., transform_first_name_config: _Optional[_Union[TransformFirstName, _Mapping]] = ..., transform_float64_config: _Optional[_Union[TransformFloat64, _Mapping]] = ..., transform_full_name_config: _Optional[_Union[TransformFullName, _Mapping]] = ..., transform_int64_phone_number_config: _Optional[_Union[TransformInt64PhoneNumber, _Mapping]] = ..., transform_int64_config: _Optional[_Union[TransformInt64, _Mapping]] = ..., transform_last_name_config: _Optional[_Union[TransformLastName, _Mapping]] = ..., transform_phone_number_config: _Optional[_Union[TransformPhoneNumber, _Mapping]] = ..., transform_string_config: _Optional[_Union[TransformString, _Mapping]] = ..., passthrough_config: _Optional[_Union[Passthrough, _Mapping]] = ..., nullconfig: _Optional[_Union[Null, _Mapping]] = ..., user_defined_transformer_config: _Optional[_Union[UserDefinedTransformerConfig, _Mapping]] = ..., generate_default_config: _Optional[_Union[GenerateDefault, _Mapping]] = ..., transform_javascript_config: _Optional[_Union[TransformJavascript, _Mapping]] = ..., generate_categorical_config: _Optional[_Union[GenerateCategorical, _Mapping]] = ..., transform_character_scramble_config: _Optional[_Union[TransformCharacterScramble, _Mapping]] = ..., generate_javascript_config: _Optional[_Union[GenerateJavascript, _Mapping]] = ..., generate_country_config: _Optional[_Union[GenerateCountry, _Mapping]] = ..., transform_pii_text_config: _Optional[_Union[TransformPiiText, _Mapping]] = ..., generate_business_name_config: _Optional[_Union[GenerateBusinessName, _Mapping]] = ..., generate_ip_address_config: _Optional[_Union[GenerateIpAddress, _Mapping]] = ..., transform_uuid_config: _Optional[_Union[TransformUuid, _Mapping]] = ..., transform_hash_config: _Optional[_Union[TransformHash, _Mapping]] = ...) -> None: ... class TransformPiiText(_message.Message): __slots__ = ("score_threshold", "default_anonymizer", "deny_recognizers", "allowed_entities", "allowed_phrases", "language", "entity_anonymizers") @@ -817,3 +821,21 @@ class GenerateIpAddress(_message.Message): class TransformUuid(_message.Message): __slots__ = () def __init__(self) -> None: ... + +class TransformHash(_message.Message): + __slots__ = ("algo",) + class HashType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper): + __slots__ = () + HASH_TYPE_UNSPECIFIED: _ClassVar[TransformHash.HashType] + HASH_TYPE_MD5: _ClassVar[TransformHash.HashType] + HASH_TYPE_SHA1: _ClassVar[TransformHash.HashType] + HASH_TYPE_SHA256: _ClassVar[TransformHash.HashType] + HASH_TYPE_SHA512: _ClassVar[TransformHash.HashType] + HASH_TYPE_UNSPECIFIED: TransformHash.HashType + HASH_TYPE_MD5: TransformHash.HashType + HASH_TYPE_SHA1: TransformHash.HashType + HASH_TYPE_SHA256: TransformHash.HashType + HASH_TYPE_SHA512: TransformHash.HashType + ALGO_FIELD_NUMBER: _ClassVar[int] + algo: TransformHash.HashType + def __init__(self, algo: _Optional[_Union[TransformHash.HashType, str]] = ...) -> None: ... From b772e00a74f45066d1ae18af1c3fb8707c887eca Mon Sep 17 00:00:00 2001 From: Nick Z <2420177+nickzelei@users.noreply.github.com> Date: Fri, 24 Jan 2025 14:33:27 -0800 Subject: [PATCH 2/9] wip on transform hash --- .../gen-javascript-transformer.md | 32 ++++ .../apps/web/@types/neosync-transformers.d.ts | 11 ++ .../benthos/transformers/benchmarks_test.go | 16 ++ .../transformers/gen_neosync_transformers.go | 1 + .../transformers/gen_transform_hash.go | 67 +++++++ .../benthos/transformers/transform_hash.go | 180 ++++++++++++++++++ 6 files changed, 307 insertions(+) create mode 100644 worker/pkg/benthos/transformers/gen_transform_hash.go create mode 100644 worker/pkg/benthos/transformers/transform_hash.go diff --git a/docs/docs/transformers/gen-javascript-transformer.md b/docs/docs/transformers/gen-javascript-transformer.md index 6d94b6d54b..06975b6fa1 100644 --- a/docs/docs/transformers/gen-javascript-transformer.md +++ b/docs/docs/transformers/gen-javascript-transformer.md @@ -251,6 +251,38 @@ const newValue = neosync.transformFullName(value, { + + +### transformHash + +Transforms input into a hash based on the configured algorithm + +**Parameters** + +**Value** +Type: Any +Description: Value that will be transformed + +**Config** + +| Field | Type | Default | Required | Description | +| -------- | ---- | ------- | -------- | ----------- | +| algo | string | | true | The hashing algorithm to use. Oneof: md5, sha1, sha256, sha512. Defaults to md5. + +**Example** + +```javascript + +const newValue = neosync.transformHash(value, { + algo: "", +}); + +``` + + + diff --git a/frontend/apps/web/@types/neosync-transformers.d.ts b/frontend/apps/web/@types/neosync-transformers.d.ts index 75ce0af06d..44ff49f397 100644 --- a/frontend/apps/web/@types/neosync-transformers.d.ts +++ b/frontend/apps/web/@types/neosync-transformers.d.ts @@ -112,6 +112,17 @@ declare namespace neosync { declare function transformFullName(value: any, options: TransformFullNameOptions): any; + export interface TransformHashOptions { + /** The hashing algorithm to use. Oneof: md5, sha1, sha256, sha512. Defaults to md5. */ + algo: string; + } + + /** + * Transforms input into a hash based on the configured algorithm + */ + declare function transformHash(value: any, options: TransformHashOptions): any; + + export interface TransformInt64Options { /** Specifies the minimum value for the range of the int. */ randomizationRangeMin?: number; diff --git a/worker/pkg/benthos/transformers/benchmarks_test.go b/worker/pkg/benthos/transformers/benchmarks_test.go index 8914d6c7c4..fa44dfc721 100644 --- a/worker/pkg/benthos/transformers/benchmarks_test.go +++ b/worker/pkg/benthos/transformers/benchmarks_test.go @@ -553,6 +553,22 @@ func BenchmarkTransformFullName(b *testing.B) { } +func BenchmarkTransformHash(b *testing.B) { + transformer := NewTransformHash() + opts, err := NewTransformHashOpts(nil,) + if err != nil { + b.Fatal(err) + } + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := transformer.Transform("test", opts) + if err != nil { + b.Fatal(err) + } + } +} + + func BenchmarkTransformInt64(b *testing.B) { transformer := NewTransformInt64() opts, err := NewTransformInt64Opts(nil,nil,nil,) diff --git a/worker/pkg/benthos/transformers/gen_neosync_transformers.go b/worker/pkg/benthos/transformers/gen_neosync_transformers.go index 649f71bcb2..cb791c36b5 100644 --- a/worker/pkg/benthos/transformers/gen_neosync_transformers.go +++ b/worker/pkg/benthos/transformers/gen_neosync_transformers.go @@ -11,6 +11,7 @@ func GetNeosyncTransformers() []NeosyncTransformer { NewTransformFirstName(), NewTransformFloat64(), NewTransformFullName(), + NewTransformHash(), NewTransformInt64(), NewTransformInt64PhoneNumber(), NewTransformLastName(), diff --git a/worker/pkg/benthos/transformers/gen_transform_hash.go b/worker/pkg/benthos/transformers/gen_transform_hash.go new file mode 100644 index 0000000000..93fe763b62 --- /dev/null +++ b/worker/pkg/benthos/transformers/gen_transform_hash.go @@ -0,0 +1,67 @@ + +// Code generated by Neosync neosync_transformer_generator.go. DO NOT EDIT. +// source: transform_hash.go + +package transformers + +import ( + "strings" + "fmt" +) + +type TransformHash struct{} + +type TransformHashOpts struct { + algo string +} + +func NewTransformHash() *TransformHash { + return &TransformHash{} +} + +func NewTransformHashOpts( + algo string, +) (*TransformHashOpts, error) { + return &TransformHashOpts{ + algo: algo, + }, nil +} + +func (o *TransformHashOpts) BuildBloblangString( + valuePath string, +) string { + fnStr := []string{ + "value:this.%s", + "algo:%q", + } + + params := []any{ + valuePath, + o.algo, + } + + + + template := fmt.Sprintf("transform_hash(%s)", strings.Join(fnStr, ",")) + return fmt.Sprintf(template, params...) +} + +func (t *TransformHash) GetJsTemplateData() (*TemplateData, error) { + return &TemplateData{ + Name: "transformHash", + Description: "Transforms input into a hash based on the configured algorithm", + Example: "", + }, nil +} + +func (t *TransformHash) ParseOptions(opts map[string]any) (any, error) { + transformerOpts := &TransformHashOpts{} + + if _, ok := opts["algo"].(string); !ok { + return nil, fmt.Errorf("missing required argument. function: %s argument: %s", "transformHash", "algo") + } + algo := opts["algo"].(string) + transformerOpts.algo = algo + + return transformerOpts, nil +} diff --git a/worker/pkg/benthos/transformers/transform_hash.go b/worker/pkg/benthos/transformers/transform_hash.go new file mode 100644 index 0000000000..6381a7b86c --- /dev/null +++ b/worker/pkg/benthos/transformers/transform_hash.go @@ -0,0 +1,180 @@ +package transformers + +import ( + "crypto/md5" + "crypto/sha1" + "crypto/sha256" + "crypto/sha512" + "encoding/hex" + "errors" + "fmt" + "hash" + + mgmtv1alpha1 "github.com/nucleuscloud/neosync/backend/gen/go/protos/mgmt/v1alpha1" + "github.com/warpstreamlabs/bento/public/bloblang" +) + +// +neosyncTransformerBuilder:transform:transformHash + +type TransformHashAlgo string + +const ( + TransformHashAlgo_Md5 TransformHashAlgo = "md5" + TransformHashAlgo_Sha1 TransformHashAlgo = "sha1" + TransformHashAlgo_Sha256 TransformHashAlgo = "sha256" + TransformHashAlgo_Sha512 TransformHashAlgo = "sha512" +) + +func (a TransformHashAlgo) String() string { + return string(a) +} + +func isValidTransformHashAlgo(algo string) bool { + return algo == string(TransformHashAlgo_Md5) || + algo == string(TransformHashAlgo_Sha1) || + algo == string(TransformHashAlgo_Sha256) || + algo == string(TransformHashAlgo_Sha512) +} + +func NewTransformHashAlgoFromDto(dto mgmtv1alpha1.TransformHash_HashType) TransformHashAlgo { + switch dto { + case mgmtv1alpha1.TransformHash_HASH_TYPE_MD5: + return TransformHashAlgo_Md5 + case mgmtv1alpha1.TransformHash_HASH_TYPE_SHA1: + return TransformHashAlgo_Sha1 + case mgmtv1alpha1.TransformHash_HASH_TYPE_SHA256: + return TransformHashAlgo_Sha256 + case mgmtv1alpha1.TransformHash_HASH_TYPE_SHA512: + return TransformHashAlgo_Sha512 + default: + return TransformHashAlgo_Md5 + } +} + +func init() { + spec := bloblang.NewPluginSpec(). + Description("Transforms input into a hash based on the configured algorithm"). + Category("any"). + Param(bloblang.NewAnyParam("value").Optional()). + Param( + bloblang.NewStringParam("algo"). + Description("The hashing algorithm to use. Oneof: md5, sha1, sha256, sha512. Defaults to md5."). + Default(TransformHashAlgo_Md5.String()), + ) + + err := bloblang.RegisterFunctionV2("transform_hash", spec, func(args *bloblang.ParsedParams) (bloblang.Function, error) { + valuePtr, err := args.GetOptionalString("value") + if err != nil { + return nil, err + } + + var value string + if valuePtr != nil { + value = *valuePtr + } + + algoPtr, err := args.GetOptionalString("algo") + if err != nil { + return nil, err + } + + var algo string + if algoPtr != nil { + algo = *algoPtr + } + if !isValidTransformHashAlgo(algo) { + return nil, fmt.Errorf("invalid algo: %s", algo) + } + + hashFunc := hashToFunction(TransformHashAlgo(algo)) + + return func() (any, error) { + res, err := hashFunc(value) + if err != nil { + return nil, fmt.Errorf("unable to run transform_hash: %w", err) + } + return res, nil + }, nil + }) + + if err != nil { + panic(err) + } +} + +func NewTransformHashOptsFromConfig(config *mgmtv1alpha1.TransformHash) (*TransformHashOpts, error) { + if config == nil { + return NewTransformHashOpts("md5") + } + return NewTransformHashOpts(config.GetAlgo().String()) +} + +func (t *TransformHash) Transform(value, opts any) (any, error) { + parsedOpts, ok := opts.(*TransformHashOpts) + if !ok { + return nil, fmt.Errorf("invalid parsed opts: %T", opts) + } + _ = parsedOpts + + valueStr, ok := value.(string) + if !ok { + return nil, errors.New("value is not a string") + } + _ = valueStr + + // todo: implement this + return nil, nil +} + +func hashToFunction(algo TransformHashAlgo) func(any) (string, error) { + switch algo { + case TransformHashAlgo_Md5: + return func(a any) (string, error) { + return generateHash(md5.New(), a) //nolint:gosec + } + case TransformHashAlgo_Sha1: + return func(a any) (string, error) { + return generateHash(sha1.New(), a) //nolint:gosec + } + case TransformHashAlgo_Sha256: + return func(a any) (string, error) { + return generateHash(sha256.New(), a) + } + case TransformHashAlgo_Sha512: + return func(a any) (string, error) { + return generateHash(sha512.New(), a) + } + default: + return func(a any) (string, error) { + return generateHash(md5.New(), a) //nolint:gosec + } + } +} + +func generateHash(hasher hash.Hash, value any) (string, error) { + valueStr, err := valueToStringForHash(value) + if err != nil { + return "", err + } + return hashToString(hasher, valueStr) +} + +func valueToStringForHash(value any) (string, error) { + switch v := value.(type) { + case string: + return v, nil + case []byte: + return string(v), nil + // todo: handle more types + default: + return "", fmt.Errorf("invalid value type: %T", value) + } +} + +func hashToString(hasher hash.Hash, input string) (string, error) { + _, err := hasher.Write([]byte(input)) + if err != nil { + return "", err + } + return hex.EncodeToString(hasher.Sum(nil)), nil +} From 6c84690e1394429c3edd1f73cbb143afb26ed7bf Mon Sep 17 00:00:00 2001 From: Alisha Date: Thu, 3 Apr 2025 16:36:04 -0700 Subject: [PATCH 3/9] fix benthos spec parser --- .../gen-javascript-transformer.md | 4 +- .../apps/web/@types/neosync-transformers.d.ts | 2 +- .../neosync_transformer_generator/main.go | 22 +----- .../transformers/gen_transform_hash.go | 13 ++-- .../benthos/transformers/generator_utils.go | 69 ++++++++++++------- .../benthos/transformers/transform_hash.go | 15 ++-- 6 files changed, 63 insertions(+), 62 deletions(-) diff --git a/docs/docs/transformers/gen-javascript-transformer.md b/docs/docs/transformers/gen-javascript-transformer.md index 06975b6fa1..bf4a6442ff 100644 --- a/docs/docs/transformers/gen-javascript-transformer.md +++ b/docs/docs/transformers/gen-javascript-transformer.md @@ -269,14 +269,14 @@ Description: Value that will be transformed | Field | Type | Default | Required | Description | | -------- | ---- | ------- | -------- | ----------- | -| algo | string | | true | The hashing algorithm to use. Oneof: md5, sha1, sha256, sha512. Defaults to md5. +| algo | string | TransformHashAlgo_Md5.String() | false | The hashing algorithm to use. Oneof: md5, sha1, sha256, sha512. Defaults to md5. **Example** ```javascript const newValue = neosync.transformHash(value, { - algo: "", + algo: TransformHashAlgo_Md5.String(), }); ``` diff --git a/frontend/apps/web/@types/neosync-transformers.d.ts b/frontend/apps/web/@types/neosync-transformers.d.ts index 44ff49f397..df97f91970 100644 --- a/frontend/apps/web/@types/neosync-transformers.d.ts +++ b/frontend/apps/web/@types/neosync-transformers.d.ts @@ -114,7 +114,7 @@ declare namespace neosync { export interface TransformHashOptions { /** The hashing algorithm to use. Oneof: md5, sha1, sha256, sha512. Defaults to md5. */ - algo: string; + algo?: string; } /** diff --git a/tools/generators/neosync_transformer_generator/main.go b/tools/generators/neosync_transformer_generator/main.go index 8730778f15..a84d08fe8f 100644 --- a/tools/generators/neosync_transformer_generator/main.go +++ b/tools/generators/neosync_transformer_generator/main.go @@ -38,27 +38,6 @@ func main() { tf.Category = p.Category } - for _, tf := range transformerFuncs { - codeStr, err := generateCode(packageName, tf) - if err != nil { - fmt.Println("Error writing to output file:", err) - return - } - output := fmt.Sprintf("gen_%s", tf.SourceFile) - outputFile, err := os.Create(output) - if err != nil { - fmt.Println("Error creating output file:", err) - return - } - - _, err = outputFile.WriteString(codeStr) - if err != nil { - fmt.Println("Error writing to output file:", err) - return - } - outputFile.Close() - } - // generate transformer benchmarks benchmarkCode, err := generateBenchmarkCode(packageName, transformerFuncs) if err != nil { @@ -303,6 +282,7 @@ var testValues = map[string]any{ "float64": 123.45, "boolean": true, "email": `"test@test.com"`, + "any": `"test"`, } const benchmarkTemplate = ` diff --git a/worker/pkg/benthos/transformers/gen_transform_hash.go b/worker/pkg/benthos/transformers/gen_transform_hash.go index 93fe763b62..5203a04bee 100644 --- a/worker/pkg/benthos/transformers/gen_transform_hash.go +++ b/worker/pkg/benthos/transformers/gen_transform_hash.go @@ -20,8 +20,13 @@ func NewTransformHash() *TransformHash { } func NewTransformHashOpts( - algo string, + algoArg *string, ) (*TransformHashOpts, error) { + algo := string(TransformHashAlgo_Md5.String()) + if algoArg != nil { + algo = *algoArg + } + return &TransformHashOpts{ algo: algo, }, nil @@ -57,10 +62,10 @@ func (t *TransformHash) GetJsTemplateData() (*TemplateData, error) { func (t *TransformHash) ParseOptions(opts map[string]any) (any, error) { transformerOpts := &TransformHashOpts{} - if _, ok := opts["algo"].(string); !ok { - return nil, fmt.Errorf("missing required argument. function: %s argument: %s", "transformHash", "algo") + algo, ok := opts["algo"].(string) + if !ok { + algo = TransformHashAlgo_Md5.String() } - algo := opts["algo"].(string) transformerOpts.algo = algo return transformerOpts, nil diff --git a/worker/pkg/benthos/transformers/generator_utils.go b/worker/pkg/benthos/transformers/generator_utils.go index 9d04d8d235..7063aad730 100644 --- a/worker/pkg/benthos/transformers/generator_utils.go +++ b/worker/pkg/benthos/transformers/generator_utils.go @@ -92,13 +92,11 @@ func ExtractBenthosSpec(fileSet *token.FileSet) ([]*BenthosSpec, error) { if err != nil { return nil, fmt.Errorf("impossible to walk directories: %s", err) } + return transformerSpecs, nil } func ParseBloblangSpec(benthosSpec *BenthosSpec) (*ParsedBenthosSpec, error) { - paramRegex := regexp.MustCompile( - `bloblang\.New(\w+)Param\("(\w+)"\)(?:\.Optional\(\))?(?:\.Default\(([^()]*(?:\([^()]*\))?[^()]*)\))?(?:\.Description\("([^"]*)"\))?`, - ) specDescriptionRegex := regexp.MustCompile(`\.Description\("([^"]*)"\)`) params := []*BenthosSpecParam{} readFile, err := os.Open(benthosSpec.SourceFile) @@ -152,30 +150,22 @@ func ParseBloblangSpec(benthosSpec *BenthosSpec) (*ParsedBenthosSpec, error) { } } if strings.HasPrefix(line, "(") { - matches := paramRegex.FindStringSubmatch(line) - if len(matches) > 0 { - defaultVal := matches[3] - description := matches[4] - // seed hack - if strings.Contains(line, "Default(time.Now().UnixNano())") { - defaultVal = "time.Now().UnixNano()" - if specMatches := specDescriptionRegex.FindStringSubmatch(line); len( - specMatches, - ) > 0 { - description = specMatches[1] - } - } - param := &BenthosSpecParam{ - TypeStr: lowercaseFirst(matches[1]), - Name: toCamelCase(matches[2]), - BloblangName: matches[2], - IsOptional: strings.Contains(line, ".Optional()"), - HasDefault: defaultVal != "", - Default: defaultVal, - Description: description, - } - params = append(params, param) + paramType, paramName := extractParamTypeAndName(line) + if paramType == "" || paramName == "" { + return nil, fmt.Errorf("invalid param type and name: %s", line) } + paramDefault := extractParamDefault(line) + paramDescription := extractParamDescription(line) + param := &BenthosSpecParam{ + TypeStr: lowercaseFirst(paramType), + Name: toCamelCase(paramName), + BloblangName: paramName, + IsOptional: strings.Contains(line, ".Optional()"), + HasDefault: paramDefault != "", + Default: paramDefault, + Description: paramDescription, + } + params = append(params, param) } } @@ -192,6 +182,33 @@ func ParseBloblangSpec(benthosSpec *BenthosSpec) (*ParsedBenthosSpec, error) { }, nil } +func extractParamDefault(line string) string { + return regexExtract(line, regexp.MustCompile(`(?:\.Default\(([^()]*(?:\([^()]*\))?[^()]*)\))`)) +} + +func extractParamDescription(line string) string { + return regexExtract(line, regexp.MustCompile(`\.Description\("([^"]*)"\)`)) +} + +func extractParamTypeAndName(line string) (string, string) { + regex := regexp.MustCompile(`.New(\w+)Param\("(\w+)"\)`) + valueMatches := regex.FindStringSubmatch(line) + if len(valueMatches) == 3 { + return valueMatches[1], valueMatches[2] + } + return "", "" +} + +func regexExtract(line string, regex *regexp.Regexp) string { + var value string + if valueMatches := regex.FindStringSubmatch(line); len( + valueMatches, + ) > 0 { + value = valueMatches[1] + } + return value +} + func extractBloblangFunctionName(input, sourceFile string) (string, error) { // Looks for bloblang.RegisterFunctionV2 and captures the function name in quotes re := regexp.MustCompile(`RegisterFunctionV2\s*\(\s*"([^"]+)"`) diff --git a/worker/pkg/benthos/transformers/transform_hash.go b/worker/pkg/benthos/transformers/transform_hash.go index 6381a7b86c..481e03170d 100644 --- a/worker/pkg/benthos/transformers/transform_hash.go +++ b/worker/pkg/benthos/transformers/transform_hash.go @@ -11,7 +11,7 @@ import ( "hash" mgmtv1alpha1 "github.com/nucleuscloud/neosync/backend/gen/go/protos/mgmt/v1alpha1" - "github.com/warpstreamlabs/bento/public/bloblang" + "github.com/redpanda-data/benthos/v4/public/bloblang" ) // +neosyncTransformerBuilder:transform:transformHash @@ -103,10 +103,12 @@ func init() { } func NewTransformHashOptsFromConfig(config *mgmtv1alpha1.TransformHash) (*TransformHashOpts, error) { + defaultAlgo := TransformHashAlgo_Md5.String() if config == nil { - return NewTransformHashOpts("md5") + return NewTransformHashOpts(&defaultAlgo) } - return NewTransformHashOpts(config.GetAlgo().String()) + algo := config.GetAlgo().String() + return NewTransformHashOpts(&algo) } func (t *TransformHash) Transform(value, opts any) (any, error) { @@ -114,16 +116,13 @@ func (t *TransformHash) Transform(value, opts any) (any, error) { if !ok { return nil, fmt.Errorf("invalid parsed opts: %T", opts) } - _ = parsedOpts valueStr, ok := value.(string) if !ok { return nil, errors.New("value is not a string") } - _ = valueStr - - // todo: implement this - return nil, nil + hashFunc := hashToFunction(TransformHashAlgo(parsedOpts.algo)) + return hashFunc(valueStr) } func hashToFunction(algo TransformHashAlgo) func(any) (string, error) { From cdc6d50c7a537b2d213a4e35ea519c89a62a2320 Mon Sep 17 00:00:00 2001 From: Alisha Date: Mon, 7 Apr 2025 09:29:06 -0700 Subject: [PATCH 4/9] add transformer to frontend --- .../system_transformers.go | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/backend/services/mgmt/v1alpha1/transformers-service/system_transformers.go b/backend/services/mgmt/v1alpha1/transformers-service/system_transformers.go index 401cc4f588..4a8b30a534 100644 --- a/backend/services/mgmt/v1alpha1/transformers-service/system_transformers.go +++ b/backend/services/mgmt/v1alpha1/transformers-service/system_transformers.go @@ -19,6 +19,8 @@ var ( defaultGenerateIpv4 = mgmtv1alpha1.GenerateIpAddressType_GENERATE_IP_ADDRESS_TYPE_V4_PUBLIC + defaultTransformHashAlgo = mgmtv1alpha1.TransformHash_HASH_TYPE_MD5 + // base transformers baseSystemTransformers = []*mgmtv1alpha1.SystemTransformer{ { @@ -948,6 +950,26 @@ var ( }, }, }, + { + Name: "Transform Hash", + Description: "Hashes an existing value.", + DataType: mgmtv1alpha1.TransformerDataType_TRANSFORMER_DATA_TYPE_STRING, + DataTypes: []mgmtv1alpha1.TransformerDataType{ + mgmtv1alpha1.TransformerDataType_TRANSFORMER_DATA_TYPE_STRING, + mgmtv1alpha1.TransformerDataType_TRANSFORMER_DATA_TYPE_NULL, + }, + SupportedJobTypes: []mgmtv1alpha1.SupportedJobType{ + mgmtv1alpha1.SupportedJobType_SUPPORTED_JOB_TYPE_SYNC, + }, + Source: mgmtv1alpha1.TransformerSource_TRANSFORMER_SOURCE_TRANSFORM_HASH, + Config: &mgmtv1alpha1.TransformerConfig{ + Config: &mgmtv1alpha1.TransformerConfig_TransformHashConfig{ + TransformHashConfig: &mgmtv1alpha1.TransformHash{ + Algo: &defaultTransformHashAlgo, + }, + }, + }, + }, } // base transformers + ee transformers From 2ef5a41165c6927b60e9e5fae86dc16b6ea88c9f Mon Sep 17 00:00:00 2001 From: Alisha Date: Tue, 8 Apr 2025 13:05:10 -0700 Subject: [PATCH 5/9] add transformer config to yup --- frontend/apps/web/yup-validations/transformer-validations.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/apps/web/yup-validations/transformer-validations.ts b/frontend/apps/web/yup-validations/transformer-validations.ts index a949cde8ca..47fd85ea94 100644 --- a/frontend/apps/web/yup-validations/transformer-validations.ts +++ b/frontend/apps/web/yup-validations/transformer-validations.ts @@ -437,6 +437,7 @@ const TRANSFORMER_SCHEMA_CONFIGS = { generateIpAddressConfig: generateIpAddressConfig, transformUuidConfig: EMPTY_TRANSFORMER_VALUE_CONFIG, transformScrambleIdentityConfig: EMPTY_TRANSFORMER_VALUE_CONFIG, + transformHashConfig: EMPTY_TRANSFORMER_VALUE_CONFIG, transformPiiTextConfig: transformPiiTextConfig, } as const; From 053c7e8d1eb8b54dc10d8749c1d170376f5c18c1 Mon Sep 17 00:00:00 2001 From: Alisha Date: Tue, 8 Apr 2025 14:40:40 -0700 Subject: [PATCH 6/9] transformer hash config --- backend/sql/postgresql/models/transformers.go | 17 +++++++++++++++++ .../TransformerForms/TransformerForm.tsx | 16 ++++++++++++++++ frontend/apps/web/util/util.ts | 8 ++++++++ .../yup-validations/transformer-validations.ts | 6 +++++- .../builders/benthos-builder_test.go | 13 +++++++++++++ .../benthos-builder/builders/processors.go | 6 ++++++ .../pkg/benthos/transformers/generator_utils.go | 2 +- .../pkg/benthos/transformers/transform_hash.go | 12 ++++++++---- 8 files changed, 74 insertions(+), 6 deletions(-) diff --git a/backend/sql/postgresql/models/transformers.go b/backend/sql/postgresql/models/transformers.go index 303521b3fb..9490e7bfa6 100644 --- a/backend/sql/postgresql/models/transformers.go +++ b/backend/sql/postgresql/models/transformers.go @@ -60,6 +60,11 @@ type TransformerConfig struct { TransformUuid *TransformUuidConfig `json:"transformUuid,omitempty"` TransformScrambleIdentity *TransformScrambleIdentityConfig `json:"transformScrambleIdentity,omitempty"` TransformPiiText string `json:"transformPiiText,omitempty"` + TransformHash *TransformHashConfig `json:"transformHash,omitempty"` +} + +type TransformHashConfig struct { + Algo *int32 `json:"algo,omitempty"` } type TransformScrambleIdentityConfig struct{} @@ -410,6 +415,10 @@ func (t *TransformerConfig) FromTransformerConfigDto(tr *mgmtv1alpha1.Transforme return fmt.Errorf("unable to marshal transform pii text config: %w", err) } t.TransformPiiText = string(bits) + case *mgmtv1alpha1.TransformerConfig_TransformHashConfig: + t.TransformHash = &TransformHashConfig{ + Algo: (*int32)(tr.GetTransformHashConfig().Algo), + } default: t = &TransformerConfig{} } @@ -795,6 +804,14 @@ func (t *TransformerConfig) ToTransformerConfigDto() (*mgmtv1alpha1.TransformerC TransformPiiTextConfig: v, }, }, nil + case t.TransformHash != nil: + return &mgmtv1alpha1.TransformerConfig{ + Config: &mgmtv1alpha1.TransformerConfig_TransformHashConfig{ + TransformHashConfig: &mgmtv1alpha1.TransformHash{ + Algo: (*mgmtv1alpha1.TransformHash_HashType)(t.TransformHash.Algo), + }, + }, + }, nil default: return &mgmtv1alpha1.TransformerConfig{}, nil } diff --git a/frontend/apps/web/app/(mgmt)/[account]/new/transformer/TransformerForms/TransformerForm.tsx b/frontend/apps/web/app/(mgmt)/[account]/new/transformer/TransformerForms/TransformerForm.tsx index 9573b75154..c68f5b938f 100644 --- a/frontend/apps/web/app/(mgmt)/[account]/new/transformer/TransformerForms/TransformerForm.tsx +++ b/frontend/apps/web/app/(mgmt)/[account]/new/transformer/TransformerForms/TransformerForm.tsx @@ -22,6 +22,7 @@ import TransformEmailForm from './TransformEmailForm'; import TransformFirstNameForm from './TransformFirstNameForm'; import TransformFloat64Form from './TransformFloat64Form'; import TransformFullNameForm from './TransformFullNameForm'; +import TransformHashForm from './TransformHashForm'; import TransformInt64Form from './TransformInt64Form'; import TransformIntPhoneNumberForm from './TransformInt64PhoneForm'; import TransformJavascriptForm from './TransformJavascriptForm'; @@ -434,6 +435,21 @@ export default function TransformerForm(props: Props): ReactElement { errors={errors?.config?.value} /> ); + case 'transformHashConfig': + return ( + + setValue( + create(TransformerConfigSchema, { + config: { case: valConfig.case, value: newVal }, + }) + ) + } + isDisabled={disabled} + errors={errors?.config?.value} + /> + ); default: return NoConfigComponent ?? ; } diff --git a/frontend/apps/web/util/util.ts b/frontend/apps/web/util/util.ts index e9f0186cd3..a0f5ddf206 100644 --- a/frontend/apps/web/util/util.ts +++ b/frontend/apps/web/util/util.ts @@ -13,6 +13,7 @@ import { SystemTransformerSchema, TransformerDataType, TransformerSource, + TransformHash_HashType, UserDefinedTransformer, } from '@neosync/sdk'; import { format } from 'date-fns'; @@ -155,6 +156,13 @@ export function getStorageClassString( return value ? value.toLowerCase() : 'unknown'; } +export function getTransformHashTypeString( + hashType: TransformHash_HashType +): string { + const value = TransformHash_HashType[hashType]; + return value ? value.toLowerCase() : 'unknown'; +} + // Given the currently selected transformer mapping config, return the relevant Transformer export function getTransformerFromField( handler: TransformerHandler, diff --git a/frontend/apps/web/yup-validations/transformer-validations.ts b/frontend/apps/web/yup-validations/transformer-validations.ts index 47fd85ea94..43ff1305f0 100644 --- a/frontend/apps/web/yup-validations/transformer-validations.ts +++ b/frontend/apps/web/yup-validations/transformer-validations.ts @@ -371,6 +371,10 @@ const generateIpAddressConfig = Yup.object({ ipType: Yup.string().default('GENERATE_IP_ADDRESS_TYPE_V4_PUBLIC'), }); +const transfromHashConfig = Yup.object({ + algo: Yup.string().default('TRANSFORM_HASH_ALGO_SHA256'), +}); + type ConfigType = TransformerConfig['config']; // Helper function to extract the 'case' property from a config type @@ -437,7 +441,7 @@ const TRANSFORMER_SCHEMA_CONFIGS = { generateIpAddressConfig: generateIpAddressConfig, transformUuidConfig: EMPTY_TRANSFORMER_VALUE_CONFIG, transformScrambleIdentityConfig: EMPTY_TRANSFORMER_VALUE_CONFIG, - transformHashConfig: EMPTY_TRANSFORMER_VALUE_CONFIG, + transformHashConfig: transfromHashConfig, transformPiiTextConfig: transformPiiTextConfig, } as const; diff --git a/internal/benthos/benthos-builder/builders/benthos-builder_test.go b/internal/benthos/benthos-builder/builders/benthos-builder_test.go index bd8fdf7f17..335091df3d 100644 --- a/internal/benthos/benthos-builder/builders/benthos-builder_test.go +++ b/internal/benthos/benthos-builder/builders/benthos-builder_test.go @@ -954,6 +954,16 @@ func Test_computeMutationFunction_Validate_Bloblang_Output(t *testing.T) { }, }, }, + { + Source: mgmtv1alpha1.TransformerSource_TRANSFORMER_SOURCE_TRANSFORM_HASH, + Config: &mgmtv1alpha1.TransformerConfig{ + Config: &mgmtv1alpha1.TransformerConfig_TransformHashConfig{ + TransformHashConfig: &mgmtv1alpha1.TransformHash{ + Algo: gotypeutil.ToPtr(mgmtv1alpha1.TransformHash_HASH_TYPE_SHA256), + }, + }, + }, + }, } emailColInfo := &sqlmanager_shared.DatabaseSchemaRow{ @@ -1113,6 +1123,9 @@ func Test_computeMutationFunction_Validate_Bloblang_Output_EmptyConfigs(t *testi { Config: &mgmtv1alpha1.TransformerConfig{Config: &mgmtv1alpha1.TransformerConfig_TransformPiiTextConfig{}}, }, + { + Config: &mgmtv1alpha1.TransformerConfig{Config: &mgmtv1alpha1.TransformerConfig_TransformHashConfig{}}, + }, } emailColInfo := &sqlmanager_shared.DatabaseSchemaRow{ diff --git a/internal/benthos/benthos-builder/builders/processors.go b/internal/benthos/benthos-builder/builders/processors.go index 380e0496bd..b93be66a21 100644 --- a/internal/benthos/benthos-builder/builders/processors.go +++ b/internal/benthos/benthos-builder/builders/processors.go @@ -832,6 +832,12 @@ func computeMutationFunction( return "", fmt.Errorf("unable to build bloblang string for TransformPiiText: %w", err) } return bloblangString, nil + case *mgmtv1alpha1.TransformerConfig_TransformHashConfig: + opts, err := transformers.NewTransformHashOptsFromConfig(cfg.TransformHashConfig) + if err != nil { + return "", fmt.Errorf("error in TransformHashOptsFromConfig: %w", err) + } + return opts.BuildBloblangString(formattedColPath), nil default: return "", fmt.Errorf("unsupported transformer: %T", cfg) } diff --git a/worker/pkg/benthos/transformers/generator_utils.go b/worker/pkg/benthos/transformers/generator_utils.go index 7063aad730..f748244d26 100644 --- a/worker/pkg/benthos/transformers/generator_utils.go +++ b/worker/pkg/benthos/transformers/generator_utils.go @@ -190,7 +190,7 @@ func extractParamDescription(line string) string { return regexExtract(line, regexp.MustCompile(`\.Description\("([^"]*)"\)`)) } -func extractParamTypeAndName(line string) (string, string) { +func extractParamTypeAndName(line string) (typestr, name string) { regex := regexp.MustCompile(`.New(\w+)Param\("(\w+)"\)`) valueMatches := regex.FindStringSubmatch(line) if len(valueMatches) == 3 { diff --git a/worker/pkg/benthos/transformers/transform_hash.go b/worker/pkg/benthos/transformers/transform_hash.go index 481e03170d..77835f68d3 100644 --- a/worker/pkg/benthos/transformers/transform_hash.go +++ b/worker/pkg/benthos/transformers/transform_hash.go @@ -1,8 +1,8 @@ package transformers import ( - "crypto/md5" - "crypto/sha1" + "crypto/md5" //nolint:gosec + "crypto/sha1" //nolint:gosec "crypto/sha256" "crypto/sha512" "encoding/hex" @@ -107,8 +107,12 @@ func NewTransformHashOptsFromConfig(config *mgmtv1alpha1.TransformHash) (*Transf if config == nil { return NewTransformHashOpts(&defaultAlgo) } - algo := config.GetAlgo().String() - return NewTransformHashOpts(&algo) + var algo *string + if config.Algo != nil { + algoTypeStr := NewTransformHashAlgoFromDto(config.GetAlgo()).String() + algo = &algoTypeStr + } + return NewTransformHashOpts(algo) } func (t *TransformHash) Transform(value, opts any) (any, error) { From 971eb96c8f9167cc56c22a59a4578c34181eeb2e Mon Sep 17 00:00:00 2001 From: Alisha Date: Tue, 8 Apr 2025 14:44:48 -0700 Subject: [PATCH 7/9] forgot form --- .../TransformerForms/TransformHashForm.tsx | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 frontend/apps/web/app/(mgmt)/[account]/new/transformer/TransformerForms/TransformHashForm.tsx diff --git a/frontend/apps/web/app/(mgmt)/[account]/new/transformer/TransformerForms/TransformHashForm.tsx b/frontend/apps/web/app/(mgmt)/[account]/new/transformer/TransformerForms/TransformHashForm.tsx new file mode 100644 index 0000000000..fe788004b4 --- /dev/null +++ b/frontend/apps/web/app/(mgmt)/[account]/new/transformer/TransformerForms/TransformHashForm.tsx @@ -0,0 +1,74 @@ +'use client'; +import FormErrorMessage from '@/components/FormErrorMessage'; +import { FormDescription, FormLabel } from '@/components/ui/form'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select'; +import { getTransformHashTypeString } from '@/util/util'; +import { create } from '@bufbuild/protobuf'; +import { + TransformHash, + TransformHash_HashType, + TransformHashSchema, +} from '@neosync/sdk'; +import { ReactElement } from 'react'; +import { TransformerConfigProps } from './util'; + +interface Props extends TransformerConfigProps {} + +export default function TransformHashForm(props: Props): ReactElement { + const { value, setValue, isDisabled, errors } = props; + + return ( + + + Email Type + + Select the algorithm you want to use to hash the data. + + + + + { + setValue( + create(TransformHashSchema, { + ...value, + // this is so hacky, but has to be done due to have we are encoding the incoming config and how the enums are converted to their wire-format string type + algo: parseInt(newValue, 10), + }) + ); + }} + value={value.algo?.toString()} + > + + + + + {[ + TransformHash_HashType.SHA256, + TransformHash_HashType.SHA512, + TransformHash_HashType.SHA1, + TransformHash_HashType.MD5, + ].map((algo) => ( + + {getTransformHashTypeString(algo)} + + ))} + + + + + + + ); +} From b697290f495f58e136786784deeb85f77764e59f Mon Sep 17 00:00:00 2001 From: Alisha Date: Tue, 8 Apr 2025 14:45:08 -0700 Subject: [PATCH 8/9] restore code --- .../neosync_transformer_generator/main.go | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tools/generators/neosync_transformer_generator/main.go b/tools/generators/neosync_transformer_generator/main.go index a84d08fe8f..255393488d 100644 --- a/tools/generators/neosync_transformer_generator/main.go +++ b/tools/generators/neosync_transformer_generator/main.go @@ -38,6 +38,27 @@ func main() { tf.Category = p.Category } + for _, tf := range transformerFuncs { + codeStr, err := generateCode(packageName, tf) + if err != nil { + fmt.Println("Error writing to output file:", err) + return + } + output := fmt.Sprintf("gen_%s", tf.SourceFile) + outputFile, err := os.Create(output) + if err != nil { + fmt.Println("Error creating output file:", err) + return + } + + _, err = outputFile.WriteString(codeStr) + if err != nil { + fmt.Println("Error writing to output file:", err) + return + } + outputFile.Close() + } + // generate transformer benchmarks benchmarkCode, err := generateBenchmarkCode(packageName, transformerFuncs) if err != nil { From 39f81173e3cf46d4a8387bc99950e666f5a71b05 Mon Sep 17 00:00:00 2001 From: Alisha Date: Tue, 8 Apr 2025 16:34:18 -0700 Subject: [PATCH 9/9] handle empty and null --- .../benthos/transformers/transform_hash.go | 59 +++++++++++-------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/worker/pkg/benthos/transformers/transform_hash.go b/worker/pkg/benthos/transformers/transform_hash.go index 77835f68d3..29b12e50c9 100644 --- a/worker/pkg/benthos/transformers/transform_hash.go +++ b/worker/pkg/benthos/transformers/transform_hash.go @@ -6,7 +6,7 @@ import ( "crypto/sha256" "crypto/sha512" "encoding/hex" - "errors" + "encoding/json" "fmt" "hash" @@ -120,62 +120,69 @@ func (t *TransformHash) Transform(value, opts any) (any, error) { if !ok { return nil, fmt.Errorf("invalid parsed opts: %T", opts) } - - valueStr, ok := value.(string) - if !ok { - return nil, errors.New("value is not a string") - } hashFunc := hashToFunction(TransformHashAlgo(parsedOpts.algo)) - return hashFunc(valueStr) + return hashFunc(value) } -func hashToFunction(algo TransformHashAlgo) func(any) (string, error) { +func hashToFunction(algo TransformHashAlgo) func(any) (*string, error) { switch algo { case TransformHashAlgo_Md5: - return func(a any) (string, error) { + return func(a any) (*string, error) { return generateHash(md5.New(), a) //nolint:gosec } case TransformHashAlgo_Sha1: - return func(a any) (string, error) { + return func(a any) (*string, error) { return generateHash(sha1.New(), a) //nolint:gosec } case TransformHashAlgo_Sha256: - return func(a any) (string, error) { + return func(a any) (*string, error) { return generateHash(sha256.New(), a) } case TransformHashAlgo_Sha512: - return func(a any) (string, error) { + return func(a any) (*string, error) { return generateHash(sha512.New(), a) } default: - return func(a any) (string, error) { + return func(a any) (*string, error) { return generateHash(md5.New(), a) //nolint:gosec } } } -func generateHash(hasher hash.Hash, value any) (string, error) { - valueStr, err := valueToStringForHash(value) +func generateHash(hasher hash.Hash, value any) (*string, error) { + if value == nil { + return nil, nil + } else if value == "" { + emptyStr := "" + return &emptyStr, nil + } + + bits, err := convertAnyToBytes(value) if err != nil { - return "", err + return nil, fmt.Errorf("failed to convert value to bytes: %w", err) + } + hashStr, err := hashToString(hasher, bits) + if err != nil { + return nil, fmt.Errorf("failed to hash value: %w", err) } - return hashToString(hasher, valueStr) + return &hashStr, nil } -func valueToStringForHash(value any) (string, error) { - switch v := value.(type) { - case string: - return v, nil +func convertAnyToBytes(v any) ([]byte, error) { + switch x := v.(type) { + case nil: + return nil, nil case []byte: - return string(v), nil - // todo: handle more types + return x, nil + case string: + return []byte(x), nil default: - return "", fmt.Errorf("invalid value type: %T", value) + return json.Marshal(x) } } -func hashToString(hasher hash.Hash, input string) (string, error) { - _, err := hasher.Write([]byte(input)) +func hashToString(hasher hash.Hash, input []byte) (string, error) { + _, err := hasher.Write(input) if err != nil { return "", err }