// Code generated by protoc-gen-go. DO NOT EDIT.
// source: dmi/hw.proto

package dmi

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	timestamp "github.com/golang/protobuf/ptypes/timestamp"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

type ComponentType int32

const (
	ComponentType_COMPONENT_TYPE_UNDEFINED    ComponentType = 0
	ComponentType_COMPONENT_TYPE_UNKNOWN      ComponentType = 1
	ComponentType_COMPONENT_TYPE_CHASSIS      ComponentType = 2
	ComponentType_COMPONENT_TYPE_BACKPLANE    ComponentType = 3
	ComponentType_COMPONENT_TYPE_CONTAINER    ComponentType = 4
	ComponentType_COMPONENT_TYPE_POWER_SUPPLY ComponentType = 5
	ComponentType_COMPONENT_TYPE_FAN          ComponentType = 6
	ComponentType_COMPONENT_TYPE_SENSOR       ComponentType = 7
	ComponentType_COMPONENT_TYPE_MODULE       ComponentType = 8
	ComponentType_COMPONENT_TYPE_PORT         ComponentType = 9
	ComponentType_COMPONENT_TYPE_CPU          ComponentType = 10
	ComponentType_COMPONENT_TYPE_BATTERY      ComponentType = 11
	ComponentType_COMPONENT_TYPE_STORAGE      ComponentType = 12
	ComponentType_COMPONENT_TYPE_MEMORY       ComponentType = 13
	// A component of type "TRANSCEIVER" could have 0 or more components of type "PORT" as children.
	ComponentType_COMPONENT_TYPE_TRANSCEIVER ComponentType = 14
)

var ComponentType_name = map[int32]string{
	0:  "COMPONENT_TYPE_UNDEFINED",
	1:  "COMPONENT_TYPE_UNKNOWN",
	2:  "COMPONENT_TYPE_CHASSIS",
	3:  "COMPONENT_TYPE_BACKPLANE",
	4:  "COMPONENT_TYPE_CONTAINER",
	5:  "COMPONENT_TYPE_POWER_SUPPLY",
	6:  "COMPONENT_TYPE_FAN",
	7:  "COMPONENT_TYPE_SENSOR",
	8:  "COMPONENT_TYPE_MODULE",
	9:  "COMPONENT_TYPE_PORT",
	10: "COMPONENT_TYPE_CPU",
	11: "COMPONENT_TYPE_BATTERY",
	12: "COMPONENT_TYPE_STORAGE",
	13: "COMPONENT_TYPE_MEMORY",
	14: "COMPONENT_TYPE_TRANSCEIVER",
}

var ComponentType_value = map[string]int32{
	"COMPONENT_TYPE_UNDEFINED":    0,
	"COMPONENT_TYPE_UNKNOWN":      1,
	"COMPONENT_TYPE_CHASSIS":      2,
	"COMPONENT_TYPE_BACKPLANE":    3,
	"COMPONENT_TYPE_CONTAINER":    4,
	"COMPONENT_TYPE_POWER_SUPPLY": 5,
	"COMPONENT_TYPE_FAN":          6,
	"COMPONENT_TYPE_SENSOR":       7,
	"COMPONENT_TYPE_MODULE":       8,
	"COMPONENT_TYPE_PORT":         9,
	"COMPONENT_TYPE_CPU":          10,
	"COMPONENT_TYPE_BATTERY":      11,
	"COMPONENT_TYPE_STORAGE":      12,
	"COMPONENT_TYPE_MEMORY":       13,
	"COMPONENT_TYPE_TRANSCEIVER":  14,
}

func (x ComponentType) String() string {
	return proto.EnumName(ComponentType_name, int32(x))
}

func (ComponentType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{0}
}

type ComponentAdminState int32

const (
	ComponentAdminState_COMP_ADMIN_STATE_UNDEFINED     ComponentAdminState = 0
	ComponentAdminState_COMP_ADMIN_STATE_UNKNOWN       ComponentAdminState = 1
	ComponentAdminState_COMP_ADMIN_STATE_LOCKED        ComponentAdminState = 2
	ComponentAdminState_COMP_ADMIN_STATE_SHUTTING_DOWN ComponentAdminState = 3
	ComponentAdminState_COMP_ADMIN_STATE_UNLOCKED      ComponentAdminState = 4
)

var ComponentAdminState_name = map[int32]string{
	0: "COMP_ADMIN_STATE_UNDEFINED",
	1: "COMP_ADMIN_STATE_UNKNOWN",
	2: "COMP_ADMIN_STATE_LOCKED",
	3: "COMP_ADMIN_STATE_SHUTTING_DOWN",
	4: "COMP_ADMIN_STATE_UNLOCKED",
}

var ComponentAdminState_value = map[string]int32{
	"COMP_ADMIN_STATE_UNDEFINED":     0,
	"COMP_ADMIN_STATE_UNKNOWN":       1,
	"COMP_ADMIN_STATE_LOCKED":        2,
	"COMP_ADMIN_STATE_SHUTTING_DOWN": 3,
	"COMP_ADMIN_STATE_UNLOCKED":      4,
}

func (x ComponentAdminState) String() string {
	return proto.EnumName(ComponentAdminState_name, int32(x))
}

func (ComponentAdminState) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{1}
}

type ComponentOperState int32

const (
	ComponentOperState_COMP_OPER_STATE_UNDEFINED ComponentOperState = 0
	ComponentOperState_COMP_OPER_STATE_UNKNOWN   ComponentOperState = 1
	ComponentOperState_COMP_OPER_STATE_DISABLED  ComponentOperState = 2
	ComponentOperState_COMP_OPER_STATE_ENABLED   ComponentOperState = 3
	ComponentOperState_COMP_OPER_STATE_TESTING   ComponentOperState = 4
)

var ComponentOperState_name = map[int32]string{
	0: "COMP_OPER_STATE_UNDEFINED",
	1: "COMP_OPER_STATE_UNKNOWN",
	2: "COMP_OPER_STATE_DISABLED",
	3: "COMP_OPER_STATE_ENABLED",
	4: "COMP_OPER_STATE_TESTING",
}

var ComponentOperState_value = map[string]int32{
	"COMP_OPER_STATE_UNDEFINED": 0,
	"COMP_OPER_STATE_UNKNOWN":   1,
	"COMP_OPER_STATE_DISABLED":  2,
	"COMP_OPER_STATE_ENABLED":   3,
	"COMP_OPER_STATE_TESTING":   4,
}

func (x ComponentOperState) String() string {
	return proto.EnumName(ComponentOperState_name, int32(x))
}

func (ComponentOperState) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{2}
}

type ComponentUsageState int32

const (
	ComponentUsageState_COMP_USAGE_STATE_UNDEFINED ComponentUsageState = 0
	ComponentUsageState_COMP_USAGE_STATE_UNKNOWN   ComponentUsageState = 1
	ComponentUsageState_COMP_USAGE_STATE_IDLE      ComponentUsageState = 2
	ComponentUsageState_COMP_USAGE_STATE_ACTIVE    ComponentUsageState = 3
	ComponentUsageState_COMP_USAGE_STATE_BUSY      ComponentUsageState = 4
)

var ComponentUsageState_name = map[int32]string{
	0: "COMP_USAGE_STATE_UNDEFINED",
	1: "COMP_USAGE_STATE_UNKNOWN",
	2: "COMP_USAGE_STATE_IDLE",
	3: "COMP_USAGE_STATE_ACTIVE",
	4: "COMP_USAGE_STATE_BUSY",
}

var ComponentUsageState_value = map[string]int32{
	"COMP_USAGE_STATE_UNDEFINED": 0,
	"COMP_USAGE_STATE_UNKNOWN":   1,
	"COMP_USAGE_STATE_IDLE":      2,
	"COMP_USAGE_STATE_ACTIVE":    3,
	"COMP_USAGE_STATE_BUSY":      4,
}

func (x ComponentUsageState) String() string {
	return proto.EnumName(ComponentUsageState_name, int32(x))
}

func (ComponentUsageState) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{3}
}

type ComponentAlarmState int32

const (
	ComponentAlarmState_COMP_ALARM_STATE_UNDEFINED     ComponentAlarmState = 0
	ComponentAlarmState_COMP_ALARM_STATE_UNKNOWN       ComponentAlarmState = 1
	ComponentAlarmState_COMP_ALARM_STATE_UNDER_REPAIR  ComponentAlarmState = 2
	ComponentAlarmState_COMP_ALARM_STATE_CRITICAL      ComponentAlarmState = 3
	ComponentAlarmState_COMP_ALARM_STATE_MAJOR         ComponentAlarmState = 4
	ComponentAlarmState_COMP_ALARM_STATE_MINOR         ComponentAlarmState = 5
	ComponentAlarmState_COMP_ALARM_STATE_WARNING       ComponentAlarmState = 6
	ComponentAlarmState_COMP_ALARM_STATE_INDETERMINATE ComponentAlarmState = 7
)

var ComponentAlarmState_name = map[int32]string{
	0: "COMP_ALARM_STATE_UNDEFINED",
	1: "COMP_ALARM_STATE_UNKNOWN",
	2: "COMP_ALARM_STATE_UNDER_REPAIR",
	3: "COMP_ALARM_STATE_CRITICAL",
	4: "COMP_ALARM_STATE_MAJOR",
	5: "COMP_ALARM_STATE_MINOR",
	6: "COMP_ALARM_STATE_WARNING",
	7: "COMP_ALARM_STATE_INDETERMINATE",
}

var ComponentAlarmState_value = map[string]int32{
	"COMP_ALARM_STATE_UNDEFINED":     0,
	"COMP_ALARM_STATE_UNKNOWN":       1,
	"COMP_ALARM_STATE_UNDER_REPAIR":  2,
	"COMP_ALARM_STATE_CRITICAL":      3,
	"COMP_ALARM_STATE_MAJOR":         4,
	"COMP_ALARM_STATE_MINOR":         5,
	"COMP_ALARM_STATE_WARNING":       6,
	"COMP_ALARM_STATE_INDETERMINATE": 7,
}

func (x ComponentAlarmState) String() string {
	return proto.EnumName(ComponentAlarmState_name, int32(x))
}

func (ComponentAlarmState) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{4}
}

type ComponentStandbyState int32

const (
	ComponentStandbyState_COMP_STANDBY_STATE_UNDEFINED         ComponentStandbyState = 0
	ComponentStandbyState_COMP_STANDBY_STATE_UNKNOWN           ComponentStandbyState = 1
	ComponentStandbyState_COMP_STANDBY_STATE_HOT               ComponentStandbyState = 2
	ComponentStandbyState_COMP_STANDBY_STATE_COLD              ComponentStandbyState = 3
	ComponentStandbyState_COMP_STANDBY_STATE_PROVIDING_SERVICE ComponentStandbyState = 4
)

var ComponentStandbyState_name = map[int32]string{
	0: "COMP_STANDBY_STATE_UNDEFINED",
	1: "COMP_STANDBY_STATE_UNKNOWN",
	2: "COMP_STANDBY_STATE_HOT",
	3: "COMP_STANDBY_STATE_COLD",
	4: "COMP_STANDBY_STATE_PROVIDING_SERVICE",
}

var ComponentStandbyState_value = map[string]int32{
	"COMP_STANDBY_STATE_UNDEFINED":         0,
	"COMP_STANDBY_STATE_UNKNOWN":           1,
	"COMP_STANDBY_STATE_HOT":               2,
	"COMP_STANDBY_STATE_COLD":              3,
	"COMP_STANDBY_STATE_PROVIDING_SERVICE": 4,
}

func (x ComponentStandbyState) String() string {
	return proto.EnumName(ComponentStandbyState_name, int32(x))
}

func (ComponentStandbyState) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{5}
}

type DataValueType int32

const (
	DataValueType_VALUE_TYPE_UNDEFINED   DataValueType = 0
	DataValueType_VALUE_TYPE_OTHER       DataValueType = 1
	DataValueType_VALUE_TYPE_UNKNOWN     DataValueType = 2
	DataValueType_VALUE_TYPE_VOLTS_AC    DataValueType = 3
	DataValueType_VALUE_TYPE_VOLTS_DC    DataValueType = 4
	DataValueType_VALUE_TYPE_AMPERES     DataValueType = 5
	DataValueType_VALUE_TYPE_WATTS       DataValueType = 6
	DataValueType_VALUE_TYPE_HERTZ       DataValueType = 7
	DataValueType_VALUE_TYPE_CELSIUS     DataValueType = 8
	DataValueType_VALUE_TYPE_PERCENT_RH  DataValueType = 9
	DataValueType_VALUE_TYPE_RPM         DataValueType = 10
	DataValueType_VALUE_TYPE_CMM         DataValueType = 11
	DataValueType_VALUE_TYPE_TRUTH_VALUE DataValueType = 12
)

