// Code generated by protoc-gen-go. DO NOT EDIT.
// source: prototype/program.proto

package prototype

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	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 Constraint_Level int32

const (
	Constraint_TYPE_UNKNOWN Constraint_Level = 0
	Constraint_REQUIRED     Constraint_Level = 1
	Constraint_PREFERRED    Constraint_Level = 2
	Constraint_OPTIONAL     Constraint_Level = 3
)

var Constraint_Level_name = map[int32]string{
	0: "TYPE_UNKNOWN",
	1: "REQUIRED",
	2: "PREFERRED",
	3: "OPTIONAL",
}

var Constraint_Level_value = map[string]int32{
	"TYPE_UNKNOWN": 0,
	"REQUIRED":     1,
	"PREFERRED":    2,
	"OPTIONAL":     3,
}

func (x Constraint_Level) String() string {
	return proto.EnumName(Constraint_Level_name, int32(x))
}

func (Constraint_Level) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_cafe880c4e08131d, []int{0, 0}
}

type ComponentQual_Status int32

const (
	ComponentQual_STATUS_UNKNOWN        ComponentQual_Status = 0
	ComponentQual_REQUESTED             ComponentQual_Status = 1
	ComponentQual_TECHNICALLY_QUALIFIED ComponentQual_Status = 2
	ComponentQual_QUALIFIED             ComponentQual_Status = 3
)

var ComponentQual_Status_name = map[int32]string{
	0: "STATUS_UNKNOWN",
	1: "REQUESTED",
	2: "TECHNICALLY_QUALIFIED",
	3: "QUALIFIED",
}

var ComponentQual_Status_value = map[string]int32{
	"STATUS_UNKNOWN":        0,
	"REQUESTED":             1,
	"TECHNICALLY_QUALIFIED": 2,
	"QUALIFIED":             3,
}

func (x ComponentQual_Status) String() string {
	return proto.EnumName(ComponentQual_Status_name, int32(x))
}

func (ComponentQual_Status) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_cafe880c4e08131d, []int{1, 0}
}

type Constraint struct {
	Level Constraint_Level `protobuf:"varint,1,opt,name=level,proto3,enum=prototype.Constraint_Level" json:"level,omitempty"`
	// Types that are valid to be assigned to Type:
	//	*Constraint_Memory_
	//	*Constraint_FrontCamera
	//	*Constraint_RearCamera
	Type                 isConstraint_Type `protobuf_oneof:"type"`
	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
	XXX_unrecognized     []byte            `json:"-"`
	XXX_sizecache        int32             `json:"-"`
}

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

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

var xxx_messageInfo_Constraint proto.InternalMessageInfo

func (m *Constraint) GetLevel() Constraint_Level {
	if m != nil {
		return m.Level
	}
	return Constraint_TYPE_UNKNOWN
}

type isConstraint_Type interface {
	isConstraint_Type()
}

type Constraint_Memory_ struct {
	Memory *Constraint_Memory `protobuf:"bytes,4,opt,name=memory,proto3,oneof"`
}

type Constraint_FrontCamera struct {
	FrontCamera *Constraint_Camera `protobuf:"bytes,6,opt,name=front_camera,json=frontCamera,proto3,oneof"`
}

type Constraint_RearCamera struct {
	RearCamera *Constraint_Camera `protobuf:"bytes,7,opt,name=rear_camera,json=rearCamera,proto3,oneof"`
}

func (*Constraint_Memory_) isConstraint_Type() {}

func (*Constraint_FrontCamera) isConstraint_Type() {}

func (*Constraint_RearCamera) isConstraint_Type() {}

func (m *Constraint) GetType() isConstraint_Type {
	if m != nil {
		return m.Type
	}
	return nil
}

func (m *Constraint) GetMemory() *Constraint_Memory {
	if x, ok := m.GetType().(*Constraint_Memory_); ok {
		return x.Memory
	}
	return nil
}

func (m *Constraint) GetFrontCamera() *Constraint_Camera {
	if x, ok := m.GetType().(*Constraint_FrontCamera); ok {
		return x.FrontCamera
	}
	return nil
}

func (m *Constraint) GetRearCamera() *Constraint_Camera {
	if x, ok := m.GetType().(*Constraint_RearCamera); ok {
		return x.RearCamera
	}
	return nil
}

// XXX_OneofWrappers is for the internal use of the proto package.
func (*Constraint) XXX_OneofWrappers() []interface{} {
	return []interface{}{
		(*Constraint_Memory_)(nil),
		(*Constraint_FrontCamera)(nil),
		(*Constraint_RearCamera)(nil),
	}
}

