// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.25.0-devel
// 	protoc        v3.6.1
// source: device/config.proto

package device

import (
	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
	reflect "reflect"
	sync "sync"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// Next tag: 8
type Config_FormFactor int32

const (
	Config_FORM_FACTOR_UNSPECIFIED Config_FormFactor = 0
	Config_FORM_FACTOR_CLAMSHELL   Config_FormFactor = 1
	Config_FORM_FACTOR_CONVERTIBLE Config_FormFactor = 2
	Config_FORM_FACTOR_DETACHABLE  Config_FormFactor = 3
	Config_FORM_FACTOR_CHROMEBASE  Config_FormFactor = 4
	Config_FORM_FACTOR_CHROMEBOX   Config_FormFactor = 5
	Config_FORM_FACTOR_CHROMEBIT   Config_FormFactor = 6
	Config_FORM_FACTOR_CHROMESLATE Config_FormFactor = 7
)

// Enum value maps for Config_FormFactor.
var (
	Config_FormFactor_name = map[int32]string{
		0: "FORM_FACTOR_UNSPECIFIED",
		1: "FORM_FACTOR_CLAMSHELL",
		2: "FORM_FACTOR_CONVERTIBLE",
		3: "FORM_FACTOR_DETACHABLE",
		4: "FORM_FACTOR_CHROMEBASE",
		5: "FORM_FACTOR_CHROMEBOX",
		6: "FORM_FACTOR_CHROMEBIT",
		7: "FORM_FACTOR_CHROMESLATE",
	}
	Config_FormFactor_value = map[string]int32{
		"FORM_FACTOR_UNSPECIFIED": 0,
		"FORM_FACTOR_CLAMSHELL":   1,
		"FORM_FACTOR_CONVERTIBLE": 2,
		"FORM_FACTOR_DETACHABLE":  3,
		"FORM_FACTOR_CHROMEBASE":  4,
		"FORM_FACTOR_CHROMEBOX":   5,
		"FORM_FACTOR_CHROMEBIT":   6,
		"FORM_FACTOR_CHROMESLATE": 7,
	}
)

func (x Config_FormFactor) Enum() *Config_FormFactor {
	p := new(Config_FormFactor)
	*p = x
	return p
}

func (x Config_FormFactor) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Config_FormFactor) Descriptor() protoreflect.EnumDescriptor {
	return file_device_config_proto_enumTypes[0].Descriptor()
}

func (Config_FormFactor) Type() protoreflect.EnumType {
	return &file_device_config_proto_enumTypes[0]
}

func (x Config_FormFactor) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Config_FormFactor.Descriptor instead.
func (Config_FormFactor) EnumDescriptor() ([]byte, []int) {
	return file_device_config_proto_rawDescGZIP(), []int{0, 0}
}

// Next Tag: 3
type Config_Graphics int32

const (
	Config_GRAPHICS_UNSPECIFIED Config_Graphics = 0
	Config_GRAPHICS_GL          Config_Graphics = 1
	Config_GRAPHICS_GLE         Config_Graphics = 2
)

// Enum value maps for Config_Graphics.
var (
	Config_Graphics_name = map[int32]string{
		0: "GRAPHICS_UNSPECIFIED",
		1: "GRAPHICS_GL",
		2: "GRAPHICS_GLE",
	}
	Config_Graphics_value = map[string]int32{
		"GRAPHICS_UNSPECIFIED": 0,
		"GRAPHICS_GL":          1,
		"GRAPHICS_GLE":         2,
	}
)

func (x Config_Graphics) Enum() *Config_Graphics {
	p := new(Config_Graphics)
	*p = x
	return p
}

func (x Config_Graphics) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Config_Graphics) Descriptor() protoreflect.EnumDescriptor {
	return file_device_config_proto_enumTypes[1].Descriptor()
}

func (Config_Graphics) Type() protoreflect.EnumType {
	return &file_device_config_proto_enumTypes[1]
}

func (x Config_Graphics) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Config_Graphics.Descriptor instead.
func (Config_Graphics) EnumDescriptor() ([]byte, []int) {
	return file_device_config_proto_rawDescGZIP(), []int{0, 1}
}

// Next Tag: 12
type Config_HardwareFeature int32

const (
	Config_HARDWARE_FEATURE_UNSPECIFIED Config_HardwareFeature = 0
	Config_HARDWARE_FEATURE_BLUETOOTH   Config_HardwareFeature = 1
	Config_HARDWARE_FEATURE_FLASHROM    Config_HardwareFeature = 2
	// Indicate if the device support audio hotwording, an audio listening module
	// included with Google Chrome and Chromium to support Google Assistant.
	// https://chromeos.google.com/partner/dlm/docs/latest-requirements/chromebook.html#audio-hotwording-always-on-listening
	Config_HARDWARE_FEATURE_HOTWORDING       Config_HardwareFeature = 3
	Config_HARDWARE_FEATURE_INTERNAL_DISPLAY Config_HardwareFeature = 4
	// Indicate if the device has support for lucid sleep (a connected lower power state,
	// in which the device should still has some network communications)
	// https://chromeos.google.com/partner/dlm/docs/p-hardware-specs/lucidsleep.html
	Config_HARDWARE_FEATURE_LUCID_SLEEP Config_HardwareFeature = 5
	Config_HARDWARE_FEATURE_WEBCAM      Config_HardwareFeature = 6
	Config_HARDWARE_FEATURE_STYLUS      Config_HardwareFeature = 7
	Config_HARDWARE_FEATURE_TOUCHPAD    Config_HardwareFeature = 8
	Config_HARDWARE_FEATURE_TOUCHSCREEN Config_HardwareFeature = 9
	// Indicate if the device has detachable keyboard.
	// https://chromeos.google.com/partner/dlm/docs/latest-requirements/detachable.html#keyboard-external
	Config_HARDWARE_FEATURE_DETACHABLE_KEYBOARD Config_HardwareFeature = 10
	// Indicate if the device has fingerprint sensor.
	Config_HARDWARE_FEATURE_FINGERPRINT Config_HardwareFeature = 11
)

// Enum value maps for Config_HardwareFeature.
var (
	Config_HardwareFeature_name = map[int32]string{
		0:  "HARDWARE_FEATURE_UNSPECIFIED",
		1:  "HARDWARE_FEATURE_BLUETOOTH",
		2:  "HARDWARE_FEATURE_FLASHROM",
		3:  "HARDWARE_FEATURE_HOTWORDING",
		4:  "HARDWARE_FEATURE_INTERNAL_DISPLAY",
		5:  "HARDWARE_FEATURE_LUCID_SLEEP",
		6:  "HARDWARE_FEATURE_WEBCAM",
		7:  "HARDWARE_FEATURE_STYLUS",
		8:  "HARDWARE_FEATURE_TOUCHPAD",
		9:  "HARDWARE_FEATURE_TOUCHSCREEN",
		10: "HARDWARE_FEATURE_DETACHABLE_KEYBOARD",
		11: "HARDWARE_FEATURE_FINGERPRINT",
	}
	Config_HardwareFeature_value = map[string]int32{
		"HARDWARE_FEATURE_UNSPECIFIED":         0,
		"HARDWARE_FEATURE_BLUETOOTH":           1,
		"HARDWARE_FEATURE_FLASHROM":            2,
		"HARDWARE_FEATURE_HOTWORDING":          3,
		"HARDWARE_FEATURE_INTERNAL_DISPLAY":    4,
		"HARDWARE_FEATURE_LUCID_SLEEP":         5,
		"HARDWARE_FEATURE_WEBCAM":              6,
		"HARDWARE_FEATURE_STYLUS":              7,
		"HARDWARE_FEATURE_TOUCHPAD":            8,
		"HARDWARE_FEATURE_TOUCHSCREEN":         9,
		"HARDWARE_FEATURE_DETACHABLE_KEYBOARD": 10,
		"HARDWARE_FEATURE_FINGERPRINT":         11,
	}
)

func (x Config_HardwareFeature) Enum() *Config_HardwareFeature {
	p := new(Config_HardwareFeature)
	*p = x
	return p
}