var DataValueType_name = map[int32]string{
	0:  "VALUE_TYPE_UNDEFINED",
	1:  "VALUE_TYPE_OTHER",
	2:  "VALUE_TYPE_UNKNOWN",
	3:  "VALUE_TYPE_VOLTS_AC",
	4:  "VALUE_TYPE_VOLTS_DC",
	5:  "VALUE_TYPE_AMPERES",
	6:  "VALUE_TYPE_WATTS",
	7:  "VALUE_TYPE_HERTZ",
	8:  "VALUE_TYPE_CELSIUS",
	9:  "VALUE_TYPE_PERCENT_RH",
	10: "VALUE_TYPE_RPM",
	11: "VALUE_TYPE_CMM",
	12: "VALUE_TYPE_TRUTH_VALUE",
}

var DataValueType_value = map[string]int32{
	"VALUE_TYPE_UNDEFINED":   0,
	"VALUE_TYPE_OTHER":       1,
	"VALUE_TYPE_UNKNOWN":     2,
	"VALUE_TYPE_VOLTS_AC":    3,
	"VALUE_TYPE_VOLTS_DC":    4,
	"VALUE_TYPE_AMPERES":     5,
	"VALUE_TYPE_WATTS":       6,
	"VALUE_TYPE_HERTZ":       7,
	"VALUE_TYPE_CELSIUS":     8,
	"VALUE_TYPE_PERCENT_RH":  9,
	"VALUE_TYPE_RPM":         10,
	"VALUE_TYPE_CMM":         11,
	"VALUE_TYPE_TRUTH_VALUE": 12,
}

func (x DataValueType) String() string {
	return proto.EnumName(DataValueType_name, int32(x))
}

func (DataValueType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{6}
}

type ValueScale int32

const (
	ValueScale_VALUE_SCALE_UNDEFINED ValueScale = 0
	ValueScale_VALUE_SCALE_YOCTO     ValueScale = 1
	ValueScale_VALUE_SCALE_ZEPTO     ValueScale = 2
	ValueScale_VALUE_SCALE_ATTO      ValueScale = 3
	ValueScale_VALUE_SCALE_FEMTO     ValueScale = 4
	ValueScale_VALUE_SCALE_PICO      ValueScale = 5
	ValueScale_VALUE_SCALE_NANO      ValueScale = 6
	ValueScale_VALUE_SCALE_MICRO     ValueScale = 7
	ValueScale_VALUE_SCALE_MILLI     ValueScale = 8
	ValueScale_VALUE_SCALE_UNITS     ValueScale = 9
	ValueScale_VALUE_SCALE_KILO      ValueScale = 10
	ValueScale_VALUE_SCALE_MEGA      ValueScale = 11
	ValueScale_VALUE_SCALE_GIGA      ValueScale = 12
	ValueScale_VALUE_SCALE_TERA      ValueScale = 13
	ValueScale_VALUE_SCALE_PETA      ValueScale = 14
	ValueScale_VALUE_SCALE_EXA       ValueScale = 15
	ValueScale_VALUE_SCALE_ZETTA     ValueScale = 16
	ValueScale_VALUE_SCALE_YOTTA     ValueScale = 17
)

var ValueScale_name = map[int32]string{
	0:  "VALUE_SCALE_UNDEFINED",
	1:  "VALUE_SCALE_YOCTO",
	2:  "VALUE_SCALE_ZEPTO",
	3:  "VALUE_SCALE_ATTO",
	4:  "VALUE_SCALE_FEMTO",
	5:  "VALUE_SCALE_PICO",
	6:  "VALUE_SCALE_NANO",
	7:  "VALUE_SCALE_MICRO",
	8:  "VALUE_SCALE_MILLI",
	9:  "VALUE_SCALE_UNITS",
	10: "VALUE_SCALE_KILO",
	11: "VALUE_SCALE_MEGA",
	12: "VALUE_SCALE_GIGA",
	13: "VALUE_SCALE_TERA",
	14: "VALUE_SCALE_PETA",
	15: "VALUE_SCALE_EXA",
	16: "VALUE_SCALE_ZETTA",
	17: "VALUE_SCALE_YOTTA",
}

var ValueScale_value = map[string]int32{
	"VALUE_SCALE_UNDEFINED": 0,
	"VALUE_SCALE_YOCTO":     1,
	"VALUE_SCALE_ZEPTO":     2,
	"VALUE_SCALE_ATTO":      3,
	"VALUE_SCALE_FEMTO":     4,
	"VALUE_SCALE_PICO":      5,
	"VALUE_SCALE_NANO":      6,
	"VALUE_SCALE_MICRO":     7,
	"VALUE_SCALE_MILLI":     8,
	"VALUE_SCALE_UNITS":     9,
	"VALUE_SCALE_KILO":      10,
	"VALUE_SCALE_MEGA":      11,
	"VALUE_SCALE_GIGA":      12,
	"VALUE_SCALE_TERA":      13,
	"VALUE_SCALE_PETA":      14,
	"VALUE_SCALE_EXA":       15,
	"VALUE_SCALE_ZETTA":     16,
	"VALUE_SCALE_YOTTA":     17,
}

func (x ValueScale) String() string {
	return proto.EnumName(ValueScale_name, int32(x))
}

func (ValueScale) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{7}
}

type SensorStatus int32

const (
	SensorStatus_SENSOR_STATUS_UNDEFINED      SensorStatus = 0
	SensorStatus_SENSOR_STATUS_OK             SensorStatus = 1
	SensorStatus_SENSOR_STATUS_UNAVAILABLE    SensorStatus = 2
	SensorStatus_SENSOR_STATUS_NONOPERATIONAL SensorStatus = 3
)

var SensorStatus_name = map[int32]string{
	0: "SENSOR_STATUS_UNDEFINED",
	1: "SENSOR_STATUS_OK",
	2: "SENSOR_STATUS_UNAVAILABLE",
	3: "SENSOR_STATUS_NONOPERATIONAL",
}

var SensorStatus_value = map[string]int32{
	"SENSOR_STATUS_UNDEFINED":      0,
	"SENSOR_STATUS_OK":             1,
	"SENSOR_STATUS_UNAVAILABLE":    2,
	"SENSOR_STATUS_NONOPERATIONAL": 3,
}

func (x SensorStatus) String() string {
	return proto.EnumName(SensorStatus_name, int32(x))
}

func (SensorStatus) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{8}
}

type PortComponentAttributes_ConnectorType int32

const (
	PortComponentAttributes_CONNECTOR_TYPE_UNDEFINED PortComponentAttributes_ConnectorType = 0
	PortComponentAttributes_RJ45                     PortComponentAttributes_ConnectorType = 1
	PortComponentAttributes_FIBER_LC                 PortComponentAttributes_ConnectorType = 2
	PortComponentAttributes_FIBER_SC_PC              PortComponentAttributes_ConnectorType = 3
	PortComponentAttributes_FIBER_MPO                PortComponentAttributes_ConnectorType = 4
)

var PortComponentAttributes_ConnectorType_name = map[int32]string{
	0: "CONNECTOR_TYPE_UNDEFINED",
	1: "RJ45",
	2: "FIBER_LC",
	3: "FIBER_SC_PC",
	4: "FIBER_MPO",
}

var PortComponentAttributes_ConnectorType_value = map[string]int32{
	"CONNECTOR_TYPE_UNDEFINED": 0,
	"RJ45":                     1,
	"FIBER_LC":                 2,
	"FIBER_SC_PC":              3,
	"FIBER_MPO":                4,
}

func (x PortComponentAttributes_ConnectorType) String() string {
	return proto.EnumName(PortComponentAttributes_ConnectorType_name, int32(x))
}

func (PortComponentAttributes_ConnectorType) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{5, 0}
}

type PortComponentAttributes_Speed int32

const (
	PortComponentAttributes_SPEED_UNDEFINED PortComponentAttributes_Speed = 0
	PortComponentAttributes_DYNAMIC         PortComponentAttributes_Speed = 1
	PortComponentAttributes_GIGABIT_1       PortComponentAttributes_Speed = 2
	PortComponentAttributes_GIGABIT_10      PortComponentAttributes_Speed = 3
	PortComponentAttributes_GIGABIT_25      PortComponentAttributes_Speed = 4
	PortComponentAttributes_GIGABIT_40      PortComponentAttributes_Speed = 5
	PortComponentAttributes_GIGABIT_100     PortComponentAttributes_Speed = 6
	PortComponentAttributes_GIGABIT_400     PortComponentAttributes_Speed = 7
	PortComponentAttributes_MEGABIT_2500    PortComponentAttributes_Speed = 8
	PortComponentAttributes_MEGABIT_1250    PortComponentAttributes_Speed = 9
)

var PortComponentAttributes_Speed_name = map[int32]string{
	0: "SPEED_UNDEFINED",
	1: "DYNAMIC",
	2: "GIGABIT_1",
	3: "GIGABIT_10",
	4: "GIGABIT_25",
	5: "GIGABIT_40",
	6: "GIGABIT_100",
	7: "GIGABIT_400",
	8: "MEGABIT_2500",
	9: "MEGABIT_1250",
}

var PortComponentAttributes_Speed_value = map[string]int32{
	"SPEED_UNDEFINED": 0,
	"DYNAMIC":         1,
	"GIGABIT_1":       2,
	"GIGABIT_10":      3,
	"GIGABIT_25":      4,
	"GIGABIT_40":      5,
	"GIGABIT_100":     6,
	"GIGABIT_400":     7,
	"MEGABIT_2500":    8,
	"MEGABIT_1250":    9,
}

func (x PortComponentAttributes_Speed) String() string {
	return proto.EnumName(PortComponentAttributes_Speed_name, int32(x))
}

func (PortComponentAttributes_Speed) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{5, 1}
}

type PortComponentAttributes_Protocol int32

const (
	PortComponentAttributes_PROTOCOL_UNDEFINED PortComponentAttributes_Protocol = 0
	PortComponentAttributes_ETHERNET           PortComponentAttributes_Protocol = 1
	PortComponentAttributes_GPON               PortComponentAttributes_Protocol = 2
	PortComponentAttributes_XGPON              PortComponentAttributes_Protocol = 3
	PortComponentAttributes_XGSPON             PortComponentAttributes_Protocol = 4
	PortComponentAttributes_GFAST              PortComponentAttributes_Protocol = 5
	PortComponentAttributes_SERIAL             PortComponentAttributes_Protocol = 6
	PortComponentAttributes_EPON               PortComponentAttributes_Protocol = 7
)

var PortComponentAttributes_Protocol_name = map[int32]string{
	0: "PROTOCOL_UNDEFINED",
	1: "ETHERNET",
	2: "GPON",
	3: "XGPON",
	4: "XGSPON",
	5: "GFAST",
	6: "SERIAL",
	7: "EPON",
}

var PortComponentAttributes_Protocol_value = map[string]int32{
	"PROTOCOL_UNDEFINED": 0,
	"ETHERNET":           1,
	"GPON":               2,
	"XGPON":              3,
	"XGSPON":             4,
	"GFAST":              5,
	"SERIAL":             6,
	"EPON":               7,
}

func (x PortComponentAttributes_Protocol) String() string {
	return proto.EnumName(PortComponentAttributes_Protocol_name, int32(x))
}

func (PortComponentAttributes_Protocol) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{5, 2}
}

type PsuComponentAttributes_SupportedVoltage int32

const (
	PsuComponentAttributes_SUPPORTED_VOLTAGE_UNDEFINED PsuComponentAttributes_SupportedVoltage = 0
	PsuComponentAttributes_V48                         PsuComponentAttributes_SupportedVoltage = 1
	PsuComponentAttributes_V230                        PsuComponentAttributes_SupportedVoltage = 2
	PsuComponentAttributes_V115                        PsuComponentAttributes_SupportedVoltage = 3
)

var PsuComponentAttributes_SupportedVoltage_name = map[int32]string{
	0: "SUPPORTED_VOLTAGE_UNDEFINED",
	1: "V48",
	2: "V230",
	3: "V115",
}

var PsuComponentAttributes_SupportedVoltage_value = map[string]int32{
	"SUPPORTED_VOLTAGE_UNDEFINED": 0,
	"V48":                         1,
	"V230":                        2,
	"V115":                        3,
}

func (x PsuComponentAttributes_SupportedVoltage) String() string {
	return proto.EnumName(PsuComponentAttributes_SupportedVoltage_name, int32(x))
}

func (PsuComponentAttributes_SupportedVoltage) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{7, 0}
}

type TransceiverComponentsAttributes_FormFactor int32