type Constraint_Memory struct {
	MinSize              *ByteSize               `protobuf:"bytes,1,opt,name=min_size,json=minSize,proto3" json:"min_size,omitempty"`
	Types                []Component_Memory_Type `protobuf:"varint,2,rep,packed,name=types,proto3,enum=prototype.Component_Memory_Type" json:"types,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                `json:"-"`
	XXX_unrecognized     []byte                  `json:"-"`
	XXX_sizecache        int32                   `json:"-"`
}

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

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

var xxx_messageInfo_Constraint_Memory proto.InternalMessageInfo

func (m *Constraint_Memory) GetMinSize() *ByteSize {
	if m != nil {
		return m.MinSize
	}
	return nil
}

func (m *Constraint_Memory) GetTypes() []Component_Memory_Type {
	if m != nil {
		return m.Types
	}
	return nil
}

type Constraint_Camera struct {
	Presence             Presence_Indicator         `protobuf:"varint,1,opt,name=presence,proto3,enum=prototype.Presence_Indicator" json:"presence,omitempty"`
	Features             []Component_Camera_Feature `protobuf:"varint,2,rep,packed,name=features,proto3,enum=prototype.Component_Camera_Feature" json:"features,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                   `json:"-"`
	XXX_unrecognized     []byte                     `json:"-"`
	XXX_sizecache        int32                      `json:"-"`
}

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

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

var xxx_messageInfo_Constraint_Camera proto.InternalMessageInfo

func (m *Constraint_Camera) GetPresence() Presence_Indicator {
	if m != nil {
		return m.Presence
	}
	return Presence_PRESENCE_UNKNOWN
}

func (m *Constraint_Camera) GetFeatures() []Component_Camera_Feature {
	if m != nil {
		return m.Features
	}
	return nil
}

type ComponentQual struct {
	ComponentId          *ComponentId         `protobuf:"bytes,1,opt,name=component_id,json=componentId,proto3" json:"component_id,omitempty"`
	Status               ComponentQual_Status `protobuf:"varint,2,opt,name=status,proto3,enum=prototype.ComponentQual_Status" json:"status,omitempty"`
	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
	XXX_unrecognized     []byte               `json:"-"`
	XXX_sizecache        int32                `json:"-"`
}

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

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

var xxx_messageInfo_ComponentQual proto.InternalMessageInfo

func (m *ComponentQual) GetComponentId() *ComponentId {
	if m != nil {
		return m.ComponentId
	}
	return nil
}

func (m *ComponentQual) GetStatus() ComponentQual_Status {
	if m != nil {
		return m.Status
	}
	return ComponentQual_STATUS_UNKNOWN
}

type Program struct {
	Id                   *ProgramId             `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
	Reqs                 []*Program_Requirement `protobuf:"bytes,2,rep,name=reqs,proto3" json:"reqs,omitempty"`
	ComponentQuals       []*ComponentQual       `protobuf:"bytes,3,rep,name=component_quals,json=componentQuals,proto3" json:"component_quals,omitempty"`
	XXX_NoUnkeyedLiteral struct{}               `json:"-"`
	XXX_unrecognized     []byte                 `json:"-"`
	XXX_sizecache        int32                  `json:"-"`
}

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

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

var xxx_messageInfo_Program proto.InternalMessageInfo

func (m *Program) GetId() *ProgramId {
	if m != nil {
		return m.Id
	}
	return nil
}

func (m *Program) GetReqs() []*Program_Requirement {
	if m != nil {
		return m.Reqs
	}
	return nil
}

func (m *Program) GetComponentQuals() []*ComponentQual {
	if m != nil {
		return m.ComponentQuals
	}
	return nil
}

type Program_Requirement struct {
	FormFactors          []Design_FormFactor `protobuf:"varint,1,rep,packed,name=form_factors,json=formFactors,proto3,enum=prototype.Design_FormFactor" json:"form_factors,omitempty"`
	Constraints          []*Constraint       `protobuf:"bytes,2,rep,name=constraints,proto3" json:"constraints,omitempty"`
	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
	XXX_unrecognized     []byte              `json:"-"`
	XXX_sizecache        int32               `json:"-"`
}

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

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

var xxx_messageInfo_Program_Requirement proto.InternalMessageInfo

func (m *Program_Requirement) GetFormFactors() []Design_FormFactor {
	if m != nil {
		return m.FormFactors
	}
	return nil
}

func (m *Program_Requirement) GetConstraints() []*Constraint {
	if m != nil {
		return m.Constraints
	}
	return nil
}

type ProgramList struct {
	Value                []*Program `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{}   `json:"-"`
	XXX_unrecognized     []byte     `json:"-"`
	XXX_sizecache        int32      `json:"-"`
}

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

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

var xxx_messageInfo_ProgramList proto.InternalMessageInfo

func (m *ProgramList) GetValue() []*Program {
	if m != nil {
		return m.Value
	}
	return nil
}

func init() {
	proto.RegisterEnum("prototype.Constraint_Level", Constraint_Level_name, Constraint_Level_value)
	proto.RegisterEnum("prototype.ComponentQual_Status", ComponentQual_Status_name, ComponentQual_Status_value)
	proto.RegisterType((*Constraint)(nil), "prototype.Constraint")
	proto.RegisterType((*Constraint_Memory)(nil), "prototype.Constraint.Memory")
	proto.RegisterType((*Constraint_Camera)(nil), "prototype.Constraint.Camera")
	proto.RegisterType((*ComponentQual)(nil), "prototype.ComponentQual")
	proto.RegisterType((*Program)(nil), "prototype.Program")
	proto.RegisterType((*Program_Requirement)(nil), "prototype.Program.Requirement")
	proto.RegisterType((*ProgramList)(nil), "prototype.ProgramList")
}

func init() { proto.RegisterFile("prototype/program.proto", fileDescriptor_cafe880c4e08131d) }

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