func (x Config_HardwareFeature) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Config_HardwareFeature) Descriptor() protoreflect.EnumDescriptor {
	return file_device_config_proto_enumTypes[2].Descriptor()
}

func (Config_HardwareFeature) Type() protoreflect.EnumType {
	return &file_device_config_proto_enumTypes[2]
}

func (x Config_HardwareFeature) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Config_HardwareFeature.Descriptor instead.
func (Config_HardwareFeature) EnumDescriptor() ([]byte, []int) {
	return file_device_config_proto_rawDescGZIP(), []int{0, 2}
}

// Indicate the device's power supply.
// Next Tag: 3
type Config_PowerSupply int32

const (
	Config_POWER_SUPPLY_UNSPECIFIED Config_PowerSupply = 0
	Config_POWER_SUPPLY_BATTERY     Config_PowerSupply = 1
	Config_POWER_SUPPLY_AC_ONLY     Config_PowerSupply = 2
)

// Enum value maps for Config_PowerSupply.
var (
	Config_PowerSupply_name = map[int32]string{
		0: "POWER_SUPPLY_UNSPECIFIED",
		1: "POWER_SUPPLY_BATTERY",
		2: "POWER_SUPPLY_AC_ONLY",
	}
	Config_PowerSupply_value = map[string]int32{
		"POWER_SUPPLY_UNSPECIFIED": 0,
		"POWER_SUPPLY_BATTERY":     1,
		"POWER_SUPPLY_AC_ONLY":     2,
	}
)

func (x Config_PowerSupply) Enum() *Config_PowerSupply {
	p := new(Config_PowerSupply)
	*p = x
	return p
}

func (x Config_PowerSupply) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Config_PowerSupply) Descriptor() protoreflect.EnumDescriptor {
	return file_device_config_proto_enumTypes[3].Descriptor()
}

func (Config_PowerSupply) Type() protoreflect.EnumType {
	return &file_device_config_proto_enumTypes[3]
}

func (x Config_PowerSupply) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Config_PowerSupply.Descriptor instead.
func (Config_PowerSupply) EnumDescriptor() ([]byte, []int) {
	return file_device_config_proto_rawDescGZIP(), []int{0, 3}
}

// Next Tag: 6
type Config_Storage int32

const (
	Config_STORAGE_UNSPECIFIED Config_Storage = 0
	Config_STORAGE_SSD         Config_Storage = 1
	Config_STORAGE_HDD         Config_Storage = 2
	Config_STORAGE_MMC         Config_Storage = 3
	Config_STORAGE_NVME        Config_Storage = 4
	Config_STORAGE_UFS         Config_Storage = 5
)

// Enum value maps for Config_Storage.
var (
	Config_Storage_name = map[int32]string{
		0: "STORAGE_UNSPECIFIED",
		1: "STORAGE_SSD",
		2: "STORAGE_HDD",
		3: "STORAGE_MMC",
		4: "STORAGE_NVME",
		5: "STORAGE_UFS",
	}
	Config_Storage_value = map[string]int32{
		"STORAGE_UNSPECIFIED": 0,
		"STORAGE_SSD":         1,
		"STORAGE_HDD":         2,
		"STORAGE_MMC":         3,
		"STORAGE_NVME":        4,
		"STORAGE_UFS":         5,
	}
)

func (x Config_Storage) Enum() *Config_Storage {
	p := new(Config_Storage)
	*p = x
	return p
}

func (x Config_Storage) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Config_Storage) Descriptor() protoreflect.EnumDescriptor {
	return file_device_config_proto_enumTypes[4].Descriptor()
}

func (Config_Storage) Type() protoreflect.EnumType {
	return &file_device_config_proto_enumTypes[4]
}

func (x Config_Storage) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Config_Storage.Descriptor instead.
func (Config_Storage) EnumDescriptor() ([]byte, []int) {
	return file_device_config_proto_rawDescGZIP(), []int{0, 4}
}

// Next tag: 13
type Config_VideoAcceleration int32

const (
	Config_VIDEO_UNSPECIFIED            Config_VideoAcceleration = 0
	Config_VIDEO_ACCELERATION_H264      Config_VideoAcceleration = 1
	Config_VIDEO_ACCELERATION_ENC_H264  Config_VideoAcceleration = 2
	Config_VIDEO_ACCELERATION_VP8       Config_VideoAcceleration = 3
	Config_VIDEO_ACCELERATION_ENC_VP8   Config_VideoAcceleration = 4
	Config_VIDEO_ACCELERATION_VP9       Config_VideoAcceleration = 5
	Config_VIDEO_ACCELERATION_ENC_VP9   Config_VideoAcceleration = 6
	Config_VIDEO_ACCELERATION_VP9_2     Config_VideoAcceleration = 7
	Config_VIDEO_ACCELERATION_ENC_VP9_2 Config_VideoAcceleration = 8
	Config_VIDEO_ACCELERATION_H265      Config_VideoAcceleration = 9
	Config_VIDEO_ACCELERATION_ENC_H265  Config_VideoAcceleration = 10
	Config_VIDEO_ACCELERATION_MJPG      Config_VideoAcceleration = 11
	Config_VIDEO_ACCELERATION_ENC_MJPG  Config_VideoAcceleration = 12
)

// Enum value maps for Config_VideoAcceleration.
var (
	Config_VideoAcceleration_name = map[int32]string{
		0:  "VIDEO_UNSPECIFIED",
		1:  "VIDEO_ACCELERATION_H264",
		2:  "VIDEO_ACCELERATION_ENC_H264",
		3:  "VIDEO_ACCELERATION_VP8",
		4:  "VIDEO_ACCELERATION_ENC_VP8",
		5:  "VIDEO_ACCELERATION_VP9",
		6:  "VIDEO_ACCELERATION_ENC_VP9",
		7:  "VIDEO_ACCELERATION_VP9_2",
		8:  "VIDEO_ACCELERATION_ENC_VP9_2",
		9:  "VIDEO_ACCELERATION_H265",
		10: "VIDEO_ACCELERATION_ENC_H265",
		11: "VIDEO_ACCELERATION_MJPG",
		12: "VIDEO_ACCELERATION_ENC_MJPG",
	}
	Config_VideoAcceleration_value = map[string]int32{
		"VIDEO_UNSPECIFIED":            0,
		"VIDEO_ACCELERATION_H264":      1,
		"VIDEO_ACCELERATION_ENC_H264":  2,
		"VIDEO_ACCELERATION_VP8":       3,
		"VIDEO_ACCELERATION_ENC_VP8":   4,
		"VIDEO_ACCELERATION_VP9":       5,
		"VIDEO_ACCELERATION_ENC_VP9":   6,
		"VIDEO_ACCELERATION_VP9_2":     7,
		"VIDEO_ACCELERATION_ENC_VP9_2": 8,
		"VIDEO_ACCELERATION_H265":      9,
		"VIDEO_ACCELERATION_ENC_H265":  10,
		"VIDEO_ACCELERATION_MJPG":      11,
		"VIDEO_ACCELERATION_ENC_MJPG":  12,
	}
)

func (x Config_VideoAcceleration) Enum() *Config_VideoAcceleration {
	p := new(Config_VideoAcceleration)
	*p = x
	return p
}

func (x Config_VideoAcceleration) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Config_VideoAcceleration) Descriptor() protoreflect.EnumDescriptor {
	return file_device_config_proto_enumTypes[5].Descriptor()
}

func (Config_VideoAcceleration) Type() protoreflect.EnumType {
	return &file_device_config_proto_enumTypes[5]
}

func (x Config_VideoAcceleration) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Config_VideoAcceleration.Descriptor instead.
func (Config_VideoAcceleration) EnumDescriptor() ([]byte, []int) {
	return file_device_config_proto_rawDescGZIP(), []int{0, 5}
}

// Next Tag: 37
type Config_SOC int32