const (
	TransceiverComponentsAttributes_FORM_FACTOR_UNKNOWN TransceiverComponentsAttributes_FormFactor = 0
	TransceiverComponentsAttributes_QSFP                TransceiverComponentsAttributes_FormFactor = 1
	TransceiverComponentsAttributes_QSFP_PLUS           TransceiverComponentsAttributes_FormFactor = 2
	TransceiverComponentsAttributes_QSFP28              TransceiverComponentsAttributes_FormFactor = 3
	TransceiverComponentsAttributes_SFP                 TransceiverComponentsAttributes_FormFactor = 4
	TransceiverComponentsAttributes_SFP_PLUS            TransceiverComponentsAttributes_FormFactor = 5
	TransceiverComponentsAttributes_XFP                 TransceiverComponentsAttributes_FormFactor = 6
	TransceiverComponentsAttributes_CFP4                TransceiverComponentsAttributes_FormFactor = 7
	TransceiverComponentsAttributes_CFP2                TransceiverComponentsAttributes_FormFactor = 8
	TransceiverComponentsAttributes_CPAK                TransceiverComponentsAttributes_FormFactor = 9
	TransceiverComponentsAttributes_X2                  TransceiverComponentsAttributes_FormFactor = 10
	TransceiverComponentsAttributes_OTHER               TransceiverComponentsAttributes_FormFactor = 11
	TransceiverComponentsAttributes_CFP                 TransceiverComponentsAttributes_FormFactor = 12
	TransceiverComponentsAttributes_CFP2_ACO            TransceiverComponentsAttributes_FormFactor = 13
	TransceiverComponentsAttributes_CFP2_DCO            TransceiverComponentsAttributes_FormFactor = 14
)

var TransceiverComponentsAttributes_FormFactor_name = map[int32]string{
	0:  "FORM_FACTOR_UNKNOWN",
	1:  "QSFP",
	2:  "QSFP_PLUS",
	3:  "QSFP28",
	4:  "SFP",
	5:  "SFP_PLUS",
	6:  "XFP",
	7:  "CFP4",
	8:  "CFP2",
	9:  "CPAK",
	10: "X2",
	11: "OTHER",
	12: "CFP",
	13: "CFP2_ACO",
	14: "CFP2_DCO",
}

var TransceiverComponentsAttributes_FormFactor_value = map[string]int32{
	"FORM_FACTOR_UNKNOWN": 0,
	"QSFP":                1,
	"QSFP_PLUS":           2,
	"QSFP28":              3,
	"SFP":                 4,
	"SFP_PLUS":            5,
	"XFP":                 6,
	"CFP4":                7,
	"CFP2":                8,
	"CPAK":                9,
	"X2":                  10,
	"OTHER":               11,
	"CFP":                 12,
	"CFP2_ACO":            13,
	"CFP2_DCO":            14,
}

func (x TransceiverComponentsAttributes_FormFactor) String() string {
	return proto.EnumName(TransceiverComponentsAttributes_FormFactor_name, int32(x))
}

func (TransceiverComponentsAttributes_FormFactor) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{8, 0}
}

type TransceiverComponentsAttributes_Type int32

const (
	TransceiverComponentsAttributes_TYPE_UNKNOWN TransceiverComponentsAttributes_Type = 0
	TransceiverComponentsAttributes_ETHERNET     TransceiverComponentsAttributes_Type = 1
	TransceiverComponentsAttributes_GPON         TransceiverComponentsAttributes_Type = 2
	TransceiverComponentsAttributes_XGPON        TransceiverComponentsAttributes_Type = 3
	TransceiverComponentsAttributes_XGSPON       TransceiverComponentsAttributes_Type = 4
	TransceiverComponentsAttributes_CPON         TransceiverComponentsAttributes_Type = 5
	TransceiverComponentsAttributes_NG_PON2      TransceiverComponentsAttributes_Type = 6
	TransceiverComponentsAttributes_EPON         TransceiverComponentsAttributes_Type = 7
)

var TransceiverComponentsAttributes_Type_name = map[int32]string{
	0: "TYPE_UNKNOWN",
	1: "ETHERNET",
	2: "GPON",
	3: "XGPON",
	4: "XGSPON",
	5: "CPON",
	6: "NG_PON2",
	7: "EPON",
}

var TransceiverComponentsAttributes_Type_value = map[string]int32{
	"TYPE_UNKNOWN": 0,
	"ETHERNET":     1,
	"GPON":         2,
	"XGPON":        3,
	"XGSPON":       4,
	"CPON":         5,
	"NG_PON2":      6,
	"EPON":         7,
}

func (x TransceiverComponentsAttributes_Type) String() string {
	return proto.EnumName(TransceiverComponentsAttributes_Type_name, int32(x))
}

func (TransceiverComponentsAttributes_Type) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{8, 1}
}

type Uuid struct {
	Uuid                 string   `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Uuid) Reset()         { *m = Uuid{} }
func (m *Uuid) String() string { return proto.CompactTextString(m) }
func (*Uuid) ProtoMessage()    {}
func (*Uuid) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{0}
}

func (m *Uuid) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Uuid.Unmarshal(m, b)
}
func (m *Uuid) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Uuid.Marshal(b, m, deterministic)
}
func (m *Uuid) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Uuid.Merge(m, src)
}
func (m *Uuid) XXX_Size() int {
	return xxx_messageInfo_Uuid.Size(m)
}
func (m *Uuid) XXX_DiscardUnknown() {
	xxx_messageInfo_Uuid.DiscardUnknown(m)
}

var xxx_messageInfo_Uuid proto.InternalMessageInfo

func (m *Uuid) GetUuid() string {
	if m != nil {
		return m.Uuid
	}
	return ""
}

type HardwareID struct {
	Uuid                 *Uuid    `protobuf:"bytes,1,opt,name=uuid,proto3" json:"uuid,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *HardwareID) Reset()         { *m = HardwareID{} }
func (m *HardwareID) String() string { return proto.CompactTextString(m) }
func (*HardwareID) ProtoMessage()    {}
func (*HardwareID) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{1}
}

func (m *HardwareID) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_HardwareID.Unmarshal(m, b)
}
func (m *HardwareID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_HardwareID.Marshal(b, m, deterministic)
}
func (m *HardwareID) XXX_Merge(src proto.Message) {
	xxx_messageInfo_HardwareID.Merge(m, src)
}
func (m *HardwareID) XXX_Size() int {
	return xxx_messageInfo_HardwareID.Size(m)
}
func (m *HardwareID) XXX_DiscardUnknown() {
	xxx_messageInfo_HardwareID.DiscardUnknown(m)
}

var xxx_messageInfo_HardwareID proto.InternalMessageInfo

func (m *HardwareID) GetUuid() *Uuid {
	if m != nil {
		return m.Uuid
	}
	return nil
}

type Uri struct {
	Uri                  string   `protobuf:"bytes,1,opt,name=uri,proto3" json:"uri,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Uri) Reset()         { *m = Uri{} }
func (m *Uri) String() string { return proto.CompactTextString(m) }
func (*Uri) ProtoMessage()    {}
func (*Uri) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{2}
}

func (m *Uri) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Uri.Unmarshal(m, b)
}
func (m *Uri) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Uri.Marshal(b, m, deterministic)
}
func (m *Uri) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Uri.Merge(m, src)
}
func (m *Uri) XXX_Size() int {
	return xxx_messageInfo_Uri.Size(m)
}
func (m *Uri) XXX_DiscardUnknown() {
	xxx_messageInfo_Uri.DiscardUnknown(m)
}

var xxx_messageInfo_Uri proto.InternalMessageInfo

func (m *Uri) GetUri() string {
	if m != nil {
		return m.Uri
	}
	return ""
}

type ComponentState struct {
	StateLastChanged     *timestamp.Timestamp  `protobuf:"bytes,1,opt,name=state_last_changed,json=stateLastChanged,proto3" json:"state_last_changed,omitempty"`
	AdminState           ComponentAdminState   `protobuf:"varint,2,opt,name=admin_state,json=adminState,proto3,enum=dmi.ComponentAdminState" json:"admin_state,omitempty"`
	OperState            ComponentOperState    `protobuf:"varint,3,opt,name=oper_state,json=operState,proto3,enum=dmi.ComponentOperState" json:"oper_state,omitempty"`
	UsageState           ComponentUsageState   `protobuf:"varint,4,opt,name=usage_state,json=usageState,proto3,enum=dmi.ComponentUsageState" json:"usage_state,omitempty"`
	AlarmState           ComponentAlarmState   `protobuf:"varint,5,opt,name=alarm_state,json=alarmState,proto3,enum=dmi.ComponentAlarmState" json:"alarm_state,omitempty"`
	StandbyState         ComponentStandbyState `protobuf:"varint,6,opt,name=standby_state,json=standbyState,proto3,enum=dmi.ComponentStandbyState" json:"standby_state,omitempty"`
	XXX_NoUnkeyedLiteral struct{}              `json:"-"`
	XXX_unrecognized     []byte                `json:"-"`
	XXX_sizecache        int32                 `json:"-"`
}

func (m *ComponentState) Reset()         { *m = ComponentState{} }
func (m *ComponentState) String() string { return proto.CompactTextString(m) }
func (*ComponentState) ProtoMessage()    {}
func (*ComponentState) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{3}
}

func (m *ComponentState) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ComponentState.Unmarshal(m, b)
}
func (m *ComponentState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ComponentState.Marshal(b, m, deterministic)
}
func (m *ComponentState) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ComponentState.Merge(m, src)
}
func (m *ComponentState) XXX_Size() int {
	return xxx_messageInfo_ComponentState.Size(m)
}
func (m *ComponentState) XXX_DiscardUnknown() {
	xxx_messageInfo_ComponentState.DiscardUnknown(m)
}

var xxx_messageInfo_ComponentState proto.InternalMessageInfo

func (m *ComponentState) GetStateLastChanged() *timestamp.Timestamp {
	if m != nil {
		return m.StateLastChanged
	}
	return nil
}

func (m *ComponentState) GetAdminState() ComponentAdminState {
	if m != nil {
		return m.AdminState
	}
	return ComponentAdminState_COMP_ADMIN_STATE_UNDEFINED
}

func (m *ComponentState) GetOperState() ComponentOperState {
	if m != nil {
		return m.OperState
	}
	return ComponentOperState_COMP_OPER_STATE_UNDEFINED
}

func (m *ComponentState) GetUsageState() ComponentUsageState {
	if m != nil {
		return m.UsageState
	}
	return ComponentUsageState_COMP_USAGE_STATE_UNDEFINED
}

func (m *ComponentState) GetAlarmState() ComponentAlarmState {
	if m != nil {
		return m.AlarmState
	}
	return ComponentAlarmState_COMP_ALARM_STATE_UNDEFINED
}

func (m *ComponentState) GetStandbyState() ComponentStandbyState {
	if m != nil {
		return m.StandbyState
	}
	return ComponentStandbyState_COMP_STANDBY_STATE_UNDEFINED
}

type ComponentSensorData struct {
	Value           int32                `protobuf:"varint,1,opt,name=value,proto3" json:"value,omitempty"`
	Type            DataValueType        `protobuf:"varint,2,opt,name=type,proto3,enum=dmi.DataValueType" json:"type,omitempty"`
	Scale           ValueScale           `protobuf:"varint,3,opt,name=scale,proto3,enum=dmi.ValueScale" json:"scale,omitempty"`
	Precision       int32                `protobuf:"varint,4,opt,name=precision,proto3" json:"precision,omitempty"`
	Status          SensorStatus         `protobuf:"varint,5,opt,name=status,proto3,enum=dmi.SensorStatus" json:"status,omitempty"`
	UnitsDisplay    string               `protobuf:"bytes,6,opt,name=units_display,json=unitsDisplay,proto3" json:"units_display,omitempty"`
	Timestamp       *timestamp.Timestamp `protobuf:"bytes,7,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
	ValueUpdateRate uint32               `protobuf:"varint,8,opt,name=value_update_rate,json=valueUpdateRate,proto3" json:"value_update_rate,omitempty"`
	// data_type can be of the string representation of MetricNames or something else as well
	DataType             string   `protobuf:"bytes,9,opt,name=data_type,json=dataType,proto3" json:"data_type,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ComponentSensorData) Reset()         { *m = ComponentSensorData{} }
func (m *ComponentSensorData) String() string { return proto.CompactTextString(m) }
func (*ComponentSensorData) ProtoMessage()    {}
func (*ComponentSensorData) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{4}
}

func (m *ComponentSensorData) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ComponentSensorData.Unmarshal(m, b)
}
func (m *ComponentSensorData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ComponentSensorData.Marshal(b, m, deterministic)
}
func (m *ComponentSensorData) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ComponentSensorData.Merge(m, src)
}
func (m *ComponentSensorData) XXX_Size() int {
	return xxx_messageInfo_ComponentSensorData.Size(m)
}
func (m *ComponentSensorData) XXX_DiscardUnknown() {
	xxx_messageInfo_ComponentSensorData.DiscardUnknown(m)
}

var xxx_messageInfo_ComponentSensorData proto.InternalMessageInfo

func (m *ComponentSensorData) GetValue() int32 {
	if m != nil {
		return m.Value
	}
	return 0
}

func (m *ComponentSensorData) GetType() DataValueType {
	if m != nil {
		return m.Type
	}
	return DataValueType_VALUE_TYPE_UNDEFINED
}

func (m *ComponentSensorData) GetScale() ValueScale {
	if m != nil {
		return m.Scale
	}
	return ValueScale_VALUE_SCALE_UNDEFINED
}

func (m *ComponentSensorData) GetPrecision() int32 {
	if m != nil {
		return m.Precision
	}
	return 0
}

func (m *ComponentSensorData) GetStatus() SensorStatus {
	if m != nil {
		return m.Status
	}
	return SensorStatus_SENSOR_STATUS_UNDEFINED
}

func (m *ComponentSensorData) GetUnitsDisplay() string {
	if m != nil {
		return m.UnitsDisplay
	}
	return ""
}

func (m *ComponentSensorData) GetTimestamp() *timestamp.Timestamp {
	if m != nil {
		return m.Timestamp
	}
	return nil
}

func (m *ComponentSensorData) GetValueUpdateRate() uint32 {
	if m != nil {
		return m.ValueUpdateRate
	}
	return 0
}

func (m *ComponentSensorData) GetDataType() string {
	if m != nil {
		return m.DataType
	}
	return ""
}

type PortComponentAttributes struct {
	ConnectorType        PortComponentAttributes_ConnectorType `protobuf:"varint,1,opt,name=connector_type,json=connectorType,proto3,enum=dmi.PortComponentAttributes_ConnectorType" json:"connector_type,omitempty"`
	Speed                PortComponentAttributes_Speed         `protobuf:"varint,2,opt,name=speed,proto3,enum=dmi.PortComponentAttributes_Speed" json:"speed,omitempty"`
	Protocol             PortComponentAttributes_Protocol      `protobuf:"varint,3,opt,name=protocol,proto3,enum=dmi.PortComponentAttributes_Protocol" json:"protocol,omitempty"`
	PhysicalLabel        string                                `protobuf:"bytes,4,opt,name=physical_label,json=physicalLabel,proto3" json:"physical_label,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                              `json:"-"`
	XXX_unrecognized     []byte                                `json:"-"`
	XXX_sizecache        int32                                 `json:"-"`
}

