github.com/ferranbt/nomad@v0.9.3-0.20190607002617-85c449b7667c/plugins/device/proto/device.pb.go (about)

     1  // Code generated by protoc-gen-go. DO NOT EDIT.
     2  // source: plugins/device/proto/device.proto
     3  
     4  package proto
     5  
     6  import proto "github.com/golang/protobuf/proto"
     7  import fmt "fmt"
     8  import math "math"
     9  import duration "github.com/golang/protobuf/ptypes/duration"
    10  import timestamp "github.com/golang/protobuf/ptypes/timestamp"
    11  import proto1 "github.com/hashicorp/nomad/plugins/shared/structs/proto"
    12  
    13  import (
    14  	context "golang.org/x/net/context"
    15  	grpc "google.golang.org/grpc"
    16  )
    17  
    18  // Reference imports to suppress errors if they are not otherwise used.
    19  var _ = proto.Marshal
    20  var _ = fmt.Errorf
    21  var _ = math.Inf
    22  
    23  // This is a compile-time assertion to ensure that this generated file
    24  // is compatible with the proto package it is being compiled against.
    25  // A compilation error at this line likely means your copy of the
    26  // proto package needs to be updated.
    27  const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
    28  
    29  // FingerprintRequest is used to request for devices to be fingerprinted.
    30  type FingerprintRequest struct {
    31  	XXX_NoUnkeyedLiteral struct{} `json:"-"`
    32  	XXX_unrecognized     []byte   `json:"-"`
    33  	XXX_sizecache        int32    `json:"-"`
    34  }
    35  
    36  func (m *FingerprintRequest) Reset()         { *m = FingerprintRequest{} }
    37  func (m *FingerprintRequest) String() string { return proto.CompactTextString(m) }
    38  func (*FingerprintRequest) ProtoMessage()    {}
    39  func (*FingerprintRequest) Descriptor() ([]byte, []int) {
    40  	return fileDescriptor_device_a4d1cccedbd8401c, []int{0}
    41  }
    42  func (m *FingerprintRequest) XXX_Unmarshal(b []byte) error {
    43  	return xxx_messageInfo_FingerprintRequest.Unmarshal(m, b)
    44  }
    45  func (m *FingerprintRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    46  	return xxx_messageInfo_FingerprintRequest.Marshal(b, m, deterministic)
    47  }
    48  func (dst *FingerprintRequest) XXX_Merge(src proto.Message) {
    49  	xxx_messageInfo_FingerprintRequest.Merge(dst, src)
    50  }
    51  func (m *FingerprintRequest) XXX_Size() int {
    52  	return xxx_messageInfo_FingerprintRequest.Size(m)
    53  }
    54  func (m *FingerprintRequest) XXX_DiscardUnknown() {
    55  	xxx_messageInfo_FingerprintRequest.DiscardUnknown(m)
    56  }
    57  
    58  var xxx_messageInfo_FingerprintRequest proto.InternalMessageInfo
    59  
    60  // FingerprintResponse returns a set of detected devices.
    61  type FingerprintResponse struct {
    62  	// device_group is a group of devices that share a vendor, device_type, and
    63  	// device_name. This is returned as a set so that a single plugin could
    64  	// potentially detect several device types and models.
    65  	DeviceGroup          []*DeviceGroup `protobuf:"bytes,1,rep,name=device_group,json=deviceGroup,proto3" json:"device_group,omitempty"`
    66  	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
    67  	XXX_unrecognized     []byte         `json:"-"`
    68  	XXX_sizecache        int32          `json:"-"`
    69  }
    70  
    71  func (m *FingerprintResponse) Reset()         { *m = FingerprintResponse{} }
    72  func (m *FingerprintResponse) String() string { return proto.CompactTextString(m) }
    73  func (*FingerprintResponse) ProtoMessage()    {}
    74  func (*FingerprintResponse) Descriptor() ([]byte, []int) {
    75  	return fileDescriptor_device_a4d1cccedbd8401c, []int{1}
    76  }
    77  func (m *FingerprintResponse) XXX_Unmarshal(b []byte) error {
    78  	return xxx_messageInfo_FingerprintResponse.Unmarshal(m, b)
    79  }
    80  func (m *FingerprintResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
    81  	return xxx_messageInfo_FingerprintResponse.Marshal(b, m, deterministic)
    82  }
    83  func (dst *FingerprintResponse) XXX_Merge(src proto.Message) {
    84  	xxx_messageInfo_FingerprintResponse.Merge(dst, src)
    85  }
    86  func (m *FingerprintResponse) XXX_Size() int {
    87  	return xxx_messageInfo_FingerprintResponse.Size(m)
    88  }
    89  func (m *FingerprintResponse) XXX_DiscardUnknown() {
    90  	xxx_messageInfo_FingerprintResponse.DiscardUnknown(m)
    91  }
    92  
    93  var xxx_messageInfo_FingerprintResponse proto.InternalMessageInfo
    94  
    95  func (m *FingerprintResponse) GetDeviceGroup() []*DeviceGroup {
    96  	if m != nil {
    97  		return m.DeviceGroup
    98  	}
    99  	return nil
   100  }
   101  
   102  // DeviceGroup is a group of devices that share a vendor, device type and name.
   103  type DeviceGroup struct {
   104  	// vendor is the name of the vendor of the device
   105  	Vendor string `protobuf:"bytes,1,opt,name=vendor,proto3" json:"vendor,omitempty"`
   106  	// device_type is the type of the device (gpu, fpga, etc).
   107  	DeviceType string `protobuf:"bytes,2,opt,name=device_type,json=deviceType,proto3" json:"device_type,omitempty"`
   108  	// device_name is the name of the device.
   109  	DeviceName string `protobuf:"bytes,3,opt,name=device_name,json=deviceName,proto3" json:"device_name,omitempty"`
   110  	// devices is the set of devices detected by the plugin.
   111  	Devices []*DetectedDevice `protobuf:"bytes,4,rep,name=devices,proto3" json:"devices,omitempty"`
   112  	// attributes allows adding attributes to be used for constraints or
   113  	// affinities.
   114  	Attributes           map[string]*proto1.Attribute `protobuf:"bytes,5,rep,name=attributes,proto3" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
   115  	XXX_NoUnkeyedLiteral struct{}                     `json:"-"`
   116  	XXX_unrecognized     []byte                       `json:"-"`
   117  	XXX_sizecache        int32                        `json:"-"`
   118  }
   119  
   120  func (m *DeviceGroup) Reset()         { *m = DeviceGroup{} }
   121  func (m *DeviceGroup) String() string { return proto.CompactTextString(m) }
   122  func (*DeviceGroup) ProtoMessage()    {}
   123  func (*DeviceGroup) Descriptor() ([]byte, []int) {
   124  	return fileDescriptor_device_a4d1cccedbd8401c, []int{2}
   125  }
   126  func (m *DeviceGroup) XXX_Unmarshal(b []byte) error {
   127  	return xxx_messageInfo_DeviceGroup.Unmarshal(m, b)
   128  }
   129  func (m *DeviceGroup) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
   130  	return xxx_messageInfo_DeviceGroup.Marshal(b, m, deterministic)
   131  }
   132  func (dst *DeviceGroup) XXX_Merge(src proto.Message) {
   133  	xxx_messageInfo_DeviceGroup.Merge(dst, src)
   134  }
   135  func (m *DeviceGroup) XXX_Size() int {
   136  	return xxx_messageInfo_DeviceGroup.Size(m)
   137  }
   138  func (m *DeviceGroup) XXX_DiscardUnknown() {
   139  	xxx_messageInfo_DeviceGroup.DiscardUnknown(m)
   140  }
   141  
   142  var xxx_messageInfo_DeviceGroup proto.InternalMessageInfo
   143  
   144  func (m *DeviceGroup) GetVendor() string {
   145  	if m != nil {
   146  		return m.Vendor
   147  	}
   148  	return ""
   149  }
   150  
   151  func (m *DeviceGroup) GetDeviceType() string {
   152  	if m != nil {
   153  		return m.DeviceType
   154  	}
   155  	return ""
   156  }
   157  
   158  func (m *DeviceGroup) GetDeviceName() string {
   159  	if m != nil {
   160  		return m.DeviceName
   161  	}
   162  	return ""
   163  }
   164  
   165  func (m *DeviceGroup) GetDevices() []*DetectedDevice {
   166  	if m != nil {
   167  		return m.Devices
   168  	}
   169  	return nil
   170  }
   171  
   172  func (m *DeviceGroup) GetAttributes() map[string]*proto1.Attribute {
   173  	if m != nil {
   174  		return m.Attributes
   175  	}
   176  	return nil
   177  }
   178  
   179  // DetectedDevice is a single detected device.
   180  type DetectedDevice struct {
   181  	// ID is the ID of the device. This ID is used during allocation and must be
   182  	// stable across restarts of the device driver.
   183  	ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"`
   184  	// Health of the device.
   185  	Healthy bool `protobuf:"varint,2,opt,name=healthy,proto3" json:"healthy,omitempty"`
   186  	// health_description allows the device plugin to optionally
   187  	// annotate the health field with a human readable reason.
   188  	HealthDescription string `protobuf:"bytes,3,opt,name=health_description,json=healthDescription,proto3" json:"health_description,omitempty"`
   189  	// hw_locality is optionally set to expose hardware locality information for
   190  	// more optimal placement decisions.
   191  	HwLocality           *DeviceLocality `protobuf:"bytes,4,opt,name=hw_locality,json=hwLocality,proto3" json:"hw_locality,omitempty"`
   192  	XXX_NoUnkeyedLiteral struct{}        `json:"-"`
   193  	XXX_unrecognized     []byte          `json:"-"`
   194  	XXX_sizecache        int32           `json:"-"`
   195  }
   196  
   197  func (m *DetectedDevice) Reset()         { *m = DetectedDevice{} }
   198  func (m *DetectedDevice) String() string { return proto.CompactTextString(m) }
   199  func (*DetectedDevice) ProtoMessage()    {}
   200  func (*DetectedDevice) Descriptor() ([]byte, []int) {
   201  	return fileDescriptor_device_a4d1cccedbd8401c, []int{3}
   202  }
   203  func (m *DetectedDevice) XXX_Unmarshal(b []byte) error {
   204  	return xxx_messageInfo_DetectedDevice.Unmarshal(m, b)
   205  }
   206  func (m *DetectedDevice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
   207  	return xxx_messageInfo_DetectedDevice.Marshal(b, m, deterministic)
   208  }
   209  func (dst *DetectedDevice) XXX_Merge(src proto.Message) {
   210  	xxx_messageInfo_DetectedDevice.Merge(dst, src)
   211  }
   212  func (m *DetectedDevice) XXX_Size() int {
   213  	return xxx_messageInfo_DetectedDevice.Size(m)
   214  }
   215  func (m *DetectedDevice) XXX_DiscardUnknown() {
   216  	xxx_messageInfo_DetectedDevice.DiscardUnknown(m)
   217  }
   218  
   219  var xxx_messageInfo_DetectedDevice proto.InternalMessageInfo
   220  
   221  func (m *DetectedDevice) GetID() string {
   222  	if m != nil {
   223  		return m.ID
   224  	}
   225  	return ""
   226  }
   227  
   228  func (m *DetectedDevice) GetHealthy() bool {
   229  	if m != nil {
   230  		return m.Healthy
   231  	}
   232  	return false
   233  }
   234  
   235  func (m *DetectedDevice) GetHealthDescription() string {
   236  	if m != nil {
   237  		return m.HealthDescription
   238  	}
   239  	return ""
   240  }
   241  
   242  func (m *DetectedDevice) GetHwLocality() *DeviceLocality {
   243  	if m != nil {
   244  		return m.HwLocality
   245  	}
   246  	return nil
   247  }
   248  
   249  // DeviceLocality is used to expose HW locality information about a device.
   250  type DeviceLocality struct {
   251  	// pci_bus_id is the PCI bus ID for the device. If reported, it
   252  	// allows Nomad to make NUMA aware optimizations.
   253  	PciBusId             string   `protobuf:"bytes,1,opt,name=pci_bus_id,json=pciBusId,proto3" json:"pci_bus_id,omitempty"`
   254  	XXX_NoUnkeyedLiteral struct{} `json:"-"`
   255  	XXX_unrecognized     []byte   `json:"-"`
   256  	XXX_sizecache        int32    `json:"-"`
   257  }
   258  
   259  func (m *DeviceLocality) Reset()         { *m = DeviceLocality{} }
   260  func (m *DeviceLocality) String() string { return proto.CompactTextString(m) }
   261  func (*DeviceLocality) ProtoMessage()    {}
   262  func (*DeviceLocality) Descriptor() ([]byte, []int) {
   263  	return fileDescriptor_device_a4d1cccedbd8401c, []int{4}
   264  }
   265  func (m *DeviceLocality) XXX_Unmarshal(b []byte) error {
   266  	return xxx_messageInfo_DeviceLocality.Unmarshal(m, b)
   267  }
   268  func (m *DeviceLocality) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
   269  	return xxx_messageInfo_DeviceLocality.Marshal(b, m, deterministic)
   270  }
   271  func (dst *DeviceLocality) XXX_Merge(src proto.Message) {
   272  	xxx_messageInfo_DeviceLocality.Merge(dst, src)
   273  }
   274  func (m *DeviceLocality) XXX_Size() int {
   275  	return xxx_messageInfo_DeviceLocality.Size(m)
   276  }
   277  func (m *DeviceLocality) XXX_DiscardUnknown() {
   278  	xxx_messageInfo_DeviceLocality.DiscardUnknown(m)
   279  }
   280  
   281  var xxx_messageInfo_DeviceLocality proto.InternalMessageInfo
   282  
   283  func (m *DeviceLocality) GetPciBusId() string {
   284  	if m != nil {
   285  		return m.PciBusId
   286  	}
   287  	return ""
   288  }
   289  
   290  // ReserveRequest is used to ask the device driver for information on
   291  // how to allocate the requested devices.
   292  type ReserveRequest struct {
   293  	// device_ids are the requested devices.
   294  	DeviceIds            []string `protobuf:"bytes,1,rep,name=device_ids,json=deviceIds,proto3" json:"device_ids,omitempty"`
   295  	XXX_NoUnkeyedLiteral struct{} `json:"-"`
   296  	XXX_unrecognized     []byte   `json:"-"`
   297  	XXX_sizecache        int32    `json:"-"`
   298  }
   299  
   300  func (m *ReserveRequest) Reset()         { *m = ReserveRequest{} }
   301  func (m *ReserveRequest) String() string { return proto.CompactTextString(m) }
   302  func (*ReserveRequest) ProtoMessage()    {}
   303  func (*ReserveRequest) Descriptor() ([]byte, []int) {
   304  	return fileDescriptor_device_a4d1cccedbd8401c, []int{5}
   305  }
   306  func (m *ReserveRequest) XXX_Unmarshal(b []byte) error {
   307  	return xxx_messageInfo_ReserveRequest.Unmarshal(m, b)
   308  }
   309  func (m *ReserveRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
   310  	return xxx_messageInfo_ReserveRequest.Marshal(b, m, deterministic)
   311  }
   312  func (dst *ReserveRequest) XXX_Merge(src proto.Message) {
   313  	xxx_messageInfo_ReserveRequest.Merge(dst, src)
   314  }
   315  func (m *ReserveRequest) XXX_Size() int {
   316  	return xxx_messageInfo_ReserveRequest.Size(m)
   317  }
   318  func (m *ReserveRequest) XXX_DiscardUnknown() {
   319  	xxx_messageInfo_ReserveRequest.DiscardUnknown(m)
   320  }
   321  
   322  var xxx_messageInfo_ReserveRequest proto.InternalMessageInfo
   323  
   324  func (m *ReserveRequest) GetDeviceIds() []string {
   325  	if m != nil {
   326  		return m.DeviceIds
   327  	}
   328  	return nil
   329  }
   330  
   331  // ReserveResponse informs Nomad how to expose the requested devices
   332  // to the the task.
   333  type ReserveResponse struct {
   334  	// container_res contains information on how to mount the device
   335  	// into a task isolated using container technologies (where the
   336  	// host is shared)
   337  	ContainerRes         *ContainerReservation `protobuf:"bytes,1,opt,name=container_res,json=containerRes,proto3" json:"container_res,omitempty"`
   338  	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
   339  	XXX_unrecognized     []byte                `json:"-"`
   340  	XXX_sizecache        int32                 `json:"-"`
   341  }
   342  
   343  func (m *ReserveResponse) Reset()         { *m = ReserveResponse{} }
   344  func (m *ReserveResponse) String() string { return proto.CompactTextString(m) }
   345  func (*ReserveResponse) ProtoMessage()    {}
   346  func (*ReserveResponse) Descriptor() ([]byte, []int) {
   347  	return fileDescriptor_device_a4d1cccedbd8401c, []int{6}
   348  }
   349  func (m *ReserveResponse) XXX_Unmarshal(b []byte) error {
   350  	return xxx_messageInfo_ReserveResponse.Unmarshal(m, b)
   351  }
   352  func (m *ReserveResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
   353  	return xxx_messageInfo_ReserveResponse.Marshal(b, m, deterministic)
   354  }
   355  func (dst *ReserveResponse) XXX_Merge(src proto.Message) {
   356  	xxx_messageInfo_ReserveResponse.Merge(dst, src)
   357  }
   358  func (m *ReserveResponse) XXX_Size() int {
   359  	return xxx_messageInfo_ReserveResponse.Size(m)
   360  }
   361  func (m *ReserveResponse) XXX_DiscardUnknown() {
   362  	xxx_messageInfo_ReserveResponse.DiscardUnknown(m)
   363  }
   364  
   365  var xxx_messageInfo_ReserveResponse proto.InternalMessageInfo
   366  
   367  func (m *ReserveResponse) GetContainerRes() *ContainerReservation {
   368  	if m != nil {
   369  		return m.ContainerRes
   370  	}
   371  	return nil
   372  }
   373  
   374  // ContainerReservation returns how to mount the device into a
   375  // container that shares the host OS.
   376  type ContainerReservation struct {
   377  	// List of environment variable to be set
   378  	Envs map[string]string `protobuf:"bytes,1,rep,name=envs,proto3" json:"envs,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
   379  	// Mounts for the task.
   380  	Mounts []*Mount `protobuf:"bytes,2,rep,name=mounts,proto3" json:"mounts,omitempty"`
   381  	// Devices for the task.
   382  	Devices              []*DeviceSpec `protobuf:"bytes,3,rep,name=devices,proto3" json:"devices,omitempty"`
   383  	XXX_NoUnkeyedLiteral struct{}      `json:"-"`
   384  	XXX_unrecognized     []byte        `json:"-"`
   385  	XXX_sizecache        int32         `json:"-"`
   386  }
   387  
   388  func (m *ContainerReservation) Reset()         { *m = ContainerReservation{} }
   389  func (m *ContainerReservation) String() string { return proto.CompactTextString(m) }
   390  func (*ContainerReservation) ProtoMessage()    {}
   391  func (*ContainerReservation) Descriptor() ([]byte, []int) {
   392  	return fileDescriptor_device_a4d1cccedbd8401c, []int{7}
   393  }
   394  func (m *ContainerReservation) XXX_Unmarshal(b []byte) error {
   395  	return xxx_messageInfo_ContainerReservation.Unmarshal(m, b)
   396  }
   397  func (m *ContainerReservation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
   398  	return xxx_messageInfo_ContainerReservation.Marshal(b, m, deterministic)
   399  }
   400  func (dst *ContainerReservation) XXX_Merge(src proto.Message) {
   401  	xxx_messageInfo_ContainerReservation.Merge(dst, src)
   402  }
   403  func (m *ContainerReservation) XXX_Size() int {
   404  	return xxx_messageInfo_ContainerReservation.Size(m)
   405  }
   406  func (m *ContainerReservation) XXX_DiscardUnknown() {
   407  	xxx_messageInfo_ContainerReservation.DiscardUnknown(m)
   408  }
   409  
   410  var xxx_messageInfo_ContainerReservation proto.InternalMessageInfo
   411  
   412  func (m *ContainerReservation) GetEnvs() map[string]string {
   413  	if m != nil {
   414  		return m.Envs
   415  	}
   416  	return nil
   417  }
   418  
   419  func (m *ContainerReservation) GetMounts() []*Mount {
   420  	if m != nil {
   421  		return m.Mounts
   422  	}
   423  	return nil
   424  }
   425  
   426  func (m *ContainerReservation) GetDevices() []*DeviceSpec {
   427  	if m != nil {
   428  		return m.Devices
   429  	}
   430  	return nil
   431  }
   432  
   433  // Mount specifies a host volume to mount into a task.
   434  // where device library or tools are installed on host and task
   435  type Mount struct {
   436  	// Path of the mount within the task.
   437  	TaskPath string `protobuf:"bytes,1,opt,name=task_path,json=taskPath,proto3" json:"task_path,omitempty"`
   438  	// Path of the mount on the host.
   439  	HostPath string `protobuf:"bytes,2,opt,name=host_path,json=hostPath,proto3" json:"host_path,omitempty"`
   440  	// If set, the mount is read-only.
   441  	ReadOnly             bool     `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"`
   442  	XXX_NoUnkeyedLiteral struct{} `json:"-"`
   443  	XXX_unrecognized     []byte   `json:"-"`
   444  	XXX_sizecache        int32    `json:"-"`
   445  }
   446  
   447  func (m *Mount) Reset()         { *m = Mount{} }
   448  func (m *Mount) String() string { return proto.CompactTextString(m) }
   449  func (*Mount) ProtoMessage()    {}
   450  func (*Mount) Descriptor() ([]byte, []int) {
   451  	return fileDescriptor_device_a4d1cccedbd8401c, []int{8}
   452  }
   453  func (m *Mount) XXX_Unmarshal(b []byte) error {
   454  	return xxx_messageInfo_Mount.Unmarshal(m, b)
   455  }
   456  func (m *Mount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
   457  	return xxx_messageInfo_Mount.Marshal(b, m, deterministic)
   458  }
   459  func (dst *Mount) XXX_Merge(src proto.Message) {
   460  	xxx_messageInfo_Mount.Merge(dst, src)
   461  }
   462  func (m *Mount) XXX_Size() int {
   463  	return xxx_messageInfo_Mount.Size(m)
   464  }
   465  func (m *Mount) XXX_DiscardUnknown() {
   466  	xxx_messageInfo_Mount.DiscardUnknown(m)
   467  }
   468  
   469  var xxx_messageInfo_Mount proto.InternalMessageInfo
   470  
   471  func (m *Mount) GetTaskPath() string {
   472  	if m != nil {
   473  		return m.TaskPath
   474  	}
   475  	return ""
   476  }
   477  
   478  func (m *Mount) GetHostPath() string {
   479  	if m != nil {
   480  		return m.HostPath
   481  	}
   482  	return ""
   483  }
   484  
   485  func (m *Mount) GetReadOnly() bool {
   486  	if m != nil {
   487  		return m.ReadOnly
   488  	}
   489  	return false
   490  }
   491  
   492  // DeviceSpec specifies a host device to mount into a task.
   493  type DeviceSpec struct {
   494  	// Path of the device within the task.
   495  	TaskPath string `protobuf:"bytes,1,opt,name=task_path,json=taskPath,proto3" json:"task_path,omitempty"`
   496  	// Path of the device on the host.
   497  	HostPath string `protobuf:"bytes,2,opt,name=host_path,json=hostPath,proto3" json:"host_path,omitempty"`
   498  	// Cgroups permissions of the device, candidates are one or more of
   499  	// * r - allows task to read from the specified device.
   500  	// * w - allows task to write to the specified device.
   501  	// * m - allows task to create device files that do not yet exist
   502  	Permissions          string   `protobuf:"bytes,3,opt,name=permissions,proto3" json:"permissions,omitempty"`
   503  	XXX_NoUnkeyedLiteral struct{} `json:"-"`
   504  	XXX_unrecognized     []byte   `json:"-"`
   505  	XXX_sizecache        int32    `json:"-"`
   506  }
   507  
   508  func (m *DeviceSpec) Reset()         { *m = DeviceSpec{} }
   509  func (m *DeviceSpec) String() string { return proto.CompactTextString(m) }
   510  func (*DeviceSpec) ProtoMessage()    {}
   511  func (*DeviceSpec) Descriptor() ([]byte, []int) {
   512  	return fileDescriptor_device_a4d1cccedbd8401c, []int{9}
   513  }
   514  func (m *DeviceSpec) XXX_Unmarshal(b []byte) error {
   515  	return xxx_messageInfo_DeviceSpec.Unmarshal(m, b)
   516  }
   517  func (m *DeviceSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
   518  	return xxx_messageInfo_DeviceSpec.Marshal(b, m, deterministic)
   519  }
   520  func (dst *DeviceSpec) XXX_Merge(src proto.Message) {
   521  	xxx_messageInfo_DeviceSpec.Merge(dst, src)
   522  }
   523  func (m *DeviceSpec) XXX_Size() int {
   524  	return xxx_messageInfo_DeviceSpec.Size(m)
   525  }
   526  func (m *DeviceSpec) XXX_DiscardUnknown() {
   527  	xxx_messageInfo_DeviceSpec.DiscardUnknown(m)
   528  }
   529  
   530  var xxx_messageInfo_DeviceSpec proto.InternalMessageInfo
   531  
   532  func (m *DeviceSpec) GetTaskPath() string {
   533  	if m != nil {
   534  		return m.TaskPath
   535  	}
   536  	return ""
   537  }
   538  
   539  func (m *DeviceSpec) GetHostPath() string {
   540  	if m != nil {
   541  		return m.HostPath
   542  	}
   543  	return ""
   544  }
   545  
   546  func (m *DeviceSpec) GetPermissions() string {
   547  	if m != nil {
   548  		return m.Permissions
   549  	}
   550  	return ""
   551  }
   552  
   553  // StatsRequest is used to parameterize the retrieval of statistics.
   554  type StatsRequest struct {
   555  	// collection_interval is the duration in which to collect statistics.
   556  	CollectionInterval   *duration.Duration `protobuf:"bytes,1,opt,name=collection_interval,json=collectionInterval,proto3" json:"collection_interval,omitempty"`
   557  	XXX_NoUnkeyedLiteral struct{}           `json:"-"`
   558  	XXX_unrecognized     []byte             `json:"-"`
   559  	XXX_sizecache        int32              `json:"-"`
   560  }
   561  
   562  func (m *StatsRequest) Reset()         { *m = StatsRequest{} }
   563  func (m *StatsRequest) String() string { return proto.CompactTextString(m) }
   564  func (*StatsRequest) ProtoMessage()    {}
   565  func (*StatsRequest) Descriptor() ([]byte, []int) {
   566  	return fileDescriptor_device_a4d1cccedbd8401c, []int{10}
   567  }
   568  func (m *StatsRequest) XXX_Unmarshal(b []byte) error {
   569  	return xxx_messageInfo_StatsRequest.Unmarshal(m, b)
   570  }
   571  func (m *StatsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
   572  	return xxx_messageInfo_StatsRequest.Marshal(b, m, deterministic)
   573  }
   574  func (dst *StatsRequest) XXX_Merge(src proto.Message) {
   575  	xxx_messageInfo_StatsRequest.Merge(dst, src)
   576  }
   577  func (m *StatsRequest) XXX_Size() int {
   578  	return xxx_messageInfo_StatsRequest.Size(m)
   579  }
   580  func (m *StatsRequest) XXX_DiscardUnknown() {
   581  	xxx_messageInfo_StatsRequest.DiscardUnknown(m)
   582  }
   583  
   584  var xxx_messageInfo_StatsRequest proto.InternalMessageInfo
   585  
   586  func (m *StatsRequest) GetCollectionInterval() *duration.Duration {
   587  	if m != nil {
   588  		return m.CollectionInterval
   589  	}
   590  	return nil
   591  }
   592  
   593  // StatsResponse returns the statistics for each device group.
   594  type StatsResponse struct {
   595  	// groups contains statistics for each device group.
   596  	Groups               []*DeviceGroupStats `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"`
   597  	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
   598  	XXX_unrecognized     []byte              `json:"-"`
   599  	XXX_sizecache        int32               `json:"-"`
   600  }
   601  
   602  func (m *StatsResponse) Reset()         { *m = StatsResponse{} }
   603  func (m *StatsResponse) String() string { return proto.CompactTextString(m) }
   604  func (*StatsResponse) ProtoMessage()    {}
   605  func (*StatsResponse) Descriptor() ([]byte, []int) {
   606  	return fileDescriptor_device_a4d1cccedbd8401c, []int{11}
   607  }
   608  func (m *StatsResponse) XXX_Unmarshal(b []byte) error {
   609  	return xxx_messageInfo_StatsResponse.Unmarshal(m, b)
   610  }
   611  func (m *StatsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
   612  	return xxx_messageInfo_StatsResponse.Marshal(b, m, deterministic)
   613  }
   614  func (dst *StatsResponse) XXX_Merge(src proto.Message) {
   615  	xxx_messageInfo_StatsResponse.Merge(dst, src)
   616  }
   617  func (m *StatsResponse) XXX_Size() int {
   618  	return xxx_messageInfo_StatsResponse.Size(m)
   619  }
   620  func (m *StatsResponse) XXX_DiscardUnknown() {
   621  	xxx_messageInfo_StatsResponse.DiscardUnknown(m)
   622  }
   623  
   624  var xxx_messageInfo_StatsResponse proto.InternalMessageInfo
   625  
   626  func (m *StatsResponse) GetGroups() []*DeviceGroupStats {
   627  	if m != nil {
   628  		return m.Groups
   629  	}
   630  	return nil
   631  }
   632  
   633  // DeviceGroupStats contains statistics for each device of a particular
   634  // device group, identified by the vendor, type and name of the device.
   635  type DeviceGroupStats struct {
   636  	Vendor string `protobuf:"bytes,1,opt,name=vendor,proto3" json:"vendor,omitempty"`
   637  	Type   string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"`
   638  	Name   string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"`
   639  	// instance_stats is a mapping of each device ID to its statistics.
   640  	InstanceStats        map[string]*DeviceStats `protobuf:"bytes,4,rep,name=instance_stats,json=instanceStats,proto3" json:"instance_stats,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
   641  	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
   642  	XXX_unrecognized     []byte                  `json:"-"`
   643  	XXX_sizecache        int32                   `json:"-"`
   644  }
   645  
   646  func (m *DeviceGroupStats) Reset()         { *m = DeviceGroupStats{} }
   647  func (m *DeviceGroupStats) String() string { return proto.CompactTextString(m) }
   648  func (*DeviceGroupStats) ProtoMessage()    {}
   649  func (*DeviceGroupStats) Descriptor() ([]byte, []int) {
   650  	return fileDescriptor_device_a4d1cccedbd8401c, []int{12}
   651  }
   652  func (m *DeviceGroupStats) XXX_Unmarshal(b []byte) error {
   653  	return xxx_messageInfo_DeviceGroupStats.Unmarshal(m, b)
   654  }
   655  func (m *DeviceGroupStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
   656  	return xxx_messageInfo_DeviceGroupStats.Marshal(b, m, deterministic)
   657  }
   658  func (dst *DeviceGroupStats) XXX_Merge(src proto.Message) {
   659  	xxx_messageInfo_DeviceGroupStats.Merge(dst, src)
   660  }
   661  func (m *DeviceGroupStats) XXX_Size() int {
   662  	return xxx_messageInfo_DeviceGroupStats.Size(m)
   663  }
   664  func (m *DeviceGroupStats) XXX_DiscardUnknown() {
   665  	xxx_messageInfo_DeviceGroupStats.DiscardUnknown(m)
   666  }
   667  
   668  var xxx_messageInfo_DeviceGroupStats proto.InternalMessageInfo
   669  
   670  func (m *DeviceGroupStats) GetVendor() string {
   671  	if m != nil {
   672  		return m.Vendor
   673  	}
   674  	return ""
   675  }
   676  
   677  func (m *DeviceGroupStats) GetType() string {
   678  	if m != nil {
   679  		return m.Type
   680  	}
   681  	return ""
   682  }
   683  
   684  func (m *DeviceGroupStats) GetName() string {
   685  	if m != nil {
   686  		return m.Name
   687  	}
   688  	return ""
   689  }
   690  
   691  func (m *DeviceGroupStats) GetInstanceStats() map[string]*DeviceStats {
   692  	if m != nil {
   693  		return m.InstanceStats
   694  	}
   695  	return nil
   696  }
   697  
   698  // DeviceStats is the statistics for an individual device
   699  type DeviceStats struct {
   700  	// summary exposes a single summary metric that should be the most
   701  	// informative to users.
   702  	Summary *proto1.StatValue `protobuf:"bytes,1,opt,name=summary,proto3" json:"summary,omitempty"`
   703  	// stats contains the verbose statistics for the device.
   704  	Stats *proto1.StatObject `protobuf:"bytes,2,opt,name=stats,proto3" json:"stats,omitempty"`
   705  	// timestamp is the time the statistics were collected.
   706  	Timestamp            *timestamp.Timestamp `protobuf:"bytes,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
   707  	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
   708  	XXX_unrecognized     []byte               `json:"-"`
   709  	XXX_sizecache        int32                `json:"-"`
   710  }
   711  
   712  func (m *DeviceStats) Reset()         { *m = DeviceStats{} }
   713  func (m *DeviceStats) String() string { return proto.CompactTextString(m) }
   714  func (*DeviceStats) ProtoMessage()    {}
   715  func (*DeviceStats) Descriptor() ([]byte, []int) {
   716  	return fileDescriptor_device_a4d1cccedbd8401c, []int{13}
   717  }
   718  func (m *DeviceStats) XXX_Unmarshal(b []byte) error {
   719  	return xxx_messageInfo_DeviceStats.Unmarshal(m, b)
   720  }
   721  func (m *DeviceStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
   722  	return xxx_messageInfo_DeviceStats.Marshal(b, m, deterministic)
   723  }
   724  func (dst *DeviceStats) XXX_Merge(src proto.Message) {
   725  	xxx_messageInfo_DeviceStats.Merge(dst, src)
   726  }
   727  func (m *DeviceStats) XXX_Size() int {
   728  	return xxx_messageInfo_DeviceStats.Size(m)
   729  }
   730  func (m *DeviceStats) XXX_DiscardUnknown() {
   731  	xxx_messageInfo_DeviceStats.DiscardUnknown(m)
   732  }
   733  
   734  var xxx_messageInfo_DeviceStats proto.InternalMessageInfo
   735  
   736  func (m *DeviceStats) GetSummary() *proto1.StatValue {
   737  	if m != nil {
   738  		return m.Summary
   739  	}
   740  	return nil
   741  }
   742  
   743  func (m *DeviceStats) GetStats() *proto1.StatObject {
   744  	if m != nil {
   745  		return m.Stats
   746  	}
   747  	return nil
   748  }
   749  
   750  func (m *DeviceStats) GetTimestamp() *timestamp.Timestamp {
   751  	if m != nil {
   752  		return m.Timestamp
   753  	}
   754  	return nil
   755  }
   756  
   757  func init() {
   758  	proto.RegisterType((*FingerprintRequest)(nil), "hashicorp.nomad.plugins.device.FingerprintRequest")
   759  	proto.RegisterType((*FingerprintResponse)(nil), "hashicorp.nomad.plugins.device.FingerprintResponse")
   760  	proto.RegisterType((*DeviceGroup)(nil), "hashicorp.nomad.plugins.device.DeviceGroup")
   761  	proto.RegisterMapType((map[string]*proto1.Attribute)(nil), "hashicorp.nomad.plugins.device.DeviceGroup.AttributesEntry")
   762  	proto.RegisterType((*DetectedDevice)(nil), "hashicorp.nomad.plugins.device.DetectedDevice")
   763  	proto.RegisterType((*DeviceLocality)(nil), "hashicorp.nomad.plugins.device.DeviceLocality")
   764  	proto.RegisterType((*ReserveRequest)(nil), "hashicorp.nomad.plugins.device.ReserveRequest")
   765  	proto.RegisterType((*ReserveResponse)(nil), "hashicorp.nomad.plugins.device.ReserveResponse")
   766  	proto.RegisterType((*ContainerReservation)(nil), "hashicorp.nomad.plugins.device.ContainerReservation")
   767  	proto.RegisterMapType((map[string]string)(nil), "hashicorp.nomad.plugins.device.ContainerReservation.EnvsEntry")
   768  	proto.RegisterType((*Mount)(nil), "hashicorp.nomad.plugins.device.Mount")
   769  	proto.RegisterType((*DeviceSpec)(nil), "hashicorp.nomad.plugins.device.DeviceSpec")
   770  	proto.RegisterType((*StatsRequest)(nil), "hashicorp.nomad.plugins.device.StatsRequest")
   771  	proto.RegisterType((*StatsResponse)(nil), "hashicorp.nomad.plugins.device.StatsResponse")
   772  	proto.RegisterType((*DeviceGroupStats)(nil), "hashicorp.nomad.plugins.device.DeviceGroupStats")
   773  	proto.RegisterMapType((map[string]*DeviceStats)(nil), "hashicorp.nomad.plugins.device.DeviceGroupStats.InstanceStatsEntry")
   774  	proto.RegisterType((*DeviceStats)(nil), "hashicorp.nomad.plugins.device.DeviceStats")
   775  }
   776  
   777  // Reference imports to suppress errors if they are not otherwise used.
   778  var _ context.Context
   779  var _ grpc.ClientConn
   780  
   781  // This is a compile-time assertion to ensure that this generated file
   782  // is compatible with the grpc package it is being compiled against.
   783  const _ = grpc.SupportPackageIsVersion4
   784  
   785  // DevicePluginClient is the client API for DevicePlugin service.
   786  //
   787  // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
   788  type DevicePluginClient interface {
   789  	// Fingerprint allows the device plugin to return a set of
   790  	// detected devices and provide a mechanism to update the state of
   791  	// the device.
   792  	Fingerprint(ctx context.Context, in *FingerprintRequest, opts ...grpc.CallOption) (DevicePlugin_FingerprintClient, error)
   793  	// Reserve is called by the client before starting an allocation
   794  	// that requires access to the plugin’s devices. The plugin can use
   795  	// this to run any setup steps and provides the mounting details to
   796  	// the Nomad client
   797  	Reserve(ctx context.Context, in *ReserveRequest, opts ...grpc.CallOption) (*ReserveResponse, error)
   798  	// Stats returns a stream of device statistics.
   799  	Stats(ctx context.Context, in *StatsRequest, opts ...grpc.CallOption) (DevicePlugin_StatsClient, error)
   800  }
   801  
   802  type devicePluginClient struct {
   803  	cc *grpc.ClientConn
   804  }
   805  
   806  func NewDevicePluginClient(cc *grpc.ClientConn) DevicePluginClient {
   807  	return &devicePluginClient{cc}
   808  }
   809  
   810  func (c *devicePluginClient) Fingerprint(ctx context.Context, in *FingerprintRequest, opts ...grpc.CallOption) (DevicePlugin_FingerprintClient, error) {
   811  	stream, err := c.cc.NewStream(ctx, &_DevicePlugin_serviceDesc.Streams[0], "/hashicorp.nomad.plugins.device.DevicePlugin/Fingerprint", opts...)
   812  	if err != nil {
   813  		return nil, err
   814  	}
   815  	x := &devicePluginFingerprintClient{stream}
   816  	if err := x.ClientStream.SendMsg(in); err != nil {
   817  		return nil, err
   818  	}
   819  	if err := x.ClientStream.CloseSend(); err != nil {
   820  		return nil, err
   821  	}
   822  	return x, nil
   823  }
   824  
   825  type DevicePlugin_FingerprintClient interface {
   826  	Recv() (*FingerprintResponse, error)
   827  	grpc.ClientStream
   828  }
   829  
   830  type devicePluginFingerprintClient struct {
   831  	grpc.ClientStream
   832  }
   833  
   834  func (x *devicePluginFingerprintClient) Recv() (*FingerprintResponse, error) {
   835  	m := new(FingerprintResponse)
   836  	if err := x.ClientStream.RecvMsg(m); err != nil {
   837  		return nil, err
   838  	}
   839  	return m, nil
   840  }
   841  
   842  func (c *devicePluginClient) Reserve(ctx context.Context, in *ReserveRequest, opts ...grpc.CallOption) (*ReserveResponse, error) {
   843  	out := new(ReserveResponse)
   844  	err := c.cc.Invoke(ctx, "/hashicorp.nomad.plugins.device.DevicePlugin/Reserve", in, out, opts...)
   845  	if err != nil {
   846  		return nil, err
   847  	}
   848  	return out, nil
   849  }
   850  
   851  func (c *devicePluginClient) Stats(ctx context.Context, in *StatsRequest, opts ...grpc.CallOption) (DevicePlugin_StatsClient, error) {
   852  	stream, err := c.cc.NewStream(ctx, &_DevicePlugin_serviceDesc.Streams[1], "/hashicorp.nomad.plugins.device.DevicePlugin/Stats", opts...)
   853  	if err != nil {
   854  		return nil, err
   855  	}
   856  	x := &devicePluginStatsClient{stream}
   857  	if err := x.ClientStream.SendMsg(in); err != nil {
   858  		return nil, err
   859  	}
   860  	if err := x.ClientStream.CloseSend(); err != nil {
   861  		return nil, err
   862  	}
   863  	return x, nil
   864  }
   865  
   866  type DevicePlugin_StatsClient interface {
   867  	Recv() (*StatsResponse, error)
   868  	grpc.ClientStream
   869  }
   870  
   871  type devicePluginStatsClient struct {
   872  	grpc.ClientStream
   873  }
   874  
   875  func (x *devicePluginStatsClient) Recv() (*StatsResponse, error) {
   876  	m := new(StatsResponse)
   877  	if err := x.ClientStream.RecvMsg(m); err != nil {
   878  		return nil, err
   879  	}
   880  	return m, nil
   881  }
   882  
   883  // DevicePluginServer is the server API for DevicePlugin service.
   884  type DevicePluginServer interface {
   885  	// Fingerprint allows the device plugin to return a set of
   886  	// detected devices and provide a mechanism to update the state of
   887  	// the device.
   888  	Fingerprint(*FingerprintRequest, DevicePlugin_FingerprintServer) error
   889  	// Reserve is called by the client before starting an allocation
   890  	// that requires access to the plugin’s devices. The plugin can use
   891  	// this to run any setup steps and provides the mounting details to
   892  	// the Nomad client
   893  	Reserve(context.Context, *ReserveRequest) (*ReserveResponse, error)
   894  	// Stats returns a stream of device statistics.
   895  	Stats(*StatsRequest, DevicePlugin_StatsServer) error
   896  }
   897  
   898  func RegisterDevicePluginServer(s *grpc.Server, srv DevicePluginServer) {
   899  	s.RegisterService(&_DevicePlugin_serviceDesc, srv)
   900  }
   901  
   902  func _DevicePlugin_Fingerprint_Handler(srv interface{}, stream grpc.ServerStream) error {
   903  	m := new(FingerprintRequest)
   904  	if err := stream.RecvMsg(m); err != nil {
   905  		return err
   906  	}
   907  	return srv.(DevicePluginServer).Fingerprint(m, &devicePluginFingerprintServer{stream})
   908  }
   909  
   910  type DevicePlugin_FingerprintServer interface {
   911  	Send(*FingerprintResponse) error
   912  	grpc.ServerStream
   913  }
   914  
   915  type devicePluginFingerprintServer struct {
   916  	grpc.ServerStream
   917  }
   918  
   919  func (x *devicePluginFingerprintServer) Send(m *FingerprintResponse) error {
   920  	return x.ServerStream.SendMsg(m)
   921  }
   922  
   923  func _DevicePlugin_Reserve_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
   924  	in := new(ReserveRequest)
   925  	if err := dec(in); err != nil {
   926  		return nil, err
   927  	}
   928  	if interceptor == nil {
   929  		return srv.(DevicePluginServer).Reserve(ctx, in)
   930  	}
   931  	info := &grpc.UnaryServerInfo{
   932  		Server:     srv,
   933  		FullMethod: "/hashicorp.nomad.plugins.device.DevicePlugin/Reserve",
   934  	}
   935  	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
   936  		return srv.(DevicePluginServer).Reserve(ctx, req.(*ReserveRequest))
   937  	}
   938  	return interceptor(ctx, in, info, handler)
   939  }
   940  
   941  func _DevicePlugin_Stats_Handler(srv interface{}, stream grpc.ServerStream) error {
   942  	m := new(StatsRequest)
   943  	if err := stream.RecvMsg(m); err != nil {
   944  		return err
   945  	}
   946  	return srv.(DevicePluginServer).Stats(m, &devicePluginStatsServer{stream})
   947  }
   948  
   949  type DevicePlugin_StatsServer interface {
   950  	Send(*StatsResponse) error
   951  	grpc.ServerStream
   952  }
   953  
   954  type devicePluginStatsServer struct {
   955  	grpc.ServerStream
   956  }
   957  
   958  func (x *devicePluginStatsServer) Send(m *StatsResponse) error {
   959  	return x.ServerStream.SendMsg(m)
   960  }
   961  
   962  var _DevicePlugin_serviceDesc = grpc.ServiceDesc{
   963  	ServiceName: "hashicorp.nomad.plugins.device.DevicePlugin",
   964  	HandlerType: (*DevicePluginServer)(nil),
   965  	Methods: []grpc.MethodDesc{
   966  		{
   967  			MethodName: "Reserve",
   968  			Handler:    _DevicePlugin_Reserve_Handler,
   969  		},
   970  	},
   971  	Streams: []grpc.StreamDesc{
   972  		{
   973  			StreamName:    "Fingerprint",
   974  			Handler:       _DevicePlugin_Fingerprint_Handler,
   975  			ServerStreams: true,
   976  		},
   977  		{
   978  			StreamName:    "Stats",
   979  			Handler:       _DevicePlugin_Stats_Handler,
   980  			ServerStreams: true,
   981  		},
   982  	},
   983  	Metadata: "plugins/device/proto/device.proto",
   984  }
   985  
   986  func init() {
   987  	proto.RegisterFile("plugins/device/proto/device.proto", fileDescriptor_device_a4d1cccedbd8401c)
   988  }
   989  
   990  var fileDescriptor_device_a4d1cccedbd8401c = []byte{
   991  	// 979 bytes of a gzipped FileDescriptorProto
   992  	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0xef, 0x8e, 0x1b, 0x35,
   993  	0x10, 0x27, 0xb9, 0xcb, 0x25, 0x99, 0xdc, 0x5d, 0x8b, 0x7b, 0x42, 0x61, 0x81, 0xf6, 0x58, 0x09,
   994  	0xa9, 0x02, 0xba, 0x29, 0x29, 0x12, 0x15, 0x08, 0xa4, 0xf6, 0x52, 0xee, 0xc2, 0x9f, 0x5e, 0xe5,
   995  	0x56, 0x48, 0x2d, 0x12, 0x2b, 0x67, 0xd7, 0x64, 0xdd, 0xee, 0xda, 0x8b, 0xed, 0x4d, 0x15, 0x3e,
   996  	0xf1, 0x38, 0x7c, 0xe1, 0x05, 0x78, 0x18, 0x3e, 0xf0, 0x24, 0x68, 0x6d, 0x6f, 0xb2, 0xf7, 0xa7,
   997  	0x24, 0x69, 0x3f, 0xad, 0x3d, 0x33, 0xbf, 0x99, 0xf1, 0xcc, 0xcf, 0xe3, 0x85, 0x0f, 0xf3, 0xb4,
   998  	0x98, 0x32, 0xae, 0x06, 0x31, 0x9d, 0xb1, 0x88, 0x0e, 0x72, 0x29, 0xb4, 0x70, 0x9b, 0xc0, 0x6c,
   999  	0xd0, 0xf5, 0x84, 0xa8, 0x84, 0x45, 0x42, 0xe6, 0x01, 0x17, 0x19, 0x89, 0x03, 0x07, 0x09, 0xac,
  1000  	0x95, 0x77, 0x63, 0x2a, 0xc4, 0x34, 0x75, 0xd0, 0x49, 0xf1, 0xeb, 0x40, 0xb3, 0x8c, 0x2a, 0x4d,
  1001  	0xb2, 0xdc, 0x3a, 0xf0, 0xae, 0x9f, 0x37, 0x88, 0x0b, 0x49, 0x34, 0x13, 0xdc, 0xe9, 0x8f, 0xa7,
  1002  	0x4c, 0x27, 0xc5, 0x24, 0x88, 0x44, 0x36, 0x58, 0xc4, 0x1a, 0x98, 0x58, 0x83, 0x2a, 0x3d, 0x95,
  1003  	0x10, 0x49, 0xe3, 0x81, 0xd2, 0xb2, 0x88, 0xb4, 0x72, 0x69, 0x12, 0xad, 0x25, 0x9b, 0x14, 0xda,
  1004  	0x65, 0xea, 0x1d, 0xbd, 0xae, 0x23, 0xa5, 0x89, 0x56, 0xd6, 0x89, 0x7f, 0x00, 0xe8, 0x5b, 0xc6,
  1005  	0xa7, 0x54, 0xe6, 0x92, 0x71, 0x8d, 0xe9, 0x6f, 0x05, 0x55, 0xda, 0xa7, 0x70, 0xed, 0x8c, 0x54,
  1006  	0xe5, 0x82, 0x2b, 0x8a, 0x1e, 0xc2, 0xae, 0xad, 0x42, 0x38, 0x95, 0xa2, 0xc8, 0xfb, 0x8d, 0xc3,
  1007  	0xad, 0x9b, 0xbd, 0xe1, 0x27, 0xc1, 0xff, 0x97, 0x2c, 0x18, 0x99, 0xcf, 0x71, 0x09, 0xc1, 0xbd,
  1008  	0x78, 0xb9, 0xf1, 0xff, 0xd8, 0x82, 0x5e, 0x4d, 0x89, 0xde, 0x81, 0x9d, 0x19, 0xe5, 0xb1, 0x90,
  1009  	0xfd, 0xc6, 0x61, 0xe3, 0x66, 0x17, 0xbb, 0x1d, 0xba, 0x01, 0x0e, 0x16, 0xea, 0x79, 0x4e, 0xfb,
  1010  	0x4d, 0xa3, 0x04, 0x2b, 0x7a, 0x32, 0xcf, 0x69, 0xcd, 0x80, 0x93, 0x8c, 0xf6, 0xb7, 0xea, 0x06,
  1011  	0x0f, 0x49, 0x46, 0xd1, 0x09, 0xb4, 0xed, 0x4e, 0xf5, 0xb7, 0x4d, 0xd2, 0xc1, 0xea, 0xa4, 0x35,
  1012  	0x8d, 0x34, 0x8d, 0x6d, 0x7e, 0xb8, 0x82, 0xa3, 0x9f, 0x01, 0x16, 0x8d, 0x50, 0xfd, 0x96, 0x71,
  1013  	0xf6, 0xd5, 0x06, 0x15, 0x08, 0xee, 0x2d, 0xd0, 0x0f, 0xb8, 0x96, 0x73, 0x5c, 0x73, 0xe7, 0xe5,
  1014  	0x70, 0xe5, 0x9c, 0x1a, 0x5d, 0x85, 0xad, 0x17, 0x74, 0xee, 0x0a, 0x52, 0x2e, 0xd1, 0x31, 0xb4,
  1015  	0x66, 0x24, 0x2d, 0x6c, 0x1d, 0x7a, 0xc3, 0xcf, 0x5e, 0x19, 0xdc, 0x36, 0x3f, 0x70, 0xcd, 0x5f,
  1016  	0x06, 0xc6, 0x16, 0xff, 0x65, 0xf3, 0x6e, 0xc3, 0xff, 0xbb, 0x01, 0xfb, 0x67, 0x8f, 0x8a, 0xf6,
  1017  	0xa1, 0x39, 0x1e, 0xb9, 0x80, 0xcd, 0xf1, 0x08, 0xf5, 0xa1, 0x9d, 0x50, 0x92, 0xea, 0x64, 0x6e,
  1018  	0x22, 0x76, 0x70, 0xb5, 0x45, 0xb7, 0x00, 0xd9, 0x65, 0x18, 0x53, 0x15, 0x49, 0x96, 0x97, 0x34,
  1019  	0x77, 0xd5, 0x7f, 0xdb, 0x6a, 0x46, 0x4b, 0x05, 0x3a, 0x85, 0x5e, 0xf2, 0x32, 0x4c, 0x45, 0x44,
  1020  	0x52, 0xa6, 0xe7, 0xfd, 0x6d, 0x93, 0x7e, 0xb0, 0x5e, 0xed, 0x7e, 0x70, 0x28, 0x0c, 0xc9, 0xcb,
  1021  	0x6a, 0xed, 0x07, 0x65, 0xee, 0x75, 0x2d, 0x7a, 0x1f, 0x20, 0x8f, 0x58, 0x38, 0x29, 0x54, 0xc8,
  1022  	0x62, 0x77, 0x86, 0x4e, 0x1e, 0xb1, 0xfb, 0x85, 0x1a, 0xc7, 0xfe, 0x00, 0xf6, 0x31, 0x55, 0x54,
  1023  	0xce, 0xa8, 0x23, 0x3a, 0xfa, 0x00, 0x1c, 0x4b, 0x42, 0x16, 0x2b, 0xc3, 0xe7, 0x2e, 0xee, 0x5a,
  1024  	0xc9, 0x38, 0x56, 0x7e, 0x0a, 0x57, 0x16, 0x00, 0x77, 0x07, 0x9e, 0xc2, 0x5e, 0x24, 0xb8, 0x26,
  1025  	0x8c, 0x53, 0x19, 0x4a, 0xaa, 0x4c, 0x90, 0xde, 0xf0, 0xf3, 0x55, 0xc7, 0x38, 0xaa, 0x40, 0xd6,
  1026  	0xa1, 0x99, 0x08, 0x78, 0x37, 0xaa, 0x49, 0xfd, 0x3f, 0x9b, 0x70, 0x70, 0x99, 0x19, 0xc2, 0xb0,
  1027  	0x4d, 0xf9, 0x4c, 0xb9, 0xfb, 0xf6, 0xcd, 0xeb, 0x84, 0x0a, 0x1e, 0xf0, 0x99, 0x23, 0x9c, 0xf1,
  1028  	0x85, 0xbe, 0x86, 0x9d, 0x4c, 0x14, 0x5c, 0xab, 0x7e, 0xd3, 0x78, 0xfd, 0x68, 0x95, 0xd7, 0x1f,
  1029  	0x4b, 0x6b, 0xec, 0x40, 0x68, 0xb4, 0xbc, 0x50, 0x5b, 0x06, 0xff, 0xf1, 0x7a, 0x7d, 0x7c, 0x9c,
  1030  	0xd3, 0x68, 0x71, 0x99, 0xbc, 0x2f, 0xa0, 0xbb, 0xc8, 0xeb, 0x12, 0xa6, 0x1f, 0xd4, 0x99, 0xde,
  1031  	0xad, 0xd3, 0xf6, 0x17, 0x68, 0x99, 0x7c, 0xd0, 0x7b, 0xd0, 0xd5, 0x44, 0xbd, 0x08, 0x73, 0xa2,
  1032  	0x93, 0xaa, 0xdf, 0xa5, 0xe0, 0x11, 0xd1, 0x49, 0xa9, 0x4c, 0x84, 0xd2, 0x56, 0x69, 0x7d, 0x74,
  1033  	0x4a, 0x41, 0xa5, 0x94, 0x94, 0xc4, 0xa1, 0xe0, 0xe9, 0xdc, 0x70, 0xb6, 0x83, 0x3b, 0xa5, 0xe0,
  1034  	0x94, 0xa7, 0x73, 0x3f, 0x01, 0x58, 0xe6, 0xfb, 0x06, 0x41, 0x0e, 0xa1, 0x97, 0x53, 0x99, 0x31,
  1035  	0xa5, 0x98, 0xe0, 0xca, 0x5d, 0x8d, 0xba, 0xc8, 0x7f, 0x06, 0xbb, 0x8f, 0xcb, 0x79, 0x5c, 0x31,
  1036  	0xf2, 0x3b, 0xb8, 0x16, 0x89, 0x34, 0xa5, 0x51, 0xd9, 0xb5, 0x90, 0x71, 0x5d, 0x76, 0x30, 0x75,
  1037  	0x2c, 0x7b, 0x37, 0xb0, 0x8f, 0x4b, 0x50, 0x3d, 0x2e, 0xc1, 0xc8, 0x3d, 0x2e, 0x18, 0x2d, 0x51,
  1038  	0x63, 0x07, 0xf2, 0x9f, 0xc2, 0x9e, 0xf3, 0xed, 0xc8, 0x7b, 0x02, 0x3b, 0x66, 0x72, 0x57, 0x54,
  1039  	0xba, 0xbd, 0xc1, 0xe0, 0xb2, 0x9e, 0x1c, 0xde, 0xff, 0xab, 0x09, 0x57, 0xcf, 0x2b, 0x5f, 0x39,
  1040  	0xbf, 0x11, 0x6c, 0xd7, 0x06, 0xb7, 0x59, 0x97, 0xb2, 0xda, 0xac, 0x36, 0x6b, 0xf4, 0x1c, 0xf6,
  1041  	0x19, 0x57, 0x9a, 0xf0, 0x88, 0x86, 0xe6, 0x91, 0x72, 0xc3, 0xfa, 0x68, 0xd3, 0x34, 0x83, 0xb1,
  1042  	0x73, 0x63, 0x76, 0x96, 0xf6, 0x7b, 0xac, 0x2e, 0xf3, 0x32, 0x40, 0x17, 0x8d, 0x2e, 0xe1, 0xe0,
  1043  	0xbd, 0xb3, 0xd3, 0x76, 0xcd, 0xc7, 0xce, 0x16, 0xab, 0x46, 0xd8, 0x7f, 0x1a, 0xd5, 0x53, 0x67,
  1044  	0x4b, 0xf5, 0x3d, 0xb4, 0x55, 0x91, 0x65, 0x44, 0xce, 0x5d, 0x6b, 0xd7, 0x1e, 0xe3, 0x25, 0xfe,
  1045  	0xa7, 0xd2, 0x2f, 0xae, 0x3c, 0xa0, 0x13, 0x68, 0xd9, 0x72, 0xd9, 0x1c, 0x87, 0x9b, 0xb8, 0x3a,
  1046  	0x9d, 0x3c, 0xa7, 0x91, 0xc6, 0xd6, 0x01, 0xba, 0x0b, 0xdd, 0xc5, 0xff, 0x8c, 0x69, 0x4d, 0x6f,
  1047  	0xe8, 0x5d, 0xe0, 0xdc, 0x93, 0xca, 0x02, 0x2f, 0x8d, 0x87, 0xff, 0x36, 0x61, 0xd7, 0x1e, 0xf0,
  1048  	0x91, 0x09, 0x86, 0x7e, 0x87, 0x5e, 0xed, 0x1f, 0x02, 0x0d, 0x57, 0x15, 0xee, 0xe2, 0x6f, 0x88,
  1049  	0x77, 0x67, 0x23, 0x8c, 0xe5, 0xb8, 0xff, 0xd6, 0xed, 0x06, 0x4a, 0xa1, 0xed, 0xe6, 0x36, 0x5a,
  1050  	0xf9, 0xbe, 0x9c, 0x7d, 0x11, 0xbc, 0xc1, 0xda, 0xf6, 0x55, 0x3c, 0x94, 0x40, 0xcb, 0x36, 0xf5,
  1051  	0xd3, 0x55, 0xd8, 0xfa, 0x4d, 0xf7, 0x6e, 0xad, 0x69, 0xbd, 0x3c, 0xd7, 0xfd, 0xf6, 0xb3, 0x96,
  1052  	0xed, 0xc2, 0x8e, 0xf9, 0xdc, 0xf9, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x12, 0xb9, 0x76, 0xd8, 0xd1,
  1053  	0x0a, 0x00, 0x00,
  1054  }