const (
	Config_SOC_UNSPECIFIED Config_SOC = 0
	// Aka AML-Y
	Config_SOC_AMBERLAKE_Y   Config_SOC = 1
	Config_SOC_APOLLO_LAKE   Config_SOC = 2
	Config_SOC_BAY_TRAIL     Config_SOC = 3
	Config_SOC_BRASWELL      Config_SOC = 4
	Config_SOC_BROADWELL     Config_SOC = 5
	Config_SOC_CANNON_LAKE_Y Config_SOC = 6
	Config_SOC_COMET_LAKE_U  Config_SOC = 7
	Config_SOC_EXYNOS_5250   Config_SOC = 8
	Config_SOC_EXYNOS_5420   Config_SOC = 9
	// Aka GLK
	Config_SOC_GEMINI_LAKE Config_SOC = 10
	Config_SOC_HASWELL     Config_SOC = 11
	Config_SOC_ICE_LAKE_Y  Config_SOC = 12
	Config_SOC_IVY_BRIDGE  Config_SOC = 13
	Config_SOC_KABYLAKE_U  Config_SOC = 14
	// KabyLake U refresh
	Config_SOC_KABYLAKE_U_R   Config_SOC = 15
	Config_SOC_KABYLAKE_Y     Config_SOC = 16
	Config_SOC_MT8173         Config_SOC = 17
	Config_SOC_MT8176         Config_SOC = 18
	Config_SOC_MT8183         Config_SOC = 19
	Config_SOC_PICASSO        Config_SOC = 20
	Config_SOC_PINE_TRAIL     Config_SOC = 21
	Config_SOC_RK3288         Config_SOC = 22
	Config_SOC_RK3399         Config_SOC = 23
	Config_SOC_SANDY_BRIDGE   Config_SOC = 24
	Config_SOC_SDM845         Config_SOC = 25
	Config_SOC_SKYLAKE_U      Config_SOC = 26
	Config_SOC_SKYLAKE_Y      Config_SOC = 27
	Config_SOC_STONEY_RIDGE   Config_SOC = 28
	Config_SOC_TEGRA_K1       Config_SOC = 29
	Config_SOC_WHISKEY_LAKE_U Config_SOC = 30
	Config_SOC_SC7180         Config_SOC = 31
	Config_SOC_JASPER_LAKE    Config_SOC = 32
	Config_SOC_TIGER_LAKE     Config_SOC = 33
	Config_SOC_MT8192         Config_SOC = 34
	Config_SOC_ALDER_LAKE     Config_SOC = 35
	Config_SOC_SC7280         Config_SOC = 36
)

// Enum value maps for Config_SOC.
var (
	Config_SOC_name = map[int32]string{
		0:  "SOC_UNSPECIFIED",
		1:  "SOC_AMBERLAKE_Y",
		2:  "SOC_APOLLO_LAKE",
		3:  "SOC_BAY_TRAIL",
		4:  "SOC_BRASWELL",
		5:  "SOC_BROADWELL",
		6:  "SOC_CANNON_LAKE_Y",
		7:  "SOC_COMET_LAKE_U",
		8:  "SOC_EXYNOS_5250",
		9:  "SOC_EXYNOS_5420",
		10: "SOC_GEMINI_LAKE",
		11: "SOC_HASWELL",
		12: "SOC_ICE_LAKE_Y",
		13: "SOC_IVY_BRIDGE",
		14: "SOC_KABYLAKE_U",
		15: "SOC_KABYLAKE_U_R",
		16: "SOC_KABYLAKE_Y",
		17: "SOC_MT8173",
		18: "SOC_MT8176",
		19: "SOC_MT8183",
		20: "SOC_PICASSO",
		21: "SOC_PINE_TRAIL",
		22: "SOC_RK3288",
		23: "SOC_RK3399",
		24: "SOC_SANDY_BRIDGE",
		25: "SOC_SDM845",
		26: "SOC_SKYLAKE_U",
		27: "SOC_SKYLAKE_Y",
		28: "SOC_STONEY_RIDGE",
		29: "SOC_TEGRA_K1",
		30: "SOC_WHISKEY_LAKE_U",
		31: "SOC_SC7180",
		32: "SOC_JASPER_LAKE",
		33: "SOC_TIGER_LAKE",
		34: "SOC_MT8192",
		35: "SOC_ALDER_LAKE",
		36: "SOC_SC7280",
	}
	Config_SOC_value = map[string]int32{
		"SOC_UNSPECIFIED":    0,
		"SOC_AMBERLAKE_Y":    1,
		"SOC_APOLLO_LAKE":    2,
		"SOC_BAY_TRAIL":      3,
		"SOC_BRASWELL":       4,
		"SOC_BROADWELL":      5,
		"SOC_CANNON_LAKE_Y":  6,
		"SOC_COMET_LAKE_U":   7,
		"SOC_EXYNOS_5250":    8,
		"SOC_EXYNOS_5420":    9,
		"SOC_GEMINI_LAKE":    10,
		"SOC_HASWELL":        11,
		"SOC_ICE_LAKE_Y":     12,
		"SOC_IVY_BRIDGE":     13,
		"SOC_KABYLAKE_U":     14,
		"SOC_KABYLAKE_U_R":   15,
		"SOC_KABYLAKE_Y":     16,
		"SOC_MT8173":         17,
		"SOC_MT8176":         18,
		"SOC_MT8183":         19,
		"SOC_PICASSO":        20,
		"SOC_PINE_TRAIL":     21,
		"SOC_RK3288":         22,
		"SOC_RK3399":         23,
		"SOC_SANDY_BRIDGE":   24,
		"SOC_SDM845":         25,
		"SOC_SKYLAKE_U":      26,
		"SOC_SKYLAKE_Y":      27,
		"SOC_STONEY_RIDGE":   28,
		"SOC_TEGRA_K1":       29,
		"SOC_WHISKEY_LAKE_U": 30,
		"SOC_SC7180":         31,
		"SOC_JASPER_LAKE":    32,
		"SOC_TIGER_LAKE":     33,
		"SOC_MT8192":         34,
		"SOC_ALDER_LAKE":     35,
		"SOC_SC7280":         36,
	}
)

func (x Config_SOC) Enum() *Config_SOC {
	p := new(Config_SOC)
	*p = x
	return p
}

func (x Config_SOC) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Config_SOC) Descriptor() protoreflect.EnumDescriptor {
	return file_device_config_proto_enumTypes[6].Descriptor()
}

func (Config_SOC) Type() protoreflect.EnumType {
	return &file_device_config_proto_enumTypes[6]
}

func (x Config_SOC) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Config_SOC.Descriptor instead.
func (Config_SOC) EnumDescriptor() ([]byte, []int) {
	return file_device_config_proto_rawDescGZIP(), []int{0, 6}
}

// Next Tag: 6
type Config_ODM int32

const (
	Config_ODM_UNSPECIFIED Config_ODM = 0
	Config_ODM_QUANTA      Config_ODM = 1
	Config_ODM_BITLAND     Config_ODM = 2
	Config_ODM_SAMSUNG     Config_ODM = 3
	Config_ODM_PEGATRON    Config_ODM = 4
	Config_ODM_COMPAL      Config_ODM = 5
)

// Enum value maps for Config_ODM.
var (
	Config_ODM_name = map[int32]string{
		0: "ODM_UNSPECIFIED",
		1: "ODM_QUANTA",
		2: "ODM_BITLAND",
		3: "ODM_SAMSUNG",
		4: "ODM_PEGATRON",
		5: "ODM_COMPAL",
	}
	Config_ODM_value = map[string]int32{
		"ODM_UNSPECIFIED": 0,
		"ODM_QUANTA":      1,
		"ODM_BITLAND":     2,
		"ODM_SAMSUNG":     3,
		"ODM_PEGATRON":    4,
		"ODM_COMPAL":      5,
	}
)

func (x Config_ODM) Enum() *Config_ODM {
	p := new(Config_ODM)
	*p = x
	return p
}

func (x Config_ODM) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Config_ODM) Descriptor() protoreflect.EnumDescriptor {
	return file_device_config_proto_enumTypes[7].Descriptor()
}

func (Config_ODM) Type() protoreflect.EnumType {
	return &file_device_config_proto_enumTypes[7]
}