func (m *PortComponentAttributes) Reset()         { *m = PortComponentAttributes{} }
func (m *PortComponentAttributes) String() string { return proto.CompactTextString(m) }
func (*PortComponentAttributes) ProtoMessage()    {}
func (*PortComponentAttributes) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{5}
}

func (m *PortComponentAttributes) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_PortComponentAttributes.Unmarshal(m, b)
}
func (m *PortComponentAttributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_PortComponentAttributes.Marshal(b, m, deterministic)
}
func (m *PortComponentAttributes) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PortComponentAttributes.Merge(m, src)
}
func (m *PortComponentAttributes) XXX_Size() int {
	return xxx_messageInfo_PortComponentAttributes.Size(m)
}
func (m *PortComponentAttributes) XXX_DiscardUnknown() {
	xxx_messageInfo_PortComponentAttributes.DiscardUnknown(m)
}

var xxx_messageInfo_PortComponentAttributes proto.InternalMessageInfo

func (m *PortComponentAttributes) GetConnectorType() PortComponentAttributes_ConnectorType {
	if m != nil {
		return m.ConnectorType
	}
	return PortComponentAttributes_CONNECTOR_TYPE_UNDEFINED
}

func (m *PortComponentAttributes) GetSpeed() PortComponentAttributes_Speed {
	if m != nil {
		return m.Speed
	}
	return PortComponentAttributes_SPEED_UNDEFINED
}

func (m *PortComponentAttributes) GetProtocol() PortComponentAttributes_Protocol {
	if m != nil {
		return m.Protocol
	}
	return PortComponentAttributes_PROTOCOL_UNDEFINED
}

func (m *PortComponentAttributes) GetPhysicalLabel() string {
	if m != nil {
		return m.PhysicalLabel
	}
	return ""
}

type ContainerComponentAttributes struct {
	PhysicalLabel        string   `protobuf:"bytes,1,opt,name=physical_label,json=physicalLabel,proto3" json:"physical_label,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *ContainerComponentAttributes) Reset()         { *m = ContainerComponentAttributes{} }
func (m *ContainerComponentAttributes) String() string { return proto.CompactTextString(m) }
func (*ContainerComponentAttributes) ProtoMessage()    {}
func (*ContainerComponentAttributes) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{6}
}

func (m *ContainerComponentAttributes) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ContainerComponentAttributes.Unmarshal(m, b)
}
func (m *ContainerComponentAttributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ContainerComponentAttributes.Marshal(b, m, deterministic)
}
func (m *ContainerComponentAttributes) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ContainerComponentAttributes.Merge(m, src)
}
func (m *ContainerComponentAttributes) XXX_Size() int {
	return xxx_messageInfo_ContainerComponentAttributes.Size(m)
}
func (m *ContainerComponentAttributes) XXX_DiscardUnknown() {
	xxx_messageInfo_ContainerComponentAttributes.DiscardUnknown(m)
}

var xxx_messageInfo_ContainerComponentAttributes proto.InternalMessageInfo

func (m *ContainerComponentAttributes) GetPhysicalLabel() string {
	if m != nil {
		return m.PhysicalLabel
	}
	return ""
}

type PsuComponentAttributes struct {
	SupportedVoltage     PsuComponentAttributes_SupportedVoltage `protobuf:"varint,1,opt,name=supported_voltage,json=supportedVoltage,proto3,enum=dmi.PsuComponentAttributes_SupportedVoltage" json:"supported_voltage,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                                `json:"-"`
	XXX_unrecognized     []byte                                  `json:"-"`
	XXX_sizecache        int32                                   `json:"-"`
}

func (m *PsuComponentAttributes) Reset()         { *m = PsuComponentAttributes{} }
func (m *PsuComponentAttributes) String() string { return proto.CompactTextString(m) }
func (*PsuComponentAttributes) ProtoMessage()    {}
func (*PsuComponentAttributes) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{7}
}

func (m *PsuComponentAttributes) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_PsuComponentAttributes.Unmarshal(m, b)
}
func (m *PsuComponentAttributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_PsuComponentAttributes.Marshal(b, m, deterministic)
}
func (m *PsuComponentAttributes) XXX_Merge(src proto.Message) {
	xxx_messageInfo_PsuComponentAttributes.Merge(m, src)
}
func (m *PsuComponentAttributes) XXX_Size() int {
	return xxx_messageInfo_PsuComponentAttributes.Size(m)
}
func (m *PsuComponentAttributes) XXX_DiscardUnknown() {
	xxx_messageInfo_PsuComponentAttributes.DiscardUnknown(m)
}

var xxx_messageInfo_PsuComponentAttributes proto.InternalMessageInfo

func (m *PsuComponentAttributes) GetSupportedVoltage() PsuComponentAttributes_SupportedVoltage {
	if m != nil {
		return m.SupportedVoltage
	}
	return PsuComponentAttributes_SUPPORTED_VOLTAGE_UNDEFINED
}

type TransceiverComponentsAttributes struct {
	FormFactor TransceiverComponentsAttributes_FormFactor `protobuf:"varint,1,opt,name=form_factor,json=formFactor,proto3,enum=dmi.TransceiverComponentsAttributes_FormFactor" json:"form_factor,omitempty"`
	TransType  TransceiverComponentsAttributes_Type       `protobuf:"varint,2,opt,name=trans_type,json=transType,proto3,enum=dmi.TransceiverComponentsAttributes_Type" json:"trans_type,omitempty"`
	// The maximum reach that can be achieved by this transceiver
	MaxDistance      uint32     `protobuf:"varint,3,opt,name=max_distance,json=maxDistance,proto3" json:"max_distance,omitempty"`
	MaxDistanceScale ValueScale `protobuf:"varint,4,opt,name=max_distance_scale,json=maxDistanceScale,proto3,enum=dmi.ValueScale" json:"max_distance_scale,omitempty"`
	// The receive and transmit wavelengths that the transeiver operates on
	RxWavelength         []uint32   `protobuf:"varint,5,rep,packed,name=rx_wavelength,json=rxWavelength,proto3" json:"rx_wavelength,omitempty"`
	TxWavelength         []uint32   `protobuf:"varint,6,rep,packed,name=tx_wavelength,json=txWavelength,proto3" json:"tx_wavelength,omitempty"`
	WavelengthScale      ValueScale `protobuf:"varint,7,opt,name=wavelength_scale,json=wavelengthScale,proto3,enum=dmi.ValueScale" json:"wavelength_scale,omitempty"`
	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
	XXX_unrecognized     []byte     `json:"-"`
	XXX_sizecache        int32      `json:"-"`
}

func (m *TransceiverComponentsAttributes) Reset()         { *m = TransceiverComponentsAttributes{} }
func (m *TransceiverComponentsAttributes) String() string { return proto.CompactTextString(m) }
func (*TransceiverComponentsAttributes) ProtoMessage()    {}
func (*TransceiverComponentsAttributes) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{8}
}

func (m *TransceiverComponentsAttributes) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_TransceiverComponentsAttributes.Unmarshal(m, b)
}
func (m *TransceiverComponentsAttributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_TransceiverComponentsAttributes.Marshal(b, m, deterministic)
}
func (m *TransceiverComponentsAttributes) XXX_Merge(src proto.Message) {
	xxx_messageInfo_TransceiverComponentsAttributes.Merge(m, src)
}
func (m *TransceiverComponentsAttributes) XXX_Size() int {
	return xxx_messageInfo_TransceiverComponentsAttributes.Size(m)
}
func (m *TransceiverComponentsAttributes) XXX_DiscardUnknown() {
	xxx_messageInfo_TransceiverComponentsAttributes.DiscardUnknown(m)
}

var xxx_messageInfo_TransceiverComponentsAttributes proto.InternalMessageInfo

func (m *TransceiverComponentsAttributes) GetFormFactor() TransceiverComponentsAttributes_FormFactor {
	if m != nil {
		return m.FormFactor
	}
	return TransceiverComponentsAttributes_FORM_FACTOR_UNKNOWN
}

func (m *TransceiverComponentsAttributes) GetTransType() TransceiverComponentsAttributes_Type {
	if m != nil {
		return m.TransType
	}
	return TransceiverComponentsAttributes_TYPE_UNKNOWN
}

func (m *TransceiverComponentsAttributes) GetMaxDistance() uint32 {
	if m != nil {
		return m.MaxDistance
	}
	return 0
}

func (m *TransceiverComponentsAttributes) GetMaxDistanceScale() ValueScale {
	if m != nil {
		return m.MaxDistanceScale
	}
	return ValueScale_VALUE_SCALE_UNDEFINED
}

func (m *TransceiverComponentsAttributes) GetRxWavelength() []uint32 {
	if m != nil {
		return m.RxWavelength
	}
	return nil
}

func (m *TransceiverComponentsAttributes) GetTxWavelength() []uint32 {
	if m != nil {
		return m.TxWavelength
	}
	return nil
}

func (m *TransceiverComponentsAttributes) GetWavelengthScale() ValueScale {
	if m != nil {
		return m.WavelengthScale
	}
	return ValueScale_VALUE_SCALE_UNDEFINED
}

