github.com/Uhtred009/v2ray-core-1@v4.31.2+incompatible/transport/internet/tls/config.pb.go (about)

     1  // Code generated by protoc-gen-go. DO NOT EDIT.
     2  // versions:
     3  // 	protoc-gen-go v1.25.0
     4  // 	protoc        v3.13.0
     5  // source: transport/internet/tls/config.proto
     6  
     7  package tls
     8  
     9  import (
    10  	proto "github.com/golang/protobuf/proto"
    11  	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
    12  	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
    13  	reflect "reflect"
    14  	sync "sync"
    15  )
    16  
    17  const (
    18  	// Verify that this generated code is sufficiently up-to-date.
    19  	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
    20  	// Verify that runtime/protoimpl is sufficiently up-to-date.
    21  	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
    22  )
    23  
    24  // This is a compile-time assertion that a sufficiently up-to-date version
    25  // of the legacy proto package is being used.
    26  const _ = proto.ProtoPackageIsVersion4
    27  
    28  type Certificate_Usage int32
    29  
    30  const (
    31  	Certificate_ENCIPHERMENT     Certificate_Usage = 0
    32  	Certificate_AUTHORITY_VERIFY Certificate_Usage = 1
    33  	Certificate_AUTHORITY_ISSUE  Certificate_Usage = 2
    34  )
    35  
    36  // Enum value maps for Certificate_Usage.
    37  var (
    38  	Certificate_Usage_name = map[int32]string{
    39  		0: "ENCIPHERMENT",
    40  		1: "AUTHORITY_VERIFY",
    41  		2: "AUTHORITY_ISSUE",
    42  	}
    43  	Certificate_Usage_value = map[string]int32{
    44  		"ENCIPHERMENT":     0,
    45  		"AUTHORITY_VERIFY": 1,
    46  		"AUTHORITY_ISSUE":  2,
    47  	}
    48  )
    49  
    50  func (x Certificate_Usage) Enum() *Certificate_Usage {
    51  	p := new(Certificate_Usage)
    52  	*p = x
    53  	return p
    54  }
    55  
    56  func (x Certificate_Usage) String() string {
    57  	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
    58  }
    59  
    60  func (Certificate_Usage) Descriptor() protoreflect.EnumDescriptor {
    61  	return file_transport_internet_tls_config_proto_enumTypes[0].Descriptor()
    62  }
    63  
    64  func (Certificate_Usage) Type() protoreflect.EnumType {
    65  	return &file_transport_internet_tls_config_proto_enumTypes[0]
    66  }
    67  
    68  func (x Certificate_Usage) Number() protoreflect.EnumNumber {
    69  	return protoreflect.EnumNumber(x)
    70  }
    71  
    72  // Deprecated: Use Certificate_Usage.Descriptor instead.
    73  func (Certificate_Usage) EnumDescriptor() ([]byte, []int) {
    74  	return file_transport_internet_tls_config_proto_rawDescGZIP(), []int{0, 0}
    75  }
    76  
    77  type Certificate struct {
    78  	state         protoimpl.MessageState
    79  	sizeCache     protoimpl.SizeCache
    80  	unknownFields protoimpl.UnknownFields
    81  
    82  	// TLS certificate in x509 format.
    83  	Certificate []byte `protobuf:"bytes,1,opt,name=Certificate,proto3" json:"Certificate,omitempty"`
    84  	// TLS key in x509 format.
    85  	Key   []byte            `protobuf:"bytes,2,opt,name=Key,proto3" json:"Key,omitempty"`
    86  	Usage Certificate_Usage `protobuf:"varint,3,opt,name=usage,proto3,enum=v2ray.core.transport.internet.tls.Certificate_Usage" json:"usage,omitempty"`
    87  }
    88  
    89  func (x *Certificate) Reset() {
    90  	*x = Certificate{}
    91  	if protoimpl.UnsafeEnabled {
    92  		mi := &file_transport_internet_tls_config_proto_msgTypes[0]
    93  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
    94  		ms.StoreMessageInfo(mi)
    95  	}
    96  }
    97  
    98  func (x *Certificate) String() string {
    99  	return protoimpl.X.MessageStringOf(x)
   100  }
   101  
   102  func (*Certificate) ProtoMessage() {}
   103  
   104  func (x *Certificate) ProtoReflect() protoreflect.Message {
   105  	mi := &file_transport_internet_tls_config_proto_msgTypes[0]
   106  	if protoimpl.UnsafeEnabled && x != nil {
   107  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   108  		if ms.LoadMessageInfo() == nil {
   109  			ms.StoreMessageInfo(mi)
   110  		}
   111  		return ms
   112  	}
   113  	return mi.MessageOf(x)
   114  }
   115  
   116  // Deprecated: Use Certificate.ProtoReflect.Descriptor instead.
   117  func (*Certificate) Descriptor() ([]byte, []int) {
   118  	return file_transport_internet_tls_config_proto_rawDescGZIP(), []int{0}
   119  }
   120  
   121  func (x *Certificate) GetCertificate() []byte {
   122  	if x != nil {
   123  		return x.Certificate
   124  	}
   125  	return nil
   126  }
   127  
   128  func (x *Certificate) GetKey() []byte {
   129  	if x != nil {
   130  		return x.Key
   131  	}
   132  	return nil
   133  }
   134  
   135  func (x *Certificate) GetUsage() Certificate_Usage {
   136  	if x != nil {
   137  		return x.Usage
   138  	}
   139  	return Certificate_ENCIPHERMENT
   140  }
   141  
   142  type Config struct {
   143  	state         protoimpl.MessageState
   144  	sizeCache     protoimpl.SizeCache
   145  	unknownFields protoimpl.UnknownFields
   146  
   147  	// Whether or not to allow self-signed certificates.
   148  	AllowInsecure bool `protobuf:"varint,1,opt,name=allow_insecure,json=allowInsecure,proto3" json:"allow_insecure,omitempty"`
   149  	// Whether or not to allow insecure cipher suites.
   150  	AllowInsecureCiphers bool `protobuf:"varint,5,opt,name=allow_insecure_ciphers,json=allowInsecureCiphers,proto3" json:"allow_insecure_ciphers,omitempty"`
   151  	// List of certificates to be served on server.
   152  	Certificate []*Certificate `protobuf:"bytes,2,rep,name=certificate,proto3" json:"certificate,omitempty"`
   153  	// Override server name.
   154  	ServerName string `protobuf:"bytes,3,opt,name=server_name,json=serverName,proto3" json:"server_name,omitempty"`
   155  	// Lists of string as ALPN values.
   156  	NextProtocol []string `protobuf:"bytes,4,rep,name=next_protocol,json=nextProtocol,proto3" json:"next_protocol,omitempty"`
   157  	// Whether or not to disable session (ticket) resumption.
   158  	DisableSessionResumption bool `protobuf:"varint,6,opt,name=disable_session_resumption,json=disableSessionResumption,proto3" json:"disable_session_resumption,omitempty"`
   159  	// If true, root certificates on the system will not be loaded for
   160  	// verification.
   161  	DisableSystemRoot bool `protobuf:"varint,7,opt,name=disable_system_root,json=disableSystemRoot,proto3" json:"disable_system_root,omitempty"`
   162  }
   163  
   164  func (x *Config) Reset() {
   165  	*x = Config{}
   166  	if protoimpl.UnsafeEnabled {
   167  		mi := &file_transport_internet_tls_config_proto_msgTypes[1]
   168  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   169  		ms.StoreMessageInfo(mi)
   170  	}
   171  }
   172  
   173  func (x *Config) String() string {
   174  	return protoimpl.X.MessageStringOf(x)
   175  }
   176  
   177  func (*Config) ProtoMessage() {}
   178  
   179  func (x *Config) ProtoReflect() protoreflect.Message {
   180  	mi := &file_transport_internet_tls_config_proto_msgTypes[1]
   181  	if protoimpl.UnsafeEnabled && x != nil {
   182  		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
   183  		if ms.LoadMessageInfo() == nil {
   184  			ms.StoreMessageInfo(mi)
   185  		}
   186  		return ms
   187  	}
   188  	return mi.MessageOf(x)
   189  }
   190  
   191  // Deprecated: Use Config.ProtoReflect.Descriptor instead.
   192  func (*Config) Descriptor() ([]byte, []int) {
   193  	return file_transport_internet_tls_config_proto_rawDescGZIP(), []int{1}
   194  }
   195  
   196  func (x *Config) GetAllowInsecure() bool {
   197  	if x != nil {
   198  		return x.AllowInsecure
   199  	}
   200  	return false
   201  }
   202  
   203  func (x *Config) GetAllowInsecureCiphers() bool {
   204  	if x != nil {
   205  		return x.AllowInsecureCiphers
   206  	}
   207  	return false
   208  }
   209  
   210  func (x *Config) GetCertificate() []*Certificate {
   211  	if x != nil {
   212  		return x.Certificate
   213  	}
   214  	return nil
   215  }
   216  
   217  func (x *Config) GetServerName() string {
   218  	if x != nil {
   219  		return x.ServerName
   220  	}
   221  	return ""
   222  }
   223  
   224  func (x *Config) GetNextProtocol() []string {
   225  	if x != nil {
   226  		return x.NextProtocol
   227  	}
   228  	return nil
   229  }
   230  
   231  func (x *Config) GetDisableSessionResumption() bool {
   232  	if x != nil {
   233  		return x.DisableSessionResumption
   234  	}
   235  	return false
   236  }
   237  
   238  func (x *Config) GetDisableSystemRoot() bool {
   239  	if x != nil {
   240  		return x.DisableSystemRoot
   241  	}
   242  	return false
   243  }
   244  
   245  var File_transport_internet_tls_config_proto protoreflect.FileDescriptor
   246  
   247  var file_transport_internet_tls_config_proto_rawDesc = []byte{
   248  	0x0a, 0x23, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x69, 0x6e, 0x74, 0x65,
   249  	0x72, 0x6e, 0x65, 0x74, 0x2f, 0x74, 0x6c, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
   250  	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x21, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72,
   251  	0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65,
   252  	0x72, 0x6e, 0x65, 0x74, 0x2e, 0x74, 0x6c, 0x73, 0x22, 0xd3, 0x01, 0x0a, 0x0b, 0x43, 0x65, 0x72,
   253  	0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x43, 0x65, 0x72, 0x74,
   254  	0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x43,
   255  	0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x4b, 0x65,
   256  	0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05,
   257  	0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x76, 0x32,
   258  	0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f,
   259  	0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x2e, 0x74, 0x6c, 0x73, 0x2e,
   260  	0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2e, 0x55, 0x73, 0x61, 0x67,
   261  	0x65, 0x52, 0x05, 0x75, 0x73, 0x61, 0x67, 0x65, 0x22, 0x44, 0x0a, 0x05, 0x55, 0x73, 0x61, 0x67,
   262  	0x65, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x4e, 0x43, 0x49, 0x50, 0x48, 0x45, 0x52, 0x4d, 0x45, 0x4e,
   263  	0x54, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x55, 0x54, 0x48, 0x4f, 0x52, 0x49, 0x54, 0x59,
   264  	0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x55, 0x54,
   265  	0x48, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x49, 0x53, 0x53, 0x55, 0x45, 0x10, 0x02, 0x22, 0xeb,
   266  	0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x6c,
   267  	0x6f, 0x77, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
   268  	0x08, 0x52, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x49, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65,
   269  	0x12, 0x34, 0x0a, 0x16, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75,
   270  	0x72, 0x65, 0x5f, 0x63, 0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08,
   271  	0x52, 0x14, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x49, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x43,
   272  	0x69, 0x70, 0x68, 0x65, 0x72, 0x73, 0x12, 0x50, 0x0a, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66,
   273  	0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x76, 0x32,
   274  	0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f,
   275  	0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x2e, 0x74, 0x6c, 0x73, 0x2e,
   276  	0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x63, 0x65, 0x72,
   277  	0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76,
   278  	0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73,
   279  	0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x65, 0x78,
   280  	0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09,
   281  	0x52, 0x0c, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x3c,
   282  	0x0a, 0x1a, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
   283  	0x6e, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01,
   284  	0x28, 0x08, 0x52, 0x18, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69,
   285  	0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13,
   286  	0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x72,
   287  	0x6f, 0x6f, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x64, 0x69, 0x73, 0x61, 0x62,
   288  	0x6c, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x52, 0x6f, 0x6f, 0x74, 0x42, 0x74, 0x0a, 0x25,
   289  	0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x74,
   290  	0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
   291  	0x74, 0x2e, 0x74, 0x6c, 0x73, 0x50, 0x01, 0x5a, 0x25, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63,
   292  	0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72,
   293  	0x74, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x2f, 0x74, 0x6c, 0x73, 0xaa, 0x02,
   294  	0x21, 0x56, 0x32, 0x52, 0x61, 0x79, 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x54, 0x72, 0x61, 0x6e,
   295  	0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x2e, 0x54,
   296  	0x6c, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
   297  }
   298  
   299  var (
   300  	file_transport_internet_tls_config_proto_rawDescOnce sync.Once
   301  	file_transport_internet_tls_config_proto_rawDescData = file_transport_internet_tls_config_proto_rawDesc
   302  )
   303  
   304  func file_transport_internet_tls_config_proto_rawDescGZIP() []byte {
   305  	file_transport_internet_tls_config_proto_rawDescOnce.Do(func() {
   306  		file_transport_internet_tls_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_transport_internet_tls_config_proto_rawDescData)
   307  	})
   308  	return file_transport_internet_tls_config_proto_rawDescData
   309  }
   310  
   311  var file_transport_internet_tls_config_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
   312  var file_transport_internet_tls_config_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
   313  var file_transport_internet_tls_config_proto_goTypes = []interface{}{
   314  	(Certificate_Usage)(0), // 0: v2ray.core.transport.internet.tls.Certificate.Usage
   315  	(*Certificate)(nil),    // 1: v2ray.core.transport.internet.tls.Certificate
   316  	(*Config)(nil),         // 2: v2ray.core.transport.internet.tls.Config
   317  }
   318  var file_transport_internet_tls_config_proto_depIdxs = []int32{
   319  	0, // 0: v2ray.core.transport.internet.tls.Certificate.usage:type_name -> v2ray.core.transport.internet.tls.Certificate.Usage
   320  	1, // 1: v2ray.core.transport.internet.tls.Config.certificate:type_name -> v2ray.core.transport.internet.tls.Certificate
   321  	2, // [2:2] is the sub-list for method output_type
   322  	2, // [2:2] is the sub-list for method input_type
   323  	2, // [2:2] is the sub-list for extension type_name
   324  	2, // [2:2] is the sub-list for extension extendee
   325  	0, // [0:2] is the sub-list for field type_name
   326  }
   327  
   328  func init() { file_transport_internet_tls_config_proto_init() }
   329  func file_transport_internet_tls_config_proto_init() {
   330  	if File_transport_internet_tls_config_proto != nil {
   331  		return
   332  	}
   333  	if !protoimpl.UnsafeEnabled {
   334  		file_transport_internet_tls_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
   335  			switch v := v.(*Certificate); i {
   336  			case 0:
   337  				return &v.state
   338  			case 1:
   339  				return &v.sizeCache
   340  			case 2:
   341  				return &v.unknownFields
   342  			default:
   343  				return nil
   344  			}
   345  		}
   346  		file_transport_internet_tls_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
   347  			switch v := v.(*Config); i {
   348  			case 0:
   349  				return &v.state
   350  			case 1:
   351  				return &v.sizeCache
   352  			case 2:
   353  				return &v.unknownFields
   354  			default:
   355  				return nil
   356  			}
   357  		}
   358  	}
   359  	type x struct{}
   360  	out := protoimpl.TypeBuilder{
   361  		File: protoimpl.DescBuilder{
   362  			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
   363  			RawDescriptor: file_transport_internet_tls_config_proto_rawDesc,
   364  			NumEnums:      1,
   365  			NumMessages:   2,
   366  			NumExtensions: 0,
   367  			NumServices:   0,
   368  		},
   369  		GoTypes:           file_transport_internet_tls_config_proto_goTypes,
   370  		DependencyIndexes: file_transport_internet_tls_config_proto_depIdxs,
   371  		EnumInfos:         file_transport_internet_tls_config_proto_enumTypes,
   372  		MessageInfos:      file_transport_internet_tls_config_proto_msgTypes,
   373  	}.Build()
   374  	File_transport_internet_tls_config_proto = out.File
   375  	file_transport_internet_tls_config_proto_rawDesc = nil
   376  	file_transport_internet_tls_config_proto_goTypes = nil
   377  	file_transport_internet_tls_config_proto_depIdxs = nil
   378  }