func (x Config_ODM) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Config_ODM.Descriptor instead.
func (Config_ODM) EnumDescriptor() ([]byte, []int) {
	return file_device_config_proto_rawDescGZIP(), []int{0, 7}
}

type Config_OEM int32

const (
	Config_OEM_UNSPECIFIED Config_OEM = 0
	Config_OEM_ACER        Config_OEM = 1
	Config_OEM_DELL        Config_OEM = 2
	Config_OEM_SAMSUNG     Config_OEM = 3
	Config_OEM_HP          Config_OEM = 4
	Config_OEM_LENOVO      Config_OEM = 5
	Config_OEM_ASUS        Config_OEM = 6
	Config_OEM_NEC         Config_OEM = 7
)

// Enum value maps for Config_OEM.
var (
	Config_OEM_name = map[int32]string{
		0: "OEM_UNSPECIFIED",
		1: "OEM_ACER",
		2: "OEM_DELL",
		3: "OEM_SAMSUNG",
		4: "OEM_HP",
		5: "OEM_LENOVO",
		6: "OEM_ASUS",
		7: "OEM_NEC",
	}
	Config_OEM_value = map[string]int32{
		"OEM_UNSPECIFIED": 0,
		"OEM_ACER":        1,
		"OEM_DELL":        2,
		"OEM_SAMSUNG":     3,
		"OEM_HP":          4,
		"OEM_LENOVO":      5,
		"OEM_ASUS":        6,
		"OEM_NEC":         7,
	}
)

func (x Config_OEM) Enum() *Config_OEM {
	p := new(Config_OEM)
	*p = x
	return p
}

func (x Config_OEM) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Config_OEM) Descriptor() protoreflect.EnumDescriptor {
	return file_device_config_proto_enumTypes[8].Descriptor()
}

func (Config_OEM) Type() protoreflect.EnumType {
	return &file_device_config_proto_enumTypes[8]
}

func (x Config_OEM) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Config_OEM.Descriptor instead.
func (Config_OEM) EnumDescriptor() ([]byte, []int) {
	return file_device_config_proto_rawDescGZIP(), []int{0, 8}
}

type Config_Architecture int32

const (
	Config_ARCHITECTURE_UNDEFINED Config_Architecture = 0
	Config_X86                    Config_Architecture = 1
	Config_X86_64                 Config_Architecture = 2
	Config_ARM                    Config_Architecture = 3
	Config_ARM64                  Config_Architecture = 4
)

// Enum value maps for Config_Architecture.
var (
	Config_Architecture_name = map[int32]string{
		0: "ARCHITECTURE_UNDEFINED",
		1: "X86",
		2: "X86_64",
		3: "ARM",
		4: "ARM64",
	}
	Config_Architecture_value = map[string]int32{
		"ARCHITECTURE_UNDEFINED": 0,
		"X86":                    1,
		"X86_64":                 2,
		"ARM":                    3,
		"ARM64":                  4,
	}
)

func (x Config_Architecture) Enum() *Config_Architecture {
	p := new(Config_Architecture)
	*p = x
	return p
}

func (x Config_Architecture) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Config_Architecture) Descriptor() protoreflect.EnumDescriptor {
	return file_device_config_proto_enumTypes[9].Descriptor()
}

func (Config_Architecture) Type() protoreflect.EnumType {
	return &file_device_config_proto_enumTypes[9]
}

func (x Config_Architecture) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Config_Architecture.Descriptor instead.
func (Config_Architecture) EnumDescriptor() ([]byte, []int) {
	return file_device_config_proto_rawDescGZIP(), []int{0, 9}
}

// Indicate the type of EC present on a device.
// Next tag: 3
type Config_EC int32

const (
	Config_EC_UNSPECIFIED Config_EC = 0
	Config_EC_CHROME      Config_EC = 1
	Config_EC_WILCO       Config_EC = 2
)

// Enum value maps for Config_EC.
var (
	Config_EC_name = map[int32]string{
		0: "EC_UNSPECIFIED",
		1: "EC_CHROME",
		2: "EC_WILCO",
	}
	Config_EC_value = map[string]int32{
		"EC_UNSPECIFIED": 0,
		"EC_CHROME":      1,
		"EC_WILCO":       2,
	}
)

func (x Config_EC) Enum() *Config_EC {
	p := new(Config_EC)
	*p = x
	return p
}

func (x Config_EC) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (Config_EC) Descriptor() protoreflect.EnumDescriptor {
	return file_device_config_proto_enumTypes[10].Descriptor()
}

func (Config_EC) Type() protoreflect.EnumType {
	return &file_device_config_proto_enumTypes[10]
}

func (x Config_EC) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use Config_EC.Descriptor instead.
func (Config_EC) EnumDescriptor() ([]byte, []int) {
	return file_device_config_proto_rawDescGZIP(), []int{0, 10}
}