type Component struct {
	// The name of a component uniquely identifies a component within the hardware
	Name        string        `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Class       ComponentType `protobuf:"varint,2,opt,name=class,proto3,enum=dmi.ComponentType" json:"class,omitempty"`
	Description string        `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"`
	// The name of the parent of this component, empty string("") in case of the root component
	Parent       string       `protobuf:"bytes,4,opt,name=parent,proto3" json:"parent,omitempty"`
	ParentRelPos int32        `protobuf:"varint,5,opt,name=parent_rel_pos,json=parentRelPos,proto3" json:"parent_rel_pos,omitempty"`
	Children     []*Component `protobuf:"bytes,6,rep,name=children,proto3" json:"children,omitempty"`
	HardwareRev  string       `protobuf:"bytes,7,opt,name=hardware_rev,json=hardwareRev,proto3" json:"hardware_rev,omitempty"`
	FirmwareRev  string       `protobuf:"bytes,8,opt,name=firmware_rev,json=firmwareRev,proto3" json:"firmware_rev,omitempty"`
	SoftwareRev  string       `protobuf:"bytes,9,opt,name=software_rev,json=softwareRev,proto3" json:"software_rev,omitempty"`
	SerialNum    string       `protobuf:"bytes,10,opt,name=serial_num,json=serialNum,proto3" json:"serial_num,omitempty"`
	MfgName      string       `protobuf:"bytes,11,opt,name=mfg_name,json=mfgName,proto3" json:"mfg_name,omitempty"`
	// Apart from the definition of this attribute as defined in RFC 8348, implementations could choose to carry
	// the manufacturer's part number in this attribute.
	ModelName string               `protobuf:"bytes,12,opt,name=model_name,json=modelName,proto3" json:"model_name,omitempty"`
	Alias     string               `protobuf:"bytes,13,opt,name=alias,proto3" json:"alias,omitempty"`
	AssetId   string               `protobuf:"bytes,14,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"`
	IsFru     bool                 `protobuf:"varint,15,opt,name=is_fru,json=isFru,proto3" json:"is_fru,omitempty"`
	MfgDate   *timestamp.Timestamp `protobuf:"bytes,16,opt,name=mfg_date,json=mfgDate,proto3" json:"mfg_date,omitempty"`
	Uri       *Uri                 `protobuf:"bytes,17,opt,name=uri,proto3" json:"uri,omitempty"`
	// The uuid of the component uniquely identifies the component across the entire system
	Uuid       *Uuid                  `protobuf:"bytes,18,opt,name=uuid,proto3" json:"uuid,omitempty"`
	State      *ComponentState        `protobuf:"bytes,19,opt,name=state,proto3" json:"state,omitempty"`
	SensorData []*ComponentSensorData `protobuf:"bytes,20,rep,name=sensor_data,json=sensorData,proto3" json:"sensor_data,omitempty"`
	// The attribute 'specific' can be populated for components where more details are required by the users of the DMI interface
	//
	// Types that are valid to be assigned to Specific:
	//	*Component_PortAttr
	//	*Component_ContainerAttr
	//	*Component_PsuAttr
	//	*Component_TransceiverAttr
	Specific             isComponent_Specific `protobuf_oneof:"specific"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *Component) Reset()         { *m = Component{} }
func (m *Component) String() string { return proto.CompactTextString(m) }
func (*Component) ProtoMessage()    {}
func (*Component) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{9}
}

func (m *Component) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Component.Unmarshal(m, b)
}
func (m *Component) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Component.Marshal(b, m, deterministic)
}
func (m *Component) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Component.Merge(m, src)
}
func (m *Component) XXX_Size() int {
	return xxx_messageInfo_Component.Size(m)
}
func (m *Component) XXX_DiscardUnknown() {
	xxx_messageInfo_Component.DiscardUnknown(m)
}

var xxx_messageInfo_Component proto.InternalMessageInfo

func (m *Component) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *Component) GetClass() ComponentType {
	if m != nil {
		return m.Class
	}
	return ComponentType_COMPONENT_TYPE_UNDEFINED
}

func (m *Component) GetDescription() string {
	if m != nil {
		return m.Description
	}
	return ""
}

func (m *Component) GetParent() string {
	if m != nil {
		return m.Parent
	}
	return ""
}

func (m *Component) GetParentRelPos() int32 {
	if m != nil {
		return m.ParentRelPos
	}
	return 0
}

func (m *Component) GetChildren() []*Component {
	if m != nil {
		return m.Children
	}
	return nil
}

func (m *Component) GetHardwareRev() string {
	if m != nil {
		return m.HardwareRev
	}
	return ""
}

func (m *Component) GetFirmwareRev() string {
	if m != nil {
		return m.FirmwareRev
	}
	return ""
}

func (m *Component) GetSoftwareRev() string {
	if m != nil {
		return m.SoftwareRev
	}
	return ""
}

func (m *Component) GetSerialNum() string {
	if m != nil {
		return m.SerialNum
	}
	return ""
}

func (m *Component) GetMfgName() string {
	if m != nil {
		return m.MfgName
	}
	return ""
}

func (m *Component) GetModelName() string {
	if m != nil {
		return m.ModelName
	}
	return ""
}

func (m *Component) GetAlias() string {
	if m != nil {
		return m.Alias
	}
	return ""
}

func (m *Component) GetAssetId() string {
	if m != nil {
		return m.AssetId
	}
	return ""
}

func (m *Component) GetIsFru() bool {
	if m != nil {
		return m.IsFru
	}
	return false
}

func (m *Component) GetMfgDate() *timestamp.Timestamp {
	if m != nil {
		return m.MfgDate
	}
	return nil
}

func (m *Component) GetUri() *Uri {
	if m != nil {
		return m.Uri
	}
	return nil
}

func (m *Component) GetUuid() *Uuid {
	if m != nil {
		return m.Uuid
	}
	return nil
}

func (m *Component) GetState() *ComponentState {
	if m != nil {
		return m.State
	}
	return nil
}

func (m *Component) GetSensorData() []*ComponentSensorData {
	if m != nil {
		return m.SensorData
	}
	return nil
}

type isComponent_Specific interface {
	isComponent_Specific()
}

type Component_PortAttr struct {
	PortAttr *PortComponentAttributes `protobuf:"bytes,50,opt,name=port_attr,json=portAttr,proto3,oneof"`
}

type Component_ContainerAttr struct {
	ContainerAttr *ContainerComponentAttributes `protobuf:"bytes,51,opt,name=container_attr,json=containerAttr,proto3,oneof"`
}

type Component_PsuAttr struct {
	PsuAttr *PsuComponentAttributes `protobuf:"bytes,52,opt,name=psu_attr,json=psuAttr,proto3,oneof"`
}

type Component_TransceiverAttr struct {
	TransceiverAttr *TransceiverComponentsAttributes `protobuf:"bytes,53,opt,name=transceiver_attr,json=transceiverAttr,proto3,oneof"`
}

func (*Component_PortAttr) isComponent_Specific() {}

func (*Component_ContainerAttr) isComponent_Specific() {}

func (*Component_PsuAttr) isComponent_Specific() {}

func (*Component_TransceiverAttr) isComponent_Specific() {}

func (m *Component) GetSpecific() isComponent_Specific {
	if m != nil {
		return m.Specific
	}
	return nil
}

func (m *Component) GetPortAttr() *PortComponentAttributes {
	if x, ok := m.GetSpecific().(*Component_PortAttr); ok {
		return x.PortAttr
	}
	return nil
}

func (m *Component) GetContainerAttr() *ContainerComponentAttributes {
	if x, ok := m.GetSpecific().(*Component_ContainerAttr); ok {
		return x.ContainerAttr
	}
	return nil
}

func (m *Component) GetPsuAttr() *PsuComponentAttributes {
	if x, ok := m.GetSpecific().(*Component_PsuAttr); ok {
		return x.PsuAttr
	}
	return nil
}

func (m *Component) GetTransceiverAttr() *TransceiverComponentsAttributes {
	if x, ok := m.GetSpecific().(*Component_TransceiverAttr); ok {
		return x.TransceiverAttr
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Component) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Component_PortAttr)(nil),
		(*Component_ContainerAttr)(nil),
		(*Component_PsuAttr)(nil),
		(*Component_TransceiverAttr)(nil),
	}
}

type Hardware struct {
	LastChange *timestamp.Timestamp `protobuf:"bytes,1,opt,name=last_change,json=lastChange,proto3" json:"last_change,omitempty"`
	// Each HW has one parent/root and all other components are children of this
	// The class of the root component would be set as UNDEFINED
	Root *Component `protobuf:"bytes,2,opt,name=root,proto3" json:"root,omitempty"`
	// TODO: Authentication?
	// Timestamp at which the hardware last booted
	LastBooted           *timestamp.Timestamp `protobuf:"bytes,3,opt,name=last_booted,json=lastBooted,proto3" json:"last_booted,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

func (m *Hardware) Reset()         { *m = Hardware{} }
func (m *Hardware) String() string { return proto.CompactTextString(m) }
func (*Hardware) ProtoMessage()    {}
func (*Hardware) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{10}
}

func (m *Hardware) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Hardware.Unmarshal(m, b)
}
func (m *Hardware) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Hardware.Marshal(b, m, deterministic)
}
func (m *Hardware) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Hardware.Merge(m, src)
}
func (m *Hardware) XXX_Size() int {
	return xxx_messageInfo_Hardware.Size(m)
}
func (m *Hardware) XXX_DiscardUnknown() {
	xxx_messageInfo_Hardware.DiscardUnknown(m)
}

var xxx_messageInfo_Hardware proto.InternalMessageInfo

func (m *Hardware) GetLastChange() *timestamp.Timestamp {
	if m != nil {
		return m.LastChange
	}
	return nil
}

func (m *Hardware) GetRoot() *Component {
	if m != nil {
		return m.Root
	}
	return nil
}

func (m *Hardware) GetLastBooted() *timestamp.Timestamp {
	if m != nil {
		return m.LastBooted
	}
	return nil
}

// The attributes of a component which are modifiable from the client side
type ModifiableComponent struct {
	// The name has to be unique for each component within the hardware and implementations need to
	// ascertain this when modifying the name
	Name                 string              `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	Class                ComponentType       `protobuf:"varint,2,opt,name=class,proto3,enum=dmi.ComponentType" json:"class,omitempty"`
	Parent               *Component          `protobuf:"bytes,3,opt,name=parent,proto3" json:"parent,omitempty"`
	ParentRelPos         int32               `protobuf:"varint,4,opt,name=parent_rel_pos,json=parentRelPos,proto3" json:"parent_rel_pos,omitempty"`
	Alias                string              `protobuf:"bytes,5,opt,name=alias,proto3" json:"alias,omitempty"`
	AssetId              string              `protobuf:"bytes,6,opt,name=asset_id,json=assetId,proto3" json:"asset_id,omitempty"`
	Uri                  *Uri                `protobuf:"bytes,7,opt,name=uri,proto3" json:"uri,omitempty"`
	AdminState           ComponentAdminState `protobuf:"varint,8,opt,name=admin_state,json=adminState,proto3,enum=dmi.ComponentAdminState" json:"admin_state,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

func (m *ModifiableComponent) Reset()         { *m = ModifiableComponent{} }
func (m *ModifiableComponent) String() string { return proto.CompactTextString(m) }
func (*ModifiableComponent) ProtoMessage()    {}
func (*ModifiableComponent) Descriptor() ([]byte, []int) {
	return fileDescriptor_d7c33d745c4ab367, []int{11}
}

func (m *ModifiableComponent) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ModifiableComponent.Unmarshal(m, b)
}
func (m *ModifiableComponent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ModifiableComponent.Marshal(b, m, deterministic)
}
func (m *ModifiableComponent) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ModifiableComponent.Merge(m, src)
}
func (m *ModifiableComponent) XXX_Size() int {
	return xxx_messageInfo_ModifiableComponent.Size(m)
}
func (m *ModifiableComponent) XXX_DiscardUnknown() {
	xxx_messageInfo_ModifiableComponent.DiscardUnknown(m)
}

var xxx_messageInfo_ModifiableComponent proto.InternalMessageInfo

func (m *ModifiableComponent) GetName() string {
	if m != nil {
		return m.Name
	}
	return ""
}

func (m *ModifiableComponent) GetClass() ComponentType {
	if m != nil {
		return m.Class
	}
	return ComponentType_COMPONENT_TYPE_UNDEFINED
}

func (m *ModifiableComponent) GetParent() *Component {
	if m != nil {
		return m.Parent
	}
	return nil
}

func (m *ModifiableComponent) GetParentRelPos() int32 {
	if m != nil {
		return m.ParentRelPos
	}
	return 0
}

func (m *ModifiableComponent) GetAlias() string {
	if m != nil {
		return m.Alias
	}
	return ""
}

func (m *ModifiableComponent) GetAssetId() string {
	if m != nil {
		return m.AssetId
	}
	return ""
}

func (m *ModifiableComponent) GetUri() *Uri {
	if m != nil {
		return m.Uri
	}
	return nil
}

func (m *ModifiableComponent) GetAdminState() ComponentAdminState {
	if m != nil {
		return m.AdminState
	}
	return ComponentAdminState_COMP_ADMIN_STATE_UNDEFINED
}

func init() {
	proto.RegisterEnum("dmi.ComponentType", ComponentType_name, ComponentType_value)
	proto.RegisterEnum("dmi.ComponentAdminState", ComponentAdminState_name, ComponentAdminState_value)
	proto.RegisterEnum("dmi.ComponentOperState", ComponentOperState_name, ComponentOperState_value)
	proto.RegisterEnum("dmi.ComponentUsageState", ComponentUsageState_name, ComponentUsageState_value)
	proto.RegisterEnum("dmi.ComponentAlarmState", ComponentAlarmState_name, ComponentAlarmState_value)
	proto.RegisterEnum("dmi.ComponentStandbyState", ComponentStandbyState_name, ComponentStandbyState_value)
	proto.RegisterEnum("dmi.DataValueType", DataValueType_name, DataValueType_value)
	proto.RegisterEnum("dmi.ValueScale", ValueScale_name, ValueScale_value)
	proto.RegisterEnum("dmi.SensorStatus", SensorStatus_name, SensorStatus_value)
	proto.RegisterEnum("dmi.PortComponentAttributes_ConnectorType", PortComponentAttributes_ConnectorType_name, PortComponentAttributes_ConnectorType_value)
	proto.RegisterEnum("dmi.PortComponentAttributes_Speed", PortComponentAttributes_Speed_name, PortComponentAttributes_Speed_value)
	proto.RegisterEnum("dmi.PortComponentAttributes_Protocol", PortComponentAttributes_Protocol_name, PortComponentAttributes_Protocol_value)
	proto.RegisterEnum("dmi.PsuComponentAttributes_SupportedVoltage", PsuComponentAttributes_SupportedVoltage_name, PsuComponentAttributes_SupportedVoltage_value)
	proto.RegisterEnum("dmi.TransceiverComponentsAttributes_FormFactor", TransceiverComponentsAttributes_FormFactor_name, TransceiverComponentsAttributes_FormFactor_value)
	proto.RegisterEnum("dmi.TransceiverComponentsAttributes_Type", TransceiverComponentsAttributes_Type_name, TransceiverComponentsAttributes_Type_value)
	proto.RegisterType((*Uuid)(nil), "dmi.Uuid")
	proto.RegisterType((*HardwareID)(nil), "dmi.HardwareID")
	proto.RegisterType((*Uri)(nil), "dmi.Uri")
	proto.RegisterType((*ComponentState)(nil), "dmi.ComponentState")
	proto.RegisterType((*ComponentSensorData)(nil), "dmi.ComponentSensorData")
	proto.RegisterType((*PortComponentAttributes)(nil), "dmi.PortComponentAttributes")
	proto.RegisterType((*ContainerComponentAttributes)(nil), "dmi.ContainerComponentAttributes")
	proto.RegisterType((*PsuComponentAttributes)(nil), "dmi.PsuComponentAttributes")
	proto.RegisterType((*TransceiverComponentsAttributes)(nil), "dmi.TransceiverComponentsAttributes")
	proto.RegisterType((*Component)(nil), "dmi.Component")
	proto.RegisterType((*Hardware)(nil), "dmi.Hardware")
	proto.RegisterType((*ModifiableComponent)(nil), "dmi.ModifiableComponent")
}

func init() { proto.RegisterFile("dmi/hw.proto", fileDescriptor_d7c33d745c4ab367) }