// Next tag: 22
type Config struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Required. Unique ID of the device config.
	Id         *ConfigId         `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	FormFactor Config_FormFactor `protobuf:"varint,3,opt,name=form_factor,json=formFactor,proto3,enum=device.Config_FormFactor" json:"form_factor,omitempty"`
	// e.g: "haswell", "tegra",...
	GpuFamily string          `protobuf:"bytes,4,opt,name=gpu_family,json=gpuFamily,proto3" json:"gpu_family,omitempty"`
	Graphics  Config_Graphics `protobuf:"varint,5,opt,name=graphics,proto3,enum=device.Config_Graphics" json:"graphics,omitempty"`
	// If a hardware feature isn't specified, one can assume that it doesn't
	// exist on the device.
	HardwareFeatures []Config_HardwareFeature `protobuf:"varint,6,rep,packed,name=hardware_features,json=hardwareFeatures,proto3,enum=device.Config_HardwareFeature" json:"hardware_features,omitempty"`
	Power            Config_PowerSupply       `protobuf:"varint,8,opt,name=power,proto3,enum=device.Config_PowerSupply" json:"power,omitempty"`
	// Indicate the device's storage type.
	Storage                   Config_Storage             `protobuf:"varint,9,opt,name=storage,proto3,enum=device.Config_Storage" json:"storage,omitempty"`
	VideoAccelerationSupports []Config_VideoAcceleration `protobuf:"varint,10,rep,packed,name=video_acceleration_supports,json=videoAccelerationSupports,proto3,enum=device.Config_VideoAcceleration" json:"video_acceleration_supports,omitempty"`
	Soc                       Config_SOC                 `protobuf:"varint,11,opt,name=soc,proto3,enum=device.Config_SOC" json:"soc,omitempty"`
	// Full email address for TAMs responsible for device
	Tam []string `protobuf:"bytes,12,rep,name=tam,proto3" json:"tam,omitempty"`
	// Full email address for Google EEs responsible for device
	Ee []string `protobuf:"bytes,13,rep,name=ee,proto3" json:"ee,omitempty"`
	// ODM for device
	Odm Config_ODM `protobuf:"varint,14,opt,name=odm,proto3,enum=device.Config_ODM" json:"odm,omitempty"`
	// Group email address for this device's odm contact in buganizer (@google.com)
	OdmEmailGroup string `protobuf:"bytes,15,opt,name=odm_email_group,json=odmEmailGroup,proto3" json:"odm_email_group,omitempty"`
	// OEM for device
	Oem Config_OEM `protobuf:"varint,16,opt,name=oem,proto3,enum=device.Config_OEM" json:"oem,omitempty"`
	// Group email address for this device's oem contact in buganizer (@google.com)
	OemEmailGroup string `protobuf:"bytes,17,opt,name=oem_email_group,json=oemEmailGroup,proto3" json:"oem_email_group,omitempty"`
	// Group email address for this device's SoC contact in buganizer (@google.com)
	SocEmailGroup string `protobuf:"bytes,18,opt,name=soc_email_group,json=socEmailGroup,proto3" json:"soc_email_group,omitempty"`
	// A bit field used by firmware to make decisions. The definition of this
	// firmware configuration field is per firmware build. This does not have
	// 1st-class definitions for values in the top-level configuration proto since
	// each firmware build target can appropriate the bits within this 32-bit
	// field differently. Each firmware build can vary significantly in the
	// configuration space that needs customization.
	FirmwareConfiguration uint32              `protobuf:"varint,19,opt,name=firmware_configuration,json=firmwareConfiguration,proto3" json:"firmware_configuration,omitempty"`
	Cpu                   Config_Architecture `protobuf:"varint,20,opt,name=cpu,proto3,enum=device.Config_Architecture" json:"cpu,omitempty"`
	// If an EC is not specified, one can assume the device has no EC.
	Ec Config_EC `protobuf:"varint,21,opt,name=ec,proto3,enum=device.Config_EC" json:"ec,omitempty"`
}

func (x *Config) Reset() {
	*x = Config{}
	if protoimpl.UnsafeEnabled {
		mi := &file_device_config_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *Config) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*Config) ProtoMessage() {}

func (x *Config) ProtoReflect() protoreflect.Message {
	mi := &file_device_config_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use Config.ProtoReflect.Descriptor instead.
func (*Config) Descriptor() ([]byte, []int) {
	return file_device_config_proto_rawDescGZIP(), []int{0}
}

func (x *Config) GetId() *ConfigId {
	if x != nil {
		return x.Id
	}
	return nil
}

func (x *Config) GetFormFactor() Config_FormFactor {
	if x != nil {
		return x.FormFactor
	}
	return Config_FORM_FACTOR_UNSPECIFIED
}

func (x *Config) GetGpuFamily() string {
	if x != nil {
		return x.GpuFamily
	}
	return ""
}

func (x *Config) GetGraphics() Config_Graphics {
	if x != nil {
		return x.Graphics
	}
	return Config_GRAPHICS_UNSPECIFIED
}

func (x *Config) GetHardwareFeatures() []Config_HardwareFeature {
	if x != nil {
		return x.HardwareFeatures
	}
	return nil
}

func (x *Config) GetPower() Config_PowerSupply {
	if x != nil {
		return x.Power
	}
	return Config_POWER_SUPPLY_UNSPECIFIED
}

func (x *Config) GetStorage() Config_Storage {
	if x != nil {
		return x.Storage
	}
	return Config_STORAGE_UNSPECIFIED
}

func (x *Config) GetVideoAccelerationSupports() []Config_VideoAcceleration {
	if x != nil {
		return x.VideoAccelerationSupports
	}
	return nil
}

func (x *Config) GetSoc() Config_SOC {
	if x != nil {
		return x.Soc
	}
	return Config_SOC_UNSPECIFIED
}

func (x *Config) GetTam() []string {
	if x != nil {
		return x.Tam
	}
	return nil
}

func (x *Config) GetEe() []string {
	if x != nil {
		return x.Ee
	}
	return nil
}

func (x *Config) GetOdm() Config_ODM {
	if x != nil {
		return x.Odm
	}
	return Config_ODM_UNSPECIFIED
}

func (x *Config) GetOdmEmailGroup() string {
	if x != nil {
		return x.OdmEmailGroup
	}
	return ""
}

func (x *Config) GetOem() Config_OEM {
	if x != nil {
		return x.Oem
	}
	return Config_OEM_UNSPECIFIED
}

func (x *Config) GetOemEmailGroup() string {
	if x != nil {
		return x.OemEmailGroup
	}
	return ""
}

func (x *Config) GetSocEmailGroup() string {
	if x != nil {
		return x.SocEmailGroup
	}
	return ""
}

func (x *Config) GetFirmwareConfiguration() uint32 {
	if x != nil {
		return x.FirmwareConfiguration
	}
	return 0
}

func (x *Config) GetCpu() Config_Architecture {
	if x != nil {
		return x.Cpu
	}
	return Config_ARCHITECTURE_UNDEFINED
}

func (x *Config) GetEc() Config_EC {
	if x != nil {
		return x.Ec
	}
	return Config_EC_UNSPECIFIED
}

// Message contains all ChromeOS device configs.
type AllConfigs struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	Configs []*Config `protobuf:"bytes,1,rep,name=configs,proto3" json:"configs,omitempty"`
}

func (x *AllConfigs) Reset() {
	*x = AllConfigs{}
	if protoimpl.UnsafeEnabled {
		mi := &file_device_config_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *AllConfigs) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*AllConfigs) ProtoMessage() {}

func (x *AllConfigs) ProtoReflect() protoreflect.Message {
	mi := &file_device_config_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use AllConfigs.ProtoReflect.Descriptor instead.
func (*AllConfigs) Descriptor() ([]byte, []int) {
	return file_device_config_proto_rawDescGZIP(), []int{1}
}

func (x *AllConfigs) GetConfigs() []*Config {
	if x != nil {
		return x.Configs
	}
	return nil
}

var File_device_config_proto protoreflect.FileDescriptor

var file_device_config_proto_rawDesc = []byte{
	0x0a, 0x13, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x16, 0x64,
	0x65, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x2e,
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x95, 0x1a, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
	0x12, 0x20, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x64,
	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x52, 0x02,
	0x69, 0x64, 0x12, 0x3a, 0x0a, 0x0b, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f,
	0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65,
	0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x46, 0x61, 0x63, 0x74,
	0x6f, 0x72, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1d,
	0x0a, 0x0a, 0x67, 0x70, 0x75, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x04, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x09, 0x67, 0x70, 0x75, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x33, 0x0a,
	0x08, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x17, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e,
	0x47, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x52, 0x08, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69,
	0x63, 0x73, 0x12, 0x4b, 0x0a, 0x11, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x66,
	0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1e, 0x2e,
	0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x48, 0x61,
	0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x10, 0x68,
	0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12,
	0x30, 0x0a, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a,
	0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x50,
	0x6f, 0x77, 0x65, 0x72, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, 0x05, 0x70, 0x6f, 0x77, 0x65,
	0x72, 0x12, 0x30, 0x0a, 0x07, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x16, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, 0x07, 0x73, 0x74, 0x6f, 0x72,
	0x61, 0x67, 0x65, 0x12, 0x60, 0x0a, 0x1b, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x5f, 0x61, 0x63, 0x63,
	0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72,
	0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63,
	0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x63,
	0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x19, 0x76, 0x69, 0x64, 0x65,
	0x6f, 0x41, 0x63, 0x63, 0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x70,
	0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x03, 0x73, 0x6f, 0x63, 0x18, 0x0b, 0x20, 0x01,
	0x28, 0x0e, 0x32, 0x12, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66,
	0x69, 0x67, 0x2e, 0x53, 0x4f, 0x43, 0x52, 0x03, 0x73, 0x6f, 0x63, 0x12, 0x10, 0x0a, 0x03, 0x74,
	0x61, 0x6d, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x03, 0x74, 0x61, 0x6d, 0x12, 0x0e, 0x0a,
	0x02, 0x65, 0x65, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x09, 0x52, 0x02, 0x65, 0x65, 0x12, 0x24, 0x0a,
	0x03, 0x6f, 0x64, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x64, 0x65, 0x76,
	0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x44, 0x4d, 0x52, 0x03,
	0x6f, 0x64, 0x6d, 0x12, 0x26, 0x0a, 0x0f, 0x6f, 0x64, 0x6d, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c,
	0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x64,
	0x6d, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x24, 0x0a, 0x03, 0x6f,
	0x65, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63,
	0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x45, 0x4d, 0x52, 0x03, 0x6f, 0x65,
	0x6d, 0x12, 0x26, 0x0a, 0x0f, 0x6f, 0x65, 0x6d, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x67,
	0x72, 0x6f, 0x75, 0x70, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x65, 0x6d, 0x45,
	0x6d, 0x61, 0x69, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x6f, 0x63,
	0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x12, 0x20, 0x01,
	0x28, 0x09, 0x52, 0x0d, 0x73, 0x6f, 0x63, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x47, 0x72, 0x6f, 0x75,
	0x70, 0x12, 0x35, 0x0a, 0x16, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x63, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28,
	0x0d, 0x52, 0x15, 0x66, 0x69, 0x72, 0x6d, 0x77, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69,
	0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18,
	0x14, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x41, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75,
	0x72, 0x65, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x21, 0x0a, 0x02, 0x65, 0x63, 0x18, 0x15, 0x20,
	0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e,
	0x66, 0x69, 0x67, 0x2e, 0x45, 0x43, 0x52, 0x02, 0x65, 0x63, 0x22, 0xec, 0x01, 0x0a, 0x0a, 0x46,
	0x6f, 0x72, 0x6d, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x4f, 0x52,
	0x4d, 0x5f, 0x46, 0x41, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
	0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46,
	0x41, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x4c, 0x41, 0x4d, 0x53, 0x48, 0x45, 0x4c, 0x4c, 0x10,
	0x01, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46, 0x41, 0x43, 0x54, 0x4f, 0x52,
	0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x54, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x02, 0x12, 0x1a,
	0x0a, 0x16, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46, 0x41, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x44, 0x45,
	0x54, 0x41, 0x43, 0x48, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x4f,
	0x52, 0x4d, 0x5f, 0x46, 0x41, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45,
	0x42, 0x41, 0x53, 0x45, 0x10, 0x04, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46,
	0x41, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x42, 0x4f, 0x58, 0x10,
	0x05, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46, 0x41, 0x43, 0x54, 0x4f, 0x52,
	0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x42, 0x49, 0x54, 0x10, 0x06, 0x12, 0x1b, 0x0a, 0x17,
	0x46, 0x4f, 0x52, 0x4d, 0x5f, 0x46, 0x41, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x52, 0x4f,
	0x4d, 0x45, 0x53, 0x4c, 0x41, 0x54, 0x45, 0x10, 0x07, 0x22, 0x47, 0x0a, 0x08, 0x47, 0x72, 0x61,
	0x70, 0x68, 0x69, 0x63, 0x73, 0x12, 0x18, 0x0a, 0x14, 0x47, 0x52, 0x41, 0x50, 0x48, 0x49, 0x43,
	0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
	0x0f, 0x0a, 0x0b, 0x47, 0x52, 0x41, 0x50, 0x48, 0x49, 0x43, 0x53, 0x5f, 0x47, 0x4c, 0x10, 0x01,
	0x12, 0x10, 0x0a, 0x0c, 0x47, 0x52, 0x41, 0x50, 0x48, 0x49, 0x43, 0x53, 0x5f, 0x47, 0x4c, 0x45,
	0x10, 0x02, 0x22, 0xa3, 0x03, 0x0a, 0x0f, 0x48, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x46,
	0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x20, 0x0a, 0x1c, 0x48, 0x41, 0x52, 0x44, 0x57, 0x41,
	0x52, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45,
	0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x48, 0x41, 0x52, 0x44,
	0x57, 0x41, 0x52, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x42, 0x4c, 0x55,
	0x45, 0x54, 0x4f, 0x4f, 0x54, 0x48, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, 0x48, 0x41, 0x52, 0x44,
	0x57, 0x41, 0x52, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x46, 0x4c, 0x41,
	0x53, 0x48, 0x52, 0x4f, 0x4d, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x48, 0x41, 0x52, 0x44, 0x57,
	0x41, 0x52, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x48, 0x4f, 0x54, 0x57,
	0x4f, 0x52, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x25, 0x0a, 0x21, 0x48, 0x41, 0x52, 0x44,
	0x57, 0x41, 0x52, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x49, 0x4e, 0x54,
	0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x10, 0x04, 0x12,
	0x20, 0x0a, 0x1c, 0x48, 0x41, 0x52, 0x44, 0x57, 0x41, 0x52, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54,
	0x55, 0x52, 0x45, 0x5f, 0x4c, 0x55, 0x43, 0x49, 0x44, 0x5f, 0x53, 0x4c, 0x45, 0x45, 0x50, 0x10,
	0x05, 0x12, 0x1b, 0x0a, 0x17, 0x48, 0x41, 0x52, 0x44, 0x57, 0x41, 0x52, 0x45, 0x5f, 0x46, 0x45,
	0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x57, 0x45, 0x42, 0x43, 0x41, 0x4d, 0x10, 0x06, 0x12, 0x1b,
	0x0a, 0x17, 0x48, 0x41, 0x52, 0x44, 0x57, 0x41, 0x52, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55,
	0x52, 0x45, 0x5f, 0x53, 0x54, 0x59, 0x4c, 0x55, 0x53, 0x10, 0x07, 0x12, 0x1d, 0x0a, 0x19, 0x48,
	0x41, 0x52, 0x44, 0x57, 0x41, 0x52, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f,
	0x54, 0x4f, 0x55, 0x43, 0x48, 0x50, 0x41, 0x44, 0x10, 0x08, 0x12, 0x20, 0x0a, 0x1c, 0x48, 0x41,
	0x52, 0x44, 0x57, 0x41, 0x52, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54,
	0x4f, 0x55, 0x43, 0x48, 0x53, 0x43, 0x52, 0x45, 0x45, 0x4e, 0x10, 0x09, 0x12, 0x28, 0x0a, 0x24,
	0x48, 0x41, 0x52, 0x44, 0x57, 0x41, 0x52, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45,
	0x5f, 0x44, 0x45, 0x54, 0x41, 0x43, 0x48, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x4b, 0x45, 0x59, 0x42,
	0x4f, 0x41, 0x52, 0x44, 0x10, 0x0a, 0x12, 0x20, 0x0a, 0x1c, 0x48, 0x41, 0x52, 0x44, 0x57, 0x41,
	0x52, 0x45, 0x5f, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x46, 0x49, 0x4e, 0x47, 0x45,
	0x52, 0x50, 0x52, 0x49, 0x4e, 0x54, 0x10, 0x0b, 0x22, 0x5f, 0x0a, 0x0b, 0x50, 0x6f, 0x77, 0x65,
	0x72, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x18, 0x50, 0x4f, 0x57, 0x45, 0x52,
	0x5f, 0x53, 0x55, 0x50, 0x50, 0x4c, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
	0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x53,
	0x55, 0x50, 0x50, 0x4c, 0x59, 0x5f, 0x42, 0x41, 0x54, 0x54, 0x45, 0x52, 0x59, 0x10, 0x01, 0x12,
	0x18, 0x0a, 0x14, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4c, 0x59, 0x5f,
	0x41, 0x43, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x22, 0x78, 0x0a, 0x07, 0x53, 0x74, 0x6f,
	0x72, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f,
	0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a,
	0x0b, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x53, 0x44, 0x10, 0x01, 0x12, 0x0f,
	0x0a, 0x0b, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x48, 0x44, 0x44, 0x10, 0x02, 0x12,
	0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x4d, 0x43, 0x10, 0x03,
	0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x56, 0x4d, 0x45,
	0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x55, 0x46,
	0x53, 0x10, 0x05, 0x22, 0x9c, 0x03, 0x0a, 0x11, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x41, 0x63, 0x63,
	0x65, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x49, 0x44,
	0x45, 0x4f, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
	0x12, 0x1b, 0x0a, 0x17, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x4c, 0x45,
	0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x48, 0x32, 0x36, 0x34, 0x10, 0x01, 0x12, 0x1f, 0x0a,
	0x1b, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x4c, 0x45, 0x52, 0x41, 0x54,
	0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x43, 0x5f, 0x48, 0x32, 0x36, 0x34, 0x10, 0x02, 0x12, 0x1a,
	0x0a, 0x16, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x4c, 0x45, 0x52, 0x41,
	0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x50, 0x38, 0x10, 0x03, 0x12, 0x1e, 0x0a, 0x1a, 0x56, 0x49,
	0x44, 0x45, 0x4f, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x4c, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e,
	0x5f, 0x45, 0x4e, 0x43, 0x5f, 0x56, 0x50, 0x38, 0x10, 0x04, 0x12, 0x1a, 0x0a, 0x16, 0x56, 0x49,
	0x44, 0x45, 0x4f, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x4c, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e,
	0x5f, 0x56, 0x50, 0x39, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f,
	0x41, 0x43, 0x43, 0x45, 0x4c, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x43,
	0x5f, 0x56, 0x50, 0x39, 0x10, 0x06, 0x12, 0x1c, 0x0a, 0x18, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f,
	0x41, 0x43, 0x43, 0x45, 0x4c, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x50, 0x39,
	0x5f, 0x32, 0x10, 0x07, 0x12, 0x20, 0x0a, 0x1c, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x41, 0x43,
	0x43, 0x45, 0x4c, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x43, 0x5f, 0x56,
	0x50, 0x39, 0x5f, 0x32, 0x10, 0x08, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f,
	0x41, 0x43, 0x43, 0x45, 0x4c, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x48, 0x32, 0x36,
	0x35, 0x10, 0x09, 0x12, 0x1f, 0x0a, 0x1b, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x41, 0x43, 0x43,
	0x45, 0x4c, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x43, 0x5f, 0x48, 0x32,
	0x36, 0x35, 0x10, 0x0a, 0x12, 0x1b, 0x0a, 0x17, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x41, 0x43,
	0x43, 0x45, 0x4c, 0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4d, 0x4a, 0x50, 0x47, 0x10,
	0x0b, 0x12, 0x1f, 0x0a, 0x1b, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x4c,
	0x45, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x43, 0x5f, 0x4d, 0x4a, 0x50, 0x47,
	0x10, 0x0c, 0x22, 0xcd, 0x05, 0x0a, 0x03, 0x53, 0x4f, 0x43, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x4f,
	0x43, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
	0x13, 0x0a, 0x0f, 0x53, 0x4f, 0x43, 0x5f, 0x41, 0x4d, 0x42, 0x45, 0x52, 0x4c, 0x41, 0x4b, 0x45,
	0x5f, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x4f, 0x43, 0x5f, 0x41, 0x50, 0x4f, 0x4c,
	0x4c, 0x4f, 0x5f, 0x4c, 0x41, 0x4b, 0x45, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x4f, 0x43,
	0x5f, 0x42, 0x41, 0x59, 0x5f, 0x54, 0x52, 0x41, 0x49, 0x4c, 0x10, 0x03, 0x12, 0x10, 0x0a, 0x0c,
	0x53, 0x4f, 0x43, 0x5f, 0x42, 0x52, 0x41, 0x53, 0x57, 0x45, 0x4c, 0x4c, 0x10, 0x04, 0x12, 0x11,
	0x0a, 0x0d, 0x53, 0x4f, 0x43, 0x5f, 0x42, 0x52, 0x4f, 0x41, 0x44, 0x57, 0x45, 0x4c, 0x4c, 0x10,
	0x05, 0x12, 0x15, 0x0a, 0x11, 0x53, 0x4f, 0x43, 0x5f, 0x43, 0x41, 0x4e, 0x4e, 0x4f, 0x4e, 0x5f,
	0x4c, 0x41, 0x4b, 0x45, 0x5f, 0x59, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x4f, 0x43, 0x5f,
	0x43, 0x4f, 0x4d, 0x45, 0x54, 0x5f, 0x4c, 0x41, 0x4b, 0x45, 0x5f, 0x55, 0x10, 0x07, 0x12, 0x13,
	0x0a, 0x0f, 0x53, 0x4f, 0x43, 0x5f, 0x45, 0x58, 0x59, 0x4e, 0x4f, 0x53, 0x5f, 0x35, 0x32, 0x35,
	0x30, 0x10, 0x08, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x4f, 0x43, 0x5f, 0x45, 0x58, 0x59, 0x4e, 0x4f,
	0x53, 0x5f, 0x35, 0x34, 0x32, 0x30, 0x10, 0x09, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x4f, 0x43, 0x5f,
	0x47, 0x45, 0x4d, 0x49, 0x4e, 0x49, 0x5f, 0x4c, 0x41, 0x4b, 0x45, 0x10, 0x0a, 0x12, 0x0f, 0x0a,
	0x0b, 0x53, 0x4f, 0x43, 0x5f, 0x48, 0x41, 0x53, 0x57, 0x45, 0x4c, 0x4c, 0x10, 0x0b, 0x12, 0x12,
	0x0a, 0x0e, 0x53, 0x4f, 0x43, 0x5f, 0x49, 0x43, 0x45, 0x5f, 0x4c, 0x41, 0x4b, 0x45, 0x5f, 0x59,
	0x10, 0x0c, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x4f, 0x43, 0x5f, 0x49, 0x56, 0x59, 0x5f, 0x42, 0x52,
	0x49, 0x44, 0x47, 0x45, 0x10, 0x0d, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x4f, 0x43, 0x5f, 0x4b, 0x41,
	0x42, 0x59, 0x4c, 0x41, 0x4b, 0x45, 0x5f, 0x55, 0x10, 0x0e, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x4f,
	0x43, 0x5f, 0x4b, 0x41, 0x42, 0x59, 0x4c, 0x41, 0x4b, 0x45, 0x5f, 0x55, 0x5f, 0x52, 0x10, 0x0f,
	0x12, 0x12, 0x0a, 0x0e, 0x53, 0x4f, 0x43, 0x5f, 0x4b, 0x41, 0x42, 0x59, 0x4c, 0x41, 0x4b, 0x45,
	0x5f, 0x59, 0x10, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x4f, 0x43, 0x5f, 0x4d, 0x54, 0x38, 0x31,
	0x37, 0x33, 0x10, 0x11, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x4f, 0x43, 0x5f, 0x4d, 0x54, 0x38, 0x31,
	0x37, 0x36, 0x10, 0x12, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x4f, 0x43, 0x5f, 0x4d, 0x54, 0x38, 0x31,
	0x38, 0x33, 0x10, 0x13, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x4f, 0x43, 0x5f, 0x50, 0x49, 0x43, 0x41,
	0x53, 0x53, 0x4f, 0x10, 0x14, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x4f, 0x43, 0x5f, 0x50, 0x49, 0x4e,
	0x45, 0x5f, 0x54, 0x52, 0x41, 0x49, 0x4c, 0x10, 0x15, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x4f, 0x43,
	0x5f, 0x52, 0x4b, 0x33, 0x32, 0x38, 0x38, 0x10, 0x16, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x4f, 0x43,
	0x5f, 0x52, 0x4b, 0x33, 0x33, 0x39, 0x39, 0x10, 0x17, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x4f, 0x43,
	0x5f, 0x53, 0x41, 0x4e, 0x44, 0x59, 0x5f, 0x42, 0x52, 0x49, 0x44, 0x47, 0x45, 0x10, 0x18, 0x12,
	0x0e, 0x0a, 0x0a, 0x53, 0x4f, 0x43, 0x5f, 0x53, 0x44, 0x4d, 0x38, 0x34, 0x35, 0x10, 0x19, 0x12,
	0x11, 0x0a, 0x0d, 0x53, 0x4f, 0x43, 0x5f, 0x53, 0x4b, 0x59, 0x4c, 0x41, 0x4b, 0x45, 0x5f, 0x55,
	0x10, 0x1a, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x4f, 0x43, 0x5f, 0x53, 0x4b, 0x59, 0x4c, 0x41, 0x4b,
	0x45, 0x5f, 0x59, 0x10, 0x1b, 0x12, 0x14, 0x0a, 0x10, 0x53, 0x4f, 0x43, 0x5f, 0x53, 0x54, 0x4f,
	0x4e, 0x45, 0x59, 0x5f, 0x52, 0x49, 0x44, 0x47, 0x45, 0x10, 0x1c, 0x12, 0x10, 0x0a, 0x0c, 0x53,
	0x4f, 0x43, 0x5f, 0x54, 0x45, 0x47, 0x52, 0x41, 0x5f, 0x4b, 0x31, 0x10, 0x1d, 0x12, 0x16, 0x0a,
	0x12, 0x53, 0x4f, 0x43, 0x5f, 0x57, 0x48, 0x49, 0x53, 0x4b, 0x45, 0x59, 0x5f, 0x4c, 0x41, 0x4b,
	0x45, 0x5f, 0x55, 0x10, 0x1e, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x4f, 0x43, 0x5f, 0x53, 0x43, 0x37,
	0x31, 0x38, 0x30, 0x10, 0x1f, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x4f, 0x43, 0x5f, 0x4a, 0x41, 0x53,
	0x50, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x4b, 0x45, 0x10, 0x20, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x4f,
	0x43, 0x5f, 0x54, 0x49, 0x47, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x4b, 0x45, 0x10, 0x21, 0x12, 0x0e,
	0x0a, 0x0a, 0x53, 0x4f, 0x43, 0x5f, 0x4d, 0x54, 0x38, 0x31, 0x39, 0x32, 0x10, 0x22, 0x12, 0x12,
	0x0a, 0x0e, 0x53, 0x4f, 0x43, 0x5f, 0x41, 0x4c, 0x44, 0x45, 0x52, 0x5f, 0x4c, 0x41, 0x4b, 0x45,
	0x10, 0x23, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x4f, 0x43, 0x5f, 0x53, 0x43, 0x37, 0x32, 0x38, 0x30,
	0x10, 0x24, 0x22, 0x6e, 0x0a, 0x03, 0x4f, 0x44, 0x4d, 0x12, 0x13, 0x0a, 0x0f, 0x4f, 0x44, 0x4d,
	0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e,
	0x0a, 0x0a, 0x4f, 0x44, 0x4d, 0x5f, 0x51, 0x55, 0x41, 0x4e, 0x54, 0x41, 0x10, 0x01, 0x12, 0x0f,
	0x0a, 0x0b, 0x4f, 0x44, 0x4d, 0x5f, 0x42, 0x49, 0x54, 0x4c, 0x41, 0x4e, 0x44, 0x10, 0x02, 0x12,
	0x0f, 0x0a, 0x0b, 0x4f, 0x44, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x53, 0x55, 0x4e, 0x47, 0x10, 0x03,
	0x12, 0x10, 0x0a, 0x0c, 0x4f, 0x44, 0x4d, 0x5f, 0x50, 0x45, 0x47, 0x41, 0x54, 0x52, 0x4f, 0x4e,
	0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x44, 0x4d, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x4c,
	0x10, 0x05, 0x22, 0x7e, 0x0a, 0x03, 0x4f, 0x45, 0x4d, 0x12, 0x13, 0x0a, 0x0f, 0x4f, 0x45, 0x4d,
	0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c,
	0x0a, 0x08, 0x4f, 0x45, 0x4d, 0x5f, 0x41, 0x43, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08,
	0x4f, 0x45, 0x4d, 0x5f, 0x44, 0x45, 0x4c, 0x4c, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x4f, 0x45,
	0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x53, 0x55, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x4f,
	0x45, 0x4d, 0x5f, 0x48, 0x50, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x4f, 0x45, 0x4d, 0x5f, 0x4c,
	0x45, 0x4e, 0x4f, 0x56, 0x4f, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x4f, 0x45, 0x4d, 0x5f, 0x41,
	0x53, 0x55, 0x53, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x45, 0x4d, 0x5f, 0x4e, 0x45, 0x43,
	0x10, 0x07, 0x22, 0x53, 0x0a, 0x0c, 0x41, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75,
	0x72, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x41, 0x52, 0x43, 0x48, 0x49, 0x54, 0x45, 0x43, 0x54, 0x55,
	0x52, 0x45, 0x5f, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07,
	0x0a, 0x03, 0x58, 0x38, 0x36, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x58, 0x38, 0x36, 0x5f, 0x36,
	0x34, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x52, 0x4d, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05,
	0x41, 0x52, 0x4d, 0x36, 0x34, 0x10, 0x04, 0x22, 0x35, 0x0a, 0x02, 0x45, 0x43, 0x12, 0x12, 0x0a,
	0x0e, 0x45, 0x43, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10,
	0x00, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x43, 0x5f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x10, 0x01,
	0x12, 0x0c, 0x0a, 0x08, 0x45, 0x43, 0x5f, 0x57, 0x49, 0x4c, 0x43, 0x4f, 0x10, 0x02, 0x4a, 0x04,
	0x08, 0x02, 0x10, 0x03, 0x52, 0x07, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x22, 0x36, 0x0a,
	0x0a, 0x41, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x28, 0x0a, 0x07, 0x63,
	0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x64,
	0x65, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x6f,
	0x6e, 0x66, 0x69, 0x67, 0x73, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x6f, 0x2e, 0x63, 0x68, 0x72, 0x6f,
	0x6d, 0x69, 0x75, 0x6d, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75,
	0x6d, 0x6f, 0x73, 0x2f, 0x69, 0x6e, 0x66, 0x72, 0x61, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f,
	0x67, 0x6f, 0x2f, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
	0x33,
}

var (
	file_device_config_proto_rawDescOnce sync.Once
	file_device_config_proto_rawDescData = file_device_config_proto_rawDesc
)

func file_device_config_proto_rawDescGZIP() []byte {
	file_device_config_proto_rawDescOnce.Do(func() {
		file_device_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_device_config_proto_rawDescData)
	})
	return file_device_config_proto_rawDescData
}

var file_device_config_proto_enumTypes = make([]protoimpl.EnumInfo, 11)
var file_device_config_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
var file_device_config_proto_goTypes = []interface{}{
	(Config_FormFactor)(0),        // 0: device.Config.FormFactor
	(Config_Graphics)(0),          // 1: device.Config.Graphics
	(Config_HardwareFeature)(0),   // 2: device.Config.HardwareFeature
	(Config_PowerSupply)(0),       // 3: device.Config.PowerSupply
	(Config_Storage)(0),           // 4: device.Config.Storage
	(Config_VideoAcceleration)(0), // 5: device.Config.VideoAcceleration
	(Config_SOC)(0),               // 6: device.Config.SOC
	(Config_ODM)(0),               // 7: device.Config.ODM
	(Config_OEM)(0),               // 8: device.Config.OEM
	(Config_Architecture)(0),      // 9: device.Config.Architecture
	(Config_EC)(0),                // 10: device.Config.EC
	(*Config)(nil),                // 11: device.Config
	(*AllConfigs)(nil),            // 12: device.AllConfigs
	(*ConfigId)(nil),              // 13: device.ConfigId
}
var file_device_config_proto_depIdxs = []int32{
	13, // 0: device.Config.id:type_name -> device.ConfigId
	0,  // 1: device.Config.form_factor:type_name -> device.Config.FormFactor
	1,  // 2: device.Config.graphics:type_name -> device.Config.Graphics
	2,  // 3: device.Config.hardware_features:type_name -> device.Config.HardwareFeature
	3,  // 4: device.Config.power:type_name -> device.Config.PowerSupply
	4,  // 5: device.Config.storage:type_name -> device.Config.Storage
	5,  // 6: device.Config.video_acceleration_supports:type_name -> device.Config.VideoAcceleration
	6,  // 7: device.Config.soc:type_name -> device.Config.SOC
	7,  // 8: device.Config.odm:type_name -> device.Config.ODM
	8,  // 9: device.Config.oem:type_name -> device.Config.OEM
	9,  // 10: device.Config.cpu:type_name -> device.Config.Architecture
	10, // 11: device.Config.ec:type_name -> device.Config.EC
	11, // 12: device.AllConfigs.configs:type_name -> device.Config
	13, // [13:13] is the sub-list for method output_type
	13, // [13:13] is the sub-list for method input_type
	13, // [13:13] is the sub-list for extension type_name
	13, // [13:13] is the sub-list for extension extendee
	0,  // [0:13] is the sub-list for field type_name
}

func init() { file_device_config_proto_init() }
func file_device_config_proto_init() {
	if File_device_config_proto != nil {
		return
	}
	file_device_config_id_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_device_config_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*Config); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_device_config_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*AllConfigs); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_device_config_proto_rawDesc,
			NumEnums:      11,
			NumMessages:   2,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_device_config_proto_goTypes,
		DependencyIndexes: file_device_config_proto_depIdxs,
		EnumInfos:         file_device_config_proto_enumTypes,
		MessageInfos:      file_device_config_proto_msgTypes,
	}.Build()
	File_device_config_proto = out.File
	file_device_config_proto_rawDesc = nil
	file_device_config_proto_goTypes = nil
	file_device_config_proto_depIdxs = nil
}