var fileDescriptor_d7c33d745c4ab367 = []byte{
	// 2572 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xcd, 0x72, 0xdb, 0xc8,
	0xf1, 0x37, 0xbf, 0xc9, 0x26, 0x29, 0x8d, 0x47, 0xfe, 0xe0, 0xca, 0xf6, 0xae, 0x96, 0xff, 0xdd,
	0x2d, 0xad, 0xfe, 0x59, 0x49, 0x96, 0xed, 0x94, 0x37, 0x5b, 0xa9, 0x14, 0x04, 0x82, 0x22, 0x56,
	0x24, 0x80, 0x1d, 0x80, 0xb2, 0xb5, 0x17, 0x14, 0x44, 0x82, 0x12, 0xaa, 0x48, 0x82, 0x05, 0x80,
	0x5a, 0xfb, 0x9a, 0xca, 0x3d, 0x2f, 0x90, 0x63, 0x2a, 0xb5, 0xb9, 0xe4, 0x92, 0x1c, 0x73, 0xc8,
	0x21, 0x79, 0x81, 0xdc, 0xf2, 0x0c, 0x79, 0x89, 0xd4, 0xcc, 0x00, 0x24, 0x00, 0xc2, 0x5e, 0xa7,
	0x2a, 0xb7, 0x99, 0xdf, 0xaf, 0xbb, 0xa7, 0xa7, 0x67, 0xba, 0xd1, 0x03, 0x68, 0x8c, 0x67, 0xce,
	0xd1, 0xcd, 0x0f, 0x87, 0x0b, 0xcf, 0x0d, 0x5c, 0x5c, 0x18, 0xcf, 0x9c, 0xdd, 0x4f, 0xae, 0x5d,
	0xf7, 0x7a, 0x6a, 0x1f, 0x31, 0xe8, 0x6a, 0x39, 0x39, 0x0a, 0x9c, 0x99, 0xed, 0x07, 0xd6, 0x6c,
	0xc1, 0xa5, 0xda, 0xbb, 0x50, 0x1c, 0x2e, 0x9d, 0x31, 0xc6, 0x50, 0x5c, 0x2e, 0x9d, 0x71, 0x2b,
	0xb7, 0x97, 0xdb, 0xaf, 0x11, 0x36, 0x6e, 0xff, 0x3f, 0x40, 0xcf, 0xf2, 0xc6, 0x3f, 0x58, 0x9e,
	0x2d, 0x77, 0xf0, 0x93, 0x98, 0x44, 0xfd, 0xa4, 0x76, 0x38, 0x9e, 0x39, 0x87, 0x54, 0x35, 0x14,
	0x7e, 0x08, 0x85, 0xa1, 0xe7, 0x60, 0x04, 0x85, 0xa5, 0xe7, 0x84, 0x66, 0xe8, 0xb0, 0xfd, 0x9b,
	0x02, 0x6c, 0x89, 0xee, 0x6c, 0xe1, 0xce, 0xed, 0x79, 0xa0, 0x07, 0x56, 0x60, 0xe3, 0x1e, 0x60,
	0x9f, 0x0e, 0xcc, 0xa9, 0xe5, 0x07, 0xe6, 0xe8, 0xc6, 0x9a, 0x5f, 0xdb, 0x91, 0xe1, 0xdd, 0x43,
	0xee, 0xf2, 0x61, 0xe4, 0xf2, 0xa1, 0x11, 0xb9, 0x4c, 0x10, 0xd3, 0xea, 0x5b, 0x7e, 0x20, 0x72,
	0x1d, 0xfc, 0x35, 0xd4, 0xad, 0xf1, 0xcc, 0x99, 0x9b, 0x8c, 0x69, 0xe5, 0xf7, 0x72, 0xfb, 0x5b,
	0x27, 0x2d, 0xe6, 0xdb, 0x6a, 0x4d, 0x81, 0x0a, 0xb0, 0x85, 0x09, 0x58, 0xab, 0x31, 0xfe, 0x39,
	0x80, 0xbb, 0xb0, 0xbd, 0x50, 0xb3, 0xc0, 0x34, 0x1f, 0x26, 0x35, 0xd5, 0x85, 0xed, 0x71, 0xc5,
	0x9a, 0x1b, 0x0d, 0xe9, 0x92, 0x4b, 0xdf, 0xba, 0xb6, 0x43, 0xc5, 0x62, 0xd6, 0x92, 0x43, 0x2a,
	0x10, 0x2e, 0xb9, 0x5c, 0x8d, 0x99, 0xb7, 0x53, 0xcb, 0x9b, 0x85, 0xaa, 0xa5, 0x4c, 0x6f, 0xa9,
	0x40, 0xe4, 0xed, 0x6a, 0x8c, 0x7f, 0x05, 0x4d, 0x3f, 0xb0, 0xe6, 0xe3, 0xab, 0xb7, 0xa1, 0x72,
	0x99, 0x29, 0xef, 0x26, 0x95, 0x75, 0x2e, 0xc2, 0xd5, 0x1b, 0x7e, 0x6c, 0xd6, 0xfe, 0x77, 0x1e,
	0x76, 0xd6, 0x72, 0xf6, 0xdc, 0x77, 0xbd, 0x8e, 0x15, 0x58, 0xf8, 0x1e, 0x94, 0x6e, 0xad, 0xe9,
	0xd2, 0x66, 0xe1, 0x2f, 0x11, 0x3e, 0xc1, 0x5f, 0x40, 0x31, 0x78, 0xbb, 0x88, 0x02, 0x8a, 0xd9,
	0x2a, 0x54, 0xfc, 0x82, 0xb2, 0xc6, 0xdb, 0x85, 0x4d, 0x18, 0x8f, 0x3f, 0x87, 0x92, 0x3f, 0xb2,
	0xa6, 0x51, 0xfc, 0xb6, 0x99, 0x20, 0x13, 0xd2, 0x29, 0x4c, 0x38, 0x8b, 0x1f, 0x43, 0x6d, 0xe1,
	0xd9, 0x23, 0xc7, 0x77, 0xdc, 0x39, 0x8b, 0x58, 0x89, 0xac, 0x01, 0xfc, 0x25, 0x94, 0xe9, 0x9e,
	0x96, 0x7e, 0x18, 0x91, 0xbb, 0xcc, 0x0a, 0xf7, 0x51, 0x67, 0x04, 0x09, 0x05, 0xf0, 0xff, 0x41,
	0x73, 0x39, 0x77, 0x02, 0xdf, 0x1c, 0x3b, 0xfe, 0x62, 0x6a, 0xbd, 0x65, 0x61, 0xa8, 0x91, 0x06,
	0x03, 0x3b, 0x1c, 0xc3, 0x2f, 0xa1, 0xb6, 0xba, 0xe6, 0xad, 0xca, 0x4f, 0xde, 0xaa, 0xb5, 0x30,
	0x3e, 0x80, 0xbb, 0x6c, 0xff, 0xe6, 0x72, 0x31, 0xa6, 0xf7, 0xd3, 0xa3, 0x91, 0xae, 0xee, 0xe5,
	0xf6, 0x9b, 0x64, 0x9b, 0x11, 0x43, 0x86, 0x13, 0x7a, 0x22, 0x8f, 0xa0, 0x36, 0xb6, 0x02, 0xcb,
	0x64, 0x71, 0xaa, 0x31, 0x37, 0xaa, 0x14, 0xa0, 0xd1, 0x69, 0xff, 0xae, 0x04, 0x0f, 0x35, 0xd7,
	0x0b, 0xd6, 0xc7, 0x1a, 0x04, 0x9e, 0x73, 0xb5, 0x0c, 0x6c, 0x1f, 0x7f, 0x07, 0x5b, 0x23, 0x77,
	0x3e, 0xb7, 0x47, 0x81, 0xeb, 0x71, 0xed, 0x1c, 0xdb, 0xf6, 0x01, 0xdb, 0xf6, 0x3b, 0xb4, 0x0e,
	0xc5, 0x48, 0x85, 0x45, 0xbf, 0x39, 0x8a, 0x4f, 0xf1, 0x4b, 0x28, 0xf9, 0x0b, 0xdb, 0x1e, 0x87,
	0xe7, 0xd5, 0x7e, 0xaf, 0x25, 0x9d, 0x4a, 0x12, 0xae, 0x80, 0x05, 0xa8, 0xb2, 0x90, 0x8c, 0xdc,
	0x69, 0x78, 0x86, 0x9f, 0xbf, 0x57, 0x59, 0x0b, 0x85, 0xc9, 0x4a, 0x0d, 0x7f, 0x0e, 0x5b, 0x8b,
	0x9b, 0xb7, 0xbe, 0x33, 0xb2, 0xa6, 0xe6, 0xd4, 0xba, 0xb2, 0xa7, 0xec, 0x84, 0x6b, 0xa4, 0x19,
	0xa1, 0x7d, 0x0a, 0xb6, 0x6d, 0x68, 0x26, 0xf6, 0x80, 0x1f, 0x43, 0x4b, 0x54, 0x15, 0x45, 0x12,
	0x0d, 0x95, 0x98, 0xc6, 0xa5, 0x26, 0x99, 0x43, 0xa5, 0x23, 0x75, 0x65, 0x45, 0xea, 0xa0, 0x3b,
	0xb8, 0x0a, 0x45, 0xf2, 0xed, 0xf3, 0x17, 0x28, 0x87, 0x1b, 0x50, 0xed, 0xca, 0xa7, 0x12, 0x31,
	0xfb, 0x22, 0xca, 0xe3, 0x6d, 0xa8, 0xf3, 0x99, 0x2e, 0x9a, 0x9a, 0x88, 0x0a, 0xb8, 0x09, 0x35,
	0x0e, 0x0c, 0x34, 0x15, 0x15, 0xdb, 0x7f, 0xca, 0x41, 0x89, 0xed, 0x10, 0xef, 0xc0, 0xb6, 0xae,
	0x49, 0x52, 0x27, 0x61, 0xb6, 0x0e, 0x95, 0xce, 0xa5, 0x22, 0x0c, 0x64, 0x11, 0xe5, 0xa8, 0xea,
	0x99, 0x7c, 0x26, 0x9c, 0xca, 0x86, 0xf9, 0x14, 0xe5, 0xf1, 0x16, 0xc0, 0x6a, 0x7a, 0x8c, 0x0a,
	0xf1, 0xf9, 0xc9, 0x0b, 0x54, 0x8c, 0xcf, 0x9f, 0x1f, 0xa3, 0x12, 0x75, 0x65, 0x2d, 0x7f, 0x8c,
	0xca, 0x71, 0xe0, 0xf9, 0xf1, 0x31, 0xaa, 0x60, 0x04, 0x8d, 0x81, 0x14, 0x59, 0x38, 0x3e, 0x46,
	0xd5, 0x38, 0xf2, 0xf4, 0xe4, 0xc5, 0x31, 0xaa, 0xb5, 0x3d, 0xa8, 0x46, 0x41, 0xc5, 0x0f, 0x00,
	0x6b, 0x44, 0x35, 0x54, 0x51, 0xed, 0x27, 0xbc, 0x6e, 0x40, 0x55, 0x32, 0x7a, 0x12, 0x51, 0x24,
	0x03, 0xe5, 0x68, 0x68, 0xce, 0x34, 0x55, 0x41, 0x79, 0x5c, 0x83, 0xd2, 0x6b, 0x36, 0x2c, 0x60,
	0x80, 0xf2, 0xeb, 0x33, 0x9d, 0x8e, 0x8b, 0x14, 0x3e, 0xeb, 0x0a, 0xba, 0x81, 0x4a, 0x14, 0xd6,
	0x25, 0x22, 0x0b, 0x7d, 0x54, 0xa6, 0x7a, 0x12, 0x15, 0xa8, 0xb4, 0x25, 0x78, 0x2c, 0xba, 0xf3,
	0xc0, 0x72, 0xe6, 0xb6, 0x97, 0x75, 0x45, 0x37, 0x8f, 0x34, 0x97, 0x75, 0xa4, 0xff, 0xc8, 0xc1,
	0x03, 0xcd, 0x5f, 0x66, 0x59, 0xb8, 0x84, 0xbb, 0xfe, 0x72, 0xb1, 0x70, 0xbd, 0xc0, 0x1e, 0x9b,
	0xb7, 0xee, 0x34, 0xb0, 0xae, 0xa3, 0x7b, 0xfe, 0x33, 0x7e, 0xc1, 0x32, 0xf5, 0x0e, 0xf5, 0x48,
	0xe9, 0x82, 0xeb, 0x10, 0xe4, 0xa7, 0x90, 0xb6, 0x06, 0x28, 0x2d, 0x85, 0x3f, 0x81, 0x47, 0xfa,
	0x50, 0xd3, 0x54, 0x62, 0x48, 0x1d, 0xf3, 0x42, 0xed, 0x1b, 0xc2, 0x59, 0xf2, 0x3a, 0x55, 0xa0,
	0x70, 0xf1, 0xfc, 0x25, 0x0f, 0xde, 0xc5, 0xc9, 0xb3, 0x63, 0x94, 0x67, 0xa3, 0xa7, 0x4f, 0x5f,
	0xa0, 0x42, 0xfb, 0x9f, 0x25, 0xf8, 0xc4, 0xf0, 0xac, 0xb9, 0x3f, 0xb2, 0x9d, 0xdb, 0x58, 0x44,
	0xfc, 0xd8, 0x86, 0x34, 0xa8, 0x4f, 0x5c, 0x6f, 0x66, 0x4e, 0x2c, 0x7a, 0x81, 0xc3, 0xad, 0x1c,
	0xb1, 0xad, 0xfc, 0x84, 0xea, 0x61, 0xd7, 0xf5, 0x66, 0x5d, 0xa6, 0x46, 0x60, 0xb2, 0x1a, 0xe3,
	0x1e, 0x40, 0x40, 0x35, 0xcd, 0x58, 0xa5, 0xfd, 0xf2, 0x83, 0x0c, 0xb2, 0x12, 0x50, 0x63, 0xca,
	0x2c, 0x93, 0x3e, 0x85, 0xc6, 0xcc, 0x7a, 0x43, 0x6b, 0x62, 0x60, 0xcd, 0x47, 0xbc, 0x18, 0x37,
	0x49, 0x7d, 0x66, 0xbd, 0xe9, 0x84, 0x10, 0xfe, 0x25, 0xe0, 0xb8, 0x88, 0xc9, 0xab, 0x76, 0x31,
	0xbb, 0x6a, 0xa3, 0x98, 0x26, 0x43, 0x68, 0xdd, 0xf5, 0xde, 0x98, 0x3f, 0x58, 0xb7, 0xf6, 0xd4,
	0x9e, 0x5f, 0x07, 0x37, 0xad, 0xd2, 0x5e, 0x61, 0xbf, 0x49, 0x1a, 0xde, 0x9b, 0x57, 0x2b, 0x8c,
	0x0a, 0x05, 0x09, 0xa1, 0x32, 0x17, 0x0a, 0xe2, 0x42, 0xbf, 0x00, 0xb4, 0x96, 0x08, 0xdd, 0xa8,
	0x64, 0xbb, 0xb1, 0xbd, 0x16, 0x64, 0x40, 0xfb, 0x6f, 0x39, 0x80, 0x75, 0x30, 0xf1, 0x43, 0xd8,
	0xe9, 0xaa, 0x64, 0x60, 0x76, 0x05, 0x56, 0x42, 0x86, 0xca, 0xb9, 0xa2, 0xbe, 0x52, 0x78, 0xed,
	0xf8, 0x4e, 0xef, 0x6a, 0x3c, 0xc3, 0xe9, 0xc8, 0xd4, 0xfa, 0x43, 0x1d, 0xe5, 0x69, 0x36, 0xd0,
	0xe9, 0xc9, 0x4b, 0x54, 0xa0, 0x37, 0x82, 0xca, 0x14, 0x69, 0x72, 0xad, 0x44, 0x4a, 0x14, 0x7e,
	0xdd, 0xd5, 0x78, 0xb6, 0x88, 0x5d, 0xed, 0x39, 0xaa, 0x84, 0xa3, 0x13, 0x54, 0x65, 0x23, 0x4d,
	0x38, 0x47, 0x35, 0x5c, 0x86, 0xfc, 0xeb, 0x13, 0x04, 0x34, 0xd5, 0x54, 0x9a, 0x99, 0xa8, 0x4e,
	0x35, 0xc5, 0xae, 0x86, 0x1a, 0xd4, 0x20, 0x95, 0x37, 0x05, 0x51, 0x45, 0xcd, 0xd5, 0xac, 0x23,
	0xaa, 0x68, 0xab, 0x7d, 0x03, 0x45, 0x76, 0x64, 0x08, 0x1a, 0x61, 0xc9, 0x8b, 0x9c, 0xfe, 0x2f,
	0x73, 0x9c, 0xb9, 0xa2, 0x2a, 0xa8, 0x44, 0x4b, 0x9a, 0x72, 0x66, 0x6a, 0xaa, 0x72, 0x92, 0xc8,
	0xf1, 0x7f, 0x55, 0xa0, 0xb6, 0xba, 0x3d, 0xb4, 0xbf, 0x9b, 0x5b, 0x33, 0x3b, 0xea, 0xef, 0xe8,
	0x18, 0xef, 0x43, 0x69, 0x34, 0xb5, 0x7c, 0x3f, 0xf1, 0x95, 0x5f, 0xa9, 0xb0, 0x4b, 0xc6, 0x05,
	0xf0, 0x1e, 0xd4, 0xc7, 0xb6, 0x3f, 0xf2, 0x9c, 0x45, 0x40, 0xbf, 0xe0, 0x05, 0x66, 0x24, 0x0e,
	0xe1, 0x07, 0x50, 0x5e, 0x58, 0x9e, 0x3d, 0x0f, 0xc2, 0xe2, 0x1f, 0xce, 0xf0, 0x67, 0xb0, 0xc5,
	0x47, 0xa6, 0x67, 0x4f, 0xcd, 0x85, 0xcb, 0xbf, 0xf1, 0x25, 0xd2, 0xe0, 0x28, 0xb1, 0xa7, 0x9a,
	0xeb, 0xe3, 0x03, 0xa8, 0x8e, 0x6e, 0x9c, 0xe9, 0xd8, 0xb3, 0xe7, 0xec, 0xd2, 0xd4, 0x4f, 0xb6,
	0x92, 0xce, 0x90, 0x15, 0x4f, 0x2f, 0xfb, 0x4d, 0xd8, 0x95, 0x9a, 0x9e, 0x7d, 0xcb, 0x2e, 0x4f,
	0x8d, 0xd4, 0x23, 0x8c, 0xd8, 0xb7, 0x54, 0x64, 0xe2, 0x78, 0xb3, 0x95, 0x48, 0x95, 0x8b, 0x44,
	0x58, 0x28, 0xe2, 0xbb, 0x93, 0x60, 0x25, 0xc2, 0x3f, 0xe0, 0xf5, 0x08, 0xa3, 0x22, 0x4f, 0x00,
	0x7c, 0xdb, 0x73, 0xac, 0xa9, 0x39, 0x5f, 0xce, 0x5a, 0xc0, 0x04, 0x6a, 0x1c, 0x51, 0x96, 0x33,
	0xfc, 0x11, 0x54, 0x67, 0x93, 0x6b, 0x93, 0x45, 0xb5, 0xce, 0xc8, 0xca, 0x6c, 0x72, 0xad, 0xd0,
	0xc0, 0x3e, 0x01, 0x98, 0xb9, 0x63, 0x7b, 0xca, 0xc9, 0x06, 0xd7, 0x64, 0x08, 0xa3, 0xef, 0x41,
	0xc9, 0x9a, 0x3a, 0x96, 0xdf, 0x6a, 0x32, 0x86, 0x4f, 0xa8, 0x3d, 0xcb, 0xf7, 0xed, 0xc0, 0x74,
	0xc6, 0xad, 0x2d, 0x6e, 0x8f, 0xcd, 0xe5, 0x31, 0xbe, 0x0f, 0x65, 0xc7, 0x37, 0x27, 0xde, 0xb2,
	0xb5, 0xbd, 0x97, 0xdb, 0xaf, 0x92, 0x92, 0xe3, 0x77, 0xbd, 0x25, 0x7e, 0xc1, 0x3d, 0xa0, 0x1d,
	0x49, 0x0b, 0xfd, 0x64, 0x9b, 0x43, 0xbd, 0xeb, 0xd0, 0xc6, 0x65, 0x97, 0xb7, 0xe8, 0x77, 0x99,
	0x46, 0x95, 0xf7, 0xf1, 0x9e, 0xc3, 0x9a, 0xf5, 0x55, 0x93, 0x8f, 0x33, 0x9b, 0x7c, 0xfc, 0x25,
	0x94, 0x78, 0xf7, 0xb9, 0xc3, 0xf8, 0x9d, 0x8d, 0xee, 0x33, 0xa0, 0x2d, 0x5f, 0xd4, 0xeb, 0xfa,
	0xac, 0x83, 0xa3, 0xfe, 0x59, 0xad, 0x7b, 0xec, 0x54, 0x53, 0xbd, 0xee, 0xba, 0x0d, 0x25, 0xe0,
	0xaf, 0x5b, 0xd2, 0x6f, 0xa0, 0x46, 0xab, 0xbb, 0x69, 0x05, 0x81, 0xd7, 0x3a, 0x61, 0x2b, 0x3d,
	0x7e, 0x5f, 0x53, 0xd2, 0xbb, 0x43, 0xaa, 0x54, 0x81, 0x22, 0xf8, 0x5b, 0xd6, 0x5d, 0xf1, 0x4f,
	0x1b, 0xb7, 0xf0, 0x8c, 0x59, 0xf8, 0x34, 0x5c, 0xfa, 0xdd, 0x5f, 0xbd, 0xde, 0x1d, 0xd6, 0x56,
	0x71, 0x9e, 0xd9, 0x7a, 0x09, 0xd5, 0x85, 0xbf, 0xe4, 0x56, 0x9e, 0x33, 0x2b, 0x8f, 0xde, 0xf3,
	0xed, 0xea, 0xdd, 0x21, 0x95, 0x85, 0xbf, 0x64, 0x9a, 0xdf, 0x01, 0x0a, 0xd6, 0x45, 0x9c, 0x5b,
	0x78, 0xc1, 0x2c, 0x7c, 0xf6, 0x21, 0x15, 0xbe, 0x77, 0x87, 0x6c, 0xc7, 0xf4, 0x29, 0x71, 0x0a,
	0x50, 0xf5, 0x17, 0xf6, 0xc8, 0x99, 0x38, 0xa3, 0xf6, 0x8f, 0x39, 0xa8, 0x46, 0x4f, 0x33, 0xfc,
	0x0d, 0xd4, 0x63, 0xef, 0xa8, 0x0f, 0x78, 0x46, 0xc1, 0x74, 0xf5, 0x82, 0xc2, 0x6d, 0x28, 0x7a,
	0xae, 0x1b, 0xb0, 0x12, 0xb0, 0x99, 0x75, 0x8c, 0x5b, 0x2d, 0x70, 0xe5, 0xba, 0x81, 0x3d, 0x66,
	0xd9, 0xff, 0x01, 0x0b, 0x9c, 0x32, 0xe9, 0xf6, 0x1f, 0xf3, 0xb0, 0x33, 0x70, 0xc7, 0xce, 0xc4,
	0xb1, 0xae, 0xa6, 0xf6, 0xff, 0xaa, 0x20, 0x7d, 0xb1, 0x2a, 0x37, 0x85, 0x4c, 0xc7, 0xdf, 0x5d,
	0x7e, 0x8a, 0x19, 0xe5, 0x67, 0x95, 0x90, 0xa5, 0x77, 0x25, 0x64, 0x39, 0x99, 0x90, 0x61, 0x0a,
	0x55, 0xb2, 0x52, 0x28, 0xf5, 0x24, 0xad, 0x7e, 0xf8, 0x93, 0xf4, 0xe0, 0x2f, 0x05, 0xda, 0x23,
	0xc7, 0xb6, 0xcb, 0x7b, 0xe4, 0x81, 0xa6, 0x2a, 0x92, 0x62, 0x6c, 0xf6, 0xc8, 0xbb, 0xf0, 0x60,
	0x83, 0xe5, 0x9f, 0x93, 0x5c, 0x06, 0x27, 0xf6, 0x04, 0x5d, 0x97, 0xe9, 0x67, 0x70, 0xd3, 0xea,
	0xa9, 0x20, 0x9e, 0x6b, 0x7d, 0x41, 0x91, 0x50, 0x21, 0x83, 0x15, 0x55, 0xc5, 0x10, 0x64, 0x45,
	0x22, 0xa8, 0x48, 0x3b, 0xad, 0x14, 0xab, 0xa9, 0xaf, 0x68, 0x3b, 0x3e, 0xd4, 0xb4, 0xfe, 0x25,
	0x2a, 0xd1, 0x1e, 0x36, 0x25, 0xd0, 0x15, 0x14, 0x54, 0xc6, 0x1f, 0xc1, 0xfd, 0x14, 0xae, 0x4b,
	0x8a, 0xae, 0x12, 0x54, 0xc9, 0xa0, 0x06, 0x6a, 0x67, 0xd8, 0x97, 0x50, 0x95, 0x7e, 0xe3, 0x37,
	0x96, 0x23, 0x06, 0xaa, 0x65, 0x2c, 0x23, 0x6a, 0x43, 0x04, 0x19, 0xfb, 0x3e, 0x15, 0x0c, 0x43,
	0x22, 0x97, 0xa8, 0x9e, 0xc1, 0xe9, 0x86, 0x4a, 0x84, 0x33, 0x09, 0x35, 0xb2, 0x7c, 0x90, 0x06,
	0x2a, 0xb9, 0x44, 0x4d, 0xfc, 0x31, 0xec, 0xa6, 0x28, 0x83, 0x08, 0x8a, 0x2e, 0x4a, 0xf2, 0x85,
	0x44, 0xd0, 0xd6, 0xc1, 0x9f, 0x73, 0xb1, 0xa7, 0xf5, 0xfa, 0x68, 0x23, 0x3d, 0x53, 0xe8, 0x0c,
	0x64, 0xc5, 0xd4, 0x0d, 0xc1, 0x48, 0x1e, 0x5f, 0x18, 0xe8, 0x14, 0x1f, 0x1d, 0xe0, 0x23, 0x78,
	0xb8, 0xc1, 0xf6, 0x55, 0xf1, 0x5c, 0xea, 0xa0, 0x3c, 0x6e, 0xc3, 0xc7, 0x1b, 0xa4, 0xde, 0x1b,
	0x1a, 0x86, 0xac, 0x9c, 0x99, 0x1d, 0x6a, 0xa0, 0x80, 0x9f, 0xc0, 0x47, 0x19, 0xe6, 0x43, 0x13,
	0xc5, 0x83, 0x1f, 0x73, 0x80, 0x37, 0xff, 0x74, 0xac, 0xb4, 0x54, 0x8d, 0x1e, 0xea, 0x86, 0xcf,
	0x91, 0x57, 0x09, 0x3a, 0x72, 0x39, 0xda, 0x50, 0x8c, 0xec, 0xc8, 0xba, 0x70, 0xda, 0x67, 0x3e,
	0x67, 0xa8, 0x4a, 0x0a, 0x27, 0x0b, 0x59, 0xa4, 0x21, 0xe9, 0x74, 0x3b, 0xa8, 0x78, 0xf0, 0x87,
	0x78, 0x80, 0xd7, 0xff, 0x56, 0x56, 0x01, 0x1e, 0xea, 0xb4, 0xdd, 0x7f, 0x77, 0x80, 0x93, 0x7c,
	0xe4, 0x6d, 0x78, 0xe2, 0x09, 0x56, 0xee, 0xf4, 0xa5, 0x98, 0xab, 0x71, 0x4a, 0x10, 0x0d, 0xf9,
	0x82, 0xe6, 0x47, 0x96, 0xde, 0xe9, 0x50, 0xbf, 0x44, 0xc5, 0x83, 0xdf, 0xc6, 0x7f, 0xb2, 0xac,
	0xff, 0xe4, 0xac, 0x6f, 0x42, 0x5f, 0x20, 0x83, 0xf7, 0xdd, 0x84, 0x04, 0x1f, 0x39, 0xfa, 0x29,
	0x3c, 0xc9, 0xd4, 0x26, 0x26, 0x91, 0x34, 0x41, 0x26, 0x28, 0xbf, 0x3e, 0xeb, 0x98, 0x88, 0x48,
	0x64, 0x43, 0x16, 0x85, 0x3e, 0x2a, 0x44, 0x17, 0x3f, 0x41, 0x0f, 0x84, 0x6f, 0x55, 0x9a, 0xd0,
	0x99, 0x9c, 0xac, 0xa8, 0x04, 0x95, 0x32, 0xfd, 0x7a, 0x25, 0x10, 0x85, 0x1e, 0x4b, 0x79, 0x7d,
	0x09, 0x63, 0xac, 0xac, 0x74, 0x24, 0x43, 0x22, 0x03, 0x59, 0x11, 0x0c, 0x09, 0x55, 0x0e, 0xfe,
	0x9a, 0x83, 0xfb, 0x99, 0xbf, 0xa7, 0xf0, 0x1e, 0x3c, 0x66, 0xda, 0xba, 0x21, 0x28, 0x9d, 0xd3,
	0xcb, 0x8c, 0xa8, 0x44, 0x51, 0x4b, 0x4b, 0xa4, 0x4a, 0x5c, 0x8a, 0xef, 0xa9, 0x46, 0xec, 0x04,
	0x93, 0x9c, 0xa8, 0xf6, 0xe9, 0x65, 0xdb, 0x87, 0xcf, 0x32, 0x48, 0x8d, 0xa8, 0x17, 0x72, 0x87,
	0x26, 0x90, 0x2e, 0x91, 0x0b, 0x59, 0x94, 0x50, 0xf1, 0xe0, 0xef, 0x79, 0x68, 0x26, 0xfe, 0x7b,
	0xe1, 0x16, 0xdc, 0xbb, 0x10, 0xfa, 0x43, 0x69, 0xb3, 0x1a, 0xdf, 0x03, 0x14, 0x63, 0xf8, 0xab,
	0x20, 0x47, 0xeb, 0x54, 0x42, 0x9e, 0x3b, 0x9f, 0xa7, 0x85, 0x2d, 0x86, 0xd3, 0x27, 0xab, 0x6e,
	0x0a, 0x22, 0x2a, 0x64, 0x12, 0x1d, 0x11, 0x15, 0x53, 0x96, 0x84, 0x81, 0x26, 0x11, 0x89, 0xbe,
	0x58, 0x92, 0xeb, 0xbe, 0x12, 0x0c, 0x43, 0x47, 0xe5, 0x14, 0xda, 0x93, 0x88, 0xf1, 0x3d, 0xaa,
	0xa4, 0x6c, 0x88, 0x52, 0x5f, 0x97, 0x87, 0x3a, 0xaa, 0xd2, 0x3b, 0x1d, 0xc3, 0x35, 0x89, 0x88,
	0xb4, 0xd6, 0x91, 0x1e, 0xaa, 0x61, 0x0c, 0x5b, 0x31, 0x8a, 0x68, 0x03, 0x04, 0x29, 0x4c, 0x1c,
	0x0c, 0x78, 0x71, 0x8d, 0x61, 0x06, 0x19, 0x1a, 0x3d, 0x93, 0x01, 0xa8, 0x71, 0xf0, 0xfb, 0x02,
	0xc0, 0xfa, 0x61, 0xb7, 0x5e, 0x4d, 0x17, 0x85, 0x7e, 0x32, 0x88, 0xf7, 0xe1, 0x6e, 0x9c, 0xba,
	0x54, 0x45, 0x43, 0x45, 0xb9, 0x34, 0xfc, 0xbd, 0xa4, 0x19, 0x2a, 0xca, 0xaf, 0x37, 0xc9, 0x61,
	0xc1, 0x30, 0x54, 0x54, 0x48, 0x0b, 0x77, 0xa5, 0x81, 0xa1, 0xa2, 0x62, 0x5a, 0x58, 0x93, 0x45,
	0x35, 0x1e, 0x3d, 0x8e, 0x2a, 0x82, 0xa2, 0xa2, 0x72, 0xda, 0xc4, 0x40, 0x16, 0x89, 0x8a, 0x2a,
	0x9b, 0x70, 0xbf, 0x2f, 0xa3, 0x6a, 0x1a, 0x1e, 0x2a, 0xb2, 0xa1, 0xa3, 0x5a, 0xda, 0xf4, 0xb9,
	0xdc, 0x57, 0x11, 0xa4, 0xd1, 0x81, 0x74, 0x26, 0xa0, 0x7a, 0x1a, 0x3d, 0x93, 0xcf, 0x04, 0xd4,
	0x48, 0xa3, 0x86, 0x44, 0x04, 0xd4, 0xdc, 0xd8, 0x88, 0x64, 0x08, 0x68, 0x0b, 0xef, 0xc0, 0x76,
	0x1c, 0x95, 0x5e, 0x0b, 0x68, 0x7b, 0x33, 0x6e, 0x86, 0x21, 0x20, 0xb4, 0x19, 0x65, 0x0a, 0xdf,
	0x3d, 0xf8, 0x75, 0x0e, 0x1a, 0xf1, 0xdf, 0xae, 0x34, 0x8b, 0xf8, 0x47, 0x9a, 0xa5, 0xc8, 0x50,
	0x4f, 0xdf, 0xf7, 0x24, 0xa9, 0x9e, 0xa3, 0x1c, 0xad, 0x44, 0x69, 0x15, 0xe1, 0x42, 0x90, 0xfb,
	0xb4, 0xd0, 0xa3, 0x3c, 0xcd, 0xfa, 0x24, 0xad, 0xa8, 0x0a, 0xad, 0xf9, 0x82, 0x21, 0xab, 0x0a,
	0xad, 0x55, 0xa7, 0xdf, 0x7c, 0xff, 0xf5, 0xb5, 0x13, 0xdc, 0x2c, 0xaf, 0x0e, 0x47, 0xee, 0xec,
	0xc8, 0x5d, 0xd8, 0xf3, 0x91, 0xeb, 0x8d, 0x8f, 0xc6, 0xf6, 0xad, 0x33, 0xb2, 0xbf, 0x9a, 0x59,
	0x73, 0xeb, 0xda, 0x9e, 0xd9, 0xf3, 0xe0, 0x2b, 0x67, 0x1e, 0xd8, 0xde, 0xc4, 0x1a, 0xd9, 0x47,
	0xb7, 0xcf, 0x8e, 0xae, 0xdd, 0xa3, 0xf1, 0xcc, 0xb9, 0x2a, 0xb3, 0x6e, 0xf4, 0xd9, 0x7f, 0x02,
	0x00, 0x00, 0xff, 0xff, 0xb6, 0x76, 0x31, 0xc6, 0x0b, 0x19, 0x00, 0x00,